Php 基于给定坐标和距离/半径计算边界框

Php 基于给定坐标和距离/半径计算边界框,php,math,coordinates,sparql,latitude-longitude,Php,Math,Coordinates,Sparql,Latitude Longitude,在PHP脚本中,我有一个SPARQL查询,返回另一个点的给定距离内的POI。这是查询中处理地理过滤的行: FILTER (?long > " . ($resource_long - $search_radius) . " && ?long < " . ($resource_long + $search_radius) . " && ?lat > " . ($resource_lat - $search_radius) . " &&a

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

FILTER (?long > " . ($resource_long - $search_radius) . " && ?long <  " . ($resource_long + $search_radius) . " && ?lat >  " . ($resource_lat - $search_radius) . "  && ?lat <  " . ($resource_lat + $search_radius) . "  )
FILTER(?.long>“($resource\u long-$search\u radius)。”&&?long<“($resource\u long+$search\u radius)。“&&?lat>”($resource\u lat-$search\u radius)。“&&?lat<”($resource\u lat+$search\u radius)。)

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

使用弧度表示一切

然后

然后,如果需要,将其转换回度数

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

比如说


这是外部边界,你可以通过将$radius乘以cos(M_PI_4)得到内部边界的平方,cos(3*M_PI_4)表示顶部lat,sin(M_PI_4)表示顶部lon,cos(3*M_PI_4)表示底部lat,sin(3*M_PI_4)表示底部lon

这是否最终给出了一个与起点等距的点的边界框(或圆)?它似乎仍然存在一个问题,即高纬度点之间的距离小于低纬度点之间的距离。我的三角架生锈了,所以我可能遗漏了一些东西。给出了一个边界框(如果也使用了底部的边界框,则为2)。因为它处理了绝大多数的问题谢谢你的回答,但我没有得到预期的结果。我设置了一个带有地图和网格的测试环境,以及一个在点之间画线的函数,这样它就可以直观地表示我正在创建的长方体。在0度纬度/长度时,它给了我一个漂亮的正方形。我最初担心的是,它将是一个长方形,它比它的宽度越来越高,离赤道越远。然而,我现在看到的结果是各种形状的矩形。在某个时候,我还从PHP中得到了一个NAN值(不是一个数字?),我不记得/不理解很多数学知识,所以我很难调试它。你有什么可以帮助我理解它的推荐信吗?你也可以用我的地图原型做一个测试:只要玩弄一下参数,它就会画出一个方框,并在中间放一个标记。你在用那个库吗?
   $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;