QGISを使用して100万点を超えるマッピング


9

メタデータなしで米国内の100万緯度/経度ポイントを超えるCSVをマッピングしようとしています。これほど多くのデータをマッピングしようとしたことがなく、どのような手順を踏めばよいか知りたいです。QGISにはデータが多すぎることがわかっているので、100,000行のCSVに分割してみましたが、どうすればいいのかわからないファイルがたくさんありました。ポイントを国勢調査ブロックごとに集計するのが最善であると思いますが、JavaScript(Pythonを使用したことがない)またはコマンドラインツールを使用してそれを行う最善の方法がわかりませんか?助言がありますか?


2
PostGISを使用すると、CSVをデータベースに簡単にロードしてから、緯度/経度の列をジオメトリに変換すれば完了です。次に、PostGISで必要な国勢調査ブロックごとにすべての要約/集計を実行できます... Turfで何をしたいですか?
DPSSpatial

2
こんにちは、GIS stackexchangeへようこそ。QGISとうまく連動する空間対応データベースエンジンであるPostgreSQL / PostGISをご覧になることをお勧めします。データがデータベースに読み込まれると、国勢調査区などに結合して集計したり、それに対してクラスタリングを実行したりするのは比較的簡単になります。
raphael

ラファエルのコメントはこれまでのところ最高の「答え」だと思います。100万ポイントは、PostGISに読み込まれ、QGIS-PostGISインターフェイスツールが非常に優れたものになると、簡単に処理できます。
Alexander

@mapBakerと@raphaelに感謝します。私はそのようなPostgisを使うことを考えていませんでした。CSVをQGUSにインポートしました。とにかくそれをPostGISに変換する方法はありますか?
user63623

@raphael 100万を超えるレコードがある場合、PostGISでX、Yをジオメトリに変換する良い方法を知っていますか?ST_MakePointメソッドを使用してこれを複製しようとしましたが、メモリが爆破されました-ST_GeomFromTextは既存のXおよびY列を使用できますか?
DPSSpatial

回答:


9

PostgreSQL / PostGISを使用することをお勧めします。これは、QGISでネイティブにサポートされており、他の空間データ(国勢調査区など)と結合する便利な組み込み関数がいくつかあり、データベースを使用すると、大規模なデータセットのメモリの問題が制限されるはずです。私が推奨する一連の手順は以下のとおりです。SQLコマンドを実行するには、PGAdminまたはQGISのいずれかを使用できます。前者はクエリに関するより有益なエラーを提供し、後者はクエリの結果をマップ上のレイヤーとしてロードできます。後者にアクセスするにはDatabase > DB Manager > DB Manager、に移動して2番目のボタンをクリックします。

  1. PostGISのセットアップを始めましょう。クイックインストーラーもあります。
  2. QGIS SQLウィンドウまたは PGAdminのSQLウィンドウでCREATE TABLEコマンド()を使用して、データベースにテーブルを作成します。
  3. SQLCOPYコマンドまたは PGAdminの組み込みのインポート機能のいずれかを使用してcsvをインポートします。PGAdminでテーブルを右クリックしてクリックしますImport...(後者はデリケートな場合があるため、大きなデータセットにはCOPYをお勧めします)。
  4. PGAdminまたはQGIS SQLウィンドウで次のSQLを実行して、テーブルにジオメトリ列を追加します。

    ALTER TABLE some_table ADD COLUMN geom geometry(Point,4326);
    
  5. 次のようなものを使用して、ポイントジオメトリを作成します

    UPDATE yourtable SET geom = ST_SetSRID(ST_MakePoint( x, y), 4326);
    
  6. SELECT次のようなステートメントを使用して、データのサブセットを表示しますLIMIT 50000

  7. または、次のような方法で国勢調査データに参加します


    国勢調査からc.gid、c.geomを選択c
    INNER JOIN yourdata ON ST_Within(yourdata.geom、c.geom)

関数リファレンス:
ST_Within
ST_MakePoint
ST_SetSRID


返信いただきありがとうございます。手順3を試しましたが、QGISでテーブルを編集できません。プラグインを使用せずに列を追加する別の方法はありますか?
user63623

@ user63623回答を更新して、問題に対処するための追加の手順を含めました。
ラファエル

おかげで1と2の間に足りないステップがあると思います。csvレイヤーをQGISにインポートするとき、データベースを作成するためにそれをshpファイルとして保存する必要があります。正しい?でも試してみるとフリーズします。また、PGAdminを使用してみましたが、インポート機能が見つかりません。
user63623

PGAdminでは、最初に次のようなSQLクエリを使用してテーブルを作成する必要があります:stackoverflow.com/questions/9826833/create-table-in-postgresql、csvからのすべての列を適切に定義します。そして、あなたがテーブル名を右クリックすることができます> Import...インポートウィザードにアクセス、またはCOPYコマンドを使用する postgresql.org/docs/current/static/sql-copy.html私は答えを更新します
ラファエル

3

私は最近、CSVからインポートした140万ポイントのデータセットを操作しました。私はcsvの無関係なフィールドを削除することを確認しました。一部のプロセスの実行には少し時間がかかりましたが、私にとってはうまくいきました。(QGIS 2.12、64ビットWindows 7、8 Gb RAM)


2

疑似コードでのR候補fwiw:

library(rgdal) ## for spatial export
library(readr) ## for fast file read

x <- read_csv("file.csv") 
names(x)  ## some as yet unknown columns

coordinates(x) <- c("x", "y")  ## your coordinate names may be different

writeOGR(x, ".", layer = "filepoints", driver = "MapInfo File")

これにより、QGISで読み取ることができる作業ディレクトリにfilepoints.tabが作成されます。または、「ESRI Shapefile」を選択して、filepoints.shp、または必要な任意の形式を作成します。QGISはrgdalと同じようにGDALを使用するため、多くの重複があります。類似のPythonメカニズムがあります。

メタデータがないため、proj4string(x)<-CRS( "+ proj = something + etc")を設定するために座標(x)を割り当てた後でセットを作成できますが、データを推測することしかできません。

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