6

我正在将 GeoDjango 与 PostGIS 一起使用,并尝试使用多边形从位于其中的数据库中获取记录。

如果我定义一个大于地球面积一半的多边形,它假定我的多边形的“内部”是我打算作为“外部”的较小区域,并且只返回它之外的结果。

我可以使用这个较小的错误区域来排除结果。Polygon.area 似乎知道我的意图,因此我可以使用它来确定何时使我的搜索包含或排除。我觉得这个问题可能很常见,有没有更好的方法来解决它?

更新:如果 180 度经度在我的多边形内,这根本不起作用。这次似乎是 GEOS 的罪魁祸首。这张图片显示了我认为的原因。绿色是我定义的多边形,红色是它似乎是如何解释它的。地球上的多边形同样,这似乎是一个经常出现的问题,并且像 GEOS 这样的库是用来处理的。有办法吗?

4

1 回答 1

6

好吧,没有答案。这就是我所做的。

因为 GEOS 不喜欢穿过 180 度经线的东西:
首先检查多边形是否穿过 180 度经线 - 如果是,则沿该线将其分成 2 个多边形。

因为 PostGIS 假设一个多边形尽可能小,所以你不能让一个多边形覆盖超过一半的世界,所以:
检查多边形或每个分割多边形是否覆盖了一半或更多的世界 - 如果是,请将它们分成两半。

根据结果​​构造一个 MultiPolygon。

于 2011-04-25T01:05:21.113 回答