Dadas dos particiones diferentes de una forma (por el bien del argumento, dos divisiones administrativas diferentes de un país), ¿cómo puedo encontrar una nueva partición en la que encajen ambas particiones, permitiendo (y optimizando) algún error?
Por ejemplo, ignorando el error, quiero un algoritmo que haga esto:
Quizás sea útil expresar esto en términos establecidos. Usando la siguiente numeración:
Puedo expresar las particiones anteriores como:
A = {{1}, {2}, {3,4,7,8}, {5}, {6}, {9,10,13,14}, {11}, {12}, {15} ,{dieciséis}}
B = {{1,2,5,6}, {3}, {4}, {7}, {8}, {9}, {10}, {13}, {14}, {11,15} , {12,16}}
Un punto B = {{1,2,5,6}, {3,4,7,8}, {9,10,13,14}, {11,15}, {12,16}}
y el algoritmo para producir un punto B parece sencillo (algo así como, si dos elementos están en una partición juntos en A (B) fusionan las particiones en las que están en B (A), repita hasta que A y B sean iguales).
Pero ahora imagine que algunas de estas líneas son ligeramente diferentes entre las dos particiones, por lo que esta respuesta perfecta no es posible y, en cambio, quiero que la respuesta óptima esté sujeta a minimizar algún criterio de error.
Tome un nuevo ejemplo:
Aquí en la columna izquierda tenemos dos particiones sin líneas comunes (aparte del borde exterior en sí). La única solución posible del tipo anterior es la trivial, la columna derecha. Pero si permitimos soluciones "difusas", entonces la columna central puede ser permisible, con un 5% del área total en disputa (es decir, asignada a una subárea diferente en cada partición gruesa). Por lo tanto, podríamos describir la columna central como la representación de la "partición común menos gruesa con <= 5% de error".
Si la respuesta real es entonces la partición en la fila superior, la columna central o la fila central, la columna central, o algo intermedio, es menos importante.
Respuestas:
Puede hacer esto evaluando la diferencia del límite de un polígono con la diferencia simétrica entre sus límites, o expresada simbólicamente como:
Tome geometrías un y b , expresado como multilíneas en los próximos dos líneas e imágenes:
La diferencia simétrica, donde las porciones de a y b no se cruzan, es:
Y, por último, evaluar la diferencia entre cualquiera de una o B y la diferencia simétrica:
Puede implementar esta lógica en GEOS (Shapely, PostGIS, etc.), JTS y otros. Tenga en cuenta que si las geometrías de entrada son polígonos, entonces sus límites deben ser extraídos y el resultado puede ser poligonalizado. Por ejemplo, mostrado con PostGIS, tome dos MultiPolygons y obtenga un resultado MultiPolygon:
Tenga en cuenta que he no extensamente probado este método, a fin de tomar estos como las ideas como punto de partida.
fuente
Algoritmo libre de errores.
Primer set: Segundo set:
Combina 2 conjuntos y ordena en orden descendente por área. Seleccione filas en la tabla (arriba => abajo) hasta alcanzar el total de áreas = área total (16 en este caso):
Las filas seleccionadas hacen su respuesta:
El criterio será una diferencia entre las áreas acumuladas y el total real.
fuente