[英]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)来限制结果,这将转换为度。 但是,这有两个问题。 首先,将度数用作参数不是非常用户友好,而公里数将是首选。 其次,离赤道越远,两个经度之间的距离越窄。 反过来,这将导致较少的返回结果。 因此,问题是; 给定纬度/经度坐标,如何根据给定的半径/距离(以km为单位)计算边界框?
使用弧度表示一切
然后
$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)表示顶部lon,用cos(3 * M_PI_4)乘以底部lat和sin(3 *)来获得内边界平方M_PI_4),用于底部Lon
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.