获取特定区域内的坐标

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个框。

【讨论】:

窗户覆盖北极或南极的特殊情况如何?

以上是关于获取特定区域内的坐标的主要内容,如果未能解决你的问题,请参考以下文章

区域内的地理点

检查给定区域/坐标内的点的算法

如何检查某个区域内的坐标Python

winform中,播放一段全屏SWF视频,鼠标点击视频上一段区域 得到点击区域内的事件

canvas怎么根据坐标获取上面的内容

如何使当前视图的特定区域成为我的视图?