Tengo un problema que parece que no puedo entender. Tengo dos capas poligonales:
- Polígono A: es un subconjunto del polígono B con los mismos campos y tiene polígonos idénticos al Polígono B
- Polígono B: tiene los datos de atributo que quiero tener en el Polígono A
¿Cómo se puede hacer esto? Probé la herramienta QGIS "Unir atributos por ubicación", pero como algunos de los polígonos están dentro de otros, tiende a vincularse a la primera intersección que encuentra (el polígono externo).
qgis
arcgis-desktop
Diego R
fuente
fuente
Respuestas:
@Dano plantea con razón algunos problemas que se abordan mejor 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 los comentarios que la forma fácil y obvia (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 A y B, porque eso impide una unión a la base de datos. La unión espacial soluciona ese problema.
¿Cuál es, entonces, una buena solución? Un enfoque utiliza A para identificar los registros correspondientes de B que contienen los datos deseados. Dependiendo de los supuestos sobre las configuraciones de los polígonos, si se superponen, si algunos pueden contener otros, etc., esto puede llevarse 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, exporte la selección y deje que reemplace A. Hecho .
Esta solución asume que todos los campos en B están destinados a reemplazar sus contrapartes en A. Si no, entonces es realmente necesario realizar una unión 1-1 de B (fuente) a A (destino). La unión basada en identificadores es la mejor, pero hacer una unión en la identidad del polígono (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 difieran, aunque sea ligeramente . (Este es un punto sutil, y la causa potencial de errores insidiosos, porque las ediciones previas en B a polígonos que no corresponden a A aún podrían modificar invisiblemente los otros polígonos en B si el SIG está "encajándose" o "manteniendo la topología" o realizar cambios globales de forma automática durante las ediciones locales).
En esta coyuntura, 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 , copie B. [Foo] en A. [Foo]. Repita para todos los campos necesarios. Una vez hecho esto, elimine la unión.
Aunque este procedimiento puede ser un poco oneroso cuando hay muchos campos involucrados, sus méritos incluyen
Algunos de los principios rectores involucrados en esta sugerencia son
Uno podría objetar que en muchos casos hay formas más rápidas y fáciles de alcanzar el mismo resultado. Sí, puede haber, y pueden ser efectivos y generalmente 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 emplean mejor en situaciones puntuales con pequeños conjuntos de datos donde la corrupción en los datos debería volverse rápidamente evidente y las consecuencias de tales errores son irrelevantes.
fuente
En Arcmap, puede unir espacialmente el Polígono B al Polígono A; Esto relacionaría los atributos. Como los nombres de los campos son los mismos, creará una nueva combinación del nombre.
fuente
Exporte la tabla para Shapefile "B" a Excel y elimine las columnas que son redundantes y cualquier columna que contenga información que no necesita. Asegúrese de mantener su columna de identificador compartido, luego guárdela en la carpeta correspondiente. Vaya a ArcMap, agregue la tabla, luego haga clic con el botón derecho en Shapefile "A" y realice una unión a la tabla . El enlace debería conducir 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 dan el tiempo o el presupuesto para ser tan metódicos en nuestro enfoque.
Un ejemplo fiel a la vida:
Una empresa minera junior está sentada en un importante yacimiento con cientos de millones de dólares en infusiones de efectivo que se basan en su capacidad para "probar" el recurso. Una revisión de escritorio de publicaciones y mapas / datos de geología conduce a un programa de perforación muy específico y muy costoso. Cuando los ensayos regresan de la primera ejecución, estos valores se etiquetan en sus ubicaciones de puntos respectivas a través de una unión de tabla y se vuelven a extraer en un formato Excel donde los datos se preparan meticulosamente para importarlos a DataMine (para la interpolación 3D de cuerpos de mineral).
En mi experiencia , los geólogos del proyecto requerían que estos datos se prepararan en Excel, que siguieran CADA regla / convención 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 aquel entonces de todos modos). Esto conduciría a una mayor inversión en perforación dirigida, y revisaríamos el proceso (en algunos casos) muchas veces. Todo esto generalmente ocurrió en una línea de tiempo excepcionalmente apretada y crítica.
Cada uno de nosotros tiene nuestra propia historia y nuestra propia gama de experiencias que hemos incorporado a nuestro enfoque sobre cómo hacemos las cosas. Dicho esto, mi experiencia ha visto a Excel como una necesidad absoluta y una herramienta vital en mis flujos de trabajo; Es lo que sé. Tomamos todas las precauciones de control de calidad / control de calidad en la preparación de estos datos. Donde ustedes rehuirían a Excel, no tuve más remedio que usarlo.
fuente
A fines de la década de 1990, recibimos una actualización a gran escala de todos nuestros cuerpos de agua y cursos de agua, cubriendo unas 55 hojas de mapas NTS y miles de características no recordadas. Necesitábamos mantener los atributos de valor agregado de nuestra antigua hidrología (nombres de lago, elevación de 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 aún estarían delimitados por los nuevos límites del polígono; este es un punto importante, sin esta certeza básica, el enfoque a continuación no es una buena idea.
La solución en este caso particular fue, en lugar de llevar los atributos a la geometría, llevar la geometría a los atributos. Entonces, conceptualmente:
Consulte aquí para obtener una descripción más extendida y una receta para trabajar con arcinfo . No estoy seguro de que incluso sea posible en Arcgis o Qgis modernos eliminar una geometría sin eliminar simultáneamente su registro de atributos, pero bueno, por si acaso, esta es la idea.
fuente
No estoy seguro, pero quizás algunos DBMS realizan operaciones de igualdad en los campos Shape en SQL (?). Me parece que si dos geometrías son idénticas, el
=
operador SQL debería devolver true (WHERE A.Shape = B.Shape
).Si esto es cierto para la base de datos que está utilizando, debería poder hacer una unión espacial utilizando la misma sintaxis que usaría para una unión no espacial.
Parece que el método ST_Equals (un estándar OGC) podría usarse para esto.
fuente
Como siempre, Whuber tiene razón. Necesita pensar detenidamente sobre su proceso. Especialmente si se trata de grandes conjuntos de datos y esta operación se llevará a cabo muchas veces o si los datos son de misión crítica.
Considere sus datos y responsabilidades:
¿Qué has hecho?
¿Qué estás haciendo?
¿Que estas intentando hacer?
Y siempre pregunta: ¿por qué?
Ahora una respuesta fácil dirigida directamente a la pregunta formulada. Teniendo en cuenta que siempre hay al menos 5 formas de hacer las cosas, pero generalmente solo hay una mejor manera.
Asumiendo que el conjunto completo tiene todos los atributos que desea que estén en el subconjunto y el subconjunto no tiene nada que no esté en el conjunto completo, excepto información desactualizada.
Adivinando que la topología del subconjunto coincide con el conjunto completo (incluido Origen / Proyección y Tolerancia XY).
1) Use la función para señalar con la casilla de verificación "Interior" marcada y cree una clase de entidad de puntos o un archivo de forma desde el subconjunto.
2) Use Seleccionar por unión espacial para buscar todos los polígonos en el conjunto completo que correspondan al subconjunto en función de la clase de entidad de punto o el archivo de forma recién creados.
3) Exporte la selección desde el conjunto completo, y ese puede ser su nuevo subconjunto.
fuente
Seguramente, si el Polígono A es un subconjunto del Polígono B, el enfoque más sencillo sería recorrer el Polígono A, usar la ID que estaría en el Polígono A (y B si A fuera un subconjunto o B) para buscar los datos de la fila en Polígono B y luego actualice la fila en el Polígono A.
fuente