Newer
Older
BRIDGE_MAINTAIN / src / utils / maputils.js
import * as L from 'leaflet'
// 计算坐标集合中的最大最小经纬度
export function getPathBounds(points) {
  const lngs = points.map(item => item[1])
  const lats = points.map(item => item[0])
  const maxLng = Math.max(...lngs)
  const minLng = Math.min(...lngs)
  const maxLat = Math.max(...lats)
  const minLat = Math.min(...lats)
  return { maxLng, minLng, maxLat, minLat }
}
// 根据范围计算中心坐标
export function getCenterByBounds(bounds) {
  const { maxLng, minLng, maxLat, minLat } = bounds
  const cenLng = (parseFloat(maxLng) + parseFloat(minLng)) / 2
  const cenLat = (parseFloat(maxLat) + parseFloat(minLat)) / 2
  return { cenLat, cenLng }
}

// 根据范围计算缩放级别
export function getZoomByBounds(bounds) {
  const { maxLng, minLng, maxLat, minLat } = bounds
  const zoom = ['50', '100', '200', '500', '1000', '2000', '5000', '10000', '20000', '25000', '50000', '100000', '200000', '500000', '1000000', '2000000']// 级别18到3。
  // 计算左上角和右下角距离
  const minPoint = L.latLng(minLat, minLng)
  const maxPoint = L.latLng(maxLat, maxLng)
  var distance = maxPoint.distanceTo(minPoint)
  for (var i = 0, zoomLen = zoom.length; i < zoomLen; i++) {
    if (zoom[i] - distance > 0) {
      console.log(i)
      return 18 - i + 2 // 之所以会多2,是因为地图范围常常是比例尺距离的10倍以上。所以级别会增加3。
    }
  }
  return 13
}