我将 GeoDjango 与 PostGIS 结合使用,并尝试使用多边形从数据库中获取属于其中的记录。
如果我定义一个大于地球面积一半的多边形,则假定多边形的“内部”是我打算作为“外部”的较小区域,并且仅返回其外部的结果。
我可以使用这个较小的错误区域来排除结果。 Polygon.area 似乎知道我的意图,因此我可以使用它来确定何时进行包含或排除搜索。我觉得这个问题可能很普遍,有没有更好的方法来解决?
Update: If 180 degrees longitude is inside my polygon this doesn't work at all. It seems GEOS is to blame this time. This image shows what I believe is the reason. Green is the polygon I define, Red is how it seems to be interpreting it. Again this seems like a problem which would crop up often and one that libraries like GEOS are made to deal with. Is there a way?
好吧,没有答案。这就是我所做的。
因为 GEOS 不喜欢穿过 180 度子午线的东西:
首先检查多边形是否穿过第 180 条经线 - 如果是,则沿该线将其分成 2 个多边形。
因为 PostGIS 假设多边形尽可能小,所以您无法使一个多边形覆盖超过一半的世界,因此:
检查多边形或每个分割的多边形是否覆盖了世界的一半或更多 - 如果是这样,请将它们分成两半。
根据结果构造一个 MultiPolygon。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)