在谷歌地图中查找圆圈内的所有latlong

时间:2015-12-15 06:51:19

标签: javascript c# google-maps asp.net-mvc-4 google-maps-api-3

假设我将中心点LatLong保存在数据库中并且给定半径为20米。和所有其他LatLong靠近这个中心的地方,但不一定在20米的中心内。有没有办法可以找到距离中心20米半径范围内的所有拉丁语,而无需重新绘制地图。只是使用一些api或数学公式?

4 个答案:

答案 0 :(得分:0)

您可以循环迭代标记,然后使用API​​函数

unknown

这将为您提供Google API中称为测地线的最短距离。

您也可以使用

功能
computeDistanceBetween()

答案 1 :(得分:0)

您可以使用Haversine公式

https://en.wikipedia.org/wiki/Haversine_formula

这是一个很好的解释

http://www.movable-type.co.uk/scripts/latlong.html

for JavaScript:

var R = 6371000; // metres
var φ1 = lat1.toRadians();
var φ2 = lat2.toRadians();
var Δφ = (lat2-lat1).toRadians();
var Δλ = (lon2-lon1).toRadians();

var a = Math.sin(Δφ/2) * Math.sin(Δφ/2) +
        Math.cos(φ1) * Math.cos(φ2) *
        Math.sin(Δλ/2) * Math.sin(Δλ/2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));

var d = R * c;

按这个你可以迭代你的点,如果距离低于20米就得到。

答案 2 :(得分:0)

这是一个MySQL查询(用PHP编写),允许您检索给定距离内的所有点:

$sql = "SELECT *, ( 3959 * acos( cos( radians(" . $lat . ") ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(" . $lng . ") ) + sin( radians(" . $lat . ") ) * sin( radians( lat ) ) ) ) AS distance FROM your_table HAVING distance < 5";

$lat$lng是您的观点的坐标,lat / lng是您的表格列,your_table是您的表格名称。以上将列出5 nm范围内的位置。将3959替换为6371以更改为公里。

它使用了Haversine公式,正如@scaisEdge在他的回答中指出的那样。

答案 3 :(得分:0)

毕达哥拉斯足够不到20米。

以下是javascript函数以米为单位返回距离。我相信你可以转换为Java&#39;

function Pyth(lat1,lat2,lng1,lng2){
x = toRad(lng2-lng1) ;
y = toRad(lat2-lat1);
R = 6371000; // gives d in metres
d = sqrt(x*x + y*y) * R;
return d;
}