我正在使用GeoDjango和PostGIS,并尝试使用多边形从数据库中获取记录。
如果我定义的多边形大于地球面积的一半,则假定我的多边形的“内部”是我想要作为“外部”的较小区域,并且仅返回其外部的结果。
我可以使用这个较小的错误区域来排除结果。 Polygon.area似乎知道我打算做什么,所以我可以用它来确定何时使我的搜索包含或排除。我觉得这个问题可能很常见,有没有更好的方法来解决它?
更新:如果180度经度在我的多边形内,则根本不起作用。看来GEOS这次应该受到指责。这张图片显示了我认为的原因。绿色是我定义的多边形,红色是它似乎在解释它的方式。这似乎是一个经常出现的问题,并且像GEOS这样的图书馆可以处理。有办法吗?
答案 0 :(得分:5)
好的,没有答案。这就是我所做的。
因为GEOS不喜欢穿过第180个子午线的东西:
首先检查多边形是否穿过第180个子午线 - 如果是,则沿着该线将其分成2个多边形。
因为PostGIS假定多边形尽可能小,所以你不能将一个覆盖面覆盖世界的一半以上,因此:
检查多边形或每个分割多边形是否覆盖世界的一半或更多 - 如果是这样,将它们分成两半。
从结果中构造一个MultiPolygon。