Javascript 在谷歌地图中找到一个圆圈内的所有latlong
假设中心点LatLong保存在数据库中,给定半径为20米。和所有其他拉特朗靠近这个中心的地方,但不一定在中心20米之内。有没有一种方法可以让我在不撕开地图的情况下找到距离中心20米半径范围内的所有拉特朗。仅使用一些api或数学公式?您可以在循环中迭代标记,然后使用api函数Javascript 在谷歌地图中找到一个圆圈内的所有latlong,javascript,c#,google-maps,asp.net-mvc-4,google-maps-api-3,Javascript,C#,Google Maps,Asp.net Mvc 4,Google Maps Api 3,假设中心点LatLong保存在数据库中,给定半径为20米。和所有其他拉特朗靠近这个中心的地方,但不一定在中心20米之内。有没有一种方法可以让我在不撕开地图的情况下找到距离中心20米半径范围内的所有拉特朗。仅使用一些api或数学公式?您可以在循环中迭代标记,然后使用api函数 computeDistanceBetween() 这将为您提供在谷歌API中称为测地线的最短距离 您也可以使用该函数 computeLength() 你可以使用哈弗森公式 这是一个很好的解释 对于JavaScript
computeDistanceBetween()
这将为您提供在谷歌API中称为测地线的最短距离
您也可以使用该函数
computeLength()
你可以使用哈弗森公式 这是一个很好的解释 对于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米,就可以得到 这是一个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";
$sql=“选择*,(3959*acos(弧度(.$lat.))*cos(弧度(lat))*cos(弧度(lng)-弧度(.$lng.))+sin(弧度(.$lat.))*sin(弧度(lat)))作为与您的_表之间的距离,距离小于5”;
其中,$lat
和$lng
是点的坐标,lat
/lng
是表列,your_table
是表名。上面将列出5 nm范围内的位置。将3959替换为6371以更改为公里
正如@scaisEdge在他的回答中所指出的那样,它使用了哈弗森公式。毕达哥拉斯在不到20米的距离内是足够的 下面是返回以米为单位的距离的javascript函数。我相信您可以转换为Java的
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;
}
你想拿回多少?我想拿回多少对不起,我不明白你的意思?与其列举所有可能的坐标来填充成吨的坐标,而且你可能不会使用所有的坐标,你为什么不直接计算lat的帧,从给定的中心查询点,并从数据库中查询位于该帧内的点?@TaoP.R。我想当他说“半径20米范围内的所有latlongs”时,他指的是数据库中存储的所有坐标。不是所有可能的点,这当然是不可能的。这是我给的点。问题是基于距离来获取点,我认为是相反的,我理解答案,比如,lat long保存在db中,这将是这里的标记。函数值通过检查是否在范围内,以mts形式给出结果。如果我错了,请纠正我。是的,你是对的是有用的