2016-05-15 20 views
0

私は範囲内にあるすべての道路を見つけようとしています。ST_Contains。範囲内にあるすべての道路を見つける

私の要求です:

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; 

私はローカルデータベースに全力を尽くす、必要なデータを持っています。このよう

ポリゴン:

enter image description here クエリ結果は空です。 何が間違っているか教えてください。ありがとう。

+0

あなたのデータはどのSRIDですか?クエリで900913を使用しているようです – e4c5

+0

クエリでST_SRID(ウェイ)が返されます。900913 – sergpc

+0

ポリゴンを作成する最初の例は正しいです。線ストリングは、定義上、領域を持たないため、正確に線上にある点のみを含んでいます。 –

答えて

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に変換その座標を使用して新しいジオメトリを返します。

1

ST_Containsは、おそらく、この仕事のために

ST_Containsを向いていない - とのみAの 外観、およびBの嘘の内部の少なくとも1点でB嘘のノーポイントの場合場合はtrueを返します。 のインテリア

これらは道路なので、少なくとも一部は多角形の外側にあります。つまり、ST_Containsはfalseを返します。おそらくST_Intersectsが良い選択肢かもしれません。

+0

"ST_Intersects"は結果ですが、この結果は多角形の間違った点を選んだようです。私は画像を更新し、数字はポリゴンポイントを示しました。そのような私のポリゴン1-2-3-4-1。 多分私は多角形を形成するのが間違っていますか? – sergpc

+0

申し訳ありませんが、私はそのコメントを理解していません – e4c5

+0

多角形の点を指定するためのエラーと思います。私は以下の順序でそれらを指摘する:1-2-3-4-1。それは間違っていないのですか? – sergpc

関連する問題