根据给定的坐标和距离/半径计算边界框


Calculate bounding box based on given coordinates and distance/radius

在PHP脚本中,我有一个SPARQL查询,返回另一个点给定距离内的POI。这是查询中处理地理筛选的行:

FILTER (?long > " . ($resource_long - $search_radius) . " && ?long <  " . ($resource_long + $search_radius) . " && ?lat >  " . ($resource_lat - $search_radius) . "  && ?lat <  " . ($resource_lat + $search_radius) . "  )

现在我一直在使用整数(变量 $search_radius)来限制我的结果,这将转换为度数。但是,这有两个问题。首先,使用度作为参数不是很用户友好,公里是首选。其次,离赤道越远,两度经度之间的距离就越窄。这反过来会导致返回的结果减少。所以,问题是;给定经纬度/经度坐标,如何根据给定的半径/距离(以公里为单位)计算边界框?

对所有内容都使用弧度

然后

   $radius = $distance/ 6371.01; //6371.01 is the earth radius in KM
   $minLat = $lat - $radius;
   $maxLat = $lat + $radius;
   $deltaLon = asin(sin($radius) / cos($lat));
   $minLon = $lon - $deltaLon;
   $maxLon = $lon + $deltaLon;

然后根据需要转换回度数。

如果越过边界,这不起作用。有课程可以提供帮助

https://github.com/anthonymartin/GeoLocation.php

例如

这是外界,您可以通过乘以$radius乘以 cos(M_PI_4) 表示顶部纬度、sin(M_PI_4) 表示顶部纬度、cos(3*M_PI_4) 表示底部纬度

和 sin(3*M_PI_4) 表示底部纬度来获得内边界平方