Más

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

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


He convertido un shapefile con atributos a .kml para un cliente. Luego, el .kml y los atributos se editaron en Google Earth. Recibí el .kml actualizado y ahora necesito volver a .shp. El problema es: todos mis atributos ahora están en formato html, lo que hace que el cuadro de información emergente en Google Earth. Cuando trato de convertir de nuevo a .shp, mis atributos se agrupan en un campo "Descripción" (creado por Google). Y TODOS mis atributos e información están agrupados 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 deshacerme del formato html y hacerlo utilizable?

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

Estoy usando ArcGIS Desktop 10.2.


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 shapefile con el esquema intacto. Simplemente seleccione el Esquema dinámico opción en el asistente de creación de herramientas:


una solución alternativa sería analizar el campo de descripción para los valores de los diversos campos de atributos que necesita y copiarlos en los campos correspondientes. Y la próxima vez, haz que tu cliente agregue atributos en una hoja de cálculo de Excel o algo así para que puedas unirlo nuevamente a tu shapefile para actualizarlo.


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 "Keyhole Markup Language (KML)" Busque el KML que desea importar y haga clic en Abrir. Guarde los objetos importados de KML en un Shapefile. Al importar el shapefile en ArcMap, verá todos los atributos mantenidos.


Esta herramienta, Export to 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.


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 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 según las etiquetas HTML y la longitud de los 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. Identifique el campo de descripción. En mis datos se llama "PopupInfo"
  4. En el primer registro, haga clic con el botón 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 de la ventana emergente.
  6. Utilice ctrl-F para encontrar el nombre del campo en KML / KMZ (en mi caso, "FECHA"). Aquí hay una captura de pantalla que muestra solo la línea del HTML que me interesa.
  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. Determina cuántos caracteres quieres 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 por el lado del más largo. Editar: puede eliminar los caracteres adicionales más tarde manualmente o usando las funciones instr () y rtrim () VB. Envíeme un mensaje o envíeme un mensaje si necesita ayuda con eso.
  9. En arcMap, agregue un nuevo campo de 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 mis nombres de campo por los suyos (de los pasos 3 y 6) y cambie la longitud de los números 15 y 19 por la longitud de sus subcadenas (que se encuentran en los pasos 7 y 8).

En la línea VB de arriba:

  • [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 deseo 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 retener.

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.


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

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

  2. Utilice .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's para todas las filas, luego divida y cree nuevas listas como con el cursor de búsqueda

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


bugmenot123 ya lo mencionó, pero ogr2ogr puede convertir entre shapefiles y kml.

¿Conversión entre formato KML y shapefile (SHP)? cubre cómo convertir entre los dos.


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

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


Todavía no existe una solución sencilla 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-conversión-en-arcgis-for-desktop

convertir-kml-a-shapefile-sin-perder-datos-de-atributos

La 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 utilice la herramienta KML a capa 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 ".


Ver el vídeo: How to convert KML to Shapefile Import Shapefile into ArcGIS from Google Earth