場所でクエリできるように、緯度と経度のペアをPostGIS地理タイプにロードしようとしています。
特に、floatの緯度と経度の列とgeography(Point, 4326)
列のあるテーブルがあります。やりたい
update mytable set geography = ???
ドキュメントは、以下が機能することを示唆しているようです。
update mytable set geography = ST_GeogFromText('POINT(' || latitude || ' ' ||
longitude || ')');
そうではありません。この点を意味として解釈しているのかわかりませんが、経度が-90から90の間にあることしか許可されていないため、明らかに経度ではありません。
だから、私は何をしますか?
...はぁ。私の側の愚かさ。どうやら正しい順序は経度、緯度です。両方の座標が同じ範囲(-180から180)であると思い込んでしまったので、もっと微妙なことが起こっていると思いました。
地理タイプを作成するいくつかの方法は次のとおりです。
数値のlong
列とlat
列を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
なしで機能しますが、通常、明示的なキャストはこれらのことに対して良い習慣です。
Latとlngの間の交換を実行するには、次を使用できます。
update mytable set geography = ST_GeographyFromText('SRID=4326;POINT(' || st_x(geom) || ' ' || st_y(geom) || ')');
sridの有無にかかわらず。