Finden eines Pols der Unzugänglichkeit in Bezug auf mehrere Punkte ohne Verwendung von Rastern

9

Ich möchte aus einer Reihe von Punkten, die Städte und Dörfer in Schottland repräsentieren, einen „Punkt der Unzugänglichkeit“ finden. Verwendung von FOSS GIS-Tools (QGIS, SAGA, GRASS, Postgres / PostGIS ...).

Dies ist der Punkt, der am weitesten von jedem Bevölkerungszentrum entfernt ist. Dies wäre das Zentrum des größten Kreises, der keine Stadt enthält, aber eine Stadt am Rande hat.

Es gibt einen Raster-Ansatz, der funktioniert - den GDAL- Näherungsfilter .

Gibt es eine VECTOR- basierte Möglichkeit, dies zu tun? Eine, die keine Rasterung erfordert?

Hier ist mein Versuch mit Rastern ...

  • Beginnen Sie mit einer Punktebene in einer geeigneten Projektion in Metern (ich verwende OSGB, 27700).
  • Fügen Sie ein Feld mit dem Namen "Eins" hinzu und setzen Sie es auf eine Ganzzahl mit dem konstanten Wert 1.
  • Vektor zum Raster, Bearbeitungsbefehl zur Verwendung von -a Eins und Verwendung von GEO anstelle von Pixel. Stellen Sie sicher, dass die Pixel quadratisch sind!
  • Erstellen Sie Konturen auf dem Proximity-Raster (in diesem Fall 1 km breit).

So sieht es aus. Ich habe einige Kandidatenpunkte von Hand gezeichnet ;-)

Geben Sie hier die Bildbeschreibung ein

Ich dachte, dass das Auflösen wiederholter Puffer (mit dem Multi-Ring-Puffer- Plugin) funktionieren könnte, aber ich vermute, dass ich nicht genug Speicher habe, damit dies funktioniert.

Steven Kay
quelle

Antworten:

7

Ich denke, es ist das Zentrum des Dreieckskreises mit dem größten Radius, das nicht mehr als 3 Punkte berührt. In der Abbildung unten sind zunächst 11 solcher Zentren dargestellt. Sie sind mit ihrer Rangnummer gekennzeichnet.

Geben Sie hier die Bildbeschreibung ein

Es reicht aus, diejenigen auszusortieren, die sich außerhalb der Dreiecke befinden, und den Champion zu definieren, dh Nr. 3 im Bild.

UPDATE VON STEVEN FINDING INSPIRIERT:

Geben Sie hier die Bildbeschreibung ein

Ergebnis oben im Gegensatz zu der ersten Lösung, die in ArcGIS ohne Skripterstellung (aber mit erweiterter Lizenz) erhalten wurde, und es funktioniert! Es kann jedoch zu fragwürdigen Ergebnissen an den Rändern eines Untersuchungsgebiets führen, z. B. Punkt Nr. 1, dh zweiter entferntester Punkt ...

FelixIP
quelle
1
Wow, danke, dass du das geteilt hast! Ich habe versucht, Ihrem Workflow in QGIS zu folgen, indem ich (1) Punkte auf Delaunay ( Vector | Delaunay Triangulation), (2) Champion-Dreieck ausgewählt (berechnet $areain der Attributtabelle der Delaunay-Polygone) und das größte als neue Ebene gespeichert habe. (3) Umkreiszentrum suchen ( Processing | GRASS | Vector | v.voronoi.skeletonauf das Champion-Dreieck). Denken Sie, dass diese Methode richtig ist?
Kazuhito
Der erste Schritt ist richtig. Ich habe Exradiuszentren für ALLE Dreiecke berechnet. Um das Zentrum zu finden, habe ich für die Mittelpunkte aller drei Seiten senkrecht nach innen konstruiert und den Schnittpunkt gefunden (Kombination 3,2).
FelixIP
Umschriebener Dreieckskreis, kein Kreis.
FelixIP
Vielen Dank! (Und danke auch für das schöne Bild. Je mehr ich mich über den Hintergrund lehne, desto faszinierender wird es.)
Kazuhito
1
Schöne Beobachtung! Ich werde es testen und die Antwort aktualisieren. Im Gegensatz zur ersten Lösung ist zumindest in Arcgis kein Scripting erforderlich.
FelixIP
5

Hier ist ein Follow-up. Vielen Dank an @FelixIP für den Hinweis in die richtige Richtung!

Mit den OSM-Daten aus Australien konnte ich den "Punkt der Unzugänglichkeit" auf dem australischen Festland finden - ich mache ihn ungefähr 260 km äquidistant von Akarnenehe, Bedourie und Mount Dare bei POINT (137.234888 -24.966466).

Geben Sie hier die Bildbeschreibung ein

Ich habe in QGIS einen ziemlich einfachen Workflow gefunden, der eine Kombination aus Raster- und Vektoransätzen verwendet. Ich bin sicher, dass ein ähnlicher Ansatz in anderen GIS funktionieren würde.

Der 'a-ha'-Moment kam davon, dies zu bemerken

Die Maxima fallen alle auf Dreipunkte auf dem Voronoi-Netz - Punkte, an denen sich benachbarte Tripletts von Voronoi-Polygonen treffen.

Der Ansatz war wie folgt:

  • arbeiten in einer meterbasierten Projektion. Ich habe 3857 verwendet, nicht ideal, aber meine OSM-Daten hatten dieses Format :)
  • Holen Sie sich eine Ebene, die Sehenswürdigkeiten in ('Stadt', 'Dorf', 'Stadt', 'Weiler') darstellt.
  • Erstellen Sie aus dieser Ebene ein Voronoi-Netz
  • Verwenden Sie Extraktknoten , um die Tripoints zu erhalten
  • Erstellen Sie das Proximity-Raster (wie in der Frage gezeigt).
  • Befestigen Sie das Raster am Umriss der Landschaft, sodass die Seepixel auf 0 gesetzt sind.
  • Verwenden Sie das Punktabtastwerkzeug für die extrahierten Knoten für das Raster

Verwenden Sie dann Db Manager und Virtual Layers , um den Knoten mit dem größten Entfernungswert im Raster zu finden.

select 
    rowid,
    name,
    proximity2,
    st_astext(st_transform(geometry,4326)) as pt, 
    st_buffer(geometry, proximity2) as geometry
from 
    "samples" 
order by 
    proximity2 desc 
limit 1;
Steven Kay
quelle