deepdragon/src/ldmap/utils/map/init.js

2767 lines
70 KiB
JavaScript
Raw Normal View History

2024-02-07 16:50:15 +08:00
import Map from "@arcgis/core/Map";
import MapView from "@arcgis/core/views/MapView";
import TianData from './Tmap'
import TileInfo from "@arcgis/core/layers/support/TileInfo";
import WebTileLayer from "@arcgis/core/layers/WebTileLayer";
import TileLayer from "@arcgis/core/layers/TileLayer.js";
2024-12-13 13:51:04 +08:00
import MapImageLayer from "@arcgis/core/layers/MapImageLayer.js";
2024-02-07 16:50:15 +08:00
import Draw from "@arcgis/core/views/draw/Draw.js";
import Polyline from "@arcgis/core/geometry/Polyline.js";
import Polygon from "@arcgis/core/geometry/Polygon.js";
import Graphic from "@arcgis/core/Graphic.js";
import Point from "@arcgis/core/geometry/Point.js";
import GraphicsLayer from "@arcgis/core/layers/GraphicsLayer.js";
import SketchViewModel from "@arcgis/core/widgets/Sketch/SketchViewModel.js";
import useMapDataStore from "@map/store/modules/mapData"
2024-10-22 16:48:12 +08:00
import useMapLogStore from "@map/store/modules/mapLog"
2024-02-07 16:50:15 +08:00
import * as webMercatorUtils from "@arcgis/core/geometry/support/webMercatorUtils.js";
import * as geometryEngine from "@arcgis/core/geometry/geometryEngine.js";
import CIMSymbol from "@arcgis/core/symbols/CIMSymbol.js";
import * as geodesicUtils from "@arcgis/core/geometry/support/geodesicUtils.js";
import MapNotesLayer from "@arcgis/core/layers/MapNotesLayer.js";
2024-10-22 16:48:12 +08:00
import DistanceMeasurement2D from "@arcgis/core/widgets/DistanceMeasurement2D.js";
2024-02-07 16:50:15 +08:00
import * as print from "@arcgis/core/rest/print.js";
import PrintTemplate from "@arcgis/core/rest/support/PrintTemplate.js";
import PrintParameters from "@arcgis/core/rest/support/PrintParameters.js";
2024-10-22 16:48:12 +08:00
import * as turf from '@turf/turf'
2024-02-07 16:50:15 +08:00
import emitter from "../emitter";
const symbolData = {
House: [255, 0, 0, 0.6],
Road: [118, 116, 218, 0.9],
River: [94, 208, 81, 0.9]
}
2024-10-22 16:48:12 +08:00
let mapLog = ''
let logOldGeometry = []
2024-02-07 16:50:15 +08:00
let self = '';
const ldMap = {
map: '',
view: '',
nowlayer: '',
sketchLayer: {
pointLayer: '',
polylineLayer: '',
polygonLayer: '',
selectGraphic: null
},
pointSketchViewModel: '',
polygonSketchViewModel: '',
polylineSketchViewModel: '',
addGraphicType: '',
lineLayer: '',
count: 0,
lighHight: null,
2024-10-22 16:48:12 +08:00
selectLine: null,
2024-02-07 16:50:15 +08:00
draw: null,
DrawstartPoint: [],
DrawenedPoint: [],
DrawDregType: null,
textLayer: null,
2024-10-22 16:48:12 +08:00
loadelevationLayer: null,
2024-02-07 16:50:15 +08:00
ldMapActionType: '',
printExcent: '',
pointSketchType: 'Station',
2024-10-22 16:48:12 +08:00
drawTypeLine: '',// 划线是一条还是多条
newDrawLineByClick: '',
pointMaxIndex: -1,
hightlayer: '',
pngLayer: null,
selectPng: '',
2024-12-13 13:51:04 +08:00
wkid: null,
2024-02-07 16:50:15 +08:00
//初始化地图
2024-12-13 13:51:04 +08:00
initMap: function (wkid) {
2024-02-07 16:50:15 +08:00
self = this;
return new Promise((resolve, reject) => {
2025-04-08 17:02:03 +08:00
if (wkid == self.wkid) {
2024-12-13 13:51:04 +08:00
resolve()
2024-02-07 16:50:15 +08:00
2025-04-08 17:02:03 +08:00
} else {
2024-12-13 13:51:04 +08:00
let tileInfo = new TileInfo(TianData.infoData(wkid));
self.wkid = wkid
let defaultInfo = {
subDomains: ["t1"],
spatialReference: {
wkid: wkid,
},
tileInfo: tileInfo,
}
let imageBasemapLayer = new WebTileLayer({
...defaultInfo,
urlTemplate: TianData.img_c
})
let imageNoteLayer = new WebTileLayer({
...defaultInfo,
urlTemplate: TianData.cia_c
})
2024-02-07 16:50:15 +08:00
2024-12-13 13:51:04 +08:00
this.map = new Map({
basemap: {
baseLayers: [imageBasemapLayer, imageNoteLayer],
},
slider: false
});
2024-02-07 16:50:15 +08:00
2024-10-22 16:48:12 +08:00
2024-12-13 13:51:04 +08:00
let lodsView = [
{ level: 0, resolution: 156543.033928, scale: 591657527.591555 },
{ level: 1, resolution: 78271.5169639999, scale: 295828763.795777 },
{ level: 2, resolution: 39135.7584820001, scale: 147914381.897889 },
{ level: 3, resolution: 19567.8792409999, scale: 73957190.948944 },
{ level: 4, resolution: 9783.93962049996, scale: 36978595.474472 },
{ level: 5, resolution: 4891.96981024998, scale: 18489297.737236 },
{ level: 6, resolution: 2445.98490512499, scale: 9244648.868618 },
{ level: 7, resolution: 1222.99245256249, scale: 4622324.434309 },
{ level: 8, resolution: 611.49622628138, scale: 2311162.217155 },
{ level: 9, resolution: 305.748113140558, scale: 1155581.108577 },
{ level: 10, resolution: 152.874056570411, scale: 577790.554289 },
{ level: 11, resolution: 76.4370282850732, scale: 288895.277144 },
{ level: 12, resolution: 38.2185141425366, scale: 144447.638572 },
{ level: 13, resolution: 19.1092570712683, scale: 72223.819286 },
{ level: 14, resolution: 9.55462853563415, scale: 36111.909643 },
{ level: 15, resolution: 4.77731426794937, scale: 18055.954822 },
{ level: 16, resolution: 2.38865713397468, scale: 9027.977411 },
{ level: 17, resolution: 1.19432856685505, scale: 4513.988705 },
{ level: 18, resolution: 0.597164283559817, scale: 2256.994353 },
{ level: 19, resolution: 0.298582141647617, scale: 1128.497176 },
{ level: 20, resolution: 0.14929107082380833, scale: 564.248588 },
{ level: 21, resolution: 0.07464553541190416, scale: 282.124294 },
{ level: 22, resolution: 0.03732276770595208, scale: 141.062147 },
{ level: 23, resolution: 0.01866138385297604, scale: 70.5310735 },
]
2024-02-07 16:50:15 +08:00
2024-12-13 13:51:04 +08:00
this.view = new MapView({
container: "viewDiv",
map: this.map,
spatialReference: {
wkid: wkid,
},
constraints: {
lods: lodsView,
rotationEnabled: false,
minZoom: 0,
maxZoom: 50
},
center: [116.85722842688202, 39.26485279059861],
zoom: 15,
});
let measurementWidget = new DistanceMeasurement2D({
view: this.view
});
// this.view.ui.add(measurementWidget, "bottom-right");
self.view.on("drag", function (event) {
if (event.button == 2 && self.DrawDregType && self.ldMapActionType == 'regectionAction') {
console.log(event)
let point = self.view.toMap({ x: event.x, y: event.y });
if (event.action == 'start') {
// self.DrawLine()
self.DrawstartPoint = [point.x, point.y];
}
if (event.action == 'end') {
self.Bindpolygon()
self.view.graphics.removeAll();
}
if (event.action == 'update') {
// self.destroyDraw()
self.DrawenedPoint = [point.x, point.y];
let data = {
vertices: [self.DrawstartPoint, self.DrawenedPoint]
}
self.createPolygon(data)
2024-02-07 16:50:15 +08:00
}
2024-12-13 13:51:04 +08:00
2024-02-07 16:50:15 +08:00
}
2024-12-13 13:51:04 +08:00
});
mapLog = useMapLogStore()
self.view.ui.remove("zoom"); //移除
self.view.ui.remove("attribution"); //移除底部ESRI logo bb
2024-02-07 16:50:15 +08:00
2024-12-13 13:51:04 +08:00
self.view.on("click", (event) => {
2024-02-07 16:50:15 +08:00
2024-12-13 13:51:04 +08:00
console.log(event)
if (self.popup) {
self.popup.remove()
}
if (self.hightlayer) {
2024-02-07 16:50:15 +08:00
2024-12-13 13:51:04 +08:00
self.hightlayer.removeAll()
}
2024-10-22 16:48:12 +08:00
2024-12-13 13:51:04 +08:00
self.view.hitTest(event).then((response) => {
2024-02-07 16:50:15 +08:00
2024-12-13 13:51:04 +08:00
self.lighHight?.remove();
self.selectLine = ''
self.selectPng = ''
if (response.results && response.results[0]) {
var graphic = response.results[0].graphic;
console.log(graphic)
if (self.ldMapActionType == 'lineAction') {
if (graphic.geometry.type == "polyline") {
self.view.whenLayerView(graphic.layer).then((layerView) => {
2024-02-07 16:50:15 +08:00
2024-12-13 13:51:04 +08:00
emitter.emit('line', graphic.attributes.data)
self.selectLine = graphic
self.lighHight = layerView.highlight(graphic)
2024-02-07 16:50:15 +08:00
2024-12-13 13:51:04 +08:00
})
2024-02-07 16:50:15 +08:00
2024-12-13 13:51:04 +08:00
}
2024-10-22 16:48:12 +08:00
2024-02-07 16:50:15 +08:00
2024-12-13 13:51:04 +08:00
}
if (graphic.attributes?.type == 'qdf') {
self.view.whenLayerView(graphic.layer).then((layerView) => {
self.selectPng = graphic
self.lighHight = layerView.highlight(graphic)
})
2024-02-07 16:50:15 +08:00
2024-12-13 13:51:04 +08:00
}
2024-02-07 16:50:15 +08:00
}
2024-12-13 13:51:04 +08:00
});
});
self.view.watch("zoom", function (newValue, oldValue, propertyName, target) {
2024-10-22 16:48:12 +08:00
2024-12-13 13:51:04 +08:00
if (Number.isInteger(newValue)) {
console.info(newValue);
self.showeleByzoom(newValue)
}
2024-02-07 16:50:15 +08:00
});
2024-12-13 13:51:04 +08:00
//文字
self.view.when(e => {
// const print = new Print({
// view: self.view,
// // specify your own print service
// printServiceUrl:
// "http://139.224.252.239:6080/arcgis/rest/services/Utilities/PrintingTools/GPServer/Export%20Web%20Map%20Task"
// });
// // Add widget to the top right corner of the view
// self.view.ui.add(print, "top-right");
resolve()
})
}
2024-10-22 16:48:12 +08:00
2024-02-07 16:50:15 +08:00
})
},
async arcgisPrint() {
const url = "http://139.224.252.239:6080/arcgis/rest/services/Utilities/PrintingTools/GPServer/Export%20Web%20Map%20Task"
await self.setCenter(self.nowlayer.fullExtent.center.x, self.nowlayer.fullExtent.center.y, 18)
let { width, height } = self.nowlayer.fullExtent
let { metersPerUnit } = self.nowlayer.fullExtent.spatialReference
width = width * metersPerUnit * 3
height = height * metersPerUnit * 3
const template = new PrintTemplate({
format: 'PNG32',
exportOptions: {
width,
height,
dpi: 180,
},
layout: "map-only",
})
const params = new PrintParameters({
view: self.view,
template: template,
})
print.execute(url, params).then(result => {
console.log(result.url);
window.open(result.url);
}).catch(err => {
console.log("Something broke: ", err);
});
},
noteSlayerInit() {
self.sketchLayer = new MapNotesLayer();
self.sketchLayer.isCreate = true
self.view.map.add(self.sketchLayer, 1)
self.textLayer = new GraphicsLayer()
2024-10-22 16:48:12 +08:00
self.pngLayer = new GraphicsLayer()
self.loadelevationLayer = new GraphicsLayer()
2024-02-07 16:50:15 +08:00
self.map.add(self.textLayer, 10)
2024-10-22 16:48:12 +08:00
self.map.add(self.pngLayer, 11)
self.map.add(self.loadelevationLayer, 10)
2024-02-07 16:50:15 +08:00
self.initSketch()
},
removeAll() {
self.view.map.removeAll();
},
addLayer: function (e) {
self.removeAll();
let data = {
id: "layerName",
url: '',
2024-12-13 13:51:04 +08:00
...e,
spatialReference: {
wkid: self.wkid,
},
2024-02-07 16:50:15 +08:00
}
var imgLayer = new TileLayer(data);
2024-12-13 13:51:04 +08:00
this.map.add(imgLayer);
2024-02-07 16:50:15 +08:00
imgLayer.when((e) => {
self.nowlayer = e
self.setCenter(e.fullExtent.center.x, e.fullExtent.center.y)
})
self.view.whenLayerView(imgLayer).then(function (layerView) {
// self.nowlayer = layerView
})
self.noteSlayerInit()
return data.id;
},
removeLayer: function (e) {
this.map.remove(this.map.findLayerById(e))
},
setCenter: function (x, y, zoom) {
if (!zoom) {
zoom = this.view.zoom > 18 ? this.view.zoom : 18
}
return new Promise((resolve, reject) => {
this.view.goTo({
center: [x, y],
zoom,
}).then(res => {
resolve()
});
})
},
//添加文字标注
addTextFeature(text, id,) {
const textSymbol = {
type: "text", // autocasts as new TextSymbol()
angle: 90,
color: "green",
font: {
// autocast as new Font()
family: "Just Another Hand",
size: 12
},
haloColor: "black",
haloSize: 1,
horizontalAlignment: "right",
verticalAlignment: "bottom"
};
},
2024-10-22 16:48:12 +08:00
//高亮某个数据(未到终点的线)
hightLineLayer(data) {
let path = []
if (!self.hightlayer) {
self.hightlayer = new GraphicsLayer();
self.map.add(self.hightlayer)
}
data.forEach(item => {
return path.push([item[0], item[1]])
})
let linelayer = new Polyline({
paths: path,
})
const graphic = new Graphic({
geometry: linelayer,
symbol: {
type: "simple-line",
width: 5,
color: "red",
},
});
self.hightlayer.add(graphic)
// console.log(newPointGraphic)
},
2024-02-07 16:50:15 +08:00
//计算两点之间的距离
distance: function (p1, p2) {
2024-10-22 16:48:12 +08:00
let polyline = new Polyline({
paths: [[p1[0], p1[1]], [p2[0], p2[1]]],
})
length = geometryEngine.geodesicLength(polyline, "meters");
return length.toFixed(2)
2024-02-07 16:50:15 +08:00
},
initSketch() {
let count = 0;
const pointLayer = self.sketchLayer.pointLayer;
const polylineLayer = self.sketchLayer.polylineLayer;
const polygonLayer = self.sketchLayer.polygonLayer;
self.pointSketchViewModel = createSketchSketchViewModelPoint(pointLayer)
self.polygonSketchViewModel = createSketchSketchViewModel(polygonLayer)
self.polylineSketchViewModel = createSketchSketchViewModel(polylineLayer);
function createSketchSketchViewModel(layer) {
const sketchVM = new SketchViewModel({
view: self.view,
layer,
updateOnGraphicClick: true,
defaultStyle: {
point: {
type: "simple-marker",
color: "[0, 0, 0, 1]",
outline: {
color: "[255, 255, 255, 1]",
width: 1
},
size: "5px"
},
},
defaultUpdateOptions: {
highlightOptions: {
enabled: false,
},
enableScaling: false,
tool: 'reshape',
reshapeOptions: {
edgeOperation: 'none',
shapeOperation: 'none'
}
},
});
sketchVM.on("create", addGraphic);
sketchVM.on("update", selectData)
2024-10-22 16:48:12 +08:00
2024-02-07 16:50:15 +08:00
return sketchVM;
}
function createSketchSketchViewModelPoint(layer) {
const sketchVM = new SketchViewModel({
view: self.view,
layer,
updateOnGraphicClick: true,
defaultStyle: {
point: {
type: "simple-marker",
color: "[0, 0, 0, 1]",
outline: {
color: "[255, 255, 255, 1]",
width: 1
},
size: "5px"
},
},
defaultUpdateOptions: {
highlightOptions: {
enabled: true,
},
toggleToolOnClick: false,
tool: 'move',
reshapeOptions: {
edgeOperation: 'none',
shapeOperation: 'move-xy'
}
},
});
sketchVM.on("create", addGraphic);
2024-10-22 16:48:12 +08:00
sketchVM.on("update", selectData);
sketchVM.on("delete", selectRemove)
2024-02-07 16:50:15 +08:00
return sketchVM;
}
function selectData(e) {
2025-04-08 17:02:03 +08:00
2024-10-22 16:48:12 +08:00
if (e.graphics[0].attributes.data?.pointType == 'Station' || e.graphics[0].attributes.data?.type == 'Station') {
return
}
2024-02-07 16:50:15 +08:00
let graphic = e.graphics[0]
console.log(e)
if (e.tool == "move") {
self.movePointBy(graphic)
//移动点位,边线跟随移动
}
if (e.state == 'start') {
2024-10-22 16:48:12 +08:00
logOldGeometry = graphic.geometry
2024-02-07 16:50:15 +08:00
if (graphic.attributes.type == "House") {
emitter.emit('polyon', graphic.attributes.data)
}
self.sketchLayer.selectGraphic = graphic
// polygonLayer.remove(e.graphics[0])
}
if (e.state == 'active') {
2024-10-22 16:48:12 +08:00
//记录操作过的特征物
if (graphic.attributes.type) {
2024-02-07 16:50:15 +08:00
//更改经纬度范围
if (graphic.attributes.data && graphic.attributes.data.action == undefined) {
graphic.attributes.data.action = 1
}
2024-10-22 16:48:12 +08:00
if (graphic.attributes.type == "House") {
//更改文字显示位置
if (graphic.attributes.data.isExit) {
self.setLabelByPolygon(graphic.geometry.centroid, 'text' + graphic.id, (graphic.attributes.data.houseMaterial || '') + (graphic.attributes.data.houseFloors || ''))
}
2024-02-07 16:50:15 +08:00
}
}
2024-10-22 16:48:12 +08:00
2024-02-07 16:50:15 +08:00
}
if (e.state == 'complete') {
self.sketchLayer.selectGraphic = null
2024-10-22 16:48:12 +08:00
if (self.ldMapActionType != 'lineAction') {
2025-04-08 17:02:03 +08:00
try {
const areas = geodesicUtils.geodesicAreas([graphic.geometry], "square-meters");
const area = Math.abs(areas[0]).toFixed(2)
graphic.attributes.data.area = area
} catch {
2024-10-22 16:48:12 +08:00
2025-04-08 17:02:03 +08:00
}
2024-10-22 16:48:12 +08:00
}
if (logOldGeometry != graphic.geometry) {
mapLog.addContent({
mapType: self.ldMapActionType != 'lineAction' ? 'regon' : 'line',
actionType: 'edit',
isrevoke: true,
tips: self.ldMapActionType != 'lineAction' ? graphic.attributes.type : graphic.attributes.data.pointType,
oldGeometry: [logOldGeometry],
oldAttributes: [graphic.geometry],
id: graphic.id,
})
}
2024-02-07 16:50:15 +08:00
}
}
function addGraphic(event) {
let mapdata = useMapDataStore()
2024-10-22 16:48:12 +08:00
let id
2024-02-07 16:50:15 +08:00
if (event.state === "complete") {
switch (event.tool) {
case "point":
pointLayer.remove(event.graphic);
2024-10-22 16:48:12 +08:00
if (self.pointSketchType == 'png') {
mapdata.addPngStyle(event.graphic.geometry).then(res => {
self.addsepticBygeomery(event.graphic.geometry, self.pointMaxIndex, res)
})
} else {
console.log(self.pointSketchType)
let symbol = {
type: "simple-marker",
style: "circle",
size: self.pointSketchType == 'Station' ? '18px' : self.pointSketchType == 'x' ? '14px' : '10px',
color: self.pointSketchType == 'Station' ? [8, 240, 36, 255] : self.pointSketchType == 'x' ? [7, 253, 253, 255] : [223, 3, 2, 255],
outline: {
width: 0
}
2024-02-07 16:50:15 +08:00
}
2024-10-22 16:48:12 +08:00
id = self.pointSketchType == 'Station' ? ('station:' + Date.now()) : self.pointMaxIndex
const newPointGraphic = new Graphic({
geometry: event.graphic.geometry,
symbol: symbol,
id,
attributes: {
data: { pointType: self.pointSketchType },
startIndex: null,
endIndex: null,
}
});
pointLayer.add(newPointGraphic);
mapLog.addContent({
mapType: self.ldMapActionType != 'lineAction' ? 'regon' : 'line',
actionType: 'add',
isrevoke: self.ldMapActionType != 'lineAction' ? false : true,
tips: self.pointSketchType,
oldGeometry: [],
oldAttributes: [event.graphic.geometry],
id,
})
2024-02-07 16:50:15 +08:00
2024-10-22 16:48:12 +08:00
}
2024-02-07 16:50:15 +08:00
break;
case "polyline":
count++;
polylineLayer.remove(event.graphic);
const newPolylineGraphic = new Graphic({
geometry: event.graphic.geometry,
symbol: {
type: "simple-line",
color: [245, 66, 155, 0.8],
width: 6
},
attributes: {
type: "polyline",
title: "polyline#" + count
}
});
polylineLayer.add(newPolylineGraphic);
break;
case "polygon":
count++;
polygonLayer.remove(event.graphic);
var polygon = event.graphic.geometry;
2024-10-22 16:48:12 +08:00
id = self.addGraphicType + ':' + Date.now()
2024-02-07 16:50:15 +08:00
let val = {
geometryId: id,
action: 2,
2024-10-22 16:48:12 +08:00
"innerings": [],
2024-02-07 16:50:15 +08:00
"extend": null,
type: self.addGraphicType,
2024-10-22 16:48:12 +08:00
path: polygon.rings[0]
2024-02-07 16:50:15 +08:00
}
2024-10-22 16:48:12 +08:00
2024-02-07 16:50:15 +08:00
const newPolygonGraphic = new Graphic({
id: id,
geometry: event.graphic.geometry,
symbol: {
type: "simple-fill", // autocasts as new SimpleFillSymbol()
color: symbolData[self.addGraphicType],
outline: {
// autocasts as new SimpleLineSymbol()
color: [255, 255, 255, 0.4],
width: 2
}
},
attributes: {
data: val,
type: self.addGraphicType,
sketchType: 'polygon'
}
});
polygonLayer.add(newPolygonGraphic);
mapdata.addByTypeData(self.addGraphicType, val)
2024-10-22 16:48:12 +08:00
mapLog.addContent({
mapType: 'regon',
actionType: 'add',
isrevoke: true,
tips: self.addGraphicType,
oldGeometry: [],
oldAttributes: [event.graphic.geometry],
id,
})
2024-02-07 16:50:15 +08:00
break;
default:
console.log("geometry type not found: ", event);
}
}
}
2024-10-22 16:48:12 +08:00
function selectRemove(e) {
let selectData = e.graphics[0]
if (self.ldMapActionType == 'lineAction') {
let attributes = selectData.attributes
let allPolyline = self.lineLayer.graphics
if (!(attributes.endIndex && attributes.startIndex)) {
let PolyLine = [];
if (allPolyline) {
allPolyline.forEach(item => {
if (item.attributes.leftId == selectData.id || item.attributes.nextId == selectData.id) {
PolyLine.push(item)
}
})
PolyLine.forEach(item => {
let point = self.getSketchDataByType("point").filter(data => {
return data.id == item.attributes.leftId
})?.[0];
point && (point.attributes.endIndex = null)
self.lineLayer.remove(item)
})
}
} else {
let leftGra = [], rightGra
allPolyline.forEach(item => {
if (item.attributes.nextId == selectData.id) {
leftGra.push(item)
}
if (item.attributes.leftId == selectData.id) {
rightGra = item
}
})
leftGra.forEach((Leftitem) => {
let leftPoint
let rightPoint
self.sketchLayer.pointLayer.graphics.items.forEach(item => {
if (item.id == rightGra.attributes.nextId) {
rightPoint = item
}
if (item.id == Leftitem.attributes.leftId) {
leftPoint = item
}
})
let polyline = new Polyline({
paths: [
[leftPoint.geometry.x, leftPoint.geometry.y],
[rightPoint.geometry.x, rightPoint.geometry.y]
],
})
Leftitem.set({
geometry: polyline,
attributes: {
...Leftitem.attributes,
nextId: rightPoint.id,
endIndex: rightPoint.id
}
})
})
self.lineLayer.remove(rightGra)
}
}
mapLog.addContent({
mapType: self.ldMapActionType != 'lineAction' ? 'regon' : 'line',
actionType: 'delete',
isrevoke: true,
tips: self.ldMapActionType != 'lineAction' ? 'Station' : selectData.attributes.data.pointType,
oldGeometry: [selectData.geometry],
oldAttributes: [selectData.attributes],
id: selectData.id,
})
}
2024-02-07 16:50:15 +08:00
},
//验证新增的面是否有重叠
addPolygonCheck(newPolygonGraphic, val) {
let polygonLayer = self.sketchLayer.polygonLayer
let polygon1 = new Polygon({
rings: val.path
})
let alllayer = self.getSketchDataByType('polygon');
let arr = []
alllayer.map(item => {
let polygon2 = new Polygon({
rings: item.geometry.rings
})
const intersection = geometryEngine.intersect(polygon1, polygon2);
if (intersection) {
console.log(intersection)
console.log(item)
arr.push(intersection)
}
// return intersection
})
if (arr.length) {
// let unionPolygon =''
// arr.forEach(item=>{
// let polygon2 = new Polygon({
// rings:item.geometry.rings
// })
// unionPolygon = polygon2
// })
// console.log(unionPolygon)
polygonLayer.removeAll()
const newGraphic = new Graphic({
geometry: arr[0],
id: '11',
symbol: {
type: "simple-fill", // autocasts as new SimpleFillSymbol()
color: [255, 0, 0, 0.6],
outline: {
// autocasts as new SimpleLineSymbol()
color: [255, 255, 255, 0.4],
width: 2
}
},
attributes: {
type: self.addGraphicType,
}
});
polygonLayer.add(newGraphic)
} else {
//新增
polygonLayer.add(newPolygonGraphic);
mapdata.addByTypeData(self.addGraphicType, val)
}
},
//切换线的状态
getPoylineLayer(id, visible) {
let p6 = this.lineLayer.graphics.items.filter(item => {
return item.attributes.id == id
})
p6.forEach(item => item.visible = visible)
},
//智能合并
MergeOptimization(long = 1) {
let p6 = this.lineLayer.graphics.items.filter(item => {
const length = geometryEngine.geodesicLength(polyline, "meters");
return length < long
})
},
//新增检修井
2024-10-22 16:48:12 +08:00
addOpionPoint(type, pointId) {
console.log(pointId)
self.pointMaxIndex = pointId
self.pointSketchType = type
2024-02-07 16:50:15 +08:00
self.pointSketchViewModel.create("point");
},
//移动点位,边线跟随
movePointBy(e) {
let nowXy = [e.geometry.longitude, e.geometry.latitude]
// let polylineLayer = self.sketchLayer.polylineLayer
// let allPolyline = polylineLayer.graphics.items;
let allPolyline = self.lineLayer.graphics
let PolyLine = [];
if (allPolyline) {
allPolyline.forEach(item => {
if (item.attributes.leftId == e.id) {
PolyLine.push({
val: item,
type: 'left'
})
}
if (item.attributes.nextId == e.id) {
PolyLine.push({
val: item,
type: 'right'
})
}
})
PolyLine.forEach(item => {
//可编辑线
self.polylineSet(item.val, item.type, nowXy)
})
}
},
// 移动后替换原始线路
polylineSet(polylineVal, type, nowXy) {
let paths = polylineVal.geometry.paths
type == 'left' ? paths[0][0] = nowXy : paths[0][paths[0].length - 1] = nowXy
const polyline = new Polyline({
paths: paths,
2024-12-13 13:51:04 +08:00
2024-02-07 16:50:15 +08:00
})
const length = geometryEngine.geodesicLength(polyline, "meters");
console.log(length.toFixed(2))
2024-10-22 16:48:12 +08:00
if (length) {
polylineVal.set({
geometry: polyline,
})
}
2024-02-07 16:50:15 +08:00
},
DrawSketch(type, addType) {
self.addGraphicType = addType
switch (type) {
case 'point': self.pointSketchViewModel.create("point"); break;
case 'polyline': self.polylineSketchViewModel.create("polyline"); break;
case 'polygon': self.polygonSketchViewModel.create("polygon"); break;
}
},
//清空图层数据
removeAllLayer() {
self.sketchLayer.polygonLayer.removeAll();
self.sketchLayer.pointLayer.removeAll();
self.lineLayer && self.lineLayer.removeAll()
2024-10-22 16:48:12 +08:00
self.loadelevationLayer.removeAll()
2025-04-08 17:02:03 +08:00
self.hightlayer && self.hightlayer.removeAll()
self.textLayer && self.textLayer.removeAll()
2024-02-07 16:50:15 +08:00
},
//清除点位
removePoint() {
this.sketchLayer.pointLayer.removeAll();
},
2024-10-22 16:48:12 +08:00
removeLine() {
self.view.graphics.removeAll();
},
2024-02-07 16:50:15 +08:00
//布线识别的数据加载
addDefaultByline(data) {
self.ldMapActionType = 'lineAction'
self.DrawDregType = false
2024-10-22 16:48:12 +08:00
self.textLayer.removeAll()
2024-02-07 16:50:15 +08:00
return new Promise((resolve, reject) => {
// let polylineLayer = self.sketchLayer.polylineLayer;
self.sketchLayer.polygonLayer.removeAll();
self.lineLayer && self.lineLayer.removeAll()
let polylineLayer = new GraphicsLayer()
data.forEach(item => {
const polyline = new Polyline({
paths: item.path,
2024-12-13 13:51:04 +08:00
2024-02-07 16:50:15 +08:00
})
const lineSymbol = self.returnLineSymbole(item.width, item.color)
// const length = geometryEngine.geodesicLength(polyline, "meters");
// console.log(length.toFixed(2))
// item.distance = length.toFixed(2)
const newPolygonGraphic = new Graphic({
geometry: polyline,
2024-10-22 16:48:12 +08:00
id: item.id,
2024-02-07 16:50:15 +08:00
attributes: {
leftId: item.startIndex,
nextId: item.endIndex,
id: item.id,
data: item,
},
symbol: lineSymbol
})
polylineLayer.graphics.add(newPolygonGraphic)
})
self.map.add(polylineLayer, 1)
self.lineLayer = polylineLayer
resolve(data)
})
},
//获取管线起点数据
2024-10-22 16:48:12 +08:00
getpointByStart() {
2024-02-07 16:50:15 +08:00
2024-10-22 16:48:12 +08:00
let point = self.getSketchDataByType("point");
2024-02-07 16:50:15 +08:00
let linelayer = self.lineLayer.graphics.items
let returnObj = {
2024-10-22 16:48:12 +08:00
line: [],
point: [],
lineAttribute: {},
2024-02-07 16:50:15 +08:00
}
2024-10-22 16:48:12 +08:00
point.forEach(item => {
if (!item.attributes.startIndex && item.attributes.endIndex) {
try {
returnObj.line.push(self.getMapByPoint(item, []))
} catch (error) {
console.log(error)
debugger
}
}
if (!item.attributes.startIndex && !item.attributes.endIndex) {
returnObj.point.push([[item.geometry.x, item.geometry.y, item.attributes.data.pointType, parseInt(item.attributes.data.styleVal) || 200, item.id]])
2024-02-07 16:50:15 +08:00
}
})
2024-10-22 16:48:12 +08:00
linelayer.forEach(item => {
let { endAltitude = null, endElevation = null, material = null, pipelineType = null, startAltitude = null, startElevation = null } = item.attributes.data
let length = parseFloat(geometryEngine.geodesicLength(item.geometry, "meters").toFixed(2));
returnObj.lineAttribute[item.attributes.leftId + ',' + item.attributes.nextId] =
{ endAltitude, endElevation, length, material, pipelineType, startAltitude, startElevation }
2024-02-07 16:50:15 +08:00
})
return returnObj
},
2025-04-08 17:02:03 +08:00
// 开始 结束
// 线 31 118355 53
// 点 118355 53 531
// 线 53 118350 46
// 线 53 531 180
2024-02-07 16:50:15 +08:00
//根据起点找终点返回数据
2024-10-22 16:48:12 +08:00
getMapByPoint(item, data) {
2024-02-07 16:50:15 +08:00
let linelayer = self.lineLayer.graphics.items
2024-10-22 16:48:12 +08:00
let point = self.getSketchDataByType("point");
2024-02-07 16:50:15 +08:00
let nowPointId = item.id
2025-04-08 17:02:03 +08:00
let lineId
lineId = item.attributes.endIndex
let lineIdMore=linelayer.filter(item => item.attributes.leftId == nowPointId)
if(lineIdMore.length>1){
console.log(lineIdMore)
}
2024-02-07 16:50:15 +08:00
2024-10-22 16:48:12 +08:00
//当前的元素数据
2024-02-07 16:50:15 +08:00
let geometry = item.geometry
let attributes = item.attributes
2024-10-22 16:48:12 +08:00
if (lineId && lineId != nowPointId) {
2025-04-08 17:02:03 +08:00
let linedata = linelayer.filter(item => item.id == lineId)
console.log(linedata.length)
if(linedata.length >1){debugger}
linedata = linedata[0]
2024-10-22 16:48:12 +08:00
if (!linedata) { return data }
let val = [geometry.x, geometry.y, attributes.data.pointType, parseInt(linedata.attributes.data.styleId), nowPointId]
2024-02-07 16:50:15 +08:00
data.push(val)
2024-10-22 16:48:12 +08:00
let nextPointId = linedata.attributes.nextId
2024-02-07 16:50:15 +08:00
2025-04-08 17:02:03 +08:00
let nextItem = point.filter(item => item.id == nextPointId)
nextItem=nextItem[0]
if(nextItem.length >1){debugger}
2024-10-22 16:48:12 +08:00
if (!nextItem) { debugger }
return this.getMapByPoint(nextItem, data)
} else {
2024-02-07 16:50:15 +08:00
//到终点
2024-10-22 16:48:12 +08:00
let val = [geometry.x, geometry.y, attributes.data.pointType, parseInt(data[data.length - 1][3]), nowPointId]
2024-02-07 16:50:15 +08:00
data.push(val)
return data
}
},
//线数据定位
chooseLineByid(id) {
let p6 = this.lineLayer.graphics.items.filter(item => {
return item.attributes.id == id
})[0]
self.lighHight?.remove();
self.view.whenLayerView(p6.layer).then((layerView) => {
self.lighHight = layerView.highlight(p6)
})
self.setCenter(p6.geometry.extent.center.x, p6.geometry.extent.center.y, 22)
},
//根据类型获取总skech要素
getSketchDataByType(type) {
let sketch = []
switch (type) {
case 'polygon': sketch = this.sketchLayer.polygonLayer.graphics.items; break;
case 'point': sketch = this.sketchLayer.pointLayer.graphics.items; break;
case 'polyline': sketch = this.sketchLayer.pointLayer.graphics.items; break;
}
return sketch
},
//线条样式
returnLineSymbole(width, color) {
return new CIMSymbol({
data: {
type: "CIMSymbolReference",
symbol: {
type: "CIMLineSymbol",
symbolLayers: [{
type: "CIMSolidStroke",
enable: "true",
capStyle: "Butt",
joinStyle: "Round",
width,
color
},
{
// arrow symbol
type: "CIMVectorMarker",
enable: true,
size: 5,
markerPlacement: {
type: "CIMMarkerPlacementAlongLineSameSize", // places same size markers along the line
endings: "WithMarkers",
placementTemplate: [19.5], // determines space between each arrow
angleToLine: true // symbol will maintain its angle to the line when map is rotated
},
frame: {
xmin: -5,
ymin: -5,
xmax: 5,
ymax: 5
},
markerGraphics: [{
type: "CIMMarkerGraphic",
geometry: {
rings: [
[
[
-8,
-5.47
],
[
-8,
5.6
],
[
1.96,
-0.03
],
[
-8,
-5.47
]
]
]
},
symbol: {
// black fill for the arrow symbol
type: "CIMPolygonSymbol",
symbolLayers: [{
type: "CIMSolidFill",
enable: true,
color: [
255, 255, 255, 255
]
}]
}
}]
}]
}
}
});
},
//线添加点位数据
addDefaultByPoint(data) {
let pointLayer = self.sketchLayer.pointLayer;
let id = data.pointId
// if (data.pointType != 'y') {
2024-10-22 16:48:12 +08:00
let point = new Point({
x: data.point[0],
y: data.point[1]
})
// Create a graphic and add the geometry and symbol to it
let pointGraphic = new Graphic({
id: id,
geometry: point,
attributes: {
data: data,
startIndex: data.startIndex,
endIndex: data.endIndex,
},
symbol: {
// type: "picture-marker", // autocasts as new PictureMarkerSymbol()
// url: data.jpg,
// width: data.width,
// height: data.height
type: "simple-marker", // autocasts as new SimpleMarkerSymbol()
color: data.color,
size: data.size, // pixels
outline: {
width: 0
}
},
2024-12-13 13:51:04 +08:00
2024-10-22 16:48:12 +08:00
});
if (data.pointType == 'y') {
pointGraphic.visible = false
}
pointLayer.add(pointGraphic, 10)
// return id;
// }
},
addsepticBygeomery(geometry, img, id) {
let pointGraphic = new Graphic({
id,
geometry: geometry,
attributes: {
type: 'qdf',
},
symbol: {
type: "picture-marker", // autocasts as new PictureMarkerSymbol()
url: img,
height: 20,
width: 20,
outline: {
width: 10
}
},
2024-12-13 13:51:04 +08:00
2024-10-22 16:48:12 +08:00
});
self.pngLayer.add(pointGraphic, 10)
},
//新增图片点位
addsepticTank(e) {
let { data: arr, img } = e
self.pngLayer.removeAll()
arr.forEach(data => {
2024-02-07 16:50:15 +08:00
let point = new Point({
x: data.point[0],
y: data.point[1]
})
// Create a graphic and add the geometry and symbol to it
let pointGraphic = new Graphic({
2024-10-22 16:48:12 +08:00
id: data.id,
2024-02-07 16:50:15 +08:00
geometry: point,
2024-10-22 16:48:12 +08:00
attributes: { type: 'qdf' },
2024-02-07 16:50:15 +08:00
symbol: {
2024-10-22 16:48:12 +08:00
type: "picture-marker", // autocasts as new PictureMarkerSymbol()
url: img,
height: 20,
width: 20,
},
2024-12-13 13:51:04 +08:00
2024-02-07 16:50:15 +08:00
});
2024-10-22 16:48:12 +08:00
self.pngLayer.add(pointGraphic, 10)
})
},
//隐藏图片点位
setPngPoint(visible) {
self.pngLayer.visible = visible
2024-02-07 16:50:15 +08:00
},
//根据管径信息修改管道
exitLineByVal(data) {
let polylineLayer = self.lineLayer
2025-04-08 17:02:03 +08:00
2024-02-07 16:50:15 +08:00
let p6 = this.lineLayer.graphics.items.filter(item => {
2024-10-22 16:48:12 +08:00
return item.id == data.id || item.id == data.lineId
2024-02-07 16:50:15 +08:00
})[0]
2024-10-22 16:48:12 +08:00
p6.set({
2024-02-07 16:50:15 +08:00
symbol: self.returnLineSymbole(data.width, data.color)
})
2024-10-22 16:48:12 +08:00
},
//切割面
cutPolygon() {
self.startDrawLine()
2024-02-07 16:50:15 +08:00
},
getCIMSymbolData(rings) {
return {
type: "CIMSymbolReference",
primitiveOverrides: [
{
type: "CIMPrimitiveOverride",
primitiveName: "textGraphic",
propertyName: "TextString",
valueExpressionInfo: {
type: "CIMExpressionInfo",
title: "Custom",
expression: "$feature.text",
returnType: "Default"
}
}
],
symbol: {
type: "CIMPolygonSymbol",
symbolLayers: [
{
type: "CIMSolidFill", // autocasts as new SimpleFillSymbol()
"enable": true,
"color": [255, 0, 0, 153]
},
{
type: "CIMVectorMarker",
enable: true,
size: 32,
colorLocked: true,
anchorPointUnits: "Relative",
frame: { xmin: -5, ymin: -5, xmax: 5, ymax: 5 },
markerGraphics: [
{
type: "CIMMarkerGraphic",
primitiveName: "textGraphic",
geometry: { x: 0, y: 0 },
symbol: {
type: "CIMTextSymbol",
fontFamilyName: "Arial",
fontStyleName: "Bold",
height: 4,
horizontalAlignment: "Center",
offsetX: 0,
offsetY: 0,
symbol: {
type: "CIMPolygonSymbol",
symbolLayers: [
{
type: "CIMSolidFill",
enable: true,
color: [255, 255, 255, 255]
}
]
},
verticalAlignment: "Center"
},
textString: ""
}
],
scaleSymbolsProportionally: true,
respectFrame: true
},
]
}
};
2024-10-22 16:48:12 +08:00
},
//根据缩放显示高程数据
showeleByzoom(zoom = self.view.zoom) {
console.log(zoom)
if (!self.loadelevationLayer) return;
if (zoom >= 22) {
self.loadelevationLayer.graphics.items.forEach(item => {
item.visible = true
})
} else {
let level = (22 - zoom) * 3
self.loadelevationLayer.graphics.items.forEach((item, index) => {
if (!(index % level)) {
item.visible = true
} else {
item.visible = false
}
})
}
},
//是否有相近的点位
isNearbypoint(point) {
let items = self.loadelevationLayer.graphics.items
let flag = true
for (let i = 0; i < items.length; i++) {
let distance = self.distance(point, [items[i].geometry.x, items[i].geometry.y])
console.log(distance)
if (distance < 10) {
flag = false;
break;
}
}
return flag
},
//道路高程数据展示
2025-04-08 17:02:03 +08:00
elevationData(flag, data) {
2024-10-22 16:48:12 +08:00
if (flag) {
data.forEach((item, index) => {
2025-04-08 17:02:03 +08:00
let point = new Point({ x: item[0], y: item[1] })
let text = item[2].toFixed(2)
const graphic = new Graphic({
geometry: point,
visible: !(index % ((22 - self.view.zoom) * 2)),
symbol: {
type: "text", // autocasts as new TextSymbol()
text: text,
color: [255, 255, 255, 255],
font: {
weight: "bold"
2024-10-22 16:48:12 +08:00
}
2025-04-08 17:02:03 +08:00
}
});
2024-10-22 16:48:12 +08:00
2025-04-08 17:02:03 +08:00
self.loadelevationLayer.add(graphic)
2024-10-22 16:48:12 +08:00
})
} else {
self.loadelevationLayer.removeAll()
}
2024-02-07 16:50:15 +08:00
},
//特征物的站点数据
addDefaultPoint(data) {
let pointLayer = self.sketchLayer.pointLayer
const point = new Point({
x: data.path[0],
y: data.path[1],
2024-12-13 13:51:04 +08:00
2024-02-07 16:50:15 +08:00
})
2024-10-22 16:48:12 +08:00
2024-02-07 16:50:15 +08:00
const newPointGraphic = new Graphic({
2024-10-22 16:48:12 +08:00
2024-02-07 16:50:15 +08:00
geometry: point,
symbol: {
type: "simple-marker",
style: "circle",
size: '18px',
color: [8, 240, 36, 255],
outline: {
width: 0
}
},
attributes: {
data,
}
});
pointLayer.add(newPointGraphic);
},
//站点数据
addDeviceData(data, type) {
self.pointSketchType = type
let pointLayer = self.sketchLayer.pointLayer;
data.forEach(item => {
2024-10-22 16:48:12 +08:00
let xy = item.path[0]
2024-02-07 16:50:15 +08:00
let point = new Point({
x: xy[0],
y: xy[1],
})
const newPointGraphic = new Graphic({
2024-10-22 16:48:12 +08:00
id: item.geometryId,
2024-02-07 16:50:15 +08:00
geometry: point,
symbol: {
type: "simple-marker",
style: "circle",
size: '18px',
color: [8, 240, 36, 255],
outline: {
width: 0
}
},
attributes: {
data: item
}
});
pointLayer.add(newPointGraphic);
})
},
//特征物识别数据
addDefaultData(data, type) {
let SymbolColor = symbolData[type]
let symbol = ''
self.ldMapActionType = 'regectionAction'
let polygonLayer = self.sketchLayer.polygonLayer
const num = 3
const maxNumber = 15000
const flag = false;
self.DrawDregType = true
data.forEach((res) => {
2024-10-22 16:48:12 +08:00
2024-02-07 16:50:15 +08:00
let maxNum = 0
2024-10-22 16:48:12 +08:00
res.innerings = res.innerings
res.path = res.path
2024-02-07 16:50:15 +08:00
new Promise((resolve, reject) => {
maxNum += res.path.length
res.innerings.forEach(res => {
maxNum += res.length
})
// if(maxNum>1000)
console.log(maxNum + ":" + res.geometryId)
let path, innerings
if (maxNum > maxNumber && flag) {
path = res.path.filter((item, index) => {
return index % num == 0
})
innerings = res.innerings.map(element => {
data = element.filter((item, index) => {
return index % num == 0
})
return data
})
} else {
path = res.path
innerings = res.innerings
}
const polygon = new Polygon({
rings: path,
2024-12-13 13:51:04 +08:00
//
2024-02-07 16:50:15 +08:00
})
2024-10-22 16:48:12 +08:00
2024-02-07 16:50:15 +08:00
if (innerings.length) {
innerings.forEach(element => {
polygon.addRing(element)
});
}
// symbol={
// type: "cim",
// data:this.getCIMSymbolData()
// }
symbol = {
type: "simple-fill", // autocasts as new SimpleFillSymbol()
color: SymbolColor,
outline: {
// autocasts as new SimpleLineSymbol()
color: [255, 255, 255, 0.4],
width: 0.5
}
}
2024-10-22 16:48:12 +08:00
if (res.type == "House") {
2025-04-08 17:02:03 +08:00
try {
2024-12-13 13:51:04 +08:00
const areas = geodesicUtils.geodesicAreas([polygon], "square-meters");
const area = Math.abs(areas[0]).toFixed(2)
res.area = res.area || area
2025-04-08 17:02:03 +08:00
} catch {
2024-12-13 13:51:04 +08:00
}
2024-10-22 16:48:12 +08:00
}
2024-02-07 16:50:15 +08:00
const newPolygonGraphic = new Graphic({
geometry: polygon,
id: res.geometryId,
symbol: symbol,
attributes: {
type: type,
sketchType: 'polygon',
data: res,
}
});
2024-10-22 16:48:12 +08:00
res.isExit && self.setLabelByPolygon(polygon.centroid, 'text' + res.geometryId, (res.houseMaterial || '') + (res.houseFloors || ''))
2024-02-07 16:50:15 +08:00
polygonLayer.add(newPolygonGraphic)
resolve()
}).then(e => {
})
})
},
setReconLabel(geometryId, text) {
let graphic = self.sketchLayer.polygonLayer.graphics.items.filter(item => {
return item.id == geometryId
})
if (graphic.length) {
self.setLabelByPolygon(graphic[0].geometry.centroid, 'text' + geometryId, text)
}
},
//显示图层中间文字
setLabelByPolygon(center, id, text) {
2024-10-22 16:48:12 +08:00
if (!text) return
2024-02-07 16:50:15 +08:00
let point = new Point({ x: center.x, y: center.y })
let selectGraphic = self.textLayer.graphics.items.filter(item => {
return item.id == id
})
if (selectGraphic.length) {
selectGraphic.forEach(p6 => {
p6.set({
geometry: point,
symbol: {
type: "text", // autocasts as new TextSymbol()
text: text,
color: [255, 255, 255, 255],
font: { // autocasts as new Font()
size: 12,
weight: "bold"
}
}
})
})
} else {
const graphic = new Graphic({
geometry: point,
id: id,
symbol: {
type: "text", // autocasts as new TextSymbol()
text: text,
color: [255, 255, 255, 255],
font: {
// autocasts as new Font()
// size: 12,
weight: "bold"
}
}
});
self.textLayer.add(graphic)
}
},
//高亮面图层
lighHightLayer(id) {
let graphic = self.sketchLayer.polygonLayer.graphics.items.filter(item => {
return item.id == id
})
self.polygonSketchViewModel.update(graphic, {
tool: "reshape",
enableMoveAllGraphics: false,
reshapeOptions: {
edgeOperation: "none",
shapeOperation: "none",
vertexOperation: "none"
}
})
2024-10-22 16:48:12 +08:00
graphic && self.setCenter(graphic[0].geometry.extent.center.x, graphic[0].geometry.extent.center.y)
2024-02-07 16:50:15 +08:00
},
//像素转经纬度
pxMapToLatlon(x, y) {
let view = self.view
let zoom = view.zoom
let tileLayer = self.nowlayer
let imgwidth = tileLayer.sourceJSON.maxImageWidth
let imgHeight = tileLayer.sourceJSON.maxImageHeight
let fullExtent = {
xmax: 118.86371824235101,
ymax: 33.26729051757083,
xmin: 118.85818229653573,
ymin: 33.26307467082115
}
let lngLatToXYmax = webMercatorUtils.lngLatToXY(fullExtent.xmax, fullExtent.ymax)
let lngLatToXYmin = webMercatorUtils.lngLatToXY(fullExtent.xmin, fullExtent.ymin)
let nowWith = lngLatToXYmax[0] - lngLatToXYmin[0]
let nowheight = lngLatToXYmax[1] - lngLatToXYmin[1]
let nowX = Math.floor(lngLatToXYmin[0] + (x * 4096 / 256) / 125)
let nowY = Math.floor(lngLatToXYmax[1] - (y * 4096 / 256) / 125)
2024-10-22 16:48:12 +08:00
2024-02-07 16:50:15 +08:00
let lat = webMercatorUtils.xyToLngLat(nowX, nowY)
return lat
},
getTileExtent(layer) {
},
//获取总数居
getAllData() {
self.sketchLayer.polygonLayer.removeAll()
2024-10-22 16:48:12 +08:00
},
//数据恢复
recoveryData(data) {
return new Promise((resolve, reject) => {
console.log(data)
switch (data.actionType) {
case 'add':
if (data.mapType == 'regon') {
self.sketchLayer.polygonLayer.graphics.items.forEach(item => {
if (item.id == data.id) {
self.sketchLayer.polygonLayer.remove(item)
}
})
resolve()
}
break
case 'delete':
if (data.mapType == 'regon') {
let graphicData = JSON.parse(data.oldAttributes[0])
let polygon = new Polygon(JSON.parse(data.oldGeometry[0]))
let symbol = {
type: "simple-fill", // autocasts as new SimpleFillSymbol()
color: symbolData[data.tips],
outline: {
// autocasts as new SimpleLineSymbol()
color: [255, 255, 255, 0.4],
width: 0.5
}
}
const newPolygonGraphic = new Graphic({
geometry: polygon,
id: data.id,
symbol: symbol,
attributes: graphicData.attributes,
});
self.sketchLayer.polygonLayer.add(newPolygonGraphic)
resolve()
}
break
case 'edit':
console.log(data)
if (data.mapType == 'regon') {
self.sketchLayer.polygonLayer.graphics.items.forEach(item => {
if (item.id == data.id) {
let geometry = new Polygon(JSON.parse(data.oldGeometry[0]))
item.set({
geometry
})
}
})
resolve()
}
break
}
})
2024-02-07 16:50:15 +08:00
},
2024-10-22 16:48:12 +08:00
//删除数据
2024-02-07 16:50:15 +08:00
delSketch() {
if (self.sketchLayer.selectGraphic) {
let val = self.sketchLayer.selectGraphic.attributes.data
let layer = ""
let selectData = self.sketchLayer.selectGraphic
switch (selectData.attributes.sketchType) {
case "polygon": layer = self.sketchLayer.polygonLayer.remove(selectData); break;
case "polyline": layer = self.sketchLayer.polylineLayer.remove(selectData); break;
}
2024-10-22 16:48:12 +08:00
mapLog.addContent({
mapType: self.ldMapActionType != 'lineAction' ? 'regon' : 'line',
actionType: 'delete',
isrevoke: true,
tips: val.type,
oldGeometry: [self.sketchLayer.selectGraphic.geometry],
oldAttributes: [self.sketchLayer.selectGraphic],
id: self.sketchLayer.selectGraphic.id,
})
2024-02-07 16:50:15 +08:00
self.sketchLayer.selectGraphic = null
2024-10-22 16:48:12 +08:00
return self.ldMapActionType == 'lineAction' ? null : val;
2024-02-07 16:50:15 +08:00
}
2024-10-22 16:48:12 +08:00
if (self.lighHight) {
if (self.selectLine) {
self.lineLayer.remove(self.selectLine)
self.sketchLayer.pointLayer.sublayers.items.forEach(item => {
if (item.id == self.selectLine.attributes.leftId) {
item.attributes.endIndex = null
}
if (item.id == self.selectLine.attributes.nextId) {
item.attributes.startIndex = null
}
})
}
if (self.selectPng) {
let mapdata = useMapDataStore()
mapdata.delPngTyle(self.selectPng.id).then(() => {
self.pngLayer.remove(self.selectPng)
})
}
}
},
2024-02-07 16:50:15 +08:00
destroyDraw() {
this.draw.destroy()
2024-10-22 16:48:12 +08:00
if (this.ldMapActionType == 'lineAction') {
this.drawTypeLine == 'once' ? this.pointLayerBind() : this.pointManyBind()
2024-02-07 16:50:15 +08:00
}
},
2024-10-22 16:48:12 +08:00
startDrawLine(type) {
2024-02-07 16:50:15 +08:00
2024-10-22 16:48:12 +08:00
self.drawTypeLine = type
this.draw && this.draw.destroy()
2024-02-07 16:50:15 +08:00
self.draw = new Draw({
view: this.view,
})
let action = self.draw.create("polyline", {
mode: 'click'
});
// self.view.focus()
// 顶点添加事件
2024-10-22 16:48:12 +08:00
action.on("vertex-add", (event) => self.creatLineByClick(event));
2024-02-07 16:50:15 +08:00
// 鼠标移动事件
2024-10-22 16:48:12 +08:00
action.on("cursor-update", (event) => self.creatLineByClick(event));
2024-02-07 16:50:15 +08:00
// 绘制完成事件
action.on("draw-complete", (e) => {
2024-10-22 16:48:12 +08:00
self.destroyDraw()
2024-02-07 16:50:15 +08:00
});
},
2024-10-22 16:48:12 +08:00
//根据画的线合并到最近的点位并找出中间点位相连
pointManyBind() {
let polylineLayer = self.lineLayer
let startItem = null, startMax = 30;
let endItem = null, endMax = 30;
let point = self.getSketchDataByType("point");
let line
try {
line = turf.lineString(self.newDrawLineByClick.geometry.paths[0]);
} catch (error) {
console.log(self.newDrawLineByClick.geometry.paths)
}
let options = { units: 'meters' };
let pointList = []
point.forEach(item => {
let polyline
let length
polyline = new Polyline({
paths: [self.newDrawLineByClick.geometry.paths[0][0], [item.geometry.x, item.geometry.y,]],
})
length = geometryEngine.geodesicLength(polyline, "meters");
if (length < startMax) {
startMax = length;
startItem = item
}
polyline = new Polyline({
paths: [self.newDrawLineByClick.geometry.paths[0][1], [item.geometry.x, item.geometry.y]],
})
length = geometryEngine.geodesicLength(polyline, "meters");
if (length < endMax) {
endMax = length;
endItem = item
}
let point = turf.point([item.geometry.x, item.geometry.y]);
if (line && turf.pointToLineDistance(point, line, options) < 10) {
pointList.push(item)
}
})
if (endItem && startItem) {
let list = pointList.filter(item => {
return item != startItem
})
console.log(list)
drawByStartItem(startItem)
function drawByStartItem(startItem) {
let Minlength = 999;
let endItem = ''
list.forEach(item => {
let polyline = new Polyline({
paths: [[startItem.geometry.x, startItem.geometry.y], [item.geometry.x, item.geometry.y]],
})
length = geometryEngine.geodesicLength(polyline, "meters");
if (length < Minlength) {
endItem = item
Minlength = length
}
})
if (endItem) {
let lineValue = [[startItem.geometry.x, startItem.geometry.y], [endItem.geometry.x, endItem.geometry.y]]
let lineValueResve = [[endItem.geometry.x, endItem.geometry.y], [startItem.geometry.x, startItem.geometry.y]]
let polyline = new Polyline({
paths: lineValue,
})
let flag = polylineLayer.graphics.items.filter(data => {
return JSON.stringify(lineValue) == JSON.stringify(data.geometry.paths[0]) || JSON.stringify(lineValueResve) == JSON.stringify(data.geometry.paths[0])
})
if (!flag.length) {
let newId = parseInt(startItem.id + '1')
startItem.attributes.endIndex = newId
endItem.attributes.startIndex = newId
const lineSymbol = self.returnLineSymbole(3, [0, 255, 255, 255])
let graphic = new Graphic({
geometry: polyline,
id: newId,
attributes: {
leftId: startItem.id,
nextId: endItem.id,
data: {
lineId: newId,
styleId: 400,
length: geometryEngine.geodesicLength(polyline, "meters").toFixed(2),
path: polyline.paths[0],
startIndex: startItem.id,
endIndex: endItem.id,
}
},
symbol: lineSymbol
})
polylineLayer.add(graphic)
}
list = list.filter(item => item != endItem)
if (list.length != 0)
drawByStartItem(endItem)
}
}
}
self.view.graphics.removeAll();
},
//根据画的线合并到最近的点位
pointLayerBind() {
2024-02-07 16:50:15 +08:00
let polylineLayer = self.lineLayer
2024-10-22 16:48:12 +08:00
let startItem = null, startMax = 30;
let endItem = null, endMax = 30;
2024-02-07 16:50:15 +08:00
2024-10-22 16:48:12 +08:00
let point = self.getSketchDataByType("point");
point.forEach(item => {
2024-02-07 16:50:15 +08:00
let polyline
let length
polyline = new Polyline({
2024-10-22 16:48:12 +08:00
paths: [self.newDrawLineByClick.geometry.paths[0][0], [item.geometry.x, item.geometry.y,]],
2024-02-07 16:50:15 +08:00
})
length = geometryEngine.geodesicLength(polyline, "meters");
2024-10-22 16:48:12 +08:00
if (length < startMax) {
startMax = length;
2024-02-07 16:50:15 +08:00
startItem = item
}
polyline = new Polyline({
2024-10-22 16:48:12 +08:00
paths: [self.newDrawLineByClick.geometry.paths[0][1], [item.geometry.x, item.geometry.y]],
2024-02-07 16:50:15 +08:00
})
length = geometryEngine.geodesicLength(polyline, "meters");
2024-10-22 16:48:12 +08:00
if (length < endMax) {
endMax = length;
2024-02-07 16:50:15 +08:00
endItem = item
}
})
2024-10-22 16:48:12 +08:00
if (endItem && startItem) {
let polyline = new Polyline({
paths: [[startItem.geometry.x, startItem.geometry.y], [endItem.geometry.x, endItem.geometry.y]],
})
let newId = parseInt(startItem.id + '1')
2024-02-07 16:50:15 +08:00
startItem.attributes.endIndex = newId
endItem.attributes.startIndex = newId
const lineSymbol = self.returnLineSymbole(3, [0, 255, 255, 255])
let graphic = new Graphic({
geometry: polyline,
2024-10-22 16:48:12 +08:00
id: newId,
attributes: {
leftId: startItem.id,
nextId: endItem.id,
data: {
styleId: 400,
lineId: newId,
length: geometryEngine.geodesicLength(polyline, "meters").toFixed(2),
path: polyline.paths[0],
startIndex: startItem.id,
endIndex: endItem.id,
2024-02-07 16:50:15 +08:00
}
},
2024-10-22 16:48:12 +08:00
symbol: lineSymbol
2024-02-07 16:50:15 +08:00
})
2024-10-22 16:48:12 +08:00
2024-02-07 16:50:15 +08:00
polylineLayer.add(graphic)
}
self.view.graphics.removeAll();
2024-10-22 16:48:12 +08:00
},
creatLineByClick(event) {
2024-02-07 16:50:15 +08:00
self.view.graphics.removeAll();
var vertices = event.vertices;
2024-10-22 16:48:12 +08:00
let falg = false
if (vertices.length > 2) {
vertices = vertices.slice(0, 2)
falg = true
}
2024-02-07 16:50:15 +08:00
let polyline = {
type: "polyline", // autocasts as new Polyline()
paths: vertices,
2024-12-13 13:51:04 +08:00
2024-02-07 16:50:15 +08:00
}
const lineSymbol = self.returnLineSymbole(3, [0, 255, 255, 255])
let graphic = new Graphic({
geometry: polyline,
2024-10-22 16:48:12 +08:00
attributes: {
data: '1111'
2024-02-07 16:50:15 +08:00
},
2024-10-22 16:48:12 +08:00
symbol: lineSymbol
2024-02-07 16:50:15 +08:00
})
self.view.graphics.add(graphic)
2024-10-22 16:48:12 +08:00
if (falg) this.destroyDraw()
2024-02-07 16:50:15 +08:00
self.newDrawLineByClick = graphic
},
//处理合并的经纬度
Bindpolygon() {
let polygonLayer = self.sketchLayer.polygonLayer
let graphic = self.view.graphics.items[0]
if (!graphic || !self.sketchLayer.selectGraphic) { return }
let polygon1 = new Polygon({
rings: graphic.geometry.rings
})
let item = self.sketchLayer.selectGraphic
let rings = item.geometry.rings
let newRings = []
let deletFlag = false;
rings.forEach(ring => {
let newRing = []
ring.forEach(p => {
let point = new Point({ x: p[0], y: p[1] })
const pointFlag = geometryEngine.intersect(polygon1, point);
if (!pointFlag) {
newRing.push(p)
} else {
deletFlag = true
}
})
newRing.length && newRings.push(newRing)
})
console.log(newRings)
if (deletFlag) {
if (newRings.length) {
2024-10-22 16:48:12 +08:00
if (!item.attributes.data.action) {
item.attributes.data.action = 1
}
2024-02-07 16:50:15 +08:00
item.geometry.set({
rings: newRings
})
item.notifyGeometryChanged()
self.polygonSketchViewModel.update(item, { tool: "reshape" })
} else {
polygonLayer.remove(item)
let mapdata = useMapDataStore()
mapdata.delData(item.attributes.data);
}
}
self.view.graphics.removeAll()
},
createPolygon(event) {
var vertices = event.vertices;
//两点画矩形
if (vertices.length < 2) {
return
}
var rings = [vertices[0], [vertices[0][0], vertices[1][1]], vertices[1], [vertices[1][0], vertices[0][1]]];
self.view.graphics.removeAll();
const polygon = new Polygon({
hasZ: false,
hasM: false,
rings: [rings],
2024-12-13 13:51:04 +08:00
2024-02-07 16:50:15 +08:00
})
let graphic = new Graphic({
geometry: polygon,
symbol: {
type: "simple-fill", // autocasts as new SimpleFillSymbol()
color: [234, 191, 13, 0.6],
style: "solid",
outline: { // autocasts as new SimpleLineSymbol()
color: "white",
width: 1
}
}
})
self.view.graphics.add(graphic)
},
addImgbyLine(points, x, y, imgPoint) {
if (imgPoint) {
self.view.graphics.remove(imgPoint)
}
var x1 = points[0][0]
var y1 = points[0][1]
var x2 = points[1][0]
var y2 = points[1][1]
let p = (y2 - y1) / (x2 - x1)// 斜率
let angle = self.calcAngle(x1, y1, x2, y2) //朝向
let point = {
type: "point",
longitude: x,
latitude: y,
}
let graphic = new Graphic({
geometry: point,
symbol: {
type: "picture-marker",
url: "http://localhost/src/ldmap/assets/tool/icon.png",
width: 20,
height: 20,
angle: angle
}
})
self.view.graphics.add(graphic)
return graphic
},
calcAngle(x1, y1, x2, y2) {
let tan = (Math.atan(Math.abs((y2 - y1) / (x2 - x1))) * 180) / Math.PI + 90
if (x2 > x1 && y2 > y1) {
return -tan + 180
} else if (x2 > x1 && y2 < y1) {
return tan
} else if (x2 < x1 && y2 > y1) {
return tan - 180
} else {
return -tan
}
},
drawPoint(data) {
let position = {
type: "point",
longitude: data[0],
latitude: data[1]
}
let graphic = new Graphic({
geometry: position,
symbol: {
type: "simple-marker", // autocasts as new SimpleMarkerSymbol()
color: 'yello',
size: "8px",
outline: { // autocasts as new SimpleLineSymbol()
color: [255, 255, 0],
width: 3 // points
}
}
})
self.view.graphics.add(graphic)
2024-10-22 16:48:12 +08:00
},
//优化管线数据大于50
ponitBindByFivety(MAXLENGTH = 50) {
let pointAll = self.getSketchDataByType("point");
let linelayer = self.lineLayer.graphics.items
pointAll.forEach(item => {
if (!item.attributes.startIndex && item.attributes.endIndex) {
try {
//从头开始找
getpointByStart(item, null, [], [])
} catch (error) {
}
}
})
function getpointByStart(leftPoint, leftLIne, arrPoint, arrline) {
if (leftPoint.attributes.data.pointType == 'x') {
if (arrPoint.length) {
arrPoint.push(leftPoint)
arrline.push(leftLIne)
isArrPointMax50(arrPoint, arrline)
arrPoint = [];
arrline = []
//597 595 596
} else {
arrPoint.push(leftPoint)
}
} else {
if (arrPoint.length) {
arrPoint.push(leftPoint)
arrline.push(leftLIne)
}
}
let nextPoint, pointLine
for (let i = 0; i < linelayer.length; i++) {
if (linelayer[i].id == leftPoint.attributes.endIndex) {
pointLine = linelayer[i]
nextPoint = pointAll.filter(item => {
return item.id == pointLine.attributes.nextId
})[0]
break
}
}
if (nextPoint) {
getpointByStart(nextPoint, pointLine, arrPoint, arrline)
}
}
function isArrPointMax50(arrPoint, arrLine) {
let paths = []
arrPoint.forEach(item => {
paths.push([item.geometry.x, item.geometry.y])
})
let polyline = new Polyline({
paths: paths
})
let length = parseFloat(geometryEngine.geodesicLength(polyline, "meters"));
if (length >= MAXLENGTH) {
console.log(length)
length = length / 2
//判断中心点位再哪条线上
let centerLine
for (let i = 0; i < arrLine.length; i++) {
let item = arrLine[i]
let desic = parseFloat(geometryEngine.geodesicLength(item.geometry, "meters"))
length = length - desic
if (length <= 0) {
centerLine = item;
break;
}
}
//获取中心点位
let centerPoint = new Point({
x: centerLine.geometry.extent.center.x,
y: centerLine.geometry.extent.center.y
})
//新增中心点位
let mapdata = useMapDataStore()
let id = mapdata.setMaxPointIndex(1);
let symbol = {
type: "simple-marker",
style: "circle",
size: '14px',
color: [7, 253, 253, 255],
outline: {
width: 0
}
}
const newPointGraphic = new Graphic({
geometry: centerPoint,
symbol: symbol,
id,
attributes: {
data: { pointType: 'h' },
startIndex: centerLine.id,
endIndex: id + '1',
}
});
self.sketchLayer.pointLayer.add(newPointGraphic);
//clone 一条线,开始和结尾改为连接到中心点位
let centerlineClone = centerLine.clone()
centerLine.set({
geometry: new Polyline({
paths: [
[centerPoint.x, centerPoint.y],
centerLine.geometry.paths[0][1],
]
})
})
centerLine.attributes.leftId = id
let newPolygon = new Polyline({
paths: [
centerlineClone.geometry.paths[0][0],
[centerPoint.x, centerPoint.y],
]
})
let LineGraphic = new Graphic({
geometry: newPolygon,
id: id * 10 + 1,
attributes: {
leftId: centerlineClone.attributes.leftId,
nextId: id,
data: centerlineClone.attributes.data
},
symbol: centerlineClone.symbol
})
self.lineLaye.add(LineGraphic)
if (!self.hightlayer) {
self.hightlayer = new GraphicsLayer();
self.map.add(self.hightlayer)
}
const graphic = new Graphic({
geometry: polyline,
symbol: {
type: "simple-line",
width: 5,
color: "red",
},
});
self.hightlayer.add(graphic)
}
}
},
//优化检修井数据点位
pointBindByLength(minlength = 5) {
let pointAll = self.getSketchDataByType("point");
let linelayer = self.lineLayer.graphics.items
let index
let sum
let num
let allSum = 0
do {
console.log('--------------------------------')
sum = 0
index = 1
pointAll.forEach((item) => {
if (!item.attributes.startIndex && item.attributes.endIndex) {
try {
num = 0
//从头开始找
num = getpointBytype(item, num)
// console.log(`查找中:${index++}条,优化点位${num}个`)
sum += num
} catch (error) {
console.log(error)
}
}
})
allSum += sum
console.log(sum)
} while (sum)
return allSum
//找到相邻的点位并且是检修井
function getpointBytype(leftPoint, num) {
let nextPoint, p1Top2Line
for (let i = 0; i < linelayer.length; i++) {
if (linelayer[i].id == leftPoint.attributes.endIndex) {
p1Top2Line = linelayer[i]
nextPoint = pointAll.filter(item => {
return item.id == p1Top2Line.attributes.nextId
})[0]
break
}
}
if (nextPoint) {
if (leftPoint.attributes.data.pointType == 'x' && nextPoint.attributes.data.pointType == 'x') {
nextPoint = setLinelength(leftPoint, nextPoint, p1Top2Line)
}
num = nextPoint == leftPoint ? num + 1 : num
return getpointBytype(nextPoint, num)
} else {
return num
}
}
function setLinelength(point1, point2, p1Top2Line) {
let length = parseFloat(geometryEngine.geodesicLength(p1Top2Line.geometry, "meters").toFixed(2));
// console.log(length)
if (length >= 50) {
console.log('50米', length, p1Top2Line)
}
if (length < minlength) {
let p3, p2top3line
//所有连接到p2的点位都替换到p1并且连接线都改成连接p1除了p1本身
linelayer.forEach(item => {
if (item.attributes.nextId == point2.id && item.attributes.leftId != point1.id) {
item.attributes.nextId = point1.id;
let polyline = new Polyline({
paths: [item.geometry.paths[0][0], [point1.geometry.x, point1.geometry.y]],
})
item.set({
geometry: polyline,
})
}
if (item.attributes.leftId == point2.id) {
p3 = pointAll.filter(val => val.id == item.attributes.nextId)[0]
p2top3line = item
}
})
//p1到p2的线修改成p1到p3
let polyline = new Polyline({
paths: [p1Top2Line.geometry.paths[0][0], [p3.geometry.x, p3.geometry.y]],
})
p1Top2Line.set({
geometry: polyline,
attributes: {
...p1Top2Line.attributes,
nextId: p3.id
}
})
//p2连接到p3的线删除
self.lineLayer.remove(p2top3line)
//p2删除
self.sketchLayer.pointLayer.remove(point2)
return point1
} else {
return point2
}
}
2024-02-07 16:50:15 +08:00
},
drawPolygon(data) {
const polygon = new Polygon({
rings: data.path,
2024-12-13 13:51:04 +08:00
2024-02-07 16:50:15 +08:00
})
let graphic = new Graphic({
geometry: polygon,
attributes: data,
symbol: {
type: "simple-fill",
color: [226, 119, 40],
}
})
let editPolygonLayer = new GraphicsLayer({
graphics: [graphic],
id: 'editPolygonLayer',
fullExtent: {
spatialReference: 4326
}
})
self.map.add(editPolygonLayer)
const sketchViewModel = new SketchViewModel({
view: self.view,
layer: editPolygonLayer,
defaultUpdateOptions: {
highlightOptions: {
enabled: false,
},
enableScaling: false,
tool: 'reshape',
reshapeOptions: {
// edgeOperation :'none',
shapeOperation: 'none'
}
},
});
},
drawLine(data) {
let graphics = []
data.forEach(item => {
let line = new Polyline({
paths: item.path,
"spatialReference": self.view.spatialReference
})
let graphic = new Graphic({
geometry: line,
attributes: item,
symbol: {
type: "simple-line", // autocasts as new SimpleMarkerSymbol()
color: item.color,
width: item.width, // pixels
outline: { // autocasts as new SimpleLineSymbol()
color: [255, 255, 0],
width: 3 // points
}
},
// popupTemplate:{
// title: '管道'
// },
})
graphic.attributes.imgPoint = self.addImgbyLine(
item.path,
graphic.geometry.extent.center.x,
graphic.geometry.extent.center.y
)
graphics.push(graphic)
});
let editPolygonLayer = new GraphicsLayer({
graphics: graphics,
id: 'editPolygonLayer',
fullExtent: {
spatialReference: 4326
}
})
self.map.add(editPolygonLayer)
// const sketchViewModel = new SketchViewModel({
// view: self.view,
// layer: editPolygonLayer,
// defaultUpdateOptions: {
// highlightOptions: {
// enabled: false,
// },
// enableScaling: false,
// tool: 'reshape',
// reshapeOptions: {
// // edgeOperation :'none',
// shapeOperation: 'none'
// }
// },
// });
// sketchViewModel.on("update", onGraphicUpdate);
// function onGraphicUpdate(event) {
// // get the graphic as it is being updated
// const graphic = event.graphics[0];
// let extent = graphic.geometry.extent
// graphic.attributes.imgPoint = self.addImgbyLine(
// [[extent.xmax, extent.ymax], [extent.xmin, extent.ymin],],
// graphic.geometry.extent.center.x,
// graphic.geometry.extent.center.y,
// graphic.attributes.imgPoint
// )
// }
},
}
export default ldMap