繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM