|
@@ -0,0 +1,86 @@
|
|
|
+import { LatLng, Point } from 'leaflet';
|
|
|
+import MyMap from '../Map';
|
|
|
+
|
|
|
+export default class CoordinateConversion {
|
|
|
+ /**
|
|
|
+ * 将地理坐标投影到给定缩放的像素坐标中。
|
|
|
+ * @param {[lat: number, lng: number]} latlng - 经纬度
|
|
|
+ * @returns {[x:number, y:number]} - 像素点坐标
|
|
|
+ */
|
|
|
+ static latLngToPoint(latlng){
|
|
|
+ if(!MyMap.map){ console.error("请先初始化地图!"); }
|
|
|
+ let ll = new LatLng(latlng.lat, latlng.lng);
|
|
|
+ let p = MyMap.map.latLngToLayerPoint(ll);
|
|
|
+ return {x: p.x, y: p.y};
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * latLngToPoint的倒数。 将给定缩放上的像素坐标投影到地理坐标中。
|
|
|
+ * @param {[x:number, y:number]} point - 像素点坐标
|
|
|
+ * @returns {[lat: number, lng: number]} - 经纬度
|
|
|
+ */
|
|
|
+ static pointToLatLng(point){
|
|
|
+ if(!MyMap.map){ console.error("请先初始化地图!"); }
|
|
|
+ let p = new Point(point.x, point.y);
|
|
|
+ let ll = MyMap.map.layerPointToLatLng(p);
|
|
|
+ return {lat: ll.lat, lng: ll.lng};
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 将地理坐标投影为接受单位的坐标 此 CRS(例如 EPSG:3857 的仪表,用于将其传递给 WMS 服务)。
|
|
|
+ * @param {[lat: number, lng: number]} latlng - 经纬度
|
|
|
+ * @param {number} zoom - 缩放级别
|
|
|
+ * @returns {[x:number, y:number]} - 像素点坐标
|
|
|
+ */
|
|
|
+ static project(latlng, zoom){
|
|
|
+ if(!MyMap.map){ console.error("请先初始化地图!"); }
|
|
|
+ return MyMap.map.project(latlng, zoom);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 给定一个投影坐标返回相应的 LatLng。。
|
|
|
+ * @param {[x:number, y:number]} latlng - 像素点坐标
|
|
|
+ * @param {number} zoom - 缩放级别
|
|
|
+ * @returns {[lat: number, lng: number]} - 经纬度
|
|
|
+ */
|
|
|
+ static unproject(point, zoom){
|
|
|
+ if(!MyMap.map){ console.error("请先初始化地图!"); }
|
|
|
+ return MyMap.map.unproject(point, zoom);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 返回将投影坐标转换为特定缩放的像素坐标时使用的比例。
|
|
|
+ * @param {number} toZoom - 缩放级别
|
|
|
+ * @param {number} fromZoom - 缩放级别
|
|
|
+ * @returns {number} - 比例因子
|
|
|
+ */
|
|
|
+ static scale(toZoom, fromZoom){
|
|
|
+ if(!MyMap.map){ console.error("请先初始化地图!"); }
|
|
|
+ return MyMap.map.getZoomScale(toZoom, fromZoom);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 返回与 scale的比例因子对应的缩放级别。
|
|
|
+ * @param {number} scale - 比例因子
|
|
|
+ * @param {number} fromZoom - 缩放级别
|
|
|
+ * @returns {number} - 缩放级别
|
|
|
+ */
|
|
|
+ static zoom(scale, fromZoom){
|
|
|
+ if(!MyMap.map){ console.error("请先初始化地图!"); }
|
|
|
+ return MyMap.map.getScaleZoom(scale, fromZoom);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 返回两个地理坐标之间的距离
|
|
|
+ * @param {[lat: number, lng: number]} latlng1 - 经纬度1
|
|
|
+ * @param {[lat: number, lng: number]} latlng2 - 经纬度2
|
|
|
+ * @returns {number} - 距离(单位:米)
|
|
|
+ */
|
|
|
+ static distance(latlng1, latlng2){
|
|
|
+ if(!MyMap.map){ console.error("请先初始化地图!"); }
|
|
|
+ let ll1 = new LatLng(latlng1.lat, latlng1.lng);
|
|
|
+ let ll2 = new LatLng(latlng2.lat, latlng2.lng);
|
|
|
+ // let distance = ll1.distanceTo(ll2) / 1000;
|
|
|
+ return MyMap.map.distance(ll1, ll2);
|
|
|
+ }
|
|
|
+}
|