「source_location」、「destination_location」、「source_lat」、「source_long」、「destination_lat」、「destination_long」などの列を持つ PostgreSQL データベースのテーブルに約 200 万のレコードがあります。
このテーブルを使用して PostGIS の空間テーブルに変換し、このデータに対して空間クエリを実行するにはどうすればよいですか?
「source_location」、「destination_location」、「source_lat」、「source_long」、「destination_lat」、「destination_long」などの列を持つ PostgreSQL データベースのテーブルに約 200 万のレコードがあります。
このテーブルを使用して PostGIS の空間テーブルに変換し、このデータに対して空間クエリを実行するにはどうすればよいですか?
あなたのデータが table にあるとしましょうfoo
。最初にジオメトリ列を追加します:
SELECT AddGeometryColumn('foo', 'source_geom', 4326, 'POINT', 2);
SELECT AddGeometryColumn('foo', 'destination_geom', 4326, 'POINT', 2);
ジオメトリ列の値を設定できるよりも:
UPDATE foo SET
source_geom =
ST_SetSRID(ST_MakePoint(source_lon, source_lat), 4326),
destination_geom =
ST_SetSRID(ST_MakePoint(destination_lon, destination_lat), 4326);
その結果、列source_geom
をdestination_geom
空間クエリで使用できます。
SELECT * FROM foo
WHERE ST_Distance_Sphere(source_geom, destination_geom) > 1000000;
このクエリは、出発地と目的地の間の距離が 1000 キロメートルを超えるすべてのレコードを返します。
エラー:
関数addgeometrycolumn( "unknown"、 "unknown"、integer、 "unknown"、integer)は存在しません
PostgreSQLはこのPostGIS関数を認識できないことを示しています。
これは次の理由である可能性があります。
PostGISがインストールされていません(http://postgis.refractions.net/download/を参照)。
データベースにこれらの関数がロードされていません(http://trac.osgeo.org/postgis/wiki/UsersWikiNewbieAddgeometrycolumnを参照)
AddGeometryColumnを使用することをお勧めします。