2

我刚开始使用 PostGIS 和 Postgresql,大部分情况下一切运行顺利。当我试图找到 MULTIPOLYGON sa POINT 所在的位置时,我被卡住了。我有两个独立的点,我确信它们位于我的数据库中的一个且只有一个形状为 MULTIPOLYGON 数据类型的形状中。它们不是相同的点,它们的格式不同。

示例 1,我不确定它是什么格式,但查询返回了我预期的真值(注意,我通过将数据集加载到 QGIS 中并将鼠标悬停在里面的一个点上找到了这个值)。

在第二个示例中,我对位于我正在查看的形状内的地址进行了地理编码。但是,查询的结果会返回一个错误值。

我使用 shp2pgsql 将数据直接从形状文件加载到我的数据库中。形状文件的 SRID 为 4269(我尝试在 GeomFromText 调用期间指定 SRID 时运行以下查询,但结果相同)。

这两个坐标集有什么区别?我需要做什么才能使用使用 lat/lon 值的 POINTS 执行相交测试?

1.) SELECT ST_Intersects((select the_geom from wardstable where gid=37), ST_GeomFromText('POINT(1172539 1924462)'));

2.) SELECT ST_Intersects((select the_geom from wardstable where gid=37), ST_GeomFromText('POINT(-87.6547884 41.96367)'));

谢谢!

4

1 回答 1

1

执行 ST_Intersects 等空间操作时,Multipolygons 和 Points 数据集都应位于同一投影 (SRID) 中。在您的第二个示例中,该点的坐标为纬度/经度(4326)。您应该使用ST_Transform将它们转换为 4269 :

SELECT ST_Intersects((select the_geom from wardstable where gid=37), ST_Transform(ST_GeomFromText('POINT(-87.6547884 41.96367)',4326),4269));

编辑:我错过了 ST_GeomFromText 中的 SRID 参数。

于 2010-07-04T10:54:19.133 回答