Como adiciono (e mapeio) uma tabela não espacial ao QGIS do SQLite?

8

Eu tenho um arquivo sqlite do meu aplicativo Wigle para Android (wiglewifi.sqlite). Não é um arquivo espacial, apenas tabelas com lat / lon e outros dados.

Posso adicionar camadas de spatialite muito bem, mas não consigo encontrar uma maneira de adicionar esta tabela da mesma maneira que adicionaria uma camada de texto delimitada - como proceder para fazer isso?

Esclarecimento: É possível adicionar como uma tabela (conforme a resposta de @ Giovanni-Manghi abaixo), OU é possível exportar a tabela como um CSV e depois adicionar como uma camada de texto delimitada, mas, idealmente, eu gostaria de uma camada de ponto baseada diretamente na tabela SQLite (da mesma maneira que no ArcGIS, eu adicionaria uma tabela e clique com o botão direito do mouse e "Exibir dados XY ...")

Simbamangu
fonte

Respostas:

9

Não sei se essa é a resposta que você deseja, pois não é um ponto e clique em resposta, mas é assim que eu provavelmente faria.

No Spatialite, adicione uma nova coluna de geometria. Supondo que você queira WGS84 (lat / lon)

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

Em seguida, crie a geometria do WKT gerada a partir das coordenadas X / Y

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

Talvez haja uma maneira de agrupar isso em uma função qgis / spatialite / spatialite-gui, como eu pareço usar isso com bastante frequência e é fácil errar as aspas.

EDITAR -----

Na verdade, há uma maneira mais infalível que descobri recentemente - para a segunda declaração, use:

update yourTableName set geometryColumnName = MakePoint(XColumn,YColumn,EPSG projectioncode)
Stev_k
fonte
InitSpatialMetadataPara converter um banco de dados sqlite3 simples em um espacial, um merece ser mencionado. Você precisa fazer isso na transação ou adicionar argumento 1( select InitSpatialMetadata(1)), caso contrário, leva muito tempo (meia hora no meu computador).
Jan Hudec
Isso funcionou bem - mas para pessoas como eu menos familiarizadas com o Spatialite / SQL, vale a pena acrescentar que (eu achei isso) a primeira instrução requer 'SELECT' antes dela. Então, selecione AddGeometryColumn (... etc ...). Além disso, o nome da tabela e o nome da coluna de geometria podem ter aspas simples (? Deveriam ter?) Ao seu redor - portanto, o nome da sua tabela seria 'nome da sua tabela' e geometryColumnName seria 'geometryColumnName'.
Rostranimin
4

Como o QGIS pode ler as camadas do OGR, tente usar o Formato Virtual do OGR: http://gdal.org/ogr/drv_vrt.html .

Crie um arquivo de texto com o seguinte conteúdo e abra-o como camada de vetor no QGIS (Camada -> Adicionar camada de vetor). Apenas substitua o nome da tabela e os nomes das colunas de latitude e longitude de acordo com a tabela do banco de dados. É recomendável armazenar o arquivo com o sufixo .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
fonte
1

Use a caixa de diálogo "adicionar vetor ..." padrão ou arraste e solte o arquivo .db na tela do QGIS.

Giovanni Manghi
fonte
Isso funciona para adicionar a tabela apenas como uma camada não espacial ... como plotar os pontos como faria para uma camada de texto delimitada, identificando colunas x / y (lon / lat)?
Simbamangu 28/01
1
Não sei se existe uma maneira de transformar qualquer coluna x / y em qualquer tabela em uma nova camada de pontos, acho que não (seria um novo recurso interessante). Enquanto isso, salve sua tabela Sqlite no csv e importe-a novamente. Com o plug-in "xytools", você também pode importar tabelas xls e ods.
Giovanni Manghi 02/02/12
Concordo que seria uma boa ideia para um plugin. Há muitas pessoas que têm apenas uma tabela sqlite e desejam usá-la como está.
Andrej
0

Maneira artesanal: a) Maneira de Giovanni-Manghi, mais b) Importe o XYlayer novamente para o seu SQlite e, em seguida, c) Apague a tabela anterior no seu SQlite

Carlos Rivas
fonte