Wie finden wir die Grenzkoordinaten, wenn ein Satz von Koordinaten gegeben ist?
<== Abbildung 1
Unter Berücksichtigung der Koordinaten im obigen Satz, wie kann ich die Koordinaten an der roten Grenze erhalten. Grenze ist das Polygon, das durch die Eingabekoordinaten für Eckpunkte so gebildet wird, dass die Fläche maximiert wird.
Ich arbeite an einer App, die Objekte in einem Umkreis von 'x' Meilen um eine Stadt sucht . Was ich habe ist:
- Koordinaten aller Eigenschaften.
- Eine Reihe von Koordinaten für jede Stadt (ich habe eine Koordinate für jede Postleitzahl. Und da die meisten Städte mehr als eine Postleitzahl haben, hat jede Stadt eine Reihe von Koordinaten)
Der Grund, warum ich nach der maximalen Fläche frage, ist, dass ich kein Polygon wie das folgende finde:
<== Abbildung 2
Was ich brauche, ist der Algorithmus , um den Satz von Koordinaten für die Grenze zu finden. Ein Algorithmus, mit dem ich die Grenzkoordinaten für Abbildung 1 ermitteln kann .
algorithm
polygon-creation
vertices
convex-hull
Khaja Minhajuddin
quelle
quelle
Antworten:
Es gibt viele Algorithmen, um dieses Problem zu lösen ( Wikipedia "Convex_hull_algorithms" ):
quelle
1) Konvexe Hülle in GRASS GIS: http://grass.fbk.eu/grass64/manuals/html64_user/v.hull.html
2) Convex Hull in Qgis Vector Tools (sehr einfach zu bedienen):
quelle
Hawth's Tools für ArcGIS bietet diese Funktionalität . Plus ein Skript für ArcInfo 10.
Es gibt auch ein Tool für konvexe Hüllen in QuantumGIS über das ftools-Plugin .
quelle
Was Sie wollen, ist der konvexe Rumpf. In PostGIS gibt es eine Funktion (eigentlich GEOS), die Ihnen die konvexe Hülle ST_ConvexHull (Geometrie) gibt .
Bei Wikipedia gibt es viele Informationen über konkave Rümpfe.
quelle
Wenn Sie möchten, dass ein Algorithmus dies ausführt (anstatt Pakete, die dies ausführen können), müssten Sie die Daten wahrscheinlich triangulieren. oder definieren Sie im Grunde eine Linie von jedem Punkt zu jedem anderen Punkt. Beginnen Sie dann an dem Punkt mit dem höchsten Y-Wert (sagen wir) und zeichnen Sie eine Route entlang der Verbindungslinie mit dem kleinsten Außenwinkel / der kleinsten Außenpeilung nach.
Sie können die Verfolgung beschleunigen, indem Sie sich überschneidende Linien zuerst wegwerfen. Die Außengrenze hat keine Schnittpunkte.
Übrigens - FME erledigt dies auch mit den Transformatoren ConvexHullAccumulator oder ConvexHullReplacer!
quelle
Wenn Sie sich einen vorhandenen, in Code implementierten Algorithmus ansehen möchten, verfügt NetTopologySuite über einen Algorithmus, der dies ermöglicht
Siehe ConvexHull.cs
Im Übrigen sind NTS und eine Reihe anderer Bibliotheken in einem coolen Projekt namens DotSpatial zusammengefasst, das hier zu finden ist
quelle