¿Cómo agrego (y mapeo) una tabla no espacial a QGIS desde SQLite?

8

Tengo un archivo sqlite de mi aplicación Wigle para Android (wiglewifi.sqlite). No es un archivo espacial, solo tablas con lat / lon y otros datos.

Puedo agregar capas de espacialidad muy bien, pero parece que no puedo encontrar una manera de agregar esta tabla de la misma manera que agregaría una capa de texto delimitado: ¿cómo puedo hacer esto?

Aclaración: es posible agregar como una tabla (según la respuesta de @ Giovanni-Manghi a continuación), O es posible exportar la tabla como un CSV y luego agregar como una capa de texto delimitado, pero idealmente me gustaría una capa de puntos basada directamente en la tabla SQLite (de la misma manera que en ArcGIS, agregaría una tabla y luego haría clic derecho y "Mostrar datos XY ...")

Simbamangu
fuente

Respuestas:

9

No sé si esta es la respuesta que desea, ya que no es una respuesta de apuntar y hacer clic, pero así es como probablemente lo haría.

En Spatialite, agregue una nueva columna de geometría. Asumiendo que quieres WGS84 (lat / lon)

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

Luego cree la geometría de WKT generada a partir de las coordenadas X / Y

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

Tal vez hay una manera de envolver esto en una función qgis / spatialite / spatialite-gui, ya que parece que uso esto con bastante frecuencia, y es fácil equivocar las comillas.

EDITAR -----

En realidad, descubrí una forma más infalible recientemente: para el segundo uso de la declaración:

update yourTableName set geometryColumnName = MakePoint(XColumn,YColumn,EPSG projectioncode)
Stev_k
fuente
InitSpatialMetadatapara convertir la base de datos sencilla sqlite3 en espacial, merece ser mencionado Tienes que hacerlo en la transacción o agregar argumento 1( select InitSpatialMetadata(1)), de lo contrario, toma mucho tiempo (media hora en mi computadora).
Jan Hudec
Esto funcionó bien, pero para las personas como yo menos familiarizadas con Spatialite / SQL vale la pena agregar que (descubrí que) la primera declaración requiere 'SELECCIONAR' antes. Entonces SELECCIONE AddGeometryColumn (... etc ...). Además, el nombre de la tabla y el nombre de la columna de geometría pueden tener (? Debería tener?) Comillas simples alrededor de ellos, por lo que su nombre de tabla sería 'nombre de tabla' y geometryColumnName sería 'geometryColumnName'.
Rostranimin
4

Dado que QGIS puede leer capas de OGR, intente usar el formato virtual de OGR: http://gdal.org/ogr/drv_vrt.html .

Cree un archivo de texto con el siguiente contenido y ábralo como capa vectorial en QGIS (Capa -> Agregar capa vectorial). Simplemente reemplace el nombre de la tabla, así como los nombres de columna de latitud y longitud de acuerdo con la tabla de su base de datos. Se recomienda almacenar el archivo con el sufijo .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
fuente
1

Utilice el cuadro de diálogo estándar "agregar vector ..." o arrastre y suelte el archivo .db en el lienzo de QGIS.

Giovanni Manghi
fuente
Eso funciona para agregar la tabla solo como una capa no espacial ... ¿cómo trazo los puntos como lo haría para una capa de texto delimitado, identificando columnas x / y (lon / lat)?
Simbamangu
1
No sé si hay una manera de convertir las columnas x / y de una tabla en una nueva capa de puntos, no lo creo (sería una nueva característica agradable). Mientras tanto, solo guarde su tabla Sqlite en csv e impórtela nuevamente. Con el complemento "xytools" también puede importar tablas xls y ods.
Giovanni Manghi
Estoy de acuerdo en que sería una buena idea para un complemento. Hay muchas personas que solo tienen una tabla sqlite y quieren usarla como está.
AndreJ
0

Manera artesanal: a) a la manera de @ Giovanni-Manghi, más b) Importa el XYlayer nuevamente a tu SQlite, luego c) Borra la tabla anterior en tu SQlite

Carlos Rivas
fuente