获取特定区域内的坐标
Posted
技术标签:
【中文标题】获取特定区域内的坐标【英文标题】:Get coordinates that fall within certain area 【发布时间】:2013-04-08 17:55:36 【问题描述】:我正在进行 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));
我的问题是:
-
这是一种最佳的搜索方式吗?
是否有更适合此用途的 php 库/辅助函数?
谢谢!
【问题讨论】:
WHERE lat BETWEEN $lat_min AND $lat_max AND lng BETWEEN $lng_min AND $lng_max
,并在您的 lat 和 lng 列上放置索引。请记住,如果 left_lng > right_lng
您的窗口跨越日期线,您需要将其拆分为 +/-180 度的 2 个框。
感谢您的快速回复。这与我使用的查询相同。但是,我不太明白您对left_lng > right_lng
时的情况的评论的第二部分。你能解释一下吗?
经度通常从西向东增加,但跨越国际日期变更线除外,其经度从 180 度变为 -180 度。如果您在跨越这条线的方框中使用相同的查询,您将获得方框outside 的所有经度的结果。您需要检测条件并将查询条件拆分为$lng_left到180和-180到$lng_right的2个框。
再次感谢 - 现在很清楚,这解决了问题 :) 如果您将 cmets 移至答案,我会将其标记为解决方案。
【参考方案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个框。
【讨论】:
窗户覆盖北极或南极的特殊情况如何?以上是关于获取特定区域内的坐标的主要内容,如果未能解决你的问题,请参考以下文章