我有一系列的地方进入一个MySQL数据库,每个地方都有作为字段:经纬度和地址。我会从通过地理位置获得的实际位置计算最近的地方。我会使用这个函数:Google Map - find markers但我怎么能从数据库所有的价值,并把JavaScript数组?从我的地理位置计算最近的地方
1
A
回答
2
选项1: 通过切换到支持的GeoIP数据库做数据库的计算。
选项2: 做数据库的计算:如果你使用MySQL,所以下面的存储过程应该可以帮助
CREATE FUNCTION distance (latA double, lonA double, latB double, LonB double)
RETURNS double DETERMINISTIC
BEGIN
SET @RlatA = radians(latA);
SET @RlonA = radians(lonA);
SET @RlatB = radians(latB);
SET @RlonB = radians(LonB);
SET @deltaLat = @RlatA - @RlatB;
SET @deltaLon = @RlonA - @RlonB;
SET @d = SIN(@deltaLat/2) * SIN(@deltaLat/2) +
COS(@RlatA) * COS(@RlatB) * SIN(@deltaLon/2)*SIN(@deltaLon/2);
RETURN 2 * ASIN(SQRT(@d)) * 6371.01;
END//
方案3: 如果你有一个指数纬度和经度,你可以通过用你选择的脚本语言(minLat,maxLat,minLong和maxLong)计算一个初始边界框,并将行限制为一个子集来减少需要计算的计算次数您的条目基于(WHERE纬度BETWEEN minLat和maxLat和minLong和maxLong之间的经度)。那么MySQL只需要执行该行子集的距离计算。
如果您使用SQL语句或存储过程来计算距离,则SQL仍需查看数据库中的每条记录,并计算数据库中每条记录的距离,然后才能决定是否返回该行或丢弃它。 由于计算执行起来相对较慢,因此如果您可以减少需要计算的行集合,消除明显超出所需距离的行,那么会更好,因此我们只执行昂贵的计算为更少的行数。
使用边界框就像在地图上首先绘制一个正方形,左边,右边,顶部和底部边距离我们中心点的适当距离。然后我们的圈子将被绘制在该框内,圆圈上最北端,最东端,最南端和最西端的点与框的边界接触。有些行将落在该框之外,所以SQL甚至不打算计算这些行的距离。它仅计算落在边界框内的那些行的距离,以查看它们是否落入圆内。
1
你可以在mysql中使用cos和sin等数学函数,所以你不需要把整个db变成javascript,你可以在mysql中运行查询。
我找到了答案在这里:http://www.movable-type.co.uk/scripts/latlong-db.html(太长,在回答中包括)
相关问题
- 1. 用户地理位置到最近的地址计算
- 2. 计算地理位置
- 3. 由地理位置靠近我的人
- 4. android-寻找最近的位置到我目前的地方
- 5. 如何从我的当前位置获取附近的地方
- 6. Localstorage我的地理位置
- 7. 定位最近的地方在Google地图中的JSON响应
- 8. 地理位置查找最近的城市
- 9. 高效搜索最近的地理位置
- 10. Android地理编码得到最近的位置
- 11. ,搜索最近的地方
- 12. 什么是从地理坐标计算本地用户的最有效方式?
- 13. 计算一个位置之间的接近到其他许多地方
- 14. 通过地理定位计算哪个商店与用户距离最近
- 15. 从一组地理位置计算边界
- 16. “最近的餐馆定位器”的地理定位
- 17. 基于经度和纬度计算最近位置的算法
- 18. 通过谷歌地方搜索最近的地理对象api
- 19. 谷歌地图找到当前位置和附近的地方
- 20. Phonegap地理位置 - 如何判断我的用户是否接近地标?
- 21. 根据地理位置获取最近距离
- 22. 计算单位在最后一个地方(ULP)的双打
- 23. 我无法将我的地图置于地理位置上
- 24. 计算Java中多个地理位置之间的距离
- 25. 计算给定时间的地理位置
- 26. R - 计算一段时间后的地理位置
- 27. 让Django地理位置感知的好方法? - Django /地理位置
- 28. 我怎么getrid的地理位置
- 29. 如何计算用户最近的位置?
- 30. 寻找附近的位置或地标