31

場所でクエリできるように、緯​​度と経度のペアをPostGIS地理タイプにロードしようとしています。

特に、フロートの緯度と経度の列と1つの列を持つテーブルがありgeography(Point, 4326)ます。やりたい

update mytable set geography = ???

ドキュメントは、以下が機能することを示唆しているようです。

update mytable set geography = ST_GeogFromText('POINT(' || latitude || ' ' ||
                                                           longitude || ')');

そうではありません。この点を意味として解釈しているのかわかりませんが、経度が-90から90の間にあることしか許されていないため、明らかに経度ではありません。

だから、私は何をしますか?

4

3 に答える 3

39

...はぁ。私の側の愚かさ。どうやら正しい順序は経度、緯度です。両方の座標が同じ範囲(-180から180)であると思い込んでしまったので、もっと微妙なことが起こっていると思いました。

于 2010-03-26T14:36:46.583 に答える
9

地理タイプを作成するいくつかの異なる方法は次のとおりです。

  • 数値longlat列をgeog地理タイプに変換します。

     UPDATE mytable SET geog = ST_SetSRID(ST_MakePoint(long, lat), 4326)::geography
    
  • geom単純なキャストを使用して、ジオメトリ列(SRID = 4326)をgeog地理タイプに変換します。

     UPDATE mytable SET geog = geom::geography
    
  • 投影geomされたジオメトリ列をgeog地理タイプに変換します。

     UPDATE mytable SET geog = ST_Transform(geom, 4326)::geography
    

最後の2つの例は、どのジオメトリタイプでも機能することに注意してください。また、ジオメトリから地理への変換は暗黙的であることが多く、これらの例はなしで機能し::geographyますが、通常、明示的なキャストはこれらのことに対して良い習慣です。

于 2014-10-28T04:28:12.063 に答える
5

latとlngの間の交換を実行するには、次を使用できます。

update mytable set geography = ST_GeographyFromText('SRID=4326;POINT(' || st_x(geom) || ' ' ||  st_y(geom) || ')');

sridの有無にかかわらず。

于 2011-09-05T16:29:46.510 に答える