De .shp a .kml a .shp sem perder atributos

10

Eu converti um shapefile com atributos para um .kml para um cliente. O .kml e os atributos foram editados no google earth. Recebi o .kml atualizado e agora preciso recuperá-lo .shp. O problema é: todos os meus atributos agora estão no formato html, o que torna a caixa de informações pop-up no google earth. Quando tento converter de volta para .shp, meus atributos são agrupados em um campo "Descrição" (criado pelo Google). E TODOS os meus atributos e informações são agrupados em uma única célula. Existe alguma maneira de extrair os dados do campo "Descrição". Mesmo se eu fizer isso, existe uma maneira fácil de se livrar do formato html e torná-lo utilizável?

É isso que recebo usando o método "Fusion Table" que encontrei em alguns fóruns. Você pode ver o html à esquerda, ele continua além do que mostra.

http://s6.postimg.org/uf7jeuksh/problems.png

Estou usando o ArcGIS Desktop 10.2.

Katie B.
fonte
O que você usa para converter entre os formatos? Você pode tentar ogr2ogr ou QGIS?
bugmenot123

Respostas:

3

Acabei de confirmar que uma ferramenta ETL espacial criada usando a extensão de interoperabilidade de dados trará os atributos do seu arquivo KML / KMZ de volta para um shapefile com o esquema intacto. Basta selecionar a opção Esquema dinâmico no assistente de criação de ferramentas:

Etapa ETL espacial


uma solução alternativa seria analisar o campo de descrição dos valores dos vários campos de atributos necessários e copiá-los nos campos apropriados. E da próxima vez, peça ao seu cliente para adicionar atributos em uma planilha do Excel ou algo assim, para que você possa juntá-lo novamente ao seu shapefile para atualização.

Adão
fonte
1
Eu acho que é a minha única solução neste momento. Mas definitivamente incluirei uma planilha do Excel na próxima vez!
Katie B.
Você tem acesso à extensão de interoperabilidade de dados do ArcGIS? Não tenho experiência com isso para esta edição, mas pode haver escritores que podem remapear seus argumentos #
Adam Adam
O FME da Safe Software (na qual a interoperabilidade de dados se baseia) também fará o que você precisa, mas também é caro.
Adam
3

Eu tive que abrir o kml no QGIS primeiro e salvar como um shapefile e ele manteve os atributos. No QGIS, adicione dados vetoriais e, em Procurar, defina os arquivos do tipo como "Keyhole Markup Language (KML)". Navegue até o KML que deseja importar e clique em Abrir. Salve os objetos importados do KML em um Shapefile. Ao importar o shapefile no ArcMap, você verá todos os atributos mantidos.

ketar
fonte
2

Essa ferramenta, Exportar para KML, desenvolvida por Kevin Martin, faz o trabalho.

Existem alguns problemas com os estilos, mas pelo menos cores e atributos estão corretos, e há muitas opções para brincar com os atributos, rótulos, etc.

Pedraz
fonte
2

Eu só precisava de um dos campos, que continha uma sequência de datas. Usando o arcMap, consegui resolver isso usando a calculadora de campo para extraí-lo. Se você precisar extrair apenas alguns campos, isso pode funcionar para você, embora um pouco entediante:

As etapas a seguir ajudarão você a criar uma linha de VB para usar na calculadora de campo para cortar uma sub-string do campo de descrição com base nas tags HTML e na quantidade de dados armazenados em sua tabela.

  1. No GoogleEarth, abra seu KML / KMZ, clique em um recurso para abrir o pop-up. Identifique o nome exato do campo que você deseja recuperar. O meu é chamado "DATE"
  2. No ArcMap, abra a tabela de atributos da camada que você criou ao importar o KML / KMZ.
  3. Identifique o campo de descrição. Nos meus dados é chamado "PopupInfo"
  4. No primeiro registro, clique com o botão direito do mouse na célula "PopupInfo" e clique em "copiar"
  5. Abra o Bloco de notas e cole o conteúdo da célula. Agora você verá o HTML do pop-up.
  6. Use ctrl-F para encontrar o nome do campo no KML / KMZ (no meu caso, "DATE"). Aqui está uma captura de tela mostrando apenas a linha do HTML que me interessa. insira a descrição da imagem aqui
  7. Conte o número de caracteres, incluindo espaços, desde o início do nome do campo até o início dos seus dados. No meu caso, existem 15 caracteres.
  8. Determine quantos caracteres você deseja extrair. Para minha substring, preciso de 19. Por exemplo, se você só precisa de códigos de estado como AZ e WY, pode precisar apenas de 2. Se seus dados não tiverem entradas de comprimento consistentes nesse campo, erre no lado mais longo. Editar: você pode remover os caracteres extras posteriormente manualmente ou usando as funções VB instr () e rtrim (). Poste ou envie uma mensagem se precisar de ajuda com isso.
  9. No arcMap, adicione um novo campo TEXTO à sua camada e certifique-se de fornecer pelo menos quantos caracteres você precisará para seus dados. O padrão é 50.

  10. Em seguida, abra a calculadora de campo para o seu novo campo. O início dos dados é encontrado usando a função InStr () e os dados são extraídos usando a função Mid (). Digite o seguinte comando VB:

    Mid([PopupInfo],InStr([PopupInfo],"DATE")+15,19)

Obviamente, troque meus nomes de campo pelos seus (das etapas 3 e 6) e altere o comprimento dos números 15 e 19 para o comprimento das substrings (encontradas nas etapas 7 e 8).

Na linha VB acima:

  • [PopupInfo] é o nome do campo irritante que contém o HTML para o pop-up KML.
  • "DATE" é o nome do campo KML e a tag HTML que contém os dados que desejo extrair.
  • 15 é o número de caracteres desde o início da tag de data até o início dos dados da data real.
  • 19 é o número de caracteres na sequência de datas que queremos manter.
JMers
fonte
1

Aqui está um guia que eu descobri que mostra algumas etapas usando o ArcMap, o Google Drive Fusion Tables e o MS Excel para converter arquivos KML em arquivos .shp, preservando os atributos.

Link para o site que possui o guia .

Cameron Sloan
fonte
Sim, mas isso não resolve o meu problema. Meus atributos ainda são agrupados no campo "Descrição" no formato html. A ferramenta KML to Layer não funciona para a minha situação. Eu até tentei outros arcscripts.
Katie B.
Veja minha resposta editada.
Cameron Sloan
Mais uma vez, a imagem que vinculei na minha pergunta original é o meu resultado ao usar o método da tabela de fusão. Não funciona para a minha situação.
Katie B.
Você o trouxe para o Excel?
Cameron Sloan
Sim, mesmo problema. Acabei de encontrar outro site do fórum em que outra pessoa está tendo o mesmo problema. Parece que terei que percorrer as 1000 linhas de script e excluir o código ou tentar fazer uma "localização e substituição". Agradeço sua ajuda.
Katie B.
1

Consegui fazer isso funcionar usando cursores e listas para dividir o campo xml PopupInfo em valores úteis

  1. use o KML arcpy para colocar a ferramenta em camadas e as ferramentas de projeto para acessar o sistema de coordenadas desejado (tive problemas ao adicionar campos à saída de conversão original, o que pode ser devido ao arquivo de camada associado a ela)

  2. Use .da.SearchCursor para obter a seqüência de caracteres PopupInfo da primeira linha. Em seguida, divida-o em uma lista baseada em '<', exclua os dois primeiros valores (o campo de marcador do Google Earth) e coloque os valores restantes que possuem a tag 'td>', mas não a tag de fechamento 'td>' em uma nova lista de nomes de campos (índices pares) e valores de campos (índices ímpares)

  3. Percorra a lista de nomes de campos com arcpy.AddField_management para adicionar todos os campos (pule se eles já existirem)

  4. Use .da.UpdateCursor para obter PopupInfo para todas as linhas, depois divida e crie novas listas, como no cursor de pesquisa

  5. dessa vez, use todos os valores de índice ímpares para atualizar linhas (se i% 2 <> 0: linha [(i-1) / 2] = lista [i]) e, em seguida, cursor.updateRow (linha)

Dylan Warburg
fonte
0

ATUALIZAÇÃO: se você encontrar esse tópico com o mesmo problema, existe uma ferramenta disponível para você! Confira https://mygeodata.cloud/

Eu trabalho muito bem. Consegui fazer upload do meu KML e o shapefile exportado tinha todos os meus atributos corretamente em seus próprios campos. A única desvantagem é que há um número limitado de conversões "gratuitas".

JMers
fonte
-3

Ainda não há uma solução simples para esse problema de conversão. Foi solicitado aqui várias vezes nos últimos anos:

kml-in-qgis-com-dados-adicionais

preservando-atributos-durante-kml2shp-conversão-em-arcgis-para-desktop

converter-kml-para-shapefile-sem-perder-atributo-dados

A explicação da esri para a ferramenta de conversão KmltoLayer:

"Como o 'proprietário' da ferramenta KML da Esri, posso dizer: Os elementos ExtendedData dentro de um KML não serão convertidos em atributos de campo ao usar a ferramenta KML to Layer com o ArcGIS em qualquer versão (9.3-10.3). Isso inclui o ArcMap em Windows ou ArcGIS Server no Linux. Há uma solicitação de aprimoramento para dar suporte a isso, que estamos considerando para uma versão futura. "

sirgeo
fonte
2
Ei - Eu me ofendo pessoalmente com a sua resposta. Se você deseja copiar e colar meus comentários e colocá-los entre aspas, certamente NÃO adicione seu próprio comentário sobre a compra de uma extensão.
KHibma
@sirgeo, definitivamente há uma solução para esse problema, na extensão de interoperabilidade de dados. Parece que essa não é uma solução que você gosta.
Adam