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.)
Respuestas:
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.
fuente
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.
fuente
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,
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 .
fuente