2023-07-14 18:44:39 +08:00

403 lines
14 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<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>