我试着找到范围内的所有道路。
这是我的要求:
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:
答案 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。