百度地图--#react------react-bmapgl

2022-04-27  本文已影响0人  懒懒猫

react------react-bmapgl

项目应用实例

import React, { useEffect, useState, useRef, useContext } from 'react';
import { Map, MapvglView, MapvglLayer, InfoWindow } from 'react-bmapgl';

//样式
import Style from './index.less';

//常量
import ConfigJson from '@/assets/js/map/custom_map_config.json';

export default function MapLayer(props) {
  //初始化
  const [localInfo, setLocalInfo] = useState([]);

  //地图图层实例对象
  const carLayer = useRef(null);
  //测试运行车辆图层对象
  const mapLayer = useRef(null);
  /***********************************************************************/

  useEffect(() => {
    // 处理经纬度数据并设置
    var info = handle(props.localInfo);
    if (info.length) {
      setLocalInfo(info);
    }
  }, [props.localInfo]);

  // 处理经纬度数据
  const handle = (arr) => {
    var arr1 = [];
    arr.map((item, index) => {
      var i = [item.longitude, item.latitude];
      arr1.push(i);
    });
    return arr1;
  };

  // 根据点的数组自动调整缩放级别
  function setZoom(bPoints) {
    var map = mapLayer.current.map;
    var view = map.getViewport(eval(bPoints));
    var mapZoom = view.zoom;
    var centerPoint = view.center;
    map.centerAndZoom(centerPoint, mapZoom);
  }

  // 处理道路数据
  const createRoadLayer = () => {
    // 处理道路数据
    let data = [];
    data = [
      {
        geometry: {
          type: 'LineString',
          coordinates: localInfo,
        },
      },
    ];

    // 将处理过的道路数据抛出
    return data;
  };

  return (
    <div id={Style.MapLayer}>
      {localInfo.length ? (
        <Map
          ref={(ref) => {
            mapLayer.current = ref;

            // 百度坐标系坐标(地图中需要使用这个)
            if (mapLayer.current) {
              var len = localInfo.length;
              var bPoints = new Array();
              for (var i = 0; i < len; i++) {
                // 添加到百度坐标数组 用于自动调整缩放级别
                bPoints.push({
                  lng: localInfo[i][0],
                  lat: localInfo[i][1],
                });
              }
              // 根据点的数组自动调整缩放级别
              setZoom(bPoints);
            }
          }}
          mapStyleV2={{ styleJson: ConfigJson }}
          style={{
            width: 700,
            height: 360,
          }}
          tilt={0}
          heading={0}
          enableRotate={false}
          enableTilt={false}
          enableScrollWheelZoom={true}
        >
          {/* 地图图层管理器组件 */}
          <MapvglView>
            {/* 测试道路图层 */}
            <MapvglLayer
              type="LineLayer"
              data={createRoadLayer()}
              options={{
                width: 10,
                color: '#549CCB',
                style: 'road',
                renderOrder: 0,
              }}
            />
          </MapvglView>
        </Map>
      ) : (
        '-'
      )}
      {/* 地图*/}
    </div>
  );
}

上一篇下一篇

猜你喜欢

热点阅读