Google地图从具有半径的点获取可能的lat和lng范围

时间:2018-04-06 07:04:10

标签: javascript google-maps google-maps-api-3

所以我试图找到在尝试根据半径(例如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来获取可能的范围,或者这是正确的方法吗?

1 个答案:

答案 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 * dLatlng距离为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) + ']')