Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在谷歌地图中找到一个圆圈内的所有latlong_Javascript_C#_Google Maps_Asp.net Mvc 4_Google Maps Api 3 - Fatal编程技术网

Javascript 在谷歌地图中找到一个圆圈内的所有latlong

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

假设中心点LatLong保存在数据库中,给定半径为20米。和所有其他拉特朗靠近这个中心的地方,但不一定在中心20米之内。有没有一种方法可以让我在不撕开地图的情况下找到距离中心20米半径范围内的所有拉特朗。仅使用一些api或数学公式?

您可以在循环中迭代标记,然后使用api函数

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形式给出结果。如果我错了,请纠正我。是的,你是对的是有用的