所以我试图找到在尝试根据半径(例如5公里)从原点位置找到地图上的其他点时可以使用的纬度和经度值范围。
目前我使用Calculate distance between two points in google maps V3中的Haversine公式计算纬度和经度的1m长度。
var rad = function(x) {
return x * Math.PI / 180;
};
var getDistance = function(p1, p2) {
var R = 6378137; // Earth’s mean radius in meter
var dLat = rad(p2.lat - p1.lat);
var dLong = rad(p2.lng - p1.lng);
var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
Math.cos(rad(p1.lat)) * Math.cos(rad(p2.lat)) *
Math.sin(dLong / 2) * Math.sin(dLong / 2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
var d = R * c;
return d; // returns the distance in meter
}
let origin = {lat: 40, lng: 40}
let p1 = {lat: 41, lng: 40}
let p2 = {lat: 40, lng: 41}
let latDist = getDistance(origin, p1)
let lngDist = getDistance(origin, p2)
console.log(latDist, lngDist);
let lat1m = 1/latDist
let lng1m = 1/lngDist
console.log(lat1m, lng1m)

据此,纬度1米约为0.000008983152841195214
,经度1米约为0.000011726734698319366
。因此5km将只是5000乘以每个点然后从原点加/减。
是否有Google API来获取可能的范围,或者这是正确的方法吗?
答案 0 :(得分:1)
<强> UPD。强>
我错了,您可以使用google.maps.geometry.spherical.computeDistanceBetween (latLngA, latLngB);
来计算两点之间的距离。 Docs。只需传递LatLng
个对象。
OLD JS ANSWER。
至于您的问题,您根本不需要使用Google API。此外,Google API不提供可以使用几何体计算的简单函数。
让我让你的代码更简单一些。弧的长度只是radius * angle in radians
。因此lat
距离为latDist = R * dLat
,lng
距离为lngDist = R * dLng * Math.cos(rad(origin.lat))
。如果你计算的距离小于千公里,你可以假设,latitude
在该区域内是恒定的,因此你不需要使用复杂的公式。
var rad = function(x) {
return x * Math.PI / 180;
};
var R = 6378137; // Earth’s mean radius in meter
let origin = {lat: 40, lng: 40}
let latDist = R * rad(1)
let lngDist = R * rad(1) * Math.cos(rad(origin.lat))
console.log(latDist, lngDist);
let areaRadius = 1000; // in meters
let latitudeRangeDelta = areaRadius / latDist;
let longitudeRangeDelta = areaRadius / lngDist;
console.log('latitude of the area is within range [' + (origin.lat - latitudeRangeDelta) + ', ' + (origin.lat + latitudeRangeDelta) + ']')
console.log('longitude of the area is within range [' + (origin.lng - longitudeRangeDelta) + ', ' + (origin.lng + longitudeRangeDelta) + ']')