Encontrar algoritmos de polígonos duplicados

8

Tengo un grupo de polígonos. Mi objetivo es encontrar los polígonos duplicados de este grupo de polígonos.

Usando NetTopologySuite (un puerto de C # de JTS), es posible comparar dos geometires y verificar si son iguales. El método de fuerza bruta (verificar cada polígono contra cada otro polígono) es la única idea que se me ocurre, pero no es útil si hay una gran cantidad de polígonos. ¿Hay algún algoritmo que mejoraría la fuerza bruta en este caso?

Encontré este script que parece contener ideas de lo que estoy buscando (los comentarios indican un enfoque de divide y vencerás ... pero no hay muchos detalles en los comentarios). Pero tengo que admitir que no puedo sacarle nada :) Fue hecho para ArcView, con lo que no estoy familiarizado.

Nota: No estoy buscando una solución de PostGIS / base de datos como en esta pregunta . Estoy buscando algo que pueda integrarse a AutoCAD, Quantum GIS o tales productos GIS de escritorio a través de la personalización (c #, c ++, python, etc.)

vinayan
fuente
1
Me imagino que una modificación usando algo como toblerity.github.com/rtree sería de gran ayuda. Cree un índice espacial y compruebe si hay duplicados mientras crea el índice
Peter Smith
@PeterSmith - ¡Creo que es una buena idea! ... por qué no agregas esto como respuesta ... Creo que NetTopologySuite tiene Rtree incorporado ... tendrá que cavar ...
vinayan

Respuestas:

4

Si los polígonos son realmente idénticos, y si tiene una manera fácil de calcular su área, simplemente calcule el área de cada polígono, luego ordene por área y solo verifique los polígonos con el área correspondiente. Una variante de esta idea es ordenar los polígonos en la coordenada de su punto más septentrional (rompiendo los lazos seleccionando los puntos atados más orientales). Solo verifique los polígonos cuyos puntos más septentrionales coinciden. Si los polígonos varían lo suficiente, solo ordena el número de puntos.

Podría seguir, pero entiendes la idea.

Llaves
fuente
Claves, esta idea parece bastante simple y fácil, incluso sin tener ningún otro software SIG o API.
vadivelan
1

Si los objetos de geometría que está verificando son idénticos, ¿qué tal crear un diccionario de las geometrías con la clave siendo la geometría y el valor siendo el identificador del objeto?

Usted pasa por la lista una vez, agregando valores al diccionario para cada objeto. Verifique si la clave existe antes de agregar, y se le notificará si tiene una geometría duplicada. En ese punto, sumérgete en un bucle para solucionar el problema. Esto debería darle una pasada a través de los objetos.

mcole
fuente
Parece muy interesante ... pero no estoy seguro de que funcione ... Lo probaré y volveré ...
vinayan
0

Después de mucha lectura, llegué a la conclusión de que se requiere un índice espacial . El comentario de @Peter Smith me hizo mirar a Rtree .

Definición de Wiki para RTree,

Los árboles R son estructuras de datos de árbol utilizadas para métodos de acceso espacial, es decir, para indexar información multidimensional, como coordenadas geográficas, rectángulos o polígonos.

Así que creé un índice en NetTopologySuite y consulté el índice usando el sobre de cada característica. Por lo tanto, las comparaciones se limitaron a muy pocas características.

En esta respuesta se describe cómo se hizo usando NTS .

vinayan
fuente