PostGISにポイントを挿入しますか?


49

PostGISナットに1つのテーブルを作成しましたが、ポイントを挿入できません。

クエリの何が問題になっていますか?

CREATE TABLE app ( 
  p_id INTEGER PRIMARY KEY

);

SELECT AddGeometryColumn('app','the_geom','4326','POINT',2);

INSERT INTO app(p_id, the_geom) VALUES(2, POINT(-71.060316, 48.432044));

最後のクエリの後、エラーが表示されます。

ERROR:  column "the_geom" is of type geometry but expression is of type point
LINE 1: ...SERT INTO app(p_id, the_geom) VALUES(2, POINT(-71....
                                                             ^
HINT:  You will need to rewrite or cast the expression.


********** Error **********

ERROR: column "the_geom" is of type geometry but expression is of type point
SQL state: 42804
Hint: You will need to rewrite or cast the expression.
Character: 53

すでにPostGISバージョンを確認しています。

SELECT PostGIS_full_version();

次の出力を得ました。

"POSTGIS="1.5.3" GEOS="3.3.1-CAPI-1.7.1" PROJ="Rel. 4.7.1, 23 September 2009" LIBXML="2.7.3" USE_STATS"

回答:


84

SQLWKT(既知のテキスト)を混同しています。WKTは形状を記述するためのジオメトリ言語に似ていますが、SQLではなく、データベースを照会および操作するための言語です。SQLクエリでWKTを使用するときは、SQL と混在しないで、textにする必要があります。

WKTを適切にフォーマット(「、」を削除)してSRIDを設定すると、クエリが機能します。この方法では、ST_GeomFromText(wkt, srid)うまく機能します:

INSERT INTO app(p_id, the_geom)
VALUES(2, ST_GeomFromText('POINT(-71.060316 48.432044)', 4326));

数値の経度/緯度を持つ列がある場合、POINTジオメトリを直接作成できます。

ST_SetSRID(ST_MakePoint(long, lat), 4326);

マニュアルで他のジオメトリコンストラクターを確認してください。


@ vik86のリクエストでthe_geomは、テーブルappで数値列から更新し、以下longlat使用して更新できます。

UPDATE app SET
  the_geom = ST_SetSRID(ST_MakePoint(long, lat), 4326);

この機能の使用について詳しく説明してください。「緯度経度が数値の列がある場合は、POINTジオメトリを直接作成できます。ST_SetSRID(ST_MakePoint(long、lat)、4326);」 PostGIS APIを使用するには、ポイント形式で必要です。したがって、この機能を使用してポイント列を更新する方法を知りたいと思いました。おかげでVikram
Vik86

@ Vik86更新された回答を参照
マイクT

1

場合は、Javaクライアントで作業しているその後、私のアドバイスは、データを転送するために、バイナリ型を使用することです。メモリから、ST_AsEWKTメソッドに対してこの変更を行ったとき、10%のパフォーマンスの改善を記録しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.