0

我在 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 地球中,您将在该 kml 中看到的是一个平行四边形的引脚标记包裹,其区域(多边形)明显位于我创建的用于搜索的参数多边形的外环上。沿着这些看不见的线有这么多的地块,形状如此清晰,形状中间没有大头针,这一事实清楚地表明搜索结果只是在地块多面体与外边缘的重叠处(LinearRing ) 的搜索多边形。

根据我对文档的重新阅读st_overlaps,我对这里似乎存在什么问题感到困惑。

这是查看 kmz 导出的链接。(坐标在导出前转换为地理坐标)。您可以在浏览器中查看它。搜索多边形本身不包括在内,但很容易看出它的外环在哪里 https://docs.google.com/file/d/0B5inC0VAuhH1TXdTbWQ2RngxZk0/edit?usp=sharing

4

1 回答 1

1

我认为它的行为符合预期。St_overlaps 将给出实际上位于彼此之上的特征。如果您想要多边形内的所有要素,请尝试ST_Intersects.

于 2013-08-16T01:38:42.773 回答