1

我正在做一个 API 调用,它应该返回某个区域内的点列表。

这将在地图上使用,因此对 API 的调用具有所有四个角点的坐标。
该区域将始终为矩形,不会旋转。

目前,我正在使用以下算法来限制结果:

$lat_limits = array(min($bottom_left_lat, $top_left_lat), max($bottom_left_lat, $top_left_lat));
$lon_limits = array(min($top_left_lon, $top_right_lon),   max($top_left_lon, $top_right_lon));

我的问题是:

  1. 这是一种最佳的搜索方式吗?
  2. 有没有更适合这种用途的 PHP 库/帮助函数?

谢谢!

4

1 回答 1

1

简单地:

WHERE lat BETWEEN $lat_min AND $lat_max AND lng BETWEEN $lng_min AND $lng_max

并在您的 lat 和 lng 列上放置索引以更好地优化查询。

请记住,如果 left_lng > right_lng 您的窗口跨越日期线,您需要将其拆分为 +/-180 度的 2 个框。

经度通常从西向东增加,但跨越国际日期变更线时,经度从 180 度变为 -180 度。如果您在跨越这条线的框中使用相同的查询,您将获得框外所有经度的结果。您需要检测条件并将查询条件拆分为从 lng_left 到 180 和 -180 到 lng_right 的 2 个框。

于 2013-04-08T18:17:29.047 回答