|
@@ -8,6 +8,7 @@ import AMapLoader from "@amap/amap-jsapi-loader";
|
|
import eventBus from "@/api/eventBus";
|
|
import eventBus from "@/api/eventBus";
|
|
import { convertPointToArray } from "@/utils/index";
|
|
import { convertPointToArray } from "@/utils/index";
|
|
import { deepClone } from "@/common/commonFun";
|
|
import { deepClone } from "@/common/commonFun";
|
|
|
|
+import wellknown from 'wellknown';
|
|
import {base_img_url,base_img_url3} from "@/api/config";
|
|
import {base_img_url,base_img_url3} from "@/api/config";
|
|
|
|
|
|
const map = ref(null);
|
|
const map = ref(null);
|
|
@@ -51,7 +52,7 @@ const initMap = async () => {
|
|
// 创建地图实例
|
|
// 创建地图实例
|
|
map.value = new AMap.Map("map-container", {
|
|
map.value = new AMap.Map("map-container", {
|
|
zoom: 18, // 初始缩放级别
|
|
zoom: 18, // 初始缩放级别
|
|
- center: [113.6149629 ,23.58594117],
|
|
|
|
|
|
+ center: [111.01055729572, 21.7743543],
|
|
layers: [
|
|
layers: [
|
|
// 天地图卫星
|
|
// 天地图卫星
|
|
new AMap.TileLayer({
|
|
new AMap.TileLayer({
|
|
@@ -142,12 +143,14 @@ const initData = (data) =>{
|
|
item.icon.on('click', () => {
|
|
item.icon.on('click', () => {
|
|
mapEventType.value = 'click'
|
|
mapEventType.value = 'click'
|
|
if(item.type === 'defalutIcon'){
|
|
if(item.type === 'defalutIcon'){
|
|
- item.icon.setContent(createMarkerImg());
|
|
|
|
- item.icon.setOffset(new window.AMap.Pixel(-18, -18))
|
|
|
|
- item.type = 'activeIcon'
|
|
|
|
- const arr = pointList.value.filter(ele => ele.id === item.id)
|
|
|
|
- if(arr.length===0){
|
|
|
|
- pointList.value.push(item)
|
|
|
|
|
|
+ if (startDraw.value) {
|
|
|
|
+ item.icon.setContent(createMarkerImg());
|
|
|
|
+ item.icon.setOffset(new window.AMap.Pixel(-18, -18))
|
|
|
|
+ item.type = 'activeIcon'
|
|
|
|
+ const arr = pointList.value.filter(ele => ele.id === item.id)
|
|
|
|
+ if(arr.length===0){
|
|
|
|
+ pointList.value.push(item)
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}else{
|
|
}else{
|
|
item.icon.setContent(createMarkerContent(item.color));
|
|
item.icon.setContent(createMarkerContent(item.color));
|
|
@@ -173,11 +176,30 @@ const initData = (data) =>{
|
|
setTimeout(()=>{
|
|
setTimeout(()=>{
|
|
map.value.setFitView(null, false, [0, 0, 0, 0]);
|
|
map.value.setFitView(null, false, [0, 0, 0, 0]);
|
|
},100)
|
|
},100)
|
|
|
|
+ // 范围
|
|
|
|
+ // const p1 = [
|
|
|
|
+ // [111.00745562137854, 21.77564355219471],
|
|
|
|
+ // [111.00982318507914, 21.77557930674749],
|
|
|
|
+ // [111.01133652227907, 21.776531091149934],
|
|
|
|
+ // [111.0125762214629, 21.775945743742568],
|
|
|
|
+ // [111.01290458708189, 21.775241423284797],
|
|
|
|
+ // [111.01341617119812, 21.773759019078113],
|
|
|
|
+ // [111.01320915809049, 21.77329502418189],
|
|
|
|
+ // [111.01209794980082, 21.772538355582128],
|
|
|
|
+ // [111.01117233946951, 21.772414623609905],
|
|
|
|
+ // [111.00909744947245, 21.772878618505956],
|
|
|
|
+ // [111.00744610353439, 21.774094523079953],
|
|
|
|
+ // [111.00745562137854, 21.77564355219471]
|
|
|
|
+ // ]
|
|
|
|
+ // addPolygon(p1)
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+const startDraw = ref(false)
|
|
// 开始框选
|
|
// 开始框选
|
|
const startRectangleSelection = () => {
|
|
const startRectangleSelection = () => {
|
|
if (mouseTool.value) {
|
|
if (mouseTool.value) {
|
|
|
|
+ startDraw.value = true
|
|
mouseTool.value.rectangle({
|
|
mouseTool.value.rectangle({
|
|
strokeColor: "#ffffff", // 框选区域边框颜色
|
|
strokeColor: "#ffffff", // 框选区域边框颜色
|
|
strokeOpacity: 1, // 边框透明度
|
|
strokeOpacity: 1, // 边框透明度
|
|
@@ -234,7 +256,30 @@ function getSelectPoint(){
|
|
return arr
|
|
return arr
|
|
}
|
|
}
|
|
|
|
|
|
-defineExpose({getSelectPoint,initData,startRectangleSelection,stopDrawRectangle,clearSelection})
|
|
|
|
|
|
+function getRegionList(farmId) {
|
|
|
|
+ VE_API.region.list({farmId}).then(({data}) =>{
|
|
|
|
+ data.map(item => {
|
|
|
|
+ addPolygon(wktToAmapPolygon(item.wkt))
|
|
|
|
+ })
|
|
|
|
+ })
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function addPolygon(data) {
|
|
|
|
+ console.log('dddddd', data);
|
|
|
|
+ let polygon = new window.AMap.Polygon({
|
|
|
|
+ path: data,
|
|
|
|
+ fillColor: '#FFE17E',
|
|
|
|
+ strokeOpacity: 1,
|
|
|
|
+ fillOpacity: 0.1,
|
|
|
|
+ strokeColor: 'rgba(255, 255, 255, 0.3)',
|
|
|
|
+ strokeWeight: 1,
|
|
|
|
+ strokeStyle: 'solid',
|
|
|
|
+ // strokeDasharray: [5, 5],
|
|
|
|
+ });
|
|
|
|
+ map.value.add(polygon)
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+defineExpose({getSelectPoint,initData,startRectangleSelection,stopDrawRectangle,clearSelection, getRegionList})
|
|
|
|
|
|
// 组件挂载时初始化地图
|
|
// 组件挂载时初始化地图
|
|
onMounted(() => {
|
|
onMounted(() => {
|
|
@@ -244,6 +289,17 @@ onMounted(() => {
|
|
onUnmounted(()=>{
|
|
onUnmounted(()=>{
|
|
map.value.destroy()// 销毁地图实例以释放资源
|
|
map.value.destroy()// 销毁地图实例以释放资源
|
|
})
|
|
})
|
|
|
|
+
|
|
|
|
+function wktToAmapPolygon(wkt) {
|
|
|
|
+ const geoJSON = wellknown.parse(wkt);
|
|
|
|
+ if (!geoJSON || geoJSON.type !== 'MultiPolygon') {
|
|
|
|
+ console.error('Invalid WKT or not a MULTIPOLYGON');
|
|
|
|
+ return [];
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // MULTIPOLYGON 的坐标结构:[[[ [环1], [环2], ... ]]],取第一个环
|
|
|
|
+ return geoJSON.coordinates[0][0].map(coord => [coord[0], coord[1]]);
|
|
|
|
+}
|
|
</script>
|
|
</script>
|
|
|
|
|
|
<style scoped>
|
|
<style scoped>
|