UNPKG

@vuemap/vue-amap

Version:

高德地图vue3版本封装

1 lines 12.8 kB
{"version":3,"file":"MouseTool.vue2.mjs","sources":["../../../../../packages/util/MouseTool/MouseTool.vue"],"sourcesContent":["<template>\r\n <div />\r\n</template>\r\n<script setup lang=\"ts\">\r\nimport {defineOptions} from 'vue';\r\nimport {useRegister} from \"../../../mixins\";\r\nimport {buildProps} from \"../../../utils/buildHelper\";\r\nimport type { PropType} from 'vue';\r\n\r\nexport interface TooltipText {\r\n marker?: string\r\n circle?: string\r\n rectangle?: string\r\n polyline?: string\r\n polygon?: string\r\n measureArea?: string\r\n rule?: string\r\n rectZoomIn?: string\r\n rectZoomOut?: string\r\n}\r\n\r\ndefineOptions({\r\n name: 'ElAmapMouseTool',\r\n inheritAttrs: false\r\n});\r\n\r\nconst props = defineProps(buildProps({\r\n type: {\r\n type: String as PropType<'marker' | 'circle' | 'rectangle' | 'polyline' | 'polygon' | 'measureArea' | 'rule' | 'rectZoomIn' | 'rectZoomOut'>,\r\n required: true,\r\n default: 'marker',\r\n validator: (value: string): boolean => {\r\n return ['marker', 'circle', 'rectangle', 'polyline', 'polygon', 'measureArea', 'rule', 'rectZoomIn', 'rectZoomOut'].includes(value);\r\n }\r\n }, // 类型\r\n drawOptions: {\r\n type: Object,\r\n default: () => null\r\n }, // 绘制图层的属性\r\n autoClear: {\r\n type: Boolean,\r\n default: true\r\n }, // 是否绘制结束后自动清空图层\r\n showTooltip: {\r\n type: Boolean,\r\n default: true\r\n }, // 是否显示提示信息\r\n tooltipTextMap: {\r\n type: Object as PropType<TooltipText>,\r\n default: () => null\r\n }, // 提示信息的map\r\n textOptions: {\r\n type: Object,\r\n default: () => null\r\n },\r\n drawCursor: {\r\n type: String,\r\n default: 'crosshair'\r\n }\r\n}));\r\nconst emits = defineEmits(['init','draw']);\r\n\r\nlet $amapComponent: AMap.MouseTool;\r\n\r\nlet preMapCursor = '';\r\nconst tipTexts = {\r\n marker: '单击地图选择点位',\r\n circle: '按住鼠标左键拖拽绘制圆',\r\n rectangle: '按住鼠标左键拖拽绘制矩形',\r\n polyline: '单击地图选择拐点,双击地图完成折线绘制',\r\n polygon: '单击地图选择拐点,双击地图完成多边形绘制',\r\n measureArea: '单击地图选择拐点,双击地图完成绘制并计算面积',\r\n rule: '单击地图选择拐点,右击地图完成绘制并计算距离',\r\n rectZoomIn: '按住鼠标左键拖拽绘制矩形,松开左键放大地图',\r\n rectZoomOut: '按住鼠标左键拖拽绘制矩形,松开左键放大地图',\r\n};\r\nlet isDrawing = true;\r\n\r\nconst __type = () => {\r\n if(!isDrawing){\r\n return;\r\n }\r\n const type = props.type;\r\n if($amapComponent[type]){\r\n const options = props.drawOptions || {};\r\n $amapComponent[type](options);\r\n setText(tipTexts[type]);\r\n }\r\n};\r\n\r\nconst {$$getInstance, parentInstance} = useRegister<AMap.MouseTool, AMap.Map>((options, parentComponent) => {\r\n return new Promise<AMap.MouseTool>((resolve) => {\r\n AMap.plugin(['AMap.MouseTool'], () => {\r\n if(props.tooltipTextMap){\r\n Object.assign(tipTexts, props.tooltipTextMap);\r\n }\r\n $amapComponent = new AMap.MouseTool(parentComponent);\r\n preMapCursor = parentComponent.getDefaultCursor();\r\n createTooltip();\r\n __type();\r\n bindEvent();\r\n changeMapCursor();\r\n resolve($amapComponent);\r\n });\r\n });\r\n\r\n}, {\r\n emits,\r\n watchRedirectFn: {\r\n __type\r\n },\r\n destroyComponent () {\r\n if ($amapComponent && parentInstance?.$amapComponent) {\r\n if(!parentInstance?.isDestroy){\r\n $amapComponent.close(true);\r\n revertMapCursor();\r\n if($text){\r\n parentInstance.$amapComponent.off('mousemove', getMousePosition);\r\n parentInstance.$amapComponent.remove($text);\r\n $text = null as any;\r\n }\r\n }\r\n $amapComponent = null as any;\r\n }\r\n },\r\n});\r\n\r\n\r\nlet $text: AMap.Text;\r\nconst createTooltip = () => {\r\n if(props.showTooltip){\r\n const textOptions = props.textOptions || {};\r\n textOptions.anchor = 'top-left';\r\n textOptions.clickable= false;\r\n textOptions.bubble = true;\r\n textOptions.offset = [10, 10];\r\n $text = new AMap.Text(textOptions);\r\n parentInstance?.$amapComponent.add($text);\r\n parentInstance?.$amapComponent.on('mousemove',getMousePosition);\r\n }\r\n};\r\nconst getMousePosition = (e: any) => {\r\n const lnglat = e.lnglat;\r\n $text.setPosition([lnglat.lng, lnglat.lat]);\r\n};\r\nconst setText = (content: string) => {\r\n if($text){\r\n $text.setText(content);\r\n }\r\n};\r\nconst bindEvent = () => {\r\n $amapComponent.on('draw', (e: {obj: any,type: string}) => {\r\n const type = props.type;\r\n let emitData: any;\r\n if(type === 'marker'){\r\n emitData = e.obj.getPosition().toArray();\r\n } else if (type === 'circle'){\r\n emitData = {\r\n center: e.obj.getCenter().toArray(),\r\n radius: e.obj.getRadius()\r\n };\r\n } else if (type === 'rectangle'){\r\n const bounds = e.obj.getBounds();\r\n const southWest = bounds.getSouthWest();\r\n const northEast = bounds.getNorthEast();\r\n emitData = [southWest.toArray(), northEast.toArray()];\r\n } else if (type === 'polyline'){\r\n const path = e.obj.getPath();\r\n emitData = path.map(v => v.toArray());\r\n } else if (type === 'polygon'){\r\n const path = e.obj.getPath();\r\n emitData = path.map(v => v.toArray());\r\n } else if (type === 'measureArea'){\r\n const path = e.obj.getPath().map(v => v.toArray());\r\n emitData = AMap.GeometryUtil.ringArea(path);\r\n } else if (type === 'rule'){\r\n const path = e.obj.getPath().map(v => v.toArray());\r\n emitData = AMap.GeometryUtil.distanceOfLine(path);\r\n } else if (type === 'rectZoomIn'){\r\n emitData = true;\r\n } else if (type === 'rectZoomOut'){\r\n emitData = true;\r\n }\r\n emits('draw', emitData, e.obj);\r\n if(props.autoClear){\r\n $$clear();\r\n __type();\r\n }\r\n });\r\n};\r\n\r\nconst _close = (ifClear = true) => {\r\n $amapComponent.close(ifClear);\r\n};\r\n\r\nconst $$close = (ifClear = true) => {\r\n isDrawing = false;\r\n if($amapComponent){\r\n _close(ifClear);\r\n revertMapCursor();\r\n if($text){\r\n $text.hide();\r\n }\r\n }\r\n};\r\nconst $$open = () => {\r\n isDrawing = true;\r\n changeMapCursor();\r\n __type();\r\n if($text){\r\n $text.show();\r\n }\r\n};\r\nconst $$clear = () => {\r\n _close(true);\r\n};\r\nconst changeMapCursor = () => {\r\n parentInstance?.$amapComponent.setDefaultCursor(props.drawCursor);\r\n};\r\nconst revertMapCursor = () => {\r\n if(preMapCursor){\r\n parentInstance?.$amapComponent.setDefaultCursor(preMapCursor);\r\n }\r\n};\r\n\r\ndefineExpose({\r\n $$getInstance,\r\n $$open,\r\n $$close,\r\n $$clear\r\n});\r\n\r\n</script>\r\n"],"names":[],"mappings":"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"}