|
|
|
import pin19be6b from '/@/assets/icons/pin-19be6b.svg'
|
|
|
|
import pin212121 from '/@/assets/icons/pin-212121.svg'
|
|
|
|
import pin2d8cf0 from '/@/assets/icons/pin-2d8cf0.svg'
|
|
|
|
import pinb620e0 from '/@/assets/icons/pin-b620e0.svg'
|
|
|
|
import pine23c39 from '/@/assets/icons/pin-e23c39.svg'
|
|
|
|
import pineffbb00 from '/@/assets/icons/pin-ffbb00.svg'
|
|
|
|
import { getRoot } from '/@/root'
|
|
|
|
import rootStore from '/@/store'
|
|
|
|
import { GeojsonCoordinate } from '/@/types/map'
|
|
|
|
|
|
|
|
export function useGMapCover () {
|
|
|
|
const root = getRoot()
|
|
|
|
const AMap = root.$aMap
|
|
|
|
|
|
|
|
const normalColor = '#2D8CF0'
|
|
|
|
const store = rootStore
|
|
|
|
const coverList = store.state.coverList
|
|
|
|
|
|
|
|
function AddCoverToMap (cover :any) {
|
|
|
|
root.$map.add(cover)
|
|
|
|
coverList.push(cover)
|
|
|
|
// console.log('coverList:', store.state.coverList)
|
|
|
|
}
|
|
|
|
|
|
|
|
function getPinIcon (color?:string) {
|
|
|
|
// console.log('color', color)
|
|
|
|
const colorObj: {
|
|
|
|
[key: number| string]: any
|
|
|
|
} = {
|
|
|
|
'2d8cf0': pin2d8cf0,
|
|
|
|
'19be6b': pin19be6b,
|
|
|
|
'212121': pin212121,
|
|
|
|
'b620e0': pinb620e0,
|
|
|
|
'e23c39': pine23c39,
|
|
|
|
'ffbb00': pineffbb00,
|
|
|
|
}
|
|
|
|
const iconName = (color?.replaceAll('#', '') || '').toLocaleLowerCase()
|
|
|
|
return new AMap.Icon({
|
|
|
|
// size: new AMap.Size(40, 50),
|
|
|
|
image: colorObj[iconName],
|
|
|
|
// imageOffset: new AMap.Pixel(0, -60),
|
|
|
|
// imageSize: new AMap.Size(40, 50)
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
function init2DPin (name: string, coordinates:GeojsonCoordinate, color?:string, data?:{}) {
|
|
|
|
console.log(name, coordinates[0], coordinates[1], color, data)
|
|
|
|
const pin = new AMap.Marker({
|
|
|
|
position: new AMap.LngLat(coordinates[0], coordinates[1]),
|
|
|
|
title: name,
|
|
|
|
icon: getPinIcon(color),
|
|
|
|
// strokeColor: color || normalColor,
|
|
|
|
// fillColor: color || normalColor,
|
|
|
|
extData: data
|
|
|
|
})
|
|
|
|
// console.log('coordinates pin', pin)
|
|
|
|
AddCoverToMap(pin)
|
|
|
|
}
|
|
|
|
|
|
|
|
function AddOverlayGroup (overlayGroup) {
|
|
|
|
root.$map.add(overlayGroup)
|
|
|
|
coverList.push(overlayGroup)
|
|
|
|
}
|
|
|
|
function initPolyline (name: string, coordinates:GeojsonCoordinate[], color?:string, data?:{}) {
|
|
|
|
const path = [] as GeojsonCoordinate[]
|
|
|
|
coordinates.forEach(coordinate => {
|
|
|
|
path.push(new AMap.LngLat(coordinate[0], coordinate[1]))
|
|
|
|
})
|
|
|
|
const polyline = new AMap.Polyline({
|
|
|
|
path: path,
|
|
|
|
strokeColor: color || normalColor,
|
|
|
|
strokeOpacity: 1,
|
|
|
|
strokeWeight: 2,
|
|
|
|
strokeStyle: 'solid',
|
|
|
|
extData: data
|
|
|
|
// draggable: true,
|
|
|
|
})
|
|
|
|
AddOverlayGroup(polyline)
|
|
|
|
}
|
|
|
|
|
|
|
|
function initPolygon (name: string, coordinates:GeojsonCoordinate[], color?:string, data?:{}) {
|
|
|
|
const path = [] as GeojsonCoordinate[]
|
|
|
|
coordinates.forEach(coordinate => {
|
|
|
|
path.push(new AMap.LngLat(coordinate[0], coordinate[1]))
|
|
|
|
})
|
|
|
|
// console.log('Polygon', path)
|
|
|
|
const Polygon = new AMap.Polygon({
|
|
|
|
path: path,
|
|
|
|
strokeOpacity: 1,
|
|
|
|
strokeWeight: 2,
|
|
|
|
fillColor: color || normalColor,
|
|
|
|
fillOpacity: 0.4,
|
|
|
|
// draggable: true,
|
|
|
|
strokeColor: color || normalColor,
|
|
|
|
extData: data
|
|
|
|
})
|
|
|
|
AddOverlayGroup(Polygon)
|
|
|
|
}
|
|
|
|
|
|
|
|
function removeCoverFromMap (id:string) {
|
|
|
|
for (let i = 0; i < coverList.length; i++) {
|
|
|
|
const ele = coverList[i]
|
|
|
|
// console.log(ele)
|
|
|
|
const extdata = ele?.getExtData()
|
|
|
|
if (extdata?.id === id) {
|
|
|
|
console.log(extdata)
|
|
|
|
root.$map.remove(ele)
|
|
|
|
coverList.slice(i, 1)
|
|
|
|
break
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function getElementFromMap (id:string) {
|
|
|
|
// console.log('start', new Date().getTime())
|
|
|
|
const ele = coverList.find(ele => ele?.getExtData().id === id)
|
|
|
|
// console.log('end', new Date().getTime())
|
|
|
|
return ele
|
|
|
|
// coverList.forEach((ele:any) => {
|
|
|
|
// const extdata = ele?.getExtData()
|
|
|
|
// // console.log(extdata)
|
|
|
|
// if (extdata?.id === id) {
|
|
|
|
// return ele
|
|
|
|
// }
|
|
|
|
// })
|
|
|
|
}
|
|
|
|
|
|
|
|
function updatePinElement (id:string, name: string, coordinates:GeojsonCoordinate, color?:string) {
|
|
|
|
const element = getElementFromMap(id) as any
|
|
|
|
if (element) {
|
|
|
|
const icon = getPinIcon(color)
|
|
|
|
element.setPosition(new AMap.LngLat(coordinates[0], coordinates[1]))
|
|
|
|
element.setIcon(icon)
|
|
|
|
element.setTitle(name)
|
|
|
|
} else {
|
|
|
|
// console.log('into init PIN')
|
|
|
|
init2DPin(name, coordinates, color, {
|
|
|
|
id: id,
|
|
|
|
name: name
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return {
|
|
|
|
init2DPin,
|
|
|
|
initPolyline,
|
|
|
|
initPolygon,
|
|
|
|
removeCoverFromMap,
|
|
|
|
getElementFromMap,
|
|
|
|
updatePinElement
|
|
|
|
}
|
|
|
|
}
|