在我的网站上,会员正在Google Maps API上标记照片位置。经度和纬度保存在数据库(SQL)中。
有谁知道如何找到半径100公里标记照片的标记照片?
假设纬度和经度是46.03765154061627 | 14.5404052734375。是否有任何类型的数学公式可以检查100公里半径位置或任何其他方式?
谢谢!
答案 0 :(得分:1)
您可以计算两点之间的great-circle distance。幸运的是,haversine formula相对容易,假设是地球的球形表示。您可能希望进一步阅读并查看Chris Veness在Calculate distance, bearing and more between Latitude/Longitude points的JavaScript实现。
如果您只有少量照片,则可以简单地计算从用户提交的点到每个照片点的大圆距离。然后简单地按距离对结果列表进行排序,并仅过滤距离低于100km阈值的照片。
但是,如果您要拍许多照片,您应该考虑从数据库中过滤这些照片。您可以使用具有geo-spatial indexing功能的数据库。例如,MySQL,PostgreSQL和SQL Server 2008都具有地理空间要素(本地或通过扩展),其中包括空间索引和半正公式的实现。
答案 1 :(得分:0)
Google Maps API包含处理纬度和经度坐标的方法。如果您正在处理少量坐标,则可以轻松使用其GLatLng类并调用distanceFrom方法。
您还可以使用GLatLngBounds,它旨在查看某些坐标是否在定义的矩形边界内。
答案 2 :(得分:0)
定义一个100km半径的圆可能有点复杂(大圆计算,两点之间的距离等)...用你的点定义100km(或200km)长度的“方形”更容易(M)在中间:
没有太科学,不能
我们可以说你想在其图片坐标(P)满足标准的区域内搜索图片
lon(M)-1 <= lon(P) <= lon(M)+1
lat(M)-1 <= lat(P) <= lat(M)+1
(全部以度为单位)。我认为 - 对于WEB服务 - 这是足够准确且非常容易实现。