Bagaimana cara menambahkan (dan memetakan) tabel non-spasial ke QGIS dari SQLite?

8

Saya memiliki file sqlite dari aplikasi Android Wigle saya (wiglewifi.sqlite). Ini bukan file spasial, hanya tabel dengan lat / lon dan data lainnya.

Saya dapat menambahkan lapisan spasial dengan baik, tetapi sepertinya tidak dapat menemukan cara untuk menambahkan tabel ini dengan cara yang sama saya akan menambahkan lapisan teks terbatas - bagaimana cara melakukan ini?

Klarifikasi: Dimungkinkan untuk menambahkan sebagai tabel (sesuai jawaban @ Giovanni-Manghi di bawah), ATAU dimungkinkan untuk mengekspor tabel sebagai CSV dan kemudian menambahkan sebagai layer teks terbatas, tetapi idealnya saya ingin layer titik berdasarkan langsung pada tabel SQLite (dengan cara yang sama seperti di ArcGIS saya akan menambahkan tabel lalu klik kanan dan "Tampilkan data XY ...")

Simbamangu
sumber

Jawaban:

9

Saya tidak tahu apakah ini jawaban yang Anda inginkan, karena itu bukan jawaban point dan klik, tapi ini mungkin yang akan saya lakukan.

Di Spatialite, tambahkan kolom geometri baru. Dengan asumsi Anda ingin WGS84 (lat / lon)

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

Kemudian buat geometri dari WKT yang dihasilkan dari koordinat X / Y

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

Mungkin ada cara membungkus ini ke dalam fungsi qgis / spatialite / spatialite-gui, seperti yang saya sering gunakan ini, dan mudah untuk mendapatkan tanda kutip yang salah.

Sunting -----

Sebenarnya ada cara yang lebih mudah saya temukan baru-baru ini - untuk penggunaan pernyataan kedua:

update yourTableName set geometryColumnName = MakePoint(XColumn,YColumn,EPSG projectioncode)
Stev_k
sumber
InitSpatialMetadatauntuk mengkonversi database sqlite3 menjadi spatialite yang layak disebutkan. Anda harus melakukannya dalam transaksi atau menambahkan argumen 1( select InitSpatialMetadata(1)), jika tidak, akan sangat lama (setengah jam di komputer saya).
Jan Hudec
Ini bekerja dengan baik - tetapi bagi orang-orang seperti saya yang kurang terbiasa dengan Spatialite / SQL, ada baiknya menambahkan bahwa (saya menemukan itu) pernyataan pertama membutuhkan 'SELECT' sebelum itu. Jadi, PILIH AddGeometryColumn (... dll ...). Juga nama tabel dan nama kolom geometri dapat memiliki (? Seharusnya?) Tanda kutip tunggal di sekitar mereka - jadi nama label Anda akan menjadi 'nama domain Anda' dan nama geometri Kolom akan menjadi 'nama geometri Kolom'.
Rostranimin
4

Karena QGIS dapat membaca lapisan OGR, coba gunakan Format Virtual OGR: http://gdal.org/ogr/drv_vrt.html .

Buat file teks dengan konten berikut dan buka sebagai layer vektor di QGIS (Layer -> Add Vector Layer). Cukup ganti nama tabel serta nama kolom lintang dan bujur sesuai dengan tabel basis data Anda. Disarankan untuk menyimpan file dengan akhiran .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>
webrian
sumber
1

Gunakan dialog "tambahkan vektor ..." standar atau seret dan letakkan file .db di kanvas QGIS.

Giovanni Manghi
sumber
Itu berfungsi untuk menambahkan tabel sebagai lapisan non-spasial saja ... bagaimana cara plot poin seperti yang saya lakukan untuk layer teks dibatasi, mengidentifikasi kolom x / y (lon / lat)?
Simbamangu
1
Saya tidak tahu apakah ada cara untuk mengubah kolom x / y dalam tabel apa pun menjadi lapisan poin baru, saya tidak berpikir begitu (itu akan menjadi fitur baru yang bagus). Sementara itu, simpan saja tabel Sqlite Anda ke csv dan impor lagi, Dengan plugin "xytools" Anda juga dapat mengimpor tabel xls dan ods.
Giovanni Manghi
Saya setuju bahwa itu akan menjadi ide bagus untuk sebuah plugin. Ada banyak orang yang hanya memiliki tabel sqlite dan ingin menggunakannya apa adanya.
AndreJ
0

Cara pengrajin: a) @ Cara Giovanni-Manghi, plus b) Impor lagi XYlayer ke SQlite Anda, lalu c) Hapus tabel sebelumnya di SQlite Anda

Carlos Rivas
sumber