我刚开始使用PostGIS& Postgresql和大部分内容都运行顺畅。当我试图找出哪个MULTIPOLYGON是一个POINT在我时,我卡住了。我有两个单独的点,我肯定在我的数据库中只有一个MULTIPOLYGON数据类型的形状。它们不是相同的点,它们的格式不同。
示例1,我不确定它的格式是什么,但查询返回的值与我预期的一样(注意,我通过将数据集加载到QGIS并将鼠标悬停在内部点上来找到此值)。
在第二个例子中,我对一个位于我正在看的形状内的地址进行了地理编码。但是,查询结果会返回false值。
我使用shp2pgsql直接从形状文件将数据加载到我的数据库中。形状文件的SRID是4269(我尝试在GeomFromText调用期间指定SRID时运行下面的查询,但结果是相同的。)
两个坐标集之间有什么区别?我需要做什么才能使用使用lat / lon值的POIN来执行交叉测试?
1。)SELECT ST_Intersects((从wardstable中选择the_geom,其中gid = 37), ST_GeomFromText('POINT(1172539 1924462)'));
2。)SELECT ST_Intersects((从wardstable中选择the_geom,其中gid = 37), ST_GeomFromText('POINT(-87.6547884 41.96367)'));
谢谢!
答案 0 :(得分: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参数。