|
@@ -1,172 +0,0 @@
|
|
|
-'use client'
|
|
|
|
|
-declare const window: Window & typeof globalThis & {
|
|
|
|
|
- BMapGL: any;
|
|
|
|
|
- initMap:() => void;
|
|
|
|
|
-};
|
|
|
|
|
-import React, {useEffect, useRef, useState} from 'react';
|
|
|
|
|
-import deom1 from "./assets/deom1.png";
|
|
|
|
|
-import deom2 from "./assets/deom2.png";
|
|
|
|
|
-import Uptow from "./assets/up-two.png";
|
|
|
|
|
-import markerData from "./assets/markerData.json";
|
|
|
|
|
-import fameng from "./assets/fameng.png";
|
|
|
|
|
-import shuifa from "./assets/shuifa.png";
|
|
|
|
|
-import dataJson from "./assets/index.json";
|
|
|
|
|
-import "./assets/BaiduMapPage.css";
|
|
|
|
|
-
|
|
|
|
|
-function GisMap(props:{height:string}) {
|
|
|
|
|
-
|
|
|
|
|
- // const BaiduMapPage = () => {
|
|
|
|
|
- const mapRef = useRef(null);
|
|
|
|
|
- const [map, setMap] = useState<{ destroy: () => void}>();
|
|
|
|
|
- var lineLayer: {
|
|
|
|
|
- setData: (arg0: {
|
|
|
|
|
- type: string;
|
|
|
|
|
- features: {
|
|
|
|
|
- type: string;
|
|
|
|
|
- properties: { name: string; };
|
|
|
|
|
- geometry: { type: string; coordinates: number[][]; };
|
|
|
|
|
- }[];
|
|
|
|
|
- }) => void;
|
|
|
|
|
- };
|
|
|
|
|
- var icon1 = deom1.src;
|
|
|
|
|
- var icon2 = deom2.src;
|
|
|
|
|
- var upTwo = Uptow.src;
|
|
|
|
|
- // 初始化地图
|
|
|
|
|
- useEffect(() => {
|
|
|
|
|
- // 检查是否已加载百度地图 GL JS API
|
|
|
|
|
- if (!window.BMapGL) {
|
|
|
|
|
- // 动态加载百度地图 GL JS API
|
|
|
|
|
- const script = document.createElement('script');
|
|
|
|
|
- script.src = `https://api.map.baidu.com/api?v=2.0&ak=jWDCUpsk33htQsF6IEwk4ctkERTOFFH0&type=webgl`;
|
|
|
|
|
- script.async = true;
|
|
|
|
|
- document.head.appendChild(script);
|
|
|
|
|
-
|
|
|
|
|
- window.initMap = () => {
|
|
|
|
|
- initializeMap();
|
|
|
|
|
- };
|
|
|
|
|
- } else {
|
|
|
|
|
- initializeMap();
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- return () => {
|
|
|
|
|
- // 清理工作
|
|
|
|
|
- if (map) {
|
|
|
|
|
- map.destroy();
|
|
|
|
|
- }
|
|
|
|
|
- };
|
|
|
|
|
- }, []);
|
|
|
|
|
-
|
|
|
|
|
- const initializeMap = () => {
|
|
|
|
|
- // 创建地图实例
|
|
|
|
|
- const mapInstance = new window.BMapGL.Map(mapRef.current);
|
|
|
|
|
- // 设置中心点坐标(北京)
|
|
|
|
|
- const point = new window.BMapGL.Point(110.39573035064166, 28.44628067667752);
|
|
|
|
|
- mapInstance.centerAndZoom(point, 16);
|
|
|
|
|
- // 启用滚轮放大缩小
|
|
|
|
|
- mapInstance.enableScrollWheelZoom(true);
|
|
|
|
|
-
|
|
|
|
|
- // 添加控件
|
|
|
|
|
- mapInstance.setMinZoom(16);
|
|
|
|
|
- mapInstance.setMaxZoom(19);
|
|
|
|
|
- mapInstance.setMapStyleV2({
|
|
|
|
|
- styleId: '62ce43ad2a1362c23e612b783d7406e7'
|
|
|
|
|
- });
|
|
|
|
|
-
|
|
|
|
|
- markerData.list.dataOne.forEach(item => {
|
|
|
|
|
- const icon = new window.BMapGL.Icon(fameng.src, new window.BMapGL.Size(23, 25), {
|
|
|
|
|
- anchor: new window.BMapGL.Size(10, 25),
|
|
|
|
|
- });
|
|
|
|
|
- const markers = new window.BMapGL.Point(item.lng, item.lat);
|
|
|
|
|
- const marker = new window.BMapGL.Marker(markers, {
|
|
|
|
|
- icon: icon
|
|
|
|
|
- });
|
|
|
|
|
- mapInstance.addOverlay(marker);
|
|
|
|
|
-
|
|
|
|
|
- // 创建信息窗口
|
|
|
|
|
- let opts = {
|
|
|
|
|
- width: 300,
|
|
|
|
|
- title: item.name
|
|
|
|
|
- };
|
|
|
|
|
- let infoWindow = new window.BMapGL.InfoWindow("倾斜角度:" + '188deg' + "<br/>" +
|
|
|
|
|
- "状态:" + '正常运行' + "<br/>" +
|
|
|
|
|
- "信噪比:" + '16db' + "<br/>" +
|
|
|
|
|
- "负责人:" + '张三' + "<br/>" +
|
|
|
|
|
- "联系方式:" + '121234564', opts);
|
|
|
|
|
- // 点标记添加点击事件
|
|
|
|
|
- marker.addEventListener('click', function () {
|
|
|
|
|
- mapInstance.openInfoWindow(infoWindow, markers); // 开启信息窗口
|
|
|
|
|
- });
|
|
|
|
|
- })
|
|
|
|
|
-
|
|
|
|
|
- markerData.list.dataTwo.forEach(item => {
|
|
|
|
|
- const icon = new window.BMapGL.Icon(shuifa.src, new window.BMapGL.Size(23, 25), {
|
|
|
|
|
- anchor: new window.BMapGL.Size(20, 0),
|
|
|
|
|
- });
|
|
|
|
|
- const markers = new window.BMapGL.Point(item.lng, item.lat);
|
|
|
|
|
- const marker = new window.BMapGL.Marker(markers, {
|
|
|
|
|
- icon: icon
|
|
|
|
|
- });
|
|
|
|
|
- mapInstance.addOverlay(marker);
|
|
|
|
|
-
|
|
|
|
|
- // 创建信息窗口
|
|
|
|
|
- let opts = {
|
|
|
|
|
- width: 300,
|
|
|
|
|
- title: item.name
|
|
|
|
|
- };
|
|
|
|
|
- let infoWindow = new window.BMapGL.InfoWindow("倾斜角度:" + '188deg' + "<br/>" +
|
|
|
|
|
- "状态:" + '正常运行' + "<br/>" +
|
|
|
|
|
- "信噪比:" + '16db' + "<br/>" +
|
|
|
|
|
- "负责人:" + '张三' + "<br/>" +
|
|
|
|
|
- "联系方式:" + '121234564', opts);
|
|
|
|
|
- // 点标记添加点击事件
|
|
|
|
|
- marker.addEventListener('click', function () {
|
|
|
|
|
- mapInstance.openInfoWindow(infoWindow, markers); // 开启信息窗口
|
|
|
|
|
- });
|
|
|
|
|
- })
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
- if (!lineLayer) {
|
|
|
|
|
- lineLayer = new window.BMapGL.LineLayer({
|
|
|
|
|
- enablePicked: true,
|
|
|
|
|
- autoSelect: true,
|
|
|
|
|
- pickWidth: 30,
|
|
|
|
|
- pickHeight: 30,
|
|
|
|
|
- opacity: 1,
|
|
|
|
|
- selectedColor: 'blue', // 选中项颜色
|
|
|
|
|
- style: {
|
|
|
|
|
- sequence: false, // 是否采用间隔填充纹理,默认false
|
|
|
|
|
- marginLength: 18, // 间隔距离,默认16,单位像素
|
|
|
|
|
- // borderColor: '#999',
|
|
|
|
|
- borderMask: true, // 是否受内部填充区域掩膜,默认true,如果存在borderWeight小于0,则自动切换false
|
|
|
|
|
- // borderWeight: ['match', ['get', 'name'], 'demo1', 2, 0], // 描边宽度,可以设置负值
|
|
|
|
|
- strokeWeight: 10, // 描边线宽度,默认0
|
|
|
|
|
- strokeLineJoin: 'round',//描边线连接处类型, 可选'miter', 'round', 'bevel'
|
|
|
|
|
- strokeLineCap: 'round',// 描边线端头类型,可选'round', 'butt', 'square',默认round
|
|
|
|
|
- // 填充纹理图片地址,默认是空。图片需要是竖向表达,在填充时会自动横向处理。
|
|
|
|
|
- strokeTextureUrl: ['match', ['get', 'name'], 'demo1', icon1, 'demo2', icon2, upTwo],
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
- }
|
|
|
|
|
- lineLayer.setData(dataJson);
|
|
|
|
|
- mapInstance.addNormalLayer(lineLayer);
|
|
|
|
|
-
|
|
|
|
|
- setMap(mapInstance);
|
|
|
|
|
- // 添加点击地图事件
|
|
|
|
|
- mapInstance.addEventListener('click', (e: any) => {
|
|
|
|
|
- console.log('点击位置经纬度:', e.latlng.lng, e.latlng.lat);
|
|
|
|
|
- });
|
|
|
|
|
- // };
|
|
|
|
|
- };
|
|
|
|
|
-
|
|
|
|
|
- return (
|
|
|
|
|
- <>
|
|
|
|
|
- <div className="flex flex-col font-sans" style={{height: props.height+"vh"}}>
|
|
|
|
|
- <div className="flex flex-1 overflow-hidden">
|
|
|
|
|
- <div ref={mapRef} className="flex-1 h-full"></div>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- </>
|
|
|
|
|
- );
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-export default GisMap;
|
|
|