Dadas duas partições diferentes de uma forma (por razões de argumento, duas divisões administrativas diferentes de um país), como posso encontrar uma nova partição na qual essas duas partições se encaixam, permitindo (e otimizando) algum erro?
Por exemplo, ignorando o erro, quero um algoritmo que faça isso:
Talvez ajude a expressar isso em termos definidos. Usando a seguinte numeração:
Eu posso expressar as partições acima como:
A = {{1}, {2}, {3,4,7,8}, {5}, {6}, {9,10,13,14}, {11}, {12}, {15} , {16}}
B = {{1,2,5,6}, {3}, {4}, {7}, {8}, {9}, {10}, {13}, {14}, {11,15} , {12,16}}
Um ponto B = {{1,2,5,6}, {3,4,7,8}, {9,10,13,14}, {11,15}, {12,16}}
e o algoritmo para produzir A ponto B parece direto (algo como, se dois elementos estão em uma partição juntos em A (B) mesclam as partições em que estão em B (A) - repita até A e B serem iguais).
Mas agora imagine que algumas dessas linhas sejam ligeiramente diferentes entre as duas partições, de modo que essa resposta perfeita não seja possível e, em vez disso, quero que a resposta ideal seja sujeita a minimizar algum critério de erro.
Veja um novo exemplo:
Aqui na coluna da esquerda, temos duas partições sem linhas comuns (além da própria borda externa). A única solução possível do tipo acima é a trivial, a coluna da direita. Porém, se permitirmos soluções "difusas", a coluna do meio poderá ser permitida, com 5% da área total sendo contestada (ou seja, alocada para uma subárea diferente em cada partição grosseira). Portanto, podemos descrever a coluna do meio como representando a "partição comum menos grossa com <= 5% de erro".
Se a resposta real é a partição na linha superior, coluna do meio ou linha do meio, coluna do meio - ou algo intermediário, é menos importante.
Respostas:
Você pode fazer isso avaliando a diferença entre o limite de um polígono e a diferença simétrica entre seus limites, ou simbolicamente expressa como:
Tome geometrias a e b , expressas como multilinha durante os próximos dois linhas e imagens:
A diferença simétrica, em que porções de um e b não se intersectam, é:
E, finalmente, avalie a diferença entre a ou be a diferença simétrica:
Você pode implementar essa lógica no GEOS (Shapely, PostGIS etc.), JTS e outros. Observe que, se as geometrias de entrada são polígonos, seus limites precisam ser extraídos e o resultado pode ser poligonalizado. Por exemplo, mostrado no PostGIS, pegue dois MultiPolygons e obtenha um resultado MultiPolygon:
Observe que eu não testei extensivamente esse método; portanto, tome-as como idéias como ponto de partida.
fonte
Algoritmo livre de erros.
Primeiro set: Segundo set:
Mesclar 2 conjuntos e classificar em ordem decrescente por área. Selecione as linhas na tabela (de cima => para baixo) até o total de áreas = a área total (16 neste caso) atingir:
As linhas selecionadas fazem sua resposta:
O critério será uma diferença entre as áreas acumuladas e o total real.
fonte