【问题标题】:Point in polygon test for London map data伦敦地图数据的多边形测试点
【发布时间】:2012-06-02 18:25:58
【问题描述】:

对于伦敦的某些地图数据,我需要测试一个点是否位于多边形中。

在这种比例下忽略数据的球形方面并将其视为平面是否安全?对于我们需要 100% 准确来说,这并不是至关重要的。大概10m左右的误差就OK了。

(我知道 Google 地图 API 中可能已经有一些函数可以执行此操作,但我们正在预先计算服务器端。)

【问题讨论】:

  • 如果您不担心地形方面,那么您可以将三角形视为平面并在三角形中做一个点测试
  • 您的坐标是投影 (x,y) 还是地理坐标 (lat,lng)。多边形中的点很容易用于投影坐标。
  • acraig5075 - 使用 lat,lng。这是 kml 就绪的数据。

标签: google-maps geometry geospatial geo


【解决方案1】:

在最坏的情况下,如果您有一个代表整个伦敦的多边形,则误差可能会超过您的 10m 目标。如果:

  • 伦敦的中心在 N51.5deg,E0.0deg;
  • 伦敦的半径是经度0.5度;

然后是从 N51.5 E0.5 到 N51.5 W0.5 的大圆与相同点之间的恒向线之间的最大位移(如果将球坐标视为恒向线,则可以使用恒向线飞机)将是大约 142m。如果您使用一个巨大的矩形来模拟伦敦,那么误差会超出您的容忍度。

因此,近似值的安全性取决于您使用多少个多边形来表示伦敦,特别是取决于您的表示中任何多边形的边的最大长度。

编辑

解决 OP 的 cmets:

是的,我相信使用恒向线就像天真地假装 lat/lng 是平面坐标,并且不需要进一步的转换。在这个简单的例子中,我构建了 N51.5 E0.5 和 N51.5 W0.5 之间的恒向线是点之间的小圆弧,这也是一条纬线,在这种情况下也是同一条线如果将纬度/经度视为平面坐标,则绘制。但这是一个特例,专为我的回答量身定做。老实说,我不确定,但我认为在墨卡托投影上这通常是正确的,即恒向线与将纬度/经度视为平面坐标得到的线相同。

所提出的问题可以简化为询问一个点是在一条线的一侧还是另一侧。如果一个点位于形成多边形边界的线段之一的内侧,则该点位于多边形内部。

在一张纸上画一个圆圈。然后在圆上的任意 2 个点之间画一条弦。现在你有一个问题的说明:圆圈代表球形地球上任意两点之间的大圆,直线代表两点之间的小圆。弦和圆之间的距离表示大圆和小圆之间的距离,这是您在幼稚的假设下可能犯的错误。

它很粗糙,它已经准备好了,我唯一的主张是,如果您的伦敦地图被建模为一个边长约为 1 度经度的多边形,那么由于将球坐标视为平面而产生的定位误差可能是大于 140m。

【讨论】:

  • “如果将球面坐标视为平面,则恒向线是您将使用的线” - 这与天真地假装 lat/lng 是平面坐标相同还是涉及一些额外的变换?另外-“任何多边形的边的最大长度”-令我惊讶的是,这里的关键不是多边形的整体大小。这是否取决于我用于内部/外部测试的算法?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-26
  • 2011-03-19
  • 2011-02-02
  • 1970-01-01
相关资源
最近更新 更多