|
@@ -1,7 +1,7 @@
|
|
import { LatLng, Point } from 'leaflet';
|
|
import { LatLng, Point } from 'leaflet';
|
|
import MyMap from '../Map';
|
|
import MyMap from '../Map';
|
|
|
|
|
|
-export default class CoordinateConversion {
|
|
|
|
|
|
+export default class MapUtil {
|
|
/**
|
|
/**
|
|
* 给定地理坐标,转换为相对于origin pixel的相应像素坐标。(在地图上进行位置叠加时比较有用)
|
|
* 给定地理坐标,转换为相对于origin pixel的相应像素坐标。(在地图上进行位置叠加时比较有用)
|
|
* @param {{lat: number, lng: number}} latlng - 经纬度
|
|
* @param {{lat: number, lng: number}} latlng - 经纬度
|
|
@@ -58,7 +58,8 @@ export default class CoordinateConversion {
|
|
*/
|
|
*/
|
|
static project(latlng, zoom){
|
|
static project(latlng, zoom){
|
|
if(!MyMap.map){ console.error("请先初始化地图!"); return; }
|
|
if(!MyMap.map){ console.error("请先初始化地图!"); return; }
|
|
- return MyMap.map.project(latlng, zoom);
|
|
|
|
|
|
+ let p = MyMap.map.project(latlng, zoom);
|
|
|
|
+ return {x: p.x, y: p.y};
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -69,7 +70,8 @@ export default class CoordinateConversion {
|
|
*/
|
|
*/
|
|
static unproject(point, zoom){
|
|
static unproject(point, zoom){
|
|
if(!MyMap.map){ console.error("请先初始化地图!"); return; }
|
|
if(!MyMap.map){ console.error("请先初始化地图!"); return; }
|
|
- return MyMap.map.unproject(point, zoom);
|
|
|
|
|
|
+ let ll = MyMap.map.unproject(point, zoom);
|
|
|
|
+ return {lat: ll.lat, lng: ll.lng};
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -107,4 +109,25 @@ export default class CoordinateConversion {
|
|
// let distance = ll1.distanceTo(ll2) / 1000;
|
|
// let distance = ll1.distanceTo(ll2) / 1000;
|
|
return MyMap.map.distance(ll1, ll2);
|
|
return MyMap.map.distance(ll1, ll2);
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 地理坐标移动x,y距离后的地理坐标
|
|
|
|
+ * @param {{lat: number, lng: number}} latlng - 经纬度
|
|
|
|
+ * @param {number} distX - x移动距离(单位:米)
|
|
|
|
+ * @param {number} distY - y移动距离(单位:米)
|
|
|
|
+ * @returns {{lat: number, lng: number}} - 经纬度
|
|
|
|
+ */
|
|
|
|
+ static moveLatLng(latlng, distX, distY) {
|
|
|
|
+ const R = 6378137; // Radius of the Earth in meters
|
|
|
|
+
|
|
|
|
+ // Convert distances from meters to radians
|
|
|
|
+ const dLat = distY / R;
|
|
|
|
+ const dLng = distX / (R * Math.cos(latlng.lat * Math.PI / 180));
|
|
|
|
+
|
|
|
|
+ // Calculate new latitude and longitude
|
|
|
|
+ const newLat = latlng.lat + (dLat * 180 / Math.PI);
|
|
|
|
+ const newLng = latlng.lng + (dLng * 180 / Math.PI);
|
|
|
|
+
|
|
|
|
+ return {lat: newLat, lng: newLng};
|
|
|
|
+ }
|
|
}
|
|
}
|