Finden Sie den Algorithmus für doppelte Polygone

8

Ich habe eine Gruppe von Polygonen. Mein Ziel ist es, die doppelten Polygone aus dieser Gruppe von Polygonen zu finden.

Mit NetTopologySuite (A c # -Port von JTS) ist es möglich, zwei Geometire zu vergleichen und zu überprüfen, ob sie gleich sind. Die Brute-Force-Methode (jedes Polygon mit jedem anderen Polygon vergleichen) ist die einzige Idee, die mir in den Sinn kommt, aber sie ist nicht verwendbar, wenn es eine große Anzahl von Polygonen gibt. Gibt es Algorithmen, die in diesem Fall die Brute-Force verbessern würden?

Ich habe dieses Skript gefunden, das Ideen zu dem zu enthalten scheint, wonach ich suche (die Kommentare weisen auf einen Divide and Conquer-Ansatz hin, aber nicht viele Details in den Kommentaren). Aber ich muss zugeben, dass ich nichts daraus machen kann :) .. Es wurde für ArcView gemacht, mit dem ich nicht vertraut bin.

Hinweis: Ich suche keine PostGIS / Datenbanklösung wie in dieser Frage . Ich suche nach etwas, das durch Anpassung (c #, c ++, Python usw.) in AutoCAD, Quantum GIS oder solche Desktop-GIS-Produkte integriert werden kann.

Vinayan
quelle
1
Ich stelle mir vor, dass eine Modifikation mit toblerity.github.com/rtree sehr hilfreich wäre. Erstellen Sie einen räumlichen Index und suchen Sie beim Erstellen des Index nach Duplikaten
Peter Smith
@ PeterSmith - Ich denke, das ist eine schöne Idee! ..warum fügst du das nicht als Antwort hinzu .. Ich denke, NetTopologySuite hat Rtree eingebaut .. muss sich einarbeiten ..
vinayan

Antworten:

4

Wenn die Polygone wirklich identisch sind und Sie eine einfache Möglichkeit haben, ihre Fläche zu berechnen, berechnen Sie einfach die Fläche jedes Polygons, sortieren Sie sie nach Fläche und überprüfen Sie nur Polygone mit übereinstimmender Fläche. Eine Variante dieser Idee besteht darin, die Polygone nach der Koordinate ihres nördlichsten Punkts zu sortieren (Aufbrechen der Bindungen durch Auswahl des östlichsten der gebundenen Punkte). Überprüfen Sie nur Polygone, deren nördlichste Punkte übereinstimmen. Wenn die Polygone ausreichend variieren, sortieren Sie einfach nach der Anzahl der Punkte.

Ich könnte weitermachen, aber du kommst auf die Idee.

Llaves
quelle
Llaves, diese Idee sieht ziemlich einfach und unkompliziert aus, auch ohne andere GIS-Software oder API.
Vadivelan
1

Wenn die zu überprüfenden Geometrieobjekte identisch sind, erstellen Sie ein Wörterbuch der Geometrien, wobei der Schlüssel die Geometrie und der Wert die Objektkennung ist.

Sie durchlaufen die Liste einmal und fügen dem Wörterbuch für jedes Objekt Werte hinzu. Überprüfen Sie vor dem Hinzufügen, ob der Schlüssel vorhanden ist, und Sie werden benachrichtigt, wenn Sie eine doppelte Geometrie haben. Tauchen Sie an diesem Punkt in eine Schleife ein, um das Problem zu beheben. Dies sollte Ihnen einen Durchgang durch die Objekte geben.

mcole
quelle
Es sieht sehr interessant aus.
Aber
0

Nach langem Lesen kam ich zu dem Schluss, dass ein räumlicher Index erforderlich ist. Der Kommentar von @Peter Smith ließ mich in Rtree schauen .

Wiki-Definition für RTree,

R-Bäume sind Baumdatenstrukturen, die für räumliche Zugriffsmethoden verwendet werden, dh zum Indizieren mehrdimensionaler Informationen wie geografischer Koordinaten, Rechtecke oder Polygone

Also habe ich einen Index in NetTopologySuite erstellt und den Index mit dem Umschlag jedes Features abgefragt. Die Vergleiche beschränkten sich daher auf sehr wenige Merkmale.

Wie es mit NTS gemacht wurde, wird in dieser Antwort beschrieben .

Vinayan
quelle