Aquí hay dos capas con la representación de las calles y la idea es: Queremos actualizar la capa más reciente (con la línea roja) con algunos de los datos almacenados en la otra (el azul claro), pero estas capas son similar en la posición geográfica que puede estar muy cerca y un poco más distante dependiendo del lugar en el mapa y solo un atributo coincide en caso de que una línea sea la misma en el otro (codlog x codlog5).
Por ejemplo: en el medio de la imagen, hay un cuadrado en ambas capas, pero ¿cómo hago en el mapa para reconocer que el azul es el mismo que el verde y actualizar la capa reciente?
¿Cómo puedo hacerlo? ¿Hay algún complemento o herramienta que ayude con eso?
qgis
layers
latitude-longitude
Jhonatan Oliveira
fuente
fuente
Respuestas:
Esta es una gran pregunta, tuve que hacer algo similar recientemente pero con un conjunto de datos mucho más pequeño, por lo que pude usar una intersección simple con un poco de control de calidad visual adicional y estuvo bien.
Pero aquí hay una idea para esto, aunque no tengo código, y es un proceso bastante pesado. Definitivamente pruebe primero con una muestra del conjunto de datos completo. Probablemente puedas encontrar algún código útil por aquí. (La sangría se puso un poco rara a continuación):
tome el buen conjunto de geometría (donde desea que terminen los atributos) y cree un búfer *
iterar a través de cada una de las características del búfer:
2a. calcular la orientación general de la función (max_y - min_y / max_x - min_x o algo así)
2b. realice una consulta de selección por ubicación en la otra capa utilizando esta característica única
tendrá más de una función que coincida con la consulta de selección por ubicación, de modo que repita estas funciones seleccionadas y calcule la orientación de cada una
obtener los atributos de cualquier característica que tenga una orientación más cercana a la de la característica de búfer.
* Comenzaría con una distancia muy pequeña (una unidad de mapa o algo así) y luego ejecutaría este proceso con distancias crecientes, teniendo cuidado de no sobrescribir ningún atributo que ya haya transferido.
** En realidad, probablemente podría renunciar a hacer las características del búfer, y simplemente hacer la consulta de selección por ubicación con una distancia del búfer. No estoy muy familiarizado con QGIS, pero estoy seguro de que podrá hacerlo.
No hay forma de que esto funcione perfectamente para todas sus funciones, pero es un comienzo, y luego se reduce a desarrollar una buena estrategia de control de calidad / control de calidad para verificar y completar la transferencia.
EDITAR Pensando más en esto, aquí hay un ejemplo básico que rompería completamente el sistema si comenzara con una distancia de búfer muy pequeña y eligiera la función con la mejor orientación coincidente, como recomendé:
Se tomarían los atributos de la línea roja incorrecta. Para evitar esto, es posible que desee crear algún tipo de tolerancia, y solo tome los atributos de la característica si su orientación (en comparación con la orientación de la característica azul original) cae dentro de esa tolerancia.
EDITAR 2 Vaya, ¿son estos polígonos? Supongo que supuse que eran líneas sobre un fondo gris. Si son polígonos, realmente no sé si este concepto de orientación es bueno. Pero puede seleccionar todas las entidades que se cruzan y descubrir cuál tiene la mayor superposición (ejecute una herramienta de tipo Unión y luego use el polígono con el área más grande ...).
fuente
Si desea agregar algunos atributos de la capa roja a la capa azul y un atributo es común en ambas capas, debe usar Agregar unión de vectores .
He escrito sobre eso aquí .
Eso es.
Aquí tienes un ejemplo con capturas de pantalla.
fuente
Prefiero la respuesta de @ dmh126 ya que su método permite que su capa red_line se actualice con bastante facilidad.
Solo para agregar una alternativa, puede usar la herramienta Unir tabla de atributos de la Caja de herramientas de procesamiento y seleccionar sus capas con el campo común. Tenga en cuenta que este método crea un nuevo archivo de forma en lugar de actualizar uno existente:
fuente
Si tiene alguna ID única en ambas capas que puede usar para unir fácilmente los valores a la nueva capa de la anterior, es pan comido. Pero este no parece ser ese caso.
Si no, es un problema bastante difícil. Me pregunto por qué el comentario del usuario 30184 sugiriendo usar OpenJUMP y el complemento http://www.vividsolutions.com/products.asp?catg=spaapp&code=roadmatcher no se publicó como respuesta porque me parece completamente legítimo en este caso.
De lo contrario, no creo que puedas hacer esto sin algo de codificación. Con QGIS puede usar bien y, al combinar el almacenamiento en búfer y la intersección, debería poder realizar una comprobación automática significativa.
Un enfoque podría ser comparar un búfer razonablemente grande de líneas rojas con líneas azules y obtener atributos y proporciones coincidentes. En pseudocódigo:
fuente