SQLiteからQGISに非空間テーブルを追加(およびマップ)するにはどうすればよいですか?


8

Wigle Androidアプリ(wiglewifi.sqlite)のsqliteファイルを持っています。これは空間ファイルではなく、緯度/経度およびその他のデータを含むテーブルです。

空間レイヤーをうまく追加できますが、区切りテキストレイヤーを追加するのと同じ方法でこのテーブルを追加する方法が見つからないようです。これを行うにはどうすればよいですか?

明確化:(以下の@ Giovanni-Manghiの回答に従って)テーブルとして追加することも、またはテーブルをCSVとしてエクスポートして区切りテキストレイヤーとして追加することもできますが、理想的には、直接ベースのポイントレイヤーが欲しいSQLiteテーブル(ArcGISと同じ方法でテーブルを追加し、右クリックして[XYデータを表示...])

回答:


9

これがポイントアンドクリックの答えではないので、これがあなたが望む答えであるかどうかはわかりませんが、これはおそらく私がそうする方法です。

Spatialiteで、新しいジオメトリ列を追加します。WGS84(lat / lon)が必要だと仮定

AddGeometryColumn( yourTableName , geometryColumnName, 4326, 'POINT', 'XY')

次に、X / Y座標から生成されたWKTからジオメトリを作成します

update yourTableName set geometryColumnName = GeomFromText('POINT ('+latColumn=' '+lonColumn+')',4326)

おそらくこれをqgis / spatialite / spatialite-gui関数にラップする方法があると思います。これはかなり頻繁に使用しているようで、引用符が間違っている可能性があるためです。

編集-----

実際、私が最近発見したもっと簡単な方法があります-2番目のステートメントの使用について:

update yourTableName set geometryColumnName = MakePoint(XColumn,YColumn,EPSG projectioncode)

InitSpatialMetadataプレーンなsqlite3データベースをspatialiteに変換するには、言及する価値があります。トランザクションで実行するか、引数1select InitSpatialMetadata(1))を追加する必要があります。そうしないと、非常に時間がかかります(私のコンピューターでは30分)。
Jan Hudec 2014

これはうまくいきましたが、私のようなSpatialite / SQLにあまり慣れていない人にとっては、追加する価値があります(私はそれを見つけました)最初のステートメントはその前に 'SELECT'が必要です。したがって、SELECT AddGeometryColumn(... etc ...)を選択します。また、テーブル名とジオメトリ列名はそれらを一重引用符で囲むことができます(?
ロストラニミン2017

4

QGISはOGRレイヤーを読み取ることができるため、OGRの仮想フォーマットhttp://gdal.org/ogr/drv_vrt.htmlを使用してみてください

以下の内容のテキストファイルを作成し、QGISでベクターレイヤーとして開きます(レイヤー->ベクターレイヤーの追加)。データベーステーブルに従って、テーブル名と緯度と経度の列名を置き換えるだけです。サフィックス.vrtを付けてファイルを保存することをお勧めします

<OGRVRTDataSource>
    <OGRVRTLayer name="table_name">
        <SrcDataSource>/path/to/your/sqlite.db</SrcDataSource> 
        <SrcLayer>table_name</SrcLayer> 
        <GeometryType>wkbPoint</GeometryType>
            <LayerSRS>WGS84</LayerSRS>
        <GeometryField encoding="PointFromColumns" x="lng" y="lat"/> 
    </OGRVRTLayer>
</OGRVRTDataSource>

1

標準の「ベクターの追加...」ダイアログを使用するか、.dbファイルをQGISキャンバスにドラッグアンドドロップします。


これは、テーブルを非空間レイヤーとしてのみ追加するために機能します...区切られたテキストレイヤーの場合と同じようにポイントをプロットして、x / y(lon / lat)列を特定するにはどうすればよいですか?
シンバマング2012年

1
なんらかのテーブルのx / y列を新しいポイントのレイヤーに変換する方法があるかどうかはわかりませんが、そうは思いません(それは素晴らしい新機能になるでしょう)。一方、Sqliteテーブルをcsvに保存して再度インポートするだけです。「xytools」プラグインを使用すると、xlsテーブルとodsテーブルもインポートできます。
Giovanni Manghi

プラグインとしては良い考えだと思います。sqliteテーブルを持っているだけで、そのまま使用したいという人はたくさんいます。
AndreJ 2012

0

職人の方法:a)@ Giovanni-Manghiの方法に加えて、b)XYlayerをSQliteに再度インポートし、c)SQliteの前のテーブルを消去します

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