postgis - 在 PostGIS 中,大于半个世界的多边形被视为相反的多边形

标签 postgis geodjango geos

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

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

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

更新:如果 180 度经度位于我的多边形内,则这根本不起作用。看来这次GEOS是罪魁祸首。这张图片显示了我认为的原因。绿色是我定义的多边形,红色是它的解释方式。 Polygons on earth这似乎又是一个经常出现的问题,也是像 GEOS 这样的库需要处理的问题。有办法吗?

最佳答案

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

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

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

根据结果构造一个 MultiPolygon。

关于postgis - 在 PostGIS 中,大于半个世界的多边形被视为相反的多边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5737506/

相关文章:

esri - 使用 Python 将自定义要素属性添加到 ESRI Shapefile

python - pygdal 版本配置错误

c++ - 如何在 GEOS 中制作矩形?

python - 是否可以将 django 的 GEOSGeometry 作为独立产品使用

ruby-on-rails - Active Record 和 PostGIS ST_BUFFER : LinearRing failed ring test

javascript - 如何在 JavaScript 中读取 PostGIS 点?

python - GeoDjango OSMWidget坐标变化

anaconda - OSError : Could not find lib geos_c. dll 或加载其任何变体 ['..\Library\\lib\\geos_c.dll']

gis - 后地理信息系统应用

检查点是否在线段上