Wie füge ich QGIS aus SQLite eine nicht räumliche Tabelle hinzu (und ordne sie zu)?


8

Ich habe eine SQLite-Datei von meiner Wigle Android-App (wiglewifi.sqlite). Es ist keine räumliche Datei, sondern nur Tabellen mit lat / lon und anderen Daten.

Ich kann Spatialite-Ebenen problemlos hinzufügen, finde aber anscheinend keine Möglichkeit, diese Tabelle auf die gleiche Weise hinzuzufügen, wie ich eine begrenzte Textebene hinzufügen würde - wie geht das?

Erläuterung: Es ist möglich, eine Tabelle hinzuzufügen (gemäß der Antwort von @ Giovanni-Manghi unten), ODER es ist möglich, die Tabelle als CSV zu exportieren und dann als begrenzte Textebene hinzuzufügen, aber im Idealfall möchte ich eine Punktebene, die direkt basiert in der SQLite-Tabelle (auf die gleiche Weise wie in ArcGIS würde ich eine Tabelle hinzufügen, dann mit der rechten Maustaste klicken und "XY-Daten anzeigen ...")

Antworten:


9

Ich weiß nicht, ob dies die gewünschte Antwort ist, da es sich nicht um eine Point-and-Click-Antwort handelt, aber so würde ich es wahrscheinlich machen.

Fügen Sie in Spatialite eine neue Geometriespalte hinzu. Angenommen, Sie möchten WGS84 (lat / lon)

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

Erstellen Sie dann die Geometrie aus WKT, die aus den X / Y-Koordinaten generiert wurde

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

Vielleicht gibt es eine Möglichkeit, dies in eine QGIS / Spatialite / Spatialite-GUI-Funktion zu verpacken, da ich dies ziemlich häufig zu verwenden scheine und es leicht ist, die Anführungszeichen falsch zu verstehen.

BEARBEITEN -----

Es gibt tatsächlich einen narrensichereren Weg, den ich kürzlich entdeckt habe - für die zweite Aussage:

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

InitSpatialMetadataUm eine einfache SQLite3-Datenbank in Spatialite umzuwandeln, sollte man es erwähnen. Sie müssen dies entweder in einer Transaktion tun oder argument 1( select InitSpatialMetadata(1)) hinzufügen , andernfalls dauert es sehr lange (eine halbe Stunde auf meinem Computer).
Jan Hudec

Das hat gut funktioniert - aber für Leute wie mich, die mit Spatialite / SQL weniger vertraut sind, lohnt es sich hinzuzufügen, dass (ich fand das) die erste Anweisung 'SELECT' erfordert. Also SELECT AddGeometryColumn (... etc ...). Auch der Tabellenname und der Name der Geometriespalte können einfache Anführungszeichen enthalten (? Sollte?). Ihr Tabellenname wäre also 'Ihr Tabellenname' und Geometriespaltenname wäre 'Geometriespaltenname'.
Rostranimin

4

Da QGIS OGR-Ebenen lesen kann, verwenden Sie das virtuelle Format von OGR: http://gdal.org/ogr/drv_vrt.html .

Erstellen Sie eine Textdatei mit dem folgenden Inhalt und öffnen Sie sie als Vektorebene in QGIS (Ebene -> Vektorebene hinzufügen). Ersetzen Sie einfach den Tabellennamen sowie die Spaltennamen Längen- und Breitengrad entsprechend Ihrer Datenbanktabelle. Es wird empfohlen, die Datei mit dem Suffix .vrt zu speichern

<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

Verwenden Sie das Standarddialogfeld "Vektor hinzufügen ..." oder ziehen Sie die DB-Datei per Drag & Drop in den QGIS-Bereich.


Dadurch wird die Tabelle nur als nicht räumliche Ebene hinzugefügt. Wie zeichne ich die Punkte wie für eine begrenzte Textebene und identifiziere x / y-Spalten (lon / lat)?
Simbamangu

1
Ich weiß nicht, ob es eine Möglichkeit gibt, x / y-Spalten in einer beliebigen Tabelle in eine neue Punktebene umzuwandeln, ich glaube nicht (es wäre eine nette neue Funktion). Speichern Sie in der Zwischenzeit einfach Ihre Sqlite-Tabelle in csv und importieren Sie sie erneut. Mit dem Plugin "xytools" können Sie auch xls- und ods-Tabellen importieren.
Giovanni Manghi

Ich bin damit einverstanden, dass es eine gute Idee für ein Plugin wäre. Es gibt viele Leute, die nur eine SQLite-Tabelle haben und diese so verwenden möchten, wie sie ist.
Andrej

0

Handwerker-Weg: a) @ Giovanni-Manghi-Weg, plus b) Importieren Sie den XYlayer erneut in Ihr SQlite, dann c) Löschen Sie die vorherige Tabelle in Ihrem SQlite

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.