|
|
|
|
@ -771,6 +771,29 @@ const getDistanceInMeters = (lon1, lat1, lon2, lat2) => {
|
|
|
|
|
const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
|
|
|
|
|
return R * c;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function getXYDistanceFromMin(current, minPoint) {
|
|
|
|
|
const R = 6371000; // 地球半径(米)
|
|
|
|
|
const toRad = deg => deg * Math.PI / 180;
|
|
|
|
|
|
|
|
|
|
// 计算两点之间某一维的距离
|
|
|
|
|
const haversineDistance = (lat1, lon1, lat2, lon2) => {
|
|
|
|
|
const dLat = toRad(lat2 - lat1);
|
|
|
|
|
const dLon = toRad(lon2 - lon1);
|
|
|
|
|
const a =
|
|
|
|
|
Math.sin(dLat / 2) ** 2 +
|
|
|
|
|
Math.cos(toRad(lat1)) * Math.cos(toRad(lat2)) * Math.sin(dLon / 2) ** 2;
|
|
|
|
|
const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
|
|
|
|
|
return R * c;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 横向距离(经度方向)
|
|
|
|
|
const xDistance = haversineDistance(minPoint.lat, minPoint.lon, minPoint.lat, current.lon);
|
|
|
|
|
// 纵向距离(纬度方向)
|
|
|
|
|
const yDistance = haversineDistance(minPoint.lat, minPoint.lon, current.lat, minPoint.lon);
|
|
|
|
|
|
|
|
|
|
return {xDistance, yDistance};
|
|
|
|
|
}
|
|
|
|
|
const processData = (data) => {
|
|
|
|
|
// console.log('data',data.ty)
|
|
|
|
|
// console.log('FodName', data.FodName)
|
|
|
|
|
@ -792,9 +815,10 @@ const processData = (data) => {
|
|
|
|
|
}
|
|
|
|
|
// console.log(data.Longitude > area.LonMin, data.Longitude < area.LonMax, data.Latitude > area.LatMin, data.Latitude < area.LatMax)
|
|
|
|
|
if (data.Longitude > area.LonMin && data.Longitude < area.LonMax && data.Latitude > area.LatMin && data.Latitude < area.LatMax) {
|
|
|
|
|
let xAndy = getXYDistanceFromMin({lon: data.Longitude, lat: data.Latitude}, {lon: area.LonMin, lat: area.LatMin})
|
|
|
|
|
let location = {
|
|
|
|
|
x: getDistanceInMeters(data.Longitude, area.LonMin),
|
|
|
|
|
y: getDistanceInMeters(data.Latitude, area.LatMin),
|
|
|
|
|
x: xAndy.xDistance,
|
|
|
|
|
y: xAndy.yDistance,
|
|
|
|
|
rotate: data.HeadingAngle
|
|
|
|
|
// rotate: 0
|
|
|
|
|
}
|
|
|
|
|
|