我在ruby/rails上使用PostGIS,并创建了一个简单的长方体多边形,我希望在其下搜索一个县的地块。st_overlaps工具以前也起过作用,这次也起了作用。
所以我创建了这个多边形来搜索它下面的包裹(事实证明是多个多边形)
factory = RGeo::Cartesian.factory
coords = [[1554780, 1101102], [1561921, 1062647], [1634713, 1097531], [1630867, 1140657]]
points = coords.map { |pair| RGeo::WKRep::WKTParser.new.parse("POINT (#{pair.first} #{pair.last})") }
ring = factory.linear_ring(points)
polygon = factory.polygon(ring)
运行活动记录调用后:
Parcel.where{st_overlaps(:parcel_multipolygon, polygon)}
我得到157个结果。远低于预期。我使用自己的自定义脚本导出了一个kml文件。我将很快上传以供查看。
一旦加载到Google Earth中,您将在该kml中看到一个平行四边形的引脚标记地块,其区域(多边形)明显地覆盖了我创建的用于搜索的参数多边形的外圈。沿着这些不可见的线,有太多的地块处于这样一个清晰、独特的形状,形状中间没有引脚这一事实清楚地表明,搜索结果仅位于地块多边形与搜索多边形的外部边缘(LinearRing)的重叠处。
根据我对st_overlaps
文档的重读,我对这里的问题感到困惑。
这里有一个查看kmz导出的链接。(导出前将坐标转换为地理坐标)。您可以在浏览器中查看它。搜索多边形本身不包括在内,但很容易看到它的外环在哪里https://docs.google.com/file/d/0B5inC0VAuhH1TXdTbWQ2RngxZk0/edit?usp=sharing
我认为它的行为符合预期。St_overlaps将提供实际上位于彼此之上的功能。如果希望多边形中的所有特征都在其中,请尝试ST_Intersects
。