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