修改字体
This commit is contained in:
@ -2,11 +2,16 @@
|
|||||||
<div id="page">
|
<div id="page">
|
||||||
<div class="header">
|
<div class="header">
|
||||||
<div class="images flex a-c" v-for="item in imagesList" :key="item.id">
|
<div class="images flex a-c" v-for="item in imagesList" :key="item.id">
|
||||||
|
<el-tooltip effect="dark" content="绘制矩形区域">
|
||||||
<img :src="item.src" @click="drawRectangle" />
|
<img :src="item.src" @click="drawRectangle" />
|
||||||
|
</el-tooltip>
|
||||||
<el-button class="form-btn" type="primary" size="mini" @click="analyzeAverageSlope">确定</el-button>
|
<el-button class="form-btn" type="primary" size="mini" @click="analyzeAverageSlope">确定</el-button>
|
||||||
<el-button class="form-btn right" type="primary" size="mini" :disabled="showExport" @click="clickExport">
|
<div class="right">
|
||||||
|
<el-button class="form-btn" type="primary" size="mini" :disabled="showExport" @click="clickExport">
|
||||||
导出
|
导出
|
||||||
</el-button>
|
</el-button>
|
||||||
|
<el-button class="form-btn" type="primary" size="mini" @click="handleExportJosn"> json编辑 </el-button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -17,11 +22,10 @@
|
|||||||
<div class="control-panel">
|
<div class="control-panel">
|
||||||
<div class="title">范围</div>
|
<div class="title">范围</div>
|
||||||
<el-form-item label="左上角:">
|
<el-form-item label="左上角:">
|
||||||
<el-input v-model="form.leftTop" @blur="updateArea" placeholder="请输入经纬度,以 ',' 隔开'"></el-input>
|
<el-input v-model="form.leftTop" @blur="updateArea" placeholder="经纬度,以 ',' 隔开'"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="右下角:">
|
<el-form-item label="右下角:">
|
||||||
<el-input v-model="form.rightBottom" @blur="updateArea" placeholder="请输入经纬度,以 ',' 隔开'">
|
<el-input v-model="form.rightBottom" @blur="updateArea" placeholder="经纬度,以 ',' 隔开'"> </el-input>
|
||||||
</el-input>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<input type="file" ref="fileInput" @change="handleFileUpload" style="display: none" />
|
<input type="file" ref="fileInput" @change="handleFileUpload" style="display: none" />
|
||||||
<div class="importJson flex j-c a-c" @click="triggerFileUpload">导入json文件</div>
|
<div class="importJson flex j-c a-c" @click="triggerFileUpload">导入json文件</div>
|
||||||
@ -46,17 +50,17 @@
|
|||||||
|
|
||||||
<!-- 条件 -->
|
<!-- 条件 -->
|
||||||
<div class="control-panel">
|
<div class="control-panel">
|
||||||
<div class="title">条件</div>
|
<div class="title">网格条件</div>
|
||||||
<el-form-item label="长:">
|
<el-form-item label="列(个):">
|
||||||
<el-input v-model="form.xLength"></el-input>
|
<el-input v-model="form.xLength"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="宽:">
|
<el-form-item label="行(个):">
|
||||||
<el-input v-model="form.yLength"></el-input>
|
<el-input v-model="form.yLength"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="最大坡度:">
|
<el-form-item label="最大坡度(°):">
|
||||||
<el-input v-model="form.maxSlope"></el-input>
|
<el-input v-model="form.maxSlope"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="居民地最小距离:">
|
<el-form-item label="居民地距离(米):">
|
||||||
<el-input v-model="form.minPeopleDis"></el-input>
|
<el-input v-model="form.minPeopleDis"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</div>
|
</div>
|
||||||
@ -292,6 +296,20 @@
|
|||||||
<el-button type="primary" size="mini" @click="exportJSON">导出</el-button>
|
<el-button type="primary" size="mini" @click="exportJSON">导出</el-button>
|
||||||
</div>
|
</div>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
|
||||||
|
<!-- 右侧json编辑 -->
|
||||||
|
<el-dialog :visible.sync="dialogJsonVisible" title="json编辑" width="600px">
|
||||||
|
<div v-loading="jsonLoading">
|
||||||
|
<div style="margin-bottom: 10px">
|
||||||
|
<el-button type="primary" size="mini" @click="handleJson">选择</el-button>
|
||||||
|
</div>
|
||||||
|
<el-input type="textarea" resize="none" :rows="18" v-model="jsonInfo.json" size="mini"></el-input>
|
||||||
|
</div>
|
||||||
|
<div slot="footer" class="dialog-footer">
|
||||||
|
<el-button size="mini" @click="closeJson">取消</el-button>
|
||||||
|
<el-button type="primary" size="mini" @click="confirmJson">保存</el-button>
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@ -361,6 +379,13 @@ export default {
|
|||||||
|
|
||||||
tableHeight: 280,
|
tableHeight: 280,
|
||||||
showExport: true,
|
showExport: true,
|
||||||
|
|
||||||
|
dialogJsonVisible: false,
|
||||||
|
jsonInfo: {
|
||||||
|
json: '',
|
||||||
|
path: '',
|
||||||
|
},
|
||||||
|
jsonLoading: false,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
@ -478,7 +503,7 @@ export default {
|
|||||||
window.viewer.addLayer(window.shortestPathLayer)
|
window.viewer.addLayer(window.shortestPathLayer)
|
||||||
// 添加地图点击事件监听,用于结束绘制
|
// 添加地图点击事件监听,用于结束绘制
|
||||||
window.viewer.on(mars3d.EventType.dblClick, (event) => {
|
window.viewer.on(mars3d.EventType.dblClick, (event) => {
|
||||||
// 如果正在绘制,点击地图可以结束绘制(除了绘制点)
|
// 如果正在绘制,点击地图可以结束绘制(除了绘制点)
|
||||||
window.graphicLayer.stopDraw()
|
window.graphicLayer.stopDraw()
|
||||||
this.form.leftTop = ''
|
this.form.leftTop = ''
|
||||||
this.form.rightBottom = ''
|
this.form.rightBottom = ''
|
||||||
@ -613,7 +638,7 @@ export default {
|
|||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
// 算矩形到 geoJSONLayer 的最小距离(米),判断是否在其内部
|
// 算矩形到 geoJSONLayer 的最小距离(米),判断是否在其内部
|
||||||
calcMinDistance(rectPositions, geoJSONLayer) {
|
calcMinDistance(rectPositions, geoJSONLayer) {
|
||||||
if (!geoJSONLayer || !rectPositions?.length) return Infinity
|
if (!geoJSONLayer || !rectPositions?.length) return Infinity
|
||||||
|
|
||||||
@ -652,13 +677,13 @@ export default {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
console.log('矩形 → polygonP 边界最短距离(米)', inside, minDist)
|
console.log('矩形 → polygonP 边界最短距离(米)', inside, minDist)
|
||||||
|
|
||||||
// 5. 面内直接返回 -1
|
// 5. 面内直接返回 -1
|
||||||
return inside ? -1 : minDist
|
return inside ? -1 : minDist
|
||||||
},
|
},
|
||||||
|
|
||||||
// 判断矩形与 mars3d GeoJSON 图层是否相交(不转 GeoJSON)
|
// 判断矩形与 mars3d GeoJSON 图层是否相交(不转 GeoJSON)
|
||||||
getIntersectId(position, layer) {
|
getIntersectId(position, layer) {
|
||||||
console.log('position===>', position, layer)
|
console.log('position===>', position, layer)
|
||||||
if (!position || !layer || !layer.graphics) return null
|
if (!position || !layer || !layer.graphics) return null
|
||||||
@ -788,7 +813,7 @@ export default {
|
|||||||
},
|
},
|
||||||
label: {
|
label: {
|
||||||
text: '分析区域',
|
text: '分析区域',
|
||||||
font: '16px sans-serif',
|
font: '16px 等线',
|
||||||
color: '#ffffff',
|
color: '#ffffff',
|
||||||
outline: true,
|
outline: true,
|
||||||
outlineColor: '#000000',
|
outlineColor: '#000000',
|
||||||
@ -823,7 +848,7 @@ export default {
|
|||||||
// 更新多边形位置
|
// 更新多边形位置
|
||||||
this.polygon.positions = cartesianPositions
|
this.polygon.positions = cartesianPositions
|
||||||
|
|
||||||
// 触发更新(根据mars3d的具体API可能需要调用其他方法)
|
// 触发更新(根据mars3d的具体API可能需要调用其他方法)
|
||||||
if (this.polygon.update) {
|
if (this.polygon.update) {
|
||||||
this.polygon.update()
|
this.polygon.update()
|
||||||
}
|
}
|
||||||
@ -965,7 +990,7 @@ export default {
|
|||||||
drawLabelAndRec() {
|
drawLabelAndRec() {
|
||||||
this.analyzing = false
|
this.analyzing = false
|
||||||
|
|
||||||
/* 1. 计算总分(保持原逻辑) */
|
/* 1. 计算总分(保持原逻辑) */
|
||||||
const list = this.calcTotalScore(this.validBlocks)
|
const list = this.calcTotalScore(this.validBlocks)
|
||||||
const len = list.length
|
const len = list.length
|
||||||
if (!len) {
|
if (!len) {
|
||||||
@ -1028,7 +1053,7 @@ export default {
|
|||||||
style: {
|
style: {
|
||||||
text: String(b.totalScore),
|
text: String(b.totalScore),
|
||||||
font_size: 24,
|
font_size: 24,
|
||||||
font_family: '楷体',
|
font_family: '等线',
|
||||||
color: '#000000',
|
color: '#000000',
|
||||||
outline: false,
|
outline: false,
|
||||||
horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
|
horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
|
||||||
@ -1269,6 +1294,78 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// json编辑
|
||||||
|
handleExportJosn() {
|
||||||
|
this.dialogJsonVisible = true
|
||||||
|
},
|
||||||
|
|
||||||
|
decodeEscapedJson(str) {
|
||||||
|
// 去掉字符串首尾的空白字符
|
||||||
|
str = str.trim()
|
||||||
|
// 直接解析 JSON 字符串
|
||||||
|
try {
|
||||||
|
return JSON.parse(str)
|
||||||
|
} catch (e) {
|
||||||
|
console.error('Error parsing JSON:', e)
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
handleJson() {
|
||||||
|
this.jsonLoading = true
|
||||||
|
fetch('./config.ini')
|
||||||
|
.then((response) => response.text())
|
||||||
|
.then((text) => {
|
||||||
|
const parsedData = iniParser.parse(text)
|
||||||
|
axios
|
||||||
|
.post(`http://${parsedData.http.address}:${parsedData.http.port}/api/json/select`, {
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
},
|
||||||
|
timeout: 10 * 60 * 1000,
|
||||||
|
})
|
||||||
|
.then((response) => {
|
||||||
|
this.jsonInfo = {
|
||||||
|
path: response.data.path,
|
||||||
|
json: JSON.stringify(response.data.json, null, 2),
|
||||||
|
}
|
||||||
|
this.jsonLoading = false
|
||||||
|
})
|
||||||
|
.catch((error) => {
|
||||||
|
this.jsonLoading = false
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
confirmJson() {
|
||||||
|
fetch('./config.ini')
|
||||||
|
.then((response) => response.text())
|
||||||
|
.then((text) => {
|
||||||
|
const parsedData = iniParser.parse(text)
|
||||||
|
axios
|
||||||
|
.post(
|
||||||
|
`http://${parsedData.http.address}:${parsedData.http.port}/api/json/save?path=${this.jsonInfo.path}`,
|
||||||
|
JSON.stringify(JSON.parse(this.jsonInfo.json)),
|
||||||
|
{
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
)
|
||||||
|
.then((response) => {
|
||||||
|
this.$message.success('保存成功')
|
||||||
|
this.closeJson()
|
||||||
|
})
|
||||||
|
.catch((error) => {})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
closeJson() {
|
||||||
|
this.jsonInfo.path = ''
|
||||||
|
this.jsonInfo.json = ''
|
||||||
|
this.dialogJsonVisible = false
|
||||||
|
},
|
||||||
|
|
||||||
// 新增
|
// 新增
|
||||||
handleAdd(type) {
|
handleAdd(type) {
|
||||||
let tabIndex = this.tabList.findIndex((item) => item.id === this.activeName)
|
let tabIndex = this.tabList.findIndex((item) => item.id === this.activeName)
|
||||||
@ -1343,6 +1440,9 @@ export default {
|
|||||||
&:active {
|
&:active {
|
||||||
background-color: #176363;
|
background-color: #176363;
|
||||||
}
|
}
|
||||||
|
&:focus {
|
||||||
|
background-color: #176363;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
::v-deep .el-form-item--mini.el-form-item,
|
::v-deep .el-form-item--mini.el-form-item,
|
||||||
@ -1375,9 +1475,12 @@ export default {
|
|||||||
transform: translateY(-50%);
|
transform: translateY(-50%);
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
margin-left: 32px;
|
margin-left: 32px;
|
||||||
|
img {
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.form-btn {
|
.form-btn {
|
||||||
margin-left: 30px;
|
margin-left: 20px;
|
||||||
}
|
}
|
||||||
.btn {
|
.btn {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
@ -1445,7 +1548,6 @@ export default {
|
|||||||
}
|
}
|
||||||
.table-title {
|
.table-title {
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
font-family: 'Pingfang';
|
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
letter-spacing: 0.1em;
|
letter-spacing: 0.1em;
|
||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
|
|||||||
Reference in New Issue
Block a user