2011-01-09 7 views
6

私はこのようなデータを持つCSV形式のデータファイルを持っています: フィールドID |データタイル| |データの説明|経度| latitude10進数の座標を持つ既存のデータテーブルとPostGISを使用

私はPostgreSQLとPostGISが既にインストールされています。私はPostGISを使用して、緯度/経度の場所から指定された距離内にあるすべてのレコード(上の表から)を呼び出すクエリを作成したいと思います。

問題は、どうやって始めたらよいか分かりません。 私はCSVファイルをPostgreSQLデータベースにインポートして、PostgreSQLとPostGIS関数を使用して起動します。

PostGIS関数でテーブルを動作させる追加の手順はありますか?

これについて正しい手順はありますか?私は本当にあなたの助けに感謝します!

答えて

8

PostGISを使用するには、これらのスクリプトを作業データベースにインポートする必要があります。

SELECT AddGeometryColumn('yourtable', 'columnname', 4269, 'POINT', 2); 

あなたは、このステップは、行って、あなたのテーブルを設定し、それにPostGISの列を追加したら、最後の3つの値はSRID、種類や大きさです。私はこれがあなたが望むものだと仮定します。おそらくSRIDを調整する必要がありますが、これは問題ありません。

あなたはこのクエリは、データのためのあなたのUPDATEまたはINSERTスクリプトに記述することができ

ST_Transform(ST_PointFromText('POINT(-85.45899 32.1337)', 4326)); 

のような形状を追加することを選んだものは何でもあなたのインポート/更新/に設定することができます。

+0

ありがとう!これは実際に私が探していたものです。私はおそらくテーブルを通過して小数点座標をポイントに変換する小さなPythonスクリプトを作成することができます。 – avatar

+0

この作品のようなものはありますか? UPDATE mytable SET geometrycolumn = ST_Transform(ST_PointFromText( 'POINT(-85.45899 32.1337)'、4326))ここで、column1 = 'data1'およびcolumn2 = 'data2'です。 – avatar

+0

@itgorilla私はPostGISリファレンスを心から知りませんが、なぜそれを試してみませんか?) – DrColossos

2

これは

:-)楽しい質問はあなたがLATロンである座標系を知っていますでしょうか?

この質問は、データの保存方法に関連しているので、私はこの質問をします。

あなたが行う必要があるのは、タイプPOINTのPostGISジオメトリオブジェクトを含むCSVファイルの列に加えて列を作成することです。

次に、CSVデータを表の標準列にインポートし、SQL更新を実行して各レコードからPOINTデータを作成し、作成したジオメトリ列に格納します。

その時点で、PostGIS関数を使用してデータのクエリにアクセスして述語化することができます。

これは、使用されているデータに関して複雑さがあるため、上記のすべてのメタです。最初にデータで使用される空間参照系を知る必要があります。

+0

lat longは10進数です。 – avatar

+0

これが正しい質問であるかどうかわかりませんが、緯度/経度の10進表をPOINTに変換するにはどうすればよいですか? PostgreSQLは、SQLの更新を実行するだけで、latとlongの2つのフィールドがあり、それらをPOINTに変換することがわかります。 – avatar

+1

右のlongは小数ですが、特定の回転楕円体(つまり座標参照系WGS84またはNAD83など)との相対的なものです。更新を行う際には、適切なPostGIS POINTオブジェクトに純粋な緯度/経度データを変換するために、サブセレクトを使用して更新する必要があります。これを行う方法については、ドキュメントを参照する必要があります。 –

7

DrColossosのソリューションに似た何かをやっただけで、同じタスクを解決しなければなりませんでした...これまでに完了しているでしょうが、私がやったように、 :lat/lonフィールドからジオメトリを生成するスクリプトを書く必要はありません。単純連結文字列を使用することができます。

+0

あなたは命の恩人です! – icefex

関連する問題