0

「source_location」、「destination_location」、「source_lat」、「source_long」、「destination_lat」、「destination_long」などの列を持つ PostgreSQL データベースのテーブルに約 200 万のレコードがあります。

このテーブルを使用して PostGIS の空間テーブルに変換し、このデータに対して空間クエリを実行するにはどうすればよいですか?

4

3 に答える 3

2

あなたのデータが 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_geomdestination_geom空間クエリで使用できます。

SELECT * FROM foo
WHERE ST_Distance_Sphere(source_geom, destination_geom) > 1000000;

このクエリは、出発地と目的地の間の距離が 1000 キロメートルを超えるすべてのレコードを返します。

于 2012-10-08T19:52:07.270 に答える
1

エラー:

関数addgeometrycolumn( "unknown"、 "unknown"、integer、 "unknown"、integer)は存在しません

PostgreSQLはこのPostGIS関数を認識できないことを示しています。

これは次の理由である可能性があります。

  1. PostGISがインストールされていません(http://postgis.refractions.net/download/を参照)。

  2. データベースにこれらの関数がロードされていません(http://trac.osgeo.org/postgis/wiki/UsersWikiNewbieAddgeometrycolumnを参照)

于 2012-10-09T08:49:02.623 に答える
0

空間テーブルの作成-PostGISマニュアル

AddGeometryColumnを使用することをお勧めします。

于 2012-10-08T10:38:47.677 に答える