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 }