Geo*_*lex 20 google-maps-api-3 android-maps
嗨,我正在写一个应用程序,显示一个地址附近的自行车站.我有一个服务的每个自行车站的纬度和经度位置列表.
到目前为止,我可以标记当前位置或任何地址.如何在地图上显示我所在位置附近的所有自行车站.我是否首先从当前位置获取最近的Google地点,然后访问数据库以获取自行车位置并在地图上制作标记?什么是最好的方法?
MrU*_*own 26
如果您已经拥有自行车站的坐标,并且您信任这些数据,那么只需使用它来绘制您的标记.现在你必须定义"近"的含义.
你有不同的解决方案.您可以选择为地图边界内的所有自行车站绘制标记(但是根据缩放级别可以绘制许多标记,或者您必须阻止脚本在达到某个缩放级别之前绘制标记)或者您可以在一个位置周围n公里内绘制标记(可以是用户位置,地图中心坐标等).
对于第二种解决方案,如果您将自行车站存储在MySQL数据库中,则可以执行以下查询:
$sql = "SELECT *, ( 6371 * acos( cos( radians(" . $db->real_escape_string($lat) . ") ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(" . $db->real_escape_string($lng) . ") ) + sin( radians(" . $db->real_escape_string($lat) . ") ) * sin( radians( lat ) ) ) ) AS distance FROM your_table_name HAVING distance < 15";
Run Code Online (Sandbox Code Playgroud)
$lat并$lng作为你的中心坐标
lat并lng成为你的MySQL列名
15 是坐标周围的半径(以km为单位)
这使用了Haversine公式.可以在这里找到好的信息.
希望这会有所帮助,但我们并不真正了解您在应用中如何组织数据.如果您需要更多帮助,请告诉我们更多信息!
Pro*_*eek 14
以防万一有人在2016年寻找正确的答案.
谷歌创建了一个非常有用的库.几何库有许多不同的方法可能有助于解决这个问题:
computeDistanceBetween()
这个答案解释了如何使用它.
这通常会计算两个传递的LatLng对象之间的距离.
所以你可以简单地说:
距离结果以米为单位表示.
之前的算法可能没有被优化,因为我们中的一些人可能拥有数千个坐标的数组,其中方法containsLocation()变得很方便,因为您可以通过指定可在其中搜索的多边形来缩小搜索区域.
这可能不是找到最近位置的最佳方法,但我相信如果您的数据库中有合理数量的站点,它将完成这项工作.
我有同样的任务,我用hasrsine 公式解决了.这是我在PHP中的示例
private function distance($latA, $lngA,$latB, $lngB) {
$R = 6371000;
$radiansLAT_A = deg2rad($latA);
$radiansLAT_B = deg2rad($latB);
$variationLAT = deg2rad($latB - $latA);
$variationLNG = deg2rad($lngB - $lngA);
$a = sin($variationLAT/2) * sin($variationLAT/2)
+ cos($radiansLAT_A) * cos($radiansLAT_B) * sin($variationLNG/2) * sin($variationLNG/2);
$c = 2 * atan2(sqrt($a), sqrt(1-$a));
$d = $R * $c;
return $d;
}
Run Code Online (Sandbox Code Playgroud)
为了测试,我使用了这些坐标
$distance = $this->distance(-12.0972,-77.0267,-13.160616,-74.227440);
Run Code Online (Sandbox Code Playgroud)
结果应325932.546518以米为单位.如果你想在公里只是除325932.546518/1000=325.932546518km
相同的公式可以在指南hasrsine之后转换为javascript
| 归档时间: |
|
| 查看次数: |
46185 次 |
| 最近记录: |