403 lines
14 KiB
Vue
403 lines
14 KiB
Vue
<template>
|
||
<div class="mapBox" id="mapBox" ref="AMapRef"></div>
|
||
</template>
|
||
<script setup lang="tsx" name="pieChart">
|
||
import { ref, onMounted, shallowRef, watch } from "vue";
|
||
import initAMap from "@/components/AMap/AMap";
|
||
import zhongkai from "../point.js";
|
||
const AMapRef = ref();
|
||
const areas = zhongkai();
|
||
const map = shallowRef<AMap.Map>();
|
||
const props = defineProps<{
|
||
projectData: Array<any>;
|
||
}>();
|
||
const setProjectData = async () => {
|
||
console.log("setProjectData");
|
||
if (AMapRef.value) {
|
||
addMarker();
|
||
}
|
||
};
|
||
watch(() => props.projectData, setProjectData, { deep: true });
|
||
|
||
// 调用地图
|
||
const mapData = async () => {
|
||
const AMap = await initAMap();
|
||
AMapRef.value = AMap;
|
||
map.value = new AMap.Map("mapBox", {
|
||
zoom: 20,
|
||
center: [116.481181, 39.90923],
|
||
viewMode: "2D",
|
||
resizeEnable: true
|
||
// mapStyle: "amap://styles/67570a93d67b07a02ee522a2c1180be4"
|
||
});
|
||
var outer = [
|
||
new AMap.LngLat(-360, 90, true),
|
||
new AMap.LngLat(-360, -90, true),
|
||
new AMap.LngLat(360, -90, true),
|
||
new AMap.LngLat(360, 90, true)
|
||
];
|
||
var zhongkaiqu = [
|
||
[
|
||
new AMap.LngLat(114.134995, 23.051756),
|
||
new AMap.LngLat(114.14564, 23.061068),
|
||
new AMap.LngLat(114.15045, 23.066189),
|
||
new AMap.LngLat(114.15397, 23.071177),
|
||
new AMap.LngLat(114.160225, 23.086802),
|
||
new AMap.LngLat(114.164246, 23.089462),
|
||
new AMap.LngLat(114.170715, 23.090393),
|
||
new AMap.LngLat(114.18236, 23.091324),
|
||
new AMap.LngLat(114.19428, 23.094515),
|
||
new AMap.LngLat(114.20083, 23.100431),
|
||
new AMap.LngLat(114.21031, 23.113728),
|
||
new AMap.LngLat(114.22231, 23.11991),
|
||
new AMap.LngLat(114.23022, 23.123499),
|
||
new AMap.LngLat(114.24287, 23.126158),
|
||
new AMap.LngLat(114.24617, 23.128153),
|
||
new AMap.LngLat(114.25343, 23.12596),
|
||
new AMap.LngLat(114.270676, 23.128618),
|
||
new AMap.LngLat(114.277435, 23.124762),
|
||
new AMap.LngLat(114.28505, 23.124098),
|
||
new AMap.LngLat(114.297264, 23.12576),
|
||
new AMap.LngLat(114.30747, 23.132872),
|
||
new AMap.LngLat(114.31409, 23.125427),
|
||
new AMap.LngLat(114.325584, 23.11745),
|
||
new AMap.LngLat(114.32472, 23.112663),
|
||
new AMap.LngLat(114.3184, 23.109207),
|
||
new AMap.LngLat(114.313225, 23.108675),
|
||
new AMap.LngLat(114.308044, 23.105751),
|
||
new AMap.LngLat(114.30402, 23.106548),
|
||
new AMap.LngLat(114.300285, 23.095644),
|
||
new AMap.LngLat(114.31092, 23.092453),
|
||
new AMap.LngLat(114.316956, 23.088198),
|
||
new AMap.LngLat(114.31897, 23.088198),
|
||
new AMap.LngLat(114.32759, 23.086071),
|
||
new AMap.LngLat(114.33047, 23.086071),
|
||
new AMap.LngLat(114.33133, 23.086603),
|
||
new AMap.LngLat(114.33507, 23.08022),
|
||
new AMap.LngLat(114.3457, 23.080484),
|
||
new AMap.LngLat(114.34484, 23.0749),
|
||
new AMap.LngLat(114.34743, 23.073835),
|
||
new AMap.LngLat(114.35059, 23.074368),
|
||
new AMap.LngLat(114.35404, 23.069313),
|
||
new AMap.LngLat(114.359505, 23.063196),
|
||
new AMap.LngLat(114.36497, 23.063196),
|
||
new AMap.LngLat(114.36726, 23.0616),
|
||
new AMap.LngLat(114.368416, 23.059471),
|
||
new AMap.LngLat(114.37273, 23.056812),
|
||
new AMap.LngLat(114.3733, 23.055481),
|
||
new AMap.LngLat(114.376465, 23.056812),
|
||
new AMap.LngLat(114.381065, 23.057343),
|
||
new AMap.LngLat(114.383934, 23.059206),
|
||
new AMap.LngLat(114.385086, 23.062132),
|
||
new AMap.LngLat(114.38796, 23.062664),
|
||
new AMap.LngLat(114.39026, 23.06426),
|
||
new AMap.LngLat(114.39371, 23.061333),
|
||
new AMap.LngLat(114.39256, 23.060003),
|
||
new AMap.LngLat(114.394, 23.057875),
|
||
new AMap.LngLat(114.39658, 23.059206),
|
||
new AMap.LngLat(114.40032, 23.060003),
|
||
new AMap.LngLat(114.39889, 23.05628),
|
||
new AMap.LngLat(114.40061, 23.052555),
|
||
new AMap.LngLat(114.40463, 23.052023),
|
||
new AMap.LngLat(114.40291, 23.050426),
|
||
new AMap.LngLat(114.402336, 23.045904),
|
||
new AMap.LngLat(114.40032, 23.049097),
|
||
new AMap.LngLat(114.39889, 23.047234),
|
||
new AMap.LngLat(114.39486, 23.048298),
|
||
new AMap.LngLat(114.394, 23.050426),
|
||
new AMap.LngLat(114.39084, 23.048298),
|
||
new AMap.LngLat(114.38969, 23.04484),
|
||
new AMap.LngLat(114.38796, 23.042978),
|
||
new AMap.LngLat(114.39429, 23.04005),
|
||
new AMap.LngLat(114.39802, 23.039253),
|
||
new AMap.LngLat(114.3986, 23.037922),
|
||
new AMap.LngLat(114.39889, 23.034996),
|
||
new AMap.LngLat(114.40061, 23.030472),
|
||
new AMap.LngLat(114.39946, 23.028343),
|
||
new AMap.LngLat(114.401184, 23.02595),
|
||
new AMap.LngLat(114.405495, 23.02515),
|
||
new AMap.LngLat(114.40607, 23.022757),
|
||
new AMap.LngLat(114.4078, 23.021692),
|
||
new AMap.LngLat(114.40866, 23.020096),
|
||
new AMap.LngLat(114.41297, 23.017435),
|
||
new AMap.LngLat(114.414406, 23.016104),
|
||
new AMap.LngLat(114.41153, 23.013708),
|
||
new AMap.LngLat(114.41383, 23.009186),
|
||
new AMap.LngLat(114.410385, 23.006258),
|
||
new AMap.LngLat(114.40952, 23.003065),
|
||
new AMap.LngLat(114.40463, 23.004927),
|
||
new AMap.LngLat(114.40032, 23.006523),
|
||
new AMap.LngLat(114.39687, 23.005194),
|
||
new AMap.LngLat(114.39026, 23.004662),
|
||
new AMap.LngLat(114.38652, 23.005726),
|
||
new AMap.LngLat(114.384514, 23.006258),
|
||
new AMap.LngLat(114.383934, 23.006258),
|
||
new AMap.LngLat(114.38365, 23.009186),
|
||
new AMap.LngLat(114.38279, 23.011047),
|
||
new AMap.LngLat(114.38279, 23.01504),
|
||
new AMap.LngLat(114.38307, 23.020096),
|
||
new AMap.LngLat(114.38307, 23.022757),
|
||
new AMap.LngLat(114.38336, 23.025417),
|
||
new AMap.LngLat(114.37933, 23.024353),
|
||
new AMap.LngLat(114.37675, 23.022757),
|
||
new AMap.LngLat(114.37474, 23.02382),
|
||
new AMap.LngLat(114.37244, 23.022224),
|
||
new AMap.LngLat(114.36899, 23.021425),
|
||
new AMap.LngLat(114.3664, 23.021692),
|
||
new AMap.LngLat(114.36525, 23.019564),
|
||
new AMap.LngLat(114.36094, 23.016636),
|
||
new AMap.LngLat(114.35864, 23.013176),
|
||
new AMap.LngLat(114.35634, 23.009983),
|
||
new AMap.LngLat(114.35404, 23.007322),
|
||
new AMap.LngLat(114.351456, 23.007055),
|
||
new AMap.LngLat(114.346565, 23.005194),
|
||
new AMap.LngLat(114.346565, 23.00413),
|
||
new AMap.LngLat(114.34312, 23.000935),
|
||
new AMap.LngLat(114.342545, 22.998007),
|
||
new AMap.LngLat(114.34082, 22.998007),
|
||
new AMap.LngLat(114.33996, 22.995878),
|
||
new AMap.LngLat(114.33679, 22.994549),
|
||
new AMap.LngLat(114.33334, 22.994814),
|
||
new AMap.LngLat(114.33162, 22.994814),
|
||
new AMap.LngLat(114.329605, 22.995878),
|
||
new AMap.LngLat(114.329895, 22.99295),
|
||
new AMap.LngLat(114.32817, 22.988958),
|
||
new AMap.LngLat(114.32472, 22.990822),
|
||
new AMap.LngLat(114.320694, 22.990822),
|
||
new AMap.LngLat(114.31868, 22.99029),
|
||
new AMap.LngLat(114.31667, 22.987362),
|
||
new AMap.LngLat(114.31782, 22.98257),
|
||
new AMap.LngLat(114.31897, 22.981506),
|
||
new AMap.LngLat(114.32127, 22.983635),
|
||
new AMap.LngLat(114.32041, 22.980175),
|
||
new AMap.LngLat(114.320694, 22.978844),
|
||
new AMap.LngLat(114.32242, 22.978046),
|
||
new AMap.LngLat(114.32817, 22.97565),
|
||
new AMap.LngLat(114.32817, 22.971924),
|
||
new AMap.LngLat(114.33105, 22.96793),
|
||
new AMap.LngLat(114.32472, 22.967665),
|
||
new AMap.LngLat(114.32357, 22.971924),
|
||
new AMap.LngLat(114.321846, 22.972988),
|
||
new AMap.LngLat(114.3138, 22.975916),
|
||
new AMap.LngLat(114.3051, 22.978512),
|
||
new AMap.LngLat(114.29633, 22.978779),
|
||
new AMap.LngLat(114.29217, 22.977713),
|
||
new AMap.LngLat(114.28742, 22.97585),
|
||
new AMap.LngLat(114.283325, 22.973787),
|
||
new AMap.LngLat(114.28067, 22.970392),
|
||
new AMap.LngLat(114.27758, 22.9666),
|
||
new AMap.LngLat(114.27585, 22.965801),
|
||
new AMap.LngLat(114.274414, 22.964737),
|
||
new AMap.LngLat(114.2724, 22.964737),
|
||
new AMap.LngLat(114.271255, 22.961807),
|
||
new AMap.LngLat(114.2724, 22.95888),
|
||
new AMap.LngLat(114.26953, 22.958347),
|
||
new AMap.LngLat(114.26694, 22.95462),
|
||
new AMap.LngLat(114.26435, 22.949827),
|
||
new AMap.LngLat(114.26062, 22.946367),
|
||
new AMap.LngLat(114.25918, 22.942373),
|
||
new AMap.LngLat(114.258606, 22.935717),
|
||
new AMap.LngLat(114.258316, 22.932789),
|
||
new AMap.LngLat(114.25544, 22.92986),
|
||
new AMap.LngLat(114.250984, 22.924799),
|
||
new AMap.LngLat(114.2428, 22.919075),
|
||
new AMap.LngLat(114.23381, 22.921804),
|
||
new AMap.LngLat(114.223465, 22.93099),
|
||
new AMap.LngLat(114.22059, 22.939777),
|
||
new AMap.LngLat(114.22202, 22.9463),
|
||
new AMap.LngLat(114.223175, 22.95056),
|
||
new AMap.LngLat(114.22461, 22.955751),
|
||
new AMap.LngLat(114.22275, 22.957615),
|
||
new AMap.LngLat(114.22734, 22.961609),
|
||
new AMap.LngLat(114.22756, 22.968197),
|
||
new AMap.LngLat(114.22835, 22.971058),
|
||
new AMap.LngLat(114.22849, 22.97585),
|
||
new AMap.LngLat(114.228424, 22.982306),
|
||
new AMap.LngLat(114.22555, 22.986563),
|
||
new AMap.LngLat(114.22015, 22.99182),
|
||
new AMap.LngLat(114.20888, 22.992685),
|
||
new AMap.LngLat(114.20399, 22.994015),
|
||
new AMap.LngLat(114.20485, 22.996677),
|
||
new AMap.LngLat(114.20255, 22.996943),
|
||
new AMap.LngLat(114.19709, 22.996145),
|
||
new AMap.LngLat(114.193924, 22.995878),
|
||
new AMap.LngLat(114.19041, 22.999006),
|
||
new AMap.LngLat(114.186455, 22.99721),
|
||
new AMap.LngLat(114.18387, 22.994015),
|
||
new AMap.LngLat(114.178116, 22.989758),
|
||
new AMap.LngLat(114.17438, 22.988958),
|
||
new AMap.LngLat(114.17467, 22.986563),
|
||
new AMap.LngLat(114.17208, 22.9847),
|
||
new AMap.LngLat(114.169495, 22.98683),
|
||
new AMap.LngLat(114.164604, 22.983902),
|
||
new AMap.LngLat(114.16259, 22.984434),
|
||
new AMap.LngLat(114.16231, 22.987627),
|
||
new AMap.LngLat(114.15857, 22.988958),
|
||
new AMap.LngLat(114.158, 22.98603),
|
||
new AMap.LngLat(114.15541, 22.989758),
|
||
new AMap.LngLat(114.14362, 22.992418),
|
||
new AMap.LngLat(114.13902, 22.999338),
|
||
new AMap.LngLat(114.13615, 22.995613),
|
||
new AMap.LngLat(114.130684, 23.000935),
|
||
new AMap.LngLat(114.13471, 23.007322),
|
||
new AMap.LngLat(114.13413, 23.009718),
|
||
new AMap.LngLat(114.139595, 23.011047),
|
||
new AMap.LngLat(114.14104, 23.012379),
|
||
new AMap.LngLat(114.13902, 23.014507),
|
||
new AMap.LngLat(114.138664, 23.016436),
|
||
new AMap.LngLat(114.139885, 23.0185),
|
||
new AMap.LngLat(114.142685, 23.023888),
|
||
new AMap.LngLat(114.14542, 23.02921),
|
||
new AMap.LngLat(114.145706, 23.031603),
|
||
new AMap.LngLat(114.14542, 23.035461),
|
||
new AMap.LngLat(114.14341, 23.038387),
|
||
new AMap.LngLat(114.13953, 23.03759),
|
||
new AMap.LngLat(114.13263, 23.043444),
|
||
new AMap.LngLat(114.13277, 23.04929),
|
||
new AMap.LngLat(114.1332, 23.04504)
|
||
]
|
||
];
|
||
var pathArray = [outer];
|
||
pathArray.push.apply(pathArray, zhongkaiqu); // options.areas[0].path 外部区域 遮罩
|
||
var polygon = new AMap.Polygon({
|
||
path: pathArray,
|
||
map: map.value,
|
||
bubble: true,
|
||
fillColor: "#060a1d", // 多边形填充颜色
|
||
fillOpacity: 1, // 多边形填充透明度,默认为0.9
|
||
strokeColor: "#00eeff", // 线条颜色
|
||
strokeWeight: 2,
|
||
strokeOpacity: 0.5, // 轮廓线透明度,默认为0.9
|
||
strokeStyle: "dashed", // 轮廓线样式,实线:solid,虚线:dashed
|
||
strokeDasharray: [10, 2, 10]
|
||
});
|
||
// map.value.push(polygon);
|
||
};
|
||
// var opts = {
|
||
// extensions: "all",
|
||
// level: "district"
|
||
// };
|
||
// //利用行政区查询获取边界构建mask路径
|
||
// //也可以直接通过经纬度构建mask路径
|
||
// const AMap = await initAMap();
|
||
// AMapRef.value = AMap;
|
||
// map.value = new AMap.Map("mapBox", {
|
||
// viewMode: "3D",
|
||
// zoom: 5,
|
||
// zooms: [2, 22],
|
||
// center: [105.602725, 37.076636]
|
||
// // mapStyle: "amap://styles/67570a93d67b07a02ee522a2c1180be4"
|
||
// });
|
||
// var district = new AMap.DistrictSearch(opts);
|
||
// console.log(district);
|
||
// district.search("深圳市", function (status: any, result: any) {
|
||
// console.log(status, result);
|
||
// console.log(999999999);
|
||
// var bounds = result.districtList[0].boundaries;
|
||
// var polygons = [];
|
||
// if (bounds) {
|
||
// for (var i = 0, l = bounds.length; i < l; i++) {
|
||
// var outer = [
|
||
// new AMap.LngLat(-360, 90, true),
|
||
// new AMap.LngLat(-360, -90, true),
|
||
// new AMap.LngLat(360, -90, true),
|
||
// new AMap.LngLat(360, 90, true)
|
||
// ];
|
||
// var pathArray = [outer];
|
||
// pathArray.push.apply(pathArray, bounds); // options.areas[0].path 外部区域 遮罩
|
||
// console.log(pathArray);
|
||
// var polygon = new AMap.Polygon({
|
||
// path: pathArray,
|
||
// map: map.value,
|
||
// bubble: true,
|
||
// fillColor: "#FCF9F2", // 多边形填充颜色
|
||
// fillOpacity: 1, // 多边形填充透明度,默认为0.9
|
||
// strokeColor: "#00eeff", // 线条颜色
|
||
// strokeWeight: 2,
|
||
// strokeOpacity: 0.5, // 轮廓线透明度,默认为0.9
|
||
// strokeStyle: "dashed", // 轮廓线样式,实线:solid,虚线:dashed
|
||
// strokeDasharray: [10, 2, 10]
|
||
// });
|
||
// polygons.push(polygon);
|
||
// }
|
||
// // 地图自适应
|
||
// map.value.setFitView();
|
||
// }
|
||
// setMap();
|
||
// });
|
||
// };
|
||
//添加区域
|
||
const createArea = () => {
|
||
const bezierCurve = new AMapRef.value.BezierCurve({
|
||
path: areas,
|
||
isOutline: false,
|
||
outlineColor: "#f00",
|
||
borderWeight: 0,
|
||
strokeColor: "#dddddd",
|
||
strokeOpacity: 1,
|
||
strokeWeight: 2,
|
||
// 线样式还支持 'dashed'
|
||
strokeStyle: "solid",
|
||
// strokeStyle是dashed时有效
|
||
strokeDasharray: [10, 10],
|
||
lineJoin: "round",
|
||
lineCap: "round",
|
||
zIndex: 50
|
||
});
|
||
bezierCurve.setMap(map.value);
|
||
// 缩放地图到合适的视野级别
|
||
map.value?.setFitView([bezierCurve]);
|
||
};
|
||
// 地图增加坐标点
|
||
const addMarker = () => {
|
||
if (!props.projectData.length > 0) {
|
||
return;
|
||
}
|
||
const createMarkerImage = (state: string) => new URL(`../../../../../../assets/images/hzImg/xm/${state}`, import.meta.url).href;
|
||
// map.value?.clearMap();
|
||
// markerList.forEach((item: any) => {
|
||
// 创建一个 Icon
|
||
let startIcon = new AMapRef.value.Icon({
|
||
// 图标尺寸
|
||
size: new AMapRef.value.Size(52, 52),
|
||
// 图标的取图地址
|
||
image: createMarkerImage("marker.png"),
|
||
// 图标所用图片大小
|
||
imageSize: new AMapRef.value.Size(52, 52)
|
||
});
|
||
|
||
props.projectData.map(item => {
|
||
// 将 icon 传入 marker
|
||
let startMarker = new AMapRef.value.Marker({
|
||
position: new AMapRef.value.LngLat(Number(item.longitude), Number(item.latitude)),
|
||
// position: new AMapRef.value.LngLat(113, 21),
|
||
icon: startIcon,
|
||
offset: new AMapRef.value.Pixel(-13, -30)
|
||
});
|
||
map.value?.add([startMarker]);
|
||
});
|
||
// map.value?.setFitView();
|
||
// });
|
||
};
|
||
// 设置地图图层
|
||
const setMap = () => {
|
||
// 构造官方卫星、路网图层
|
||
var layers = [new AMapRef.value.TileLayer.Satellite(), new AMapRef.value.TileLayer.RoadNet()];
|
||
// 地图上设置图层
|
||
map.value.setLayers(layers);
|
||
};
|
||
onMounted(async () => {
|
||
console.log("onMounted");
|
||
await mapData();
|
||
createArea();
|
||
addMarker();
|
||
setMap();
|
||
});
|
||
</script>
|
||
<style scoped lang="scss">
|
||
.mapBox {
|
||
width: 100%;
|
||
height: 100%;
|
||
}
|
||
</style>
|