ST_Contains。找到范围内的所有道路

时间:2016-05-15 02:02:07

标签: postgresql openstreetmap postgis

我试着找到范围内的所有道路。

这是我的要求:

select osm_id, 
name,
from planet_osm_roads 
where ST_Contains(ST_GeomFromEWKT('SRID=900913;POLYGON((4355764.028 6715445.513, 4364401.418 6715674.192, 4364248.577 6708736.416, 4354808.572 6709155.795, 4355764.028 6715445.513))'), way)
LIMIT 100;

或那:

select osm_id, 
name,
from planet_osm_roads 
where ST_Contains(ST_GeomFromText('LINESTRING(4355764.028 6715445.513, 4364401.418 6715674.192, 4364248.577 6708736.416, 4354808.572 6709155.795, 4355764.028 6715445.513)', 900913), way)
LIMIT 100;

我在本地数据库上做所有事情,所需的数据都有。

Polygon:

enter image description here 查询结果为空。 告诉我出了什么问题。感谢。

2 个答案:

答案 0 :(得分:1)

ST_Contains可能不适合这份工作

  

ST_Contains - 当且仅当B中没有B点时才返回true   A的外部,B的内部的至少一个点位于   内部的A。

由于这些是道路,因此至少它的某些部分将位于多边形之外。这意味着ST_Contains将返回false。也许ST_Intersects可能是更好的选择。

答案 1 :(得分:0)

错误发生在空间参考中。 这是一个有效的请求:

select osm_id, name,  
ST_AsText(ST_Transform(way,4326)) from planet_osm_roads 
where ST_Contains(ST_Transform(ST_GeomFromText('POLYGON((39.128494  51.716394, 39.206085 51.71767, 39.204712 51.678942, 39.119911 51.681284, 39.128494 51.716394))',4326),900913), way)  
LIMIT 120;

ST_Transform - 返回一个新几何,其坐标转换为整数参数引用的SRID。