De .shp a .kml a .shp sin perder atributos

10

He convertido un archivo de forma con atributos a un .kml para un cliente. El .kml y los atributos se editaron en google earth. Recibí el .kml actualizado y ahora necesito regresarlo a .shp. El problema es: todos mis atributos están ahora en formato html, lo que hace que el cuadro de información emergente en Google Earth. Cuando intento convertir de nuevo a .shp, mis atributos se agrupan en un campo "Descripción" (creado por Google). Y TODOS mis atributos e información se agrupan en una sola celda. ¿Hay alguna forma de extraer los datos del campo "Descripción"? Incluso si hago eso, ¿hay una manera fácil de deshacerse del formato html y hacerlo utilizable?

Esto es lo que obtengo usando el método de "Tabla de Fusión" que encontré en algunos foros. Puede ver el html a la izquierda, continúa más allá de lo que muestra.

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

Estoy usando ArcGIS Desktop 10.2.

Katie B.
fuente
¿Qué utilizas para convertir entre los formatos? ¿Puedes probar ogr2ogr o QGIS en su lugar?
bugmenot123

Respuestas:

3

Acabo de confirmar que una herramienta ETL espacial creada con la extensión de interoperabilidad de datos devolverá los atributos de su archivo KML / KMZ a un archivo de forma con el esquema intacto. Simplemente seleccione la opción Esquema dinámico en el asistente de creación de herramientas:

Paso espacial de ETL


una solución sería analizar el campo de descripción de los valores de los diversos campos de atributos que necesita y copiarlos en los campos apropiados. Y la próxima vez, haga que su cliente agregue atributos en una hoja de cálculo de Excel o algo así para que pueda volver a unirlo a su shapefile para actualizarlo.

Adán
fuente
1
Creo que esa es mi única solución en este momento. ¡Pero definitivamente incluiré una hoja de cálculo de Excel la próxima vez!
Katie B.
¿Tiene acceso a la extensión de interoperabilidad de datos para ArcGIS? No tengo experiencia con él para este problema, pero puede haber escritores allí que pueden reasignar sus attirbutes
Adam
FME de Safe Software (en el que se basa la interoperabilidad de datos) también hará lo que necesita, pero también es costoso.
Adam
3

Primero tuve que abrir el kml en QGIS y guardarlo como un shapefile y mantuvo los atributos. En QGIS, Agregue datos vectoriales y, en Examinar, configure los archivos de tipo en "Lenguaje de marcado de ojo de cerradura (KML)" Busque el KML que desea importar, luego haga clic en Abrir. Guarde los objetos importados de KML en un Shapefile. Al importar el shapefile en ArcMap, verá todos los atributos mantenidos.

ketar
fuente
2

Esta herramienta, Exportar a KML desarrollada por Kevin Martin hace el trabajo.

Hay algunos problemas con los estilos, pero al menos los colores y los atributos son correctos, y hay muchas opciones para jugar con los atributos, etiquetas, etc.

Pedraz
fuente
2

Solo necesitaba uno de los campos, que contenía una cadena de fecha. Usando arcMap, pude resolver esto usando la calculadora de campo para extraerlo. Si solo necesita extraer un par de campos, esto puede funcionar para usted, aunque sea un poco tedioso:

Los siguientes pasos lo ayudarán a construir una línea de VB para usar en la calculadora de campo para cortar una subcadena del campo de descripción en función de las etiquetas HTML y la cantidad de datos almacenados en su tabla.

  1. En GoogleEarth, abra su KML / KMZ, haga clic en una función para abrir la ventana emergente. Identifique el nombre exacto del campo que desea recuperar. El mío se llama "FECHA"
  2. En ArcMap, abra la tabla de atributos de la capa que creó cuando importó el KML / KMZ.
  3. Identifica el campo de descripción. En mis datos se llama "PopupInfo"
  4. En el primer registro, haga clic derecho en la celda "PopupInfo" y haga clic en "copiar"
  5. Abra el Bloc de notas y pegue el contenido de la celda. Ahora verá el HTML para la ventana emergente.
  6. Use ctrl-F para encontrar el nombre del campo de KML / KMZ (en mi caso, "FECHA"). Aquí hay una captura de pantalla que muestra solo la línea del HTML que me interesa. ingrese la descripción de la imagen aquí
  7. Cuente el número de caracteres, incluidos los espacios desde el comienzo del nombre del campo hasta el comienzo de sus datos. En mi caso hay 15 caracteres.
  8. Determine cuántos caracteres desea extraer. Para mi subcadena, necesito 19. Por ejemplo, si solo necesita códigos de estado como AZ y WY, es posible que solo necesite 2. Si sus datos no tienen entradas de longitud consistentes en este campo, errar en el lado del más largo. Editar: puede eliminar los caracteres adicionales más tarde manualmente o utilizando las funciones VB instr () y rtrim (). Publica o envíame un mensaje si necesitas ayuda con eso.
  9. En arcMap, agregue un nuevo campo TEXTO a su capa y asegúrese de darle al menos tantos caracteres como necesite para sus datos. El valor predeterminado es 50.

  10. Luego, abra la calculadora de campo para su nuevo campo. El inicio de los datos se encuentra usando la función InStr (), y los datos se extraen usando la función Mid (). Escriba el siguiente comando VB:

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

Por supuesto, cambie los nombres de mis campos por los suyos (de los pasos 3 y 6) y cambie la longitud de los números 15 y 19 a la longitud de sus subcadenas (que se encuentran en los pasos 7 y 8).

En la línea VB anterior:

  • [PopupInfo] es el nombre del campo molesto que contiene el HTML para la ventana emergente KML.
  • "FECHA" es el nombre del campo KML y la etiqueta HTML que contiene los datos que quiero extraer.
  • 15 es el número de caracteres desde el inicio de la etiqueta de fecha hasta el inicio de los datos de la fecha real.
  • 19 es el número de caracteres en la cadena de fecha que queremos conservar.
JMers
fuente
1

Aquí hay una guía que encontré que lo guía a través de algunos pasos usando ArcMap, Google Drive Fusion Tables y MS Excel para convertir archivos KML a archivos .shp mientras conserva los atributos.

Enlace al sitio que tiene la guía .

Cameron Sloan
fuente
Sí, pero eso no resuelve mi problema. Mis atributos aún se agrupan en el campo "Descripción" en formato html. La herramienta KML to Layer no funciona para mi situación. Incluso he probado otros arcscripts.
Katie B.
Ver mi respuesta editada.
Cameron Sloan
Una vez más, la imagen que vinculé en mi pregunta original es mi resultado cuando uso el método de la tabla de fusión. No funciona para mi situación.
Katie B.
¿Lo trajiste a Excel?
Cameron Sloan
Sí, el mismo problema. Acabo de encontrar otro sitio de foro donde alguien más está teniendo el mismo problema. Parece que tendré que pasar por las 1000 líneas de script y eliminar el código o intentar hacer un "buscar y reemplazar". Agradezco su ayuda.
Katie B.
1

He podido hacer que esto funcione usando cursores y listas para dividir el campo XML PopupInfo en valores útiles

  1. use el KML de arcpy para la herramienta de capas y las herramientas de proyecto para ingresar al sistema de coordenadas deseado (me encontré con problemas para agregar campos a la salida de conversión original, lo que puede deberse al archivo de capa asociado con él)

  2. Use .da.SearchCursor para obtener la cadena PopupInfo de la primera fila. Luego, divídalo en una lista basada en '<', elimine los dos primeros valores (el campo de etiqueta de Google Earth) y coloque los valores restantes que tienen la etiqueta 'td>' pero no la etiqueta de cierre 'td>' en una nueva lista de nombres de campo (índices pares) y valores de campo (índices impares)

  3. Recorra la lista de nombres de campo con arcpy.AddField_management para agregar todos los campos (omita si ya existen)

  4. Use .da.UpdateCursor para obtener PopupInfo para todas las filas, luego divida y cree nuevas listas al igual que con el cursor de búsqueda

  5. esta vez, use todos los valores de índice impares para actualizar las filas (si i% 2 <> 0: fila [(i-1) / 2] = lista [i]) y luego cursor.updateRow (fila)

Dylan Warburg
fuente
0

ACTUALIZACIÓN: si te encuentras con este hilo con el mismo problema, ¡hay una herramienta para ti! Echa un vistazo a https://mygeodata.cloud/

Yo trabajo muy bien Pude subir mi KML y el archivo de forma exportado tenía todos mis atributos correctamente en sus propios campos. El único inconveniente es que hay un número limitado de conversiones "gratuitas".

JMers
fuente
-3

Todavía no hay una solución simple para este problema de conversión. Se ha preguntado aquí varias veces en los últimos años:

kml-en-qgis-con-datos-adicionales

preservar-atributos-durante-kml2shp-conversion-in-arcgis-for-desktop

convertir-kml-a-archivo-forma-sin-perder-atributo-datos

Explicación de esri para su herramienta de conversión KmltoLayer:

"Como 'propietario' de la herramienta KML en Esri puedo decir: Los elementos ExtendedData dentro de un KML no se traducirán en atributos de campo cuando se use la herramienta KML to Layer con ArcGIS en cualquier versión (9.3-10.3). Esto incluye ArcMap en Windows o ArcGIS Server en Linux. Hay una solicitud de mejora para admitir esto que estamos considerando para una versión futura ".

sirgeo
fuente
2
Oye, me ofende personalmente tu respuesta. Si va a copiar y pegar mis comentarios y ponerlos entre comillas, no agregue sus propios comentarios sobre la compra de una extensión.
KHibma
@sirgeo definitivamente hay una solución a este problema, en la extensión de interoperabilidad de datos. Simplemente parece que esta no es una solución que te guste.
Adam