Convertendo KML em shapefile sem perder atributos usando o QGIS?

29

Eu tenho um arquivo KML com centenas de pontos. Para cada ponto, há informações, como Nome, Potência, Idade (é um mapa das usinas hidrelétricas). Se eu importar esse arquivo KML para o QGIS, essas informações serão perdidas.

Existe uma maneira de manter essas informações?

As informações são assim:

<ExtendedData>
 <SchemaData schemaUrl="#vorlage">
  <SimpleData name="Name">Test</SimpleData>
  <SimpleData name="Power">10895</SimpleData>
  <SimpleData name="Location">L</SimpleData>
 </SchemaData>
</ExtendedData>

Há algo de errado com o meu código?

Felix
fonte
1
Como você está importando o .kmlpara o QGIS? Esse formato é suportado como um dos formatos básicos; portanto, deve ser um processo relativamente simples adicionar um kmlarquivo como uma camada. Se você fornecer mais detalhes, alguém poderá ajudar a descobrir o que está errado. Também informações sobre a origem do arquivo podem ser úteis.
Get Spatial
1
você tem um link ao vivo para o kml?
Mapperz
Eu acho que seria possível via FME, ou se você se sentir um pouco adventurus, poderá escrever um script python que analise o kml (xml!) E exporte para o shapefile. (bibliotecas de usar: biblioteca shapefile python, qualquer XML a partir de python)
U2ros
2
RK sim, eu vi esse. Embora eu tenha decidido fazer uma nova pergunta com uma melhor descrição do problema, porque não há uma solução satisfatória para ele. Também após o outro círculo de experimentar o problema pode ser que os pântanos arquivos KML não são válidos KML quando testado no validador KML on-line e vêm com muitos erros ...
Miro
1
U2ros Eu tentei o FME online sem sucesso. Talvez o FME de desktop, eu possa experimentá-lo na próxima "rodada de instalação" ... Definitivamente, não me sinto aventureiro o suficiente para programar scripts que converterão kml em shp :-). Mas, na pior das hipóteses, posso imaginar escrever scripts que passarão pelo KML, encontrar "ExtendedData" para cada recurso e criar a tabela / csv na qual eu possa ingressar através do "name" para converter o KML em QGIS / ArcGIS / Mapinfo ...
Miro

Respostas:

15

O ExtendedData não possui valores corretos de "nome".

Por exemplo

<Data><displayName>System</displayName><value>Riverine</value></Data>

não é importado pelo GDAL e Qgis Master, enquanto

<Data name="System"><displayName>System</displayName><value>Riverine</value></Data>

é importado.

Você pode mudar isso com um bom editor de texto.

Adicionado por Miro ---------------------

Para a edição KML, é necessário usar o editor de texto, que permite "Expressão Regular" na função Substituir, como PSPad (ou Notepad ++ e muitos outros editores de texto livre)

Encontrar: <Data><displayName>(.*)</displayName>

Substituir: <Data name="$1"><displayName>$1</displayName>

Depois disso, use o QGIS (a chave é a versão "nova" - incluída a versão 1.9.2 do GDAL) e "Adicionar camada vetorial" e a camada será carregada com todos os "Dados estendidos".

AndreJ
fonte
Obrigado, essa foi a principal informação. Tentei substituí-lo em um arquivo de teste e funcionou perfeitamente. Todos os "ExtendedData" agora estão na tabela como colunas. Mais uma vez muito obrigado.
Miro
3
Na verdade, DisplayName não é usado pelo Qgis. Portanto, a substituição pode ser feita sem o RegExp, substituindo <Data> <DisplayName> por <Data name = "e substituindo </DisplayName> por">.
7114 AndreJ
1
Meu arquivo KML também continha uma tag <SchemaData> que eu tive que comentar para abri-lo no QGIS. Mas, caso contrário, o truque funcionou perfeitamente!
Djana
8

Eu converti um dos arquivos da zona úmida com globalmapper para o formato: incluí duas capturas de tela dos arquivos dbf convertidos (áreas e linhas): insira a descrição da imagem aqui

insira a descrição da imagem aqui

espero que seja isso que você quer ..

Kurt
fonte
Obrigado, sim, é exatamente isso que eu preciso. É bom saber que existem softwares que podem lidar com esses KML que não são compatíveis com os padrões KML. Como já existe outra resposta sobre como fazer isso com o QGIS gratuito, não vou experimentar o Global Mapper, mas ele definitivamente pode ajudar outra pessoa. Mais uma vez obrigado.
Miro
Realmente um conversor fantástico, legal !!
24515 SIslam
6

Você pode usar o software Global Mapper no qual é possível exportar / importar facilmente arquivos kml / kmz + anexar dados e vários formatos de vetor e rasterização .. É um dos melhores softwares.

http://www.bluemarblegeo.com/global-mapper/product/formats.php

Sunil
fonte
Obrigado pela dica. Eu acredito que ele pode importar / exportar arquivos kml / kmz, mas eu já tentei mais de 5 aplicativos que podem fazer isso. E nenhum deles é capaz de ler atributos ("ExtendedData"). Então, na verdade, o Global Mapper pode fazer isso?
Miro
5

Parece que o libkml do Google não é fornecido com o GDAL 1.9.2 no Ubuntu, especificamente o gdal-bin 1.9.2-2 ~ precision4:

$ ogrinfo --formats | grep -i kml
  -> "KML" (read/write)

Para obter uma versão trabalhando com libkml e ExtendedDatasuporte, tive que criar o GDAL a partir do svn trunk (r25473) depois de compilar o libkml a partir do svn trunk (r864), observando especificamente que a versão 1.2.0 aparentemente não é suficiente, conforme documentado no site da GDAL . libkml0Lembre-se de que a instalação precisa no Ubuntu (atualmente 1.2.0-1ubuntu6) não ajudará. Você realmente precisa de tronco 1.3 ou svn, para o qual não consegui encontrar um PPA.

Eu finalmente fui incapaz de criar o libkml no Ubuntu com precisão; há erros de tipo na versão do boost que é fornecida com ele e erros ao executar o libtool porque as dependências estão fora de ordem. Por alguma razão, estes não foram um problema no aperto do Debian, onde eu consegui:

$ ogrinfo --formats | grep -i kml
  -> "LIBKML" (read/write)
  -> "KML" (read/write)

Depois que eu comecei, correr ogr2ogr -f "ESRI Shapefile" foo.shp foo.kmlme deu um shapefile que o qgis foi capaz de importar, preservando os ExtendedDataatributos.

CavaloPunchKid
fonte
5

O driver Ogr2ogr kml usado pelo Qgis 1.8.0 Lisboa não suporta tags kml ExtendedData.

O driver LIBKML, ele é incorporado no GDAL Versão 1.9.2 em diante, pacotes OSGEO4W, MS4W e Qgis Master.

Seus dados não estão errados, mas o driver LIBKML no OSGeo4W teve alguns problemas com o SchemaData. Como alternativa, o seguinte funciona:

<ExtendedData>
 <Data name="Name"><value>Test</value></Data> 
 <Data name="Power"><value>10895</value></Data>
 <Data name="Location"><value>L</value></Data> 
</ExtendedData>

EDIT: O bug SchemaData agora está corrigido no pacote GDAL 1.9.2-2 do OSGEO4W.

AndreJ
fonte
4

Usando o FME 2012 (SP4)

Carregue o KML do Reader

Selecione um gravador (Shapefile)

conectar os itens e selecionar gravação ( copiar atributos dos tipos de recurso )

Execute a área de trabalho

insira a descrição da imagem aqui

Mapperz
fonte
Obrigado, baixei o arquivo fme_install.msi, mas há um erro na instalação e, como já existe uma solução de trabalho diferente para essa pergunta, não vou continuar dessa maneira. De qualquer forma, obrigado novamente.
Miro
1

Não sei se você pode conseguir isso com o QGIS. O MapWindow possui um plug- in KML2Shapefile .

O KML2Shapefile é um plug-in para o MapWindow GIS que converte arquivos KML e KMZ do Google Earth em shapefiles para uso em um GIS.

O KML2Shapefile dividirá cada tipo de geometria KML em um shapefile separado. Ele suporta geometrias complexas e é capaz de apresentar grande parte do KML como dados de atributo.

MapWindow é um pacote GIS gratuito e de código aberto. Você pode fazer o download e instalá-lo gratuitamente. Você pode converter o KML em shapefile usando o plug-in KML2Shapefile no MapWindow e apenas carregar o arquivo de forma resultante no QGIS. Supondo que você esteja no Windows de qualquer maneira.

Melhor solução que posso pensar por enquanto. Espero que alguém conheça um plugin para fazê-lo no QGIS.

RK
fonte
1
Obrigado pela ajuda. Tentei isso, mas ainda assim os dados são perdidos. As informações são assim: <ExtendedData> <SchemaData schemaUrl = "# vorlage"> <SimpleData name = "Name"> Teste </SimpleData> <SimpleData name = "Power"> 10895 </SimpleData> <SimpleData name = "Location"> L </SimpleData> </SchemaData> </ExtendedData> há algo de errado com o meu código?
Felix
Oh, desculpe por isso. Eu esperava que funcionasse.
RK
1
@ Felix - As informações que você forneceu no seu comentário são realmente úteis. Eu recomendaria editar sua pergunta e adicioná-la para um contexto e clareza adicionais.
Get Spatial
@AndreJoost - Parece que você encontrou uma boa resposta. Vale a pena adicioná-lo como uma resposta real para que apareça nos resultados de pesquisa de qualquer outra pessoa com o mesmo problema.
Get Spatial
1

Obtenha o Global Mapper, basta trazer o KMZ ou KML e exportar o Vector IMG (arquivo ESRI SHP). O mapeador global pode ler a maioria dos tipos de arquivo. Em seguida, abra a forma no ARC, mapeador global, Manifold, QGIS, ect e visualize a tabela de atributos. Todas as informações estarão lá. você também pode abrir o arquivo DBF do SHP com Microsoft Excel neste momento e salvar como extensão de arquivo XLXS, se desejar.

Ron Paul
fonte
1

No QGIS 3.2.0, a conversão pode ser feita com facilidade usando a Caixa de Ferramentas.

Selecione na Caixa de ferramentas -> GDAL -> Conversão de Vetor -> Converter Formato .... (Lista de Processos -> GDAL -> Conversão Vectorial -> Converter Formato)

Selecione o arquivo KML, salve como arquivo SHP. Eu também tive que alterar o arquivo de resulkting ("Convertido") em Propriedades -> Origem (guia) -> Codificação de origem de "UTF-8" para "Windows-1258" para ver corretamente os caracteres em espanhol.

Andres Bodini
fonte