圆形统计、多边形统计
This commit is contained in:
10
src/renderer/public/sdk/YJEarth.min.js
vendored
10
src/renderer/public/sdk/YJEarth.min.js
vendored
File diff suppressed because one or more lines are too long
@ -1,19 +1,26 @@
|
|||||||
<template>
|
<template>
|
||||||
<Dialog
|
<Dialog ref="baseDialog" title="物质统计" left="180px" top="100px" :closeCallback="closeCallBack">
|
||||||
v-if="show"
|
|
||||||
ref="baseDialog"
|
|
||||||
title="物质统计"
|
|
||||||
left="180px"
|
|
||||||
top="100px"
|
|
||||||
:closeCallback="closeCallBack"
|
|
||||||
>
|
|
||||||
<template #content>
|
<template #content>
|
||||||
<div id="goodSearchEchart" style="width: 100%; height: 100%"></div>
|
<div id="goodSearchEchart" style="width: 650px; height: 400px"></div>
|
||||||
</template>
|
|
||||||
<template #footer>
|
|
||||||
<button>绘制</button>
|
|
||||||
</template>
|
</template>
|
||||||
</Dialog>
|
</Dialog>
|
||||||
|
|
||||||
|
<!-- <el-dialog
|
||||||
|
v-model="show"
|
||||||
|
title="物质统计"
|
||||||
|
width="500"
|
||||||
|
draggable
|
||||||
|
:before-close="closeCallBack"
|
||||||
|
:modal="false"
|
||||||
|
:close-on-click-modal="false"
|
||||||
|
>
|
||||||
|
<div id="goodSearchEchart" style="width: 300px; height: 200px"></div>
|
||||||
|
<template #footer>
|
||||||
|
<div class="dialog-footer">
|
||||||
|
<el-button>绘制</el-button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-dialog> -->
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
@ -22,32 +29,50 @@ import { inject } from 'vue'
|
|||||||
import { nextTick } from 'vue'
|
import { nextTick } from 'vue'
|
||||||
import { ElMessage } from 'element-plus'
|
import { ElMessage } from 'element-plus'
|
||||||
import Dialog from '@/components/dialog/baseDialog.vue'
|
import Dialog from '@/components/dialog/baseDialog.vue'
|
||||||
|
import { MaterialApi } from '@/api/material/index'
|
||||||
|
|
||||||
const baseDialog: any = ref(null)
|
const baseDialog: any = ref(null)
|
||||||
const eventBus: any = inject('bus')
|
const eventBus: any = inject('bus')
|
||||||
const shpTotalDict: any = reactive({
|
const shpTotalDict: any = reactive(
|
||||||
shlwz_jzzp: '救灾帐篷',
|
// {
|
||||||
mb: '棉被',
|
// shlwz_jzzp: '救灾帐篷',
|
||||||
mymdy: '棉衣、棉大衣',
|
// mb: '棉被',
|
||||||
mjb: '毛巾被',
|
// mymdy: '棉衣、棉大衣',
|
||||||
mt: '毛毯',
|
// mjb: '毛巾被',
|
||||||
dgnsd: '睡袋',
|
// mt: '毛毯',
|
||||||
zdc: '折叠床',
|
// dgnsd: '睡袋',
|
||||||
jycs: '简易厕所',
|
// zdc: '折叠床',
|
||||||
xpct: '橡皮船(艇)',
|
// jycs: '简易厕所',
|
||||||
cfz: '冲锋舟',
|
// xpct: '橡皮船(艇)',
|
||||||
jsc: '救生船',
|
// cfz: '冲锋舟',
|
||||||
jsy: '救生衣',
|
// jsc: '救生船',
|
||||||
jsq: '救生圈',
|
// jsy: '救生衣',
|
||||||
bzd: '编织袋',
|
// jsq: '救生圈',
|
||||||
md: '麻袋',
|
// bzd: '编织袋',
|
||||||
csb: '抽水泵',
|
// md: '麻袋',
|
||||||
fdj: '发电机',
|
// csb: '抽水泵',
|
||||||
yjd: '应急灯',
|
// fdj: '发电机',
|
||||||
jzzp: '救灾帐篷',
|
// yjd: '应急灯',
|
||||||
jzyb: '救灾衣被',
|
// jzzp: '救灾帐篷',
|
||||||
jygj: '救援工具'
|
// jzyb: '救灾衣被',
|
||||||
|
// jygj: '救援工具'
|
||||||
|
// }
|
||||||
|
[]
|
||||||
|
)
|
||||||
|
|
||||||
|
//获取物资类型
|
||||||
|
const getResource = () => {
|
||||||
|
let formData = new FormData()
|
||||||
|
formData.append('pageNum', 1)
|
||||||
|
formData.append('pageSize', 10000)
|
||||||
|
formData.append('name', '')
|
||||||
|
MaterialApi.getList(formData).then((res) => {
|
||||||
|
shpTotalDict = res.data.data.map((item) => {
|
||||||
|
return item.name
|
||||||
})
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
getResource()
|
||||||
|
|
||||||
var draw: any = reactive([])
|
var draw: any = reactive([])
|
||||||
|
|
||||||
@ -56,11 +81,10 @@ eventBus.on('goodsSearchCircleDialog', () => {
|
|||||||
// baseDialog.value?.open()
|
// baseDialog.value?.open()
|
||||||
draw = new YJ.Draw.DrawCircle(window.earth)
|
draw = new YJ.Draw.DrawCircle(window.earth)
|
||||||
draw.start((err, positions) => {
|
draw.start((err, positions) => {
|
||||||
console.log('err, positions', err, positions)
|
|
||||||
if (!err && positions.center.lng) {
|
if (!err && positions.center.lng) {
|
||||||
show.value = true
|
// show.value = true
|
||||||
|
baseDialog.value?.open()
|
||||||
let nodes = booleanOverlaps(positions)
|
let nodes = booleanOverlaps(positions)
|
||||||
console.log('goodsSearchCircle', nodes)
|
|
||||||
renderCanvas(nodes)
|
renderCanvas(nodes)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -69,11 +93,10 @@ eventBus.on('goodsSearchCircleDialog', () => {
|
|||||||
const open = () => {
|
const open = () => {
|
||||||
draw = new YJ.Draw.DrawCircle(window.earth)
|
draw = new YJ.Draw.DrawCircle(window.earth)
|
||||||
draw.start((err, positions) => {
|
draw.start((err, positions) => {
|
||||||
console.log('err, positions', err, positions)
|
|
||||||
if (!err && positions.center.lng) {
|
if (!err && positions.center.lng) {
|
||||||
show.value = true
|
// show.value = true
|
||||||
|
baseDialog.value?.open()
|
||||||
let nodes = booleanOverlaps(positions)
|
let nodes = booleanOverlaps(positions)
|
||||||
console.log('goodsSearchCircle', nodes)
|
|
||||||
renderCanvas(nodes)
|
renderCanvas(nodes)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -95,17 +118,14 @@ function booleanOverlaps(positions1, flag = 'circle') {
|
|||||||
let res = []
|
let res = []
|
||||||
types.forEach((type) => {
|
types.forEach((type) => {
|
||||||
let nodes = treeObj.getNodesByParam('sourceType', type, null)
|
let nodes = treeObj.getNodesByParam('sourceType', type, null)
|
||||||
// console.log("nodes",nodes)
|
|
||||||
res = res.concat(nodes)
|
res = res.concat(nodes)
|
||||||
})
|
})
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
//绘制的区域
|
//绘制的区域
|
||||||
// console.log("[set3Array(positions1)]", [set3Array(positions1)])
|
|
||||||
// 获取物资处(特定的标注类型)
|
// 获取物资处(特定的标注类型)
|
||||||
let allNodes = getNode(['point', 'vr', 'picture', 'Feature'])
|
let allNodes = getNode(['point', 'vr', 'picture', 'Feature'])
|
||||||
console.log('allNodes', allNodes)
|
|
||||||
let itemInArea: any = [] //区域内的类型符合的标注
|
let itemInArea: any = [] //区域内的类型符合的标注
|
||||||
|
|
||||||
for (let i = 0; i < allNodes.length; i++) {
|
for (let i = 0; i < allNodes.length; i++) {
|
||||||
@ -113,7 +133,7 @@ function booleanOverlaps(positions1, flag = 'circle') {
|
|||||||
let getAllItemInArea = (lng, lat) => {
|
let getAllItemInArea = (lng, lat) => {
|
||||||
if (flag == 'circle') {
|
if (flag == 'circle') {
|
||||||
let { center, radius } = positions1
|
let { center, radius } = positions1
|
||||||
let distance = new YJ.Tools().randomString(center, { lng, lat })
|
let distance = new YJ.Tools().pointDistance(center, { lng, lat })
|
||||||
distance < radius && itemInArea.push(item)
|
distance < radius && itemInArea.push(item)
|
||||||
} else {
|
} else {
|
||||||
let polygon1 = (window as any).turf.polygon([set3Array(positions1)])
|
let polygon1 = (window as any).turf.polygon([set3Array(positions1)])
|
||||||
@ -121,13 +141,11 @@ function booleanOverlaps(positions1, flag = 'circle') {
|
|||||||
;(window as any).turf.booleanPointInPolygon(pt, polygon1) && itemInArea.push(item)
|
;(window as any).turf.booleanPointInPolygon(pt, polygon1) && itemInArea.push(item)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
console.log(item, item.sourceType, 'ooooo')
|
|
||||||
switch (item.sourceType) {
|
switch (item.sourceType) {
|
||||||
case 'point':
|
case 'point':
|
||||||
case 'vr':
|
case 'vr':
|
||||||
case 'picture':
|
case 'picture':
|
||||||
let params = JSON.parse(item.params)
|
let params = JSON.parse(item.params)
|
||||||
console.log('params', params)
|
|
||||||
let lng = params.position.lng
|
let lng = params.position.lng
|
||||||
let lat = params.position.lat
|
let lat = params.position.lat
|
||||||
getAllItemInArea(lng, lat)
|
getAllItemInArea(lng, lat)
|
||||||
@ -144,8 +162,6 @@ function booleanOverlaps(positions1, flag = 'circle') {
|
|||||||
return itemInArea
|
return itemInArea
|
||||||
}
|
}
|
||||||
function renderCanvas(nodes) {
|
function renderCanvas(nodes) {
|
||||||
console.log('nodes', nodes)
|
|
||||||
|
|
||||||
let x: any = []
|
let x: any = []
|
||||||
let y: any = []
|
let y: any = []
|
||||||
nodes.forEach((item) => {
|
nodes.forEach((item) => {
|
||||||
@ -154,8 +170,10 @@ function renderCanvas(nodes) {
|
|||||||
let obj = JSON.parse(JSON.stringify(item.detail.properties))
|
let obj = JSON.parse(JSON.stringify(item.detail.properties))
|
||||||
for (const key in obj) {
|
for (const key in obj) {
|
||||||
let name = key
|
let name = key
|
||||||
if (shpTotalDict[key]) {
|
// if (shpTotalDict[key]) {
|
||||||
name = shpTotalDict[key]
|
// name = shpTotalDict[key]
|
||||||
|
if (shpTotalDict.indexOf(key) != -1) {
|
||||||
|
name = key
|
||||||
// 把相同名称的物资数量相加,名称相同时,累加数据
|
// 把相同名称的物资数量相加,名称相同时,累加数据
|
||||||
let index = x.findIndex((item) => item === name)
|
let index = x.findIndex((item) => item === name)
|
||||||
if (index !== -1) {
|
if (index !== -1) {
|
||||||
@ -170,7 +188,6 @@ function renderCanvas(nodes) {
|
|||||||
let params = JSON.parse(item.params)
|
let params = JSON.parse(item.params)
|
||||||
if (params.attribute && params.attribute.goods) {
|
if (params.attribute && params.attribute.goods) {
|
||||||
let goods = params.attribute.goods.content
|
let goods = params.attribute.goods.content
|
||||||
console.log('goods', goods)
|
|
||||||
if (goods.length) {
|
if (goods.length) {
|
||||||
// $root_home_index.goodSearchDialog = false;
|
// $root_home_index.goodSearchDialog = false;
|
||||||
goods.forEach((good) => {
|
goods.forEach((good) => {
|
||||||
@ -187,9 +204,6 @@ function renderCanvas(nodes) {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
console.log('x,y')
|
|
||||||
console.log(x)
|
|
||||||
console.log(y)
|
|
||||||
let notZeroX: any = []
|
let notZeroX: any = []
|
||||||
let notZeroY: any = []
|
let notZeroY: any = []
|
||||||
for (let i = 0; i < y.length; i++) {
|
for (let i = 0; i < y.length; i++) {
|
||||||
@ -198,12 +212,10 @@ function renderCanvas(nodes) {
|
|||||||
notZeroY.push(y[i])
|
notZeroY.push(y[i])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
console.log(notZeroX)
|
|
||||||
console.log(notZeroY)
|
|
||||||
x = notZeroX
|
x = notZeroX
|
||||||
y = notZeroY
|
y = notZeroY
|
||||||
if (!x.length) show.value = false
|
if (!x.length) baseDialog.value?.close()
|
||||||
if (show.value) {
|
if (x.length) {
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
let option: any = {
|
let option: any = {
|
||||||
grid: {
|
grid: {
|
||||||
|
|||||||
@ -1,17 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<Dialog
|
<Dialog ref="baseDialog" title="物质统计" left="180px" top="100px" :closeCallback="closeCallBack">
|
||||||
v-if="show"
|
|
||||||
ref="baseDialog"
|
|
||||||
title="物质统计"
|
|
||||||
left="180px"
|
|
||||||
top="100px"
|
|
||||||
:closeCallback="closeCallBack"
|
|
||||||
>
|
|
||||||
<template #content>
|
<template #content>
|
||||||
<div id="goodSearchEchart2" style="width: 100%; height: 100%"></div>
|
<div id="goodSearchEchart2" style="width: 650px; height: 400px"></div>
|
||||||
</template>
|
|
||||||
<template #footer>
|
|
||||||
<button>绘制</button>
|
|
||||||
</template>
|
</template>
|
||||||
</Dialog>
|
</Dialog>
|
||||||
</template>
|
</template>
|
||||||
@ -56,7 +46,8 @@ eventBus.on('goodsSearchPolgonDialog', () => {
|
|||||||
draw = new YJ.Draw.DrawPolygon(window.earth)
|
draw = new YJ.Draw.DrawPolygon(window.earth)
|
||||||
draw.start((err, params) => {
|
draw.start((err, params) => {
|
||||||
if (!err && params.length > 2) {
|
if (!err && params.length > 2) {
|
||||||
show.value = true
|
// show.value = true
|
||||||
|
baseDialog.value?.open()
|
||||||
let nodes = booleanOverlaps(params, 'polygon')
|
let nodes = booleanOverlaps(params, 'polygon')
|
||||||
renderCanvas(nodes)
|
renderCanvas(nodes)
|
||||||
}
|
}
|
||||||
@ -67,7 +58,8 @@ const open = () => {
|
|||||||
draw = new YJ.Draw.DrawPolygon(window.earth)
|
draw = new YJ.Draw.DrawPolygon(window.earth)
|
||||||
draw.start((err, params) => {
|
draw.start((err, params) => {
|
||||||
if (!err && params.length > 2) {
|
if (!err && params.length > 2) {
|
||||||
show.value = true
|
// show.value = true
|
||||||
|
baseDialog.value?.open()
|
||||||
let nodes = booleanOverlaps(params, 'polygon')
|
let nodes = booleanOverlaps(params, 'polygon')
|
||||||
renderCanvas(nodes)
|
renderCanvas(nodes)
|
||||||
}
|
}
|
||||||
@ -174,9 +166,6 @@ function renderCanvas(nodes) {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
console.log('x,y')
|
|
||||||
console.log(x)
|
|
||||||
console.log(y)
|
|
||||||
let notZeroX: any = []
|
let notZeroX: any = []
|
||||||
let notZeroY: any = []
|
let notZeroY: any = []
|
||||||
for (let i = 0; i < y.length; i++) {
|
for (let i = 0; i < y.length; i++) {
|
||||||
@ -185,12 +174,10 @@ function renderCanvas(nodes) {
|
|||||||
notZeroY.push(y[i])
|
notZeroY.push(y[i])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
console.log(notZeroX)
|
|
||||||
console.log(notZeroY)
|
|
||||||
x = notZeroX
|
x = notZeroX
|
||||||
y = notZeroY
|
y = notZeroY
|
||||||
if (!x.length) show.value = false
|
if (!x.length) baseDialog.value?.close()
|
||||||
if (show.value) {
|
if (x.length) {
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
let option: any = {
|
let option: any = {
|
||||||
grid: {
|
grid: {
|
||||||
|
|||||||
Reference in New Issue
Block a user