11 votos

¿Copiar atributos de una capa de polígonos a otra?

Tengo un problema que no puedo entender. Tengo dos capas de polígonos:

  • Polígono A - es un subconjunto de polígono B con los mismos campos y tiene polígonos idénticos a Polígono B
  • Polígono B - tiene los datos de atributos que quiero que estén en Polígono A

¿Cómo se puede hacer esto?

Intenté la herramienta QGIS "Unir atributos por ubicación" pero como algunos de los polígonos están dentro de otros, tiende a enlazar con la primera intersección que encuentra (el polígono exterior).

0 votos

Crear centroides (puntos) del Polígono A y unir los atributos a B y exportar a un archivo nuevo para preservar los atributos de A.

3 votos

@Mapperz Este es un enfoque peligroso, porque puede producir errores a pesar de que normalmente generará una respuesta probable. Si los polígonos se superponen entre sí, todas las apuestas están canceladas. Incluso cuando no hay superposiciones, es posible que el centroide de un polígono se encuentre dentro de un polígono diferente (que no se superpone). La corrección solo se puede asegurar en general cuando todos los polígonos en A no se superponen y son convexos.

0 votos

+1 @ Diego - ¡tu pregunta llevó a una discusión/debate bastante interesante; ¡uno interesante en efecto!

9voto

cjstehno Puntos 131

@Dano plantea con razón algunos problemas que son mejor abordados en una respuesta completa.

Una dificultad, ya señalada por @Celenius, es que una unión entre B y A (en cualquier dirección) duplica todos los campos; puede ser oneroso corregir esto. He sugerido en comentarios que la forma obvia y fácil (exportar a una hoja de cálculo) plantea preguntas sobre la integridad de los datos. Otra dificultad, ya abordada por la propuesta de Celenius, se refiere a resolver este problema cuando ninguna combinación de atributos puede servir como clave para tanto A como B, ya que eso impide una unión de bases de datos. La unión espacial resuelve ese problema.

¿Entonces, cuál es una buena solución? Un enfoque utiliza A para identificar los registros correspondientes de B que contienen los datos deseados. Dependiendo de las suposiciones sobre las configuraciones de los polígonos -si se superponen, si algunos pueden contener a otros, etc.- esto se puede llevar a cabo de varias maneras: usando una capa para seleccionar objetos en la otra, o mediante uniones. El punto aquí es que todo lo que queremos hacer en esta etapa es seleccionar el subconjunto de B correspondiente a A.

Habiendo logrado esa selección, exporta la selección y deja que reemplace a A. Hecho.

Esta solución asume que todos los campos de B están destinados a reemplazar a sus homólogos en A. Si no es así, entonces realmente es necesario realizar una unión 1-1 de B (origen) a A (destino). La unión basada en identificadores es la mejor, pero hacer una unión en la identidad de polígonos (Celenius) funciona bien si los identificadores no están disponibles y no hay posibilidad de que las formas de los polígonos correspondientes en A y B puedan diferir, aunque sea ligeramente. (Este es un punto sutil, y la causa potencial de errores insidiosos, porque ediciones anteriores en B a polígonos que no corresponden a A podrían modificar invisiblemente los otros polígonos en B si el GIS está "ajustando" o "manteniendo la topología" u haciendo automáticamente cambios globales durante ediciones locales.)

En este momento, hay dos copias de cada campo: si [Foo] es un campo común para A y B, entonces la unión contiene A.[Foo] y B.[Foo]. Usando un cálculo de campo, copia B.[Foo] en A.[Foo]. Repite para todos los campos necesarios. Después de esto, elimina la unión.

Aunque este procedimiento puede ser un poco oneroso cuando intervienen muchos campos, sus méritos incluyen

  • Es directo y rápido de automatizar.
  • La automatización de este proceso deja un rastro de auditoría documentando el procesamiento realizado en los datos. Esto es crucial para proteger la integridad de los datos.
  • Defiende contra algunos tipos de errores generalizados, como retener el campo incorrecto después de la unión (manteniendo así los datos antiguos en lugar de los nuevos datos para ese campo) o eliminar un campo crucial.
  • Aprovecha las defensas incorporadas ofrecidas por el sistema de gestión de base de datos, como la aplicación de tipos de datos y reglas comerciales, que operan para prevenir e identificar errores y mantener la consistencia entre todas las tablas y capas de la base de datos.

Algunos de los principios orientadores involucrados en esta sugerencia son

  1. Utiliza tu sistema de gestión de base de datos para procesar datos en lugar de utilizar software no diseñado o inadecuado para esta tarea.
  2. Evita cambiar las estructuras de la base de datos (como eliminar o agregar campos) cuando las operaciones no lo requieran absolutamente.
  3. Usa las capacidades de automatización del software para simplificar el trabajo, documentarlo y hacer las operaciones reproducibles.

Uno podría objetar que en muchos casos hay formas más rápidas y fáciles de alcanzar el mismo resultado. Sí, las hay, y pueden ser efectivas y por lo general funcionan cuando se realizan con cuidado. Pero las soluciones que ponen en riesgo los datos son difíciles de recomendar y defender como respuestas de uso general. Se deben emplear mejor en situaciones puntuales con conjuntos de datos pequeños donde la corrupción en los datos debería volverse rápidamente evidente y las consecuencias de cualquier error sean inmateriales.

0 votos

+1 @ whuber - Es obvio que has intentado considerar todas las variables aquí; una respuesta bien pensada. Por favor, vea la adición a mi respuesta original, ya que me quedaré sin espacio en este cuadro de comentarios.

1 votos

Para las personas que se preguntan qué pasó con "Celenius" mencionado en varios lugares de este hilo: ahora se conoce como @djq y su respuesta está aquí. Reconocimiento a la máquina del tiempo: web.archive.org/web/20120127210858/http://gis.stackexchange.‌​com/…

5voto

djq Puntos 7670

En Arcmap podrías unir espacialmente el Polígono B al Polígono A; esto relacionaría los atributos. Como los nombres de los campos son los mismos, se crearán algunas nuevas combinaciones del nombre.

0 votos

Este es lo que pondría. En mi opinión, esta respuesta corta es la correcta.

4voto

tslocum Puntos 1818

Exporta la tabla para Shapefile "B" a Excel y elimina las columnas que son redundantes, y cualquier columna que contenga información que no necesitas. Asegúrate de mantener tu columna de identificación compartida, luego guárdala en la carpeta apropiada. Ve a ArcMap, agrega la tabla, luego haz clic con el botón derecho en Shapefile "A" y realiza una unión de tablas. El enlace debería llevar a un video sobre cómo hacer esto.


@ whuber - Todo el enfoque es sólido y garantiza la integridad de los datos. Lo único que puedo decir para refutar esta respuesta es que ciertas situaciones/proyectos no nos permiten tener el tiempo ni el presupuesto para ser tan metódicos en nuestro enfoque.

Un ejemplo real:

Una Empresa Minera Junior está sentada en un gran yacimiento con cientos de millones de dólares en ingresos en efectivo reposando en su capacidad para "demostrar" el recurso. Una revisión de escritos y mapas / datos geológicos lleva a un programa de perforación muy enfocado y costoso. Cuando los análisis vuelven de la primera ejecución, estos valores se etiquetan en sus respectivas ubicaciones mediante una unión de tablas, y se exportan en formato Excel donde los datos se preparan minuciosamente para la importación en DataMine (para interpolación del cuerpo mineralizado en 3D).

En mi experiencia, los Geólogos del proyecto exigían que estos datos se prepararan en Excel, que siguieran TODA regla/convenio de formato al pie de la letra (sin espacios, sin caracteres especiales, etc.) y que el archivo de importación de DataMine se entregara en formato .csv (en ese entonces). Esto llevaría a una mayor inversión en perforación dirigida, y revisaríamos el proceso (en algunos casos) muchas veces. Todo esto generalmente ocurría en un plazo excepcionalmente ajustado y crítico.

Cada uno de nosotros tiene nuestra propia historia y nuestra propia variedad de experiencias que hemos incorporado en nuestro enfoque sobre cómo hacemos las cosas. Dicho esto, mi experiencia ha visto a Excel como una absoluta necesidad, y una herramienta vital en mis flujos de trabajo; es lo que conozco. Tomamos todas las precauciones de control de calidad en la preparación de estos datos. Donde ustedes se alejarían de Excel, yo no tenía más opción que usarlo.

0 votos

(-1) Usar Excel para hacer una unión no solo es más difícil que hacerlo con un GIS o RDBMS, sino que también invita a cometer errores graves.

0 votos

@ whuber - por favor, explique más detalladamente. He utilizado este método varias veces sin experimentar ningún problema. ¿Por qué necesitaría utilizar un entorno de base de datos como has sugerido? ¡Excel es simple y ¡funciona! Y para constancia, este método me lo enseñó un gerente senior de SIG en un trabajo anterior. Puedo decir con absoluta convicción que este caballero tenía una base de conocimientos INCREÍBLE (aparentemente en relación con "TODO"). Me resulta difícil creer que me haya enseñado algo incorrecto. Siempre estoy buscando mejorar, así que por favor publique una respuesta superior para que pueda probarla.

8 votos

Excel es simple, funciona, y debido a eso probablemente es responsable de más errores mayoristas no detectados que cualquier otro software producido. Viola principios básicos de los SGBD que fueron desarrollados para proteger contra errores que Excel hace demasiado fáciles de cometer, como (1) ordenar algunas columnas pero no otras; (2) errores tipográficos que cambian los tipos de datos; (3) pulsaciones de teclas erróneas que borran datos; (4) eliminación involuntaria de filas o columnas; (5) conversión oculta de datos, como texto a fechas; (6) truncamiento oculto de datos; (7) redondeo oculto de valores numéricos; y muchos más.

1voto

Greg Puntos 1756

En la década de 1990 recibimos una actualización a gran escala de todos nuestros cuerpos de agua y cursos de agua, que cubría unas 55 hojas de mapa NTS y un número incontable de características. Necesitábamos mantener los atributos de valor agregado de nuestra antigua hidrología (nombres de lagos, elevación de la superficie, etc.) y reemplazar la geometría. La geometría de lo antiguo y lo nuevo era lo suficientemente cercana como para garantizar que los centroides de cada polígono seguirían estando dentro de los límites del nuevo polígono; este es un punto importante, sin esta certeza básica, el enfoque que se describe a continuación no es una buena idea.

La solución en este caso particular consistió en, en lugar de llevar los atributos a la geometría, llevar la geometría a los atributos. Entonces, conceptualmente:

  1. desde *Capa_con_atributos*, eliminar polígonos pero mantener registros de tabla,
  2. desde *Capa_con_polígonos* copiar y pegar la geometría en *Capa_con_atributos*,
  3. combinar y guardar.

Ve aquí una descripción más detallada y una receta para arcinfo-worksation. No estoy seguro de si es posible en ArcGIS o QGIS modernos eliminar una geometría sin eliminar simultáneamente su registro de atributo, pero bueno, por si acaso, aquí está la idea.

1voto

saint_groceon Puntos 2696

No estoy seguro, pero quizás algunos SGBD's realizan operaciones de igualdad en campos de forma en SQL. Me parece que si dos geometrías son idénticas, el operador SQL = debería devolver verdadero (WHERE A.Shape = B.Shape).

Si esto es cierto para la base de datos que estás utilizando, deberías poder hacer una unión espacial utilizando la misma sintaxis que usarías para una unión no espacial.


Parece que el método ST_Equals (un estándar OGC) podría ser utilizado para esto.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X