Ich versuche, mit ArcGIS 10.2 einen Punktepuffer basierend auf einem vordefinierten Bereich (z. B. 400 km²) zu erstellen. Darüber hinaus befinden sich die Puffer einiger Punkte in Küstennähe, sodass die Puffer an der Küste abgeschnitten werden müssen, und haben immer noch dieselbe Fläche wie die im Landesinneren (400 km²).
Weiß jemand, wie dies mit Model Builder oder Arcpy gemacht werden kann?
Ich habe nur begrenzte Kenntnisse mit Arcpy und R, würde aber gerne an einigen Skripten arbeiten, um eine Lösung dafür zu finden.
Das Bild unten zeigt eine grafische Darstellung dessen, was ich erreichen möchte
arcpy
arcgis-10.2
r
buffer
Funkeh-Monkeh
quelle
quelle
Antworten:
Die Fläche eines Kreispuffers ist eine monoton ansteigende Funktion des Pufferradius (auf einem planaren Koordinatensystem sowieso). Eine einfache Suchstrategie kann also einen Radius finden,
R
so dass der Bereich des Puffers des Radius, derR
auf den polygonalen Bereich begrenztA
ist, (bis zu einer gewissen Toleranz) ists
.Der einfachste Suchalgorithmus wäre nur eine binäre Suche. Beginnen Sie mit zwei Radien, einem sehr kleinen und einem sehr großen, so dass der gewünschte Bereich irgendwo zwischen dem Bereich der abgeschnittenen Puffer dieser Radien liegt. Nehmen Sie dann einfach den Mittelpunkt dieser und berechnen Sie die Pufferbereiche und stellen Sie fest, ob der gewünschte Radius über oder unter dem Mittelpunkt liegt. Aktualisieren Sie Ihre Radiusgrenzen und wiederholen Sie den Vorgang, bis Sie eine gewisse Toleranz für den gewünschten Bereich erreicht haben.
Das Schreiben einer binären Suche in Python und die Verwendung der ArcGIS Python-API klingt nach einer guten Lernmethode! Ich bin mir ziemlich sicher, dass ich das vor Jahren in R gemacht habe ...
Hier ist ein R-Code:
Verwendungszweck:
Richten Sie zunächst eine einfache polygonale Region in Großbritannien ein:
Definieren Sie nun einen Punkt:
Dann bist du einfach:
Dies ist eine Liste mit zwei Komponenten,
b
ist der Puffer:und es hat den richtigen Bereich:
und
r
ist die Ausgabe vonuniroot
, die den Pufferradiuswert enthält.In diesem Fall lag die Pufferbreite also etwas unter 64 km.
Die einzigen Dinge, mit denen Sie hier herumspielen müssen, sind die unteren und oberen Anfangswerte - ich denke, Sie können einen unteren Radius als intuitiv verstehen,
sqrt(A/pi)
und der obere ist nicht so wichtig, da der Suchalgorithmus ihn vergrößert, bis er das Intervall erfasst.Der Suchalgorithmus schlägt möglicherweise fehl, wenn der anfängliche maximale Radius wirklich zu groß ist, da Sie möglicherweise Ihre gesamte Region mit einem großen Radius puffern. In diesem Fall ändert eine Änderung des Radius nicht den Bereich ... Aber sinnvolle Grenzen sollten dies verhindern.
quelle
rgeos
Paket und seinegBuffer
Funktion, höchstwahrscheinlich ...R
Code gezeigten Ansatzes sind: (a) Er trennt die GIS-Berechnungen von der Suchlogik und (b) Er nutztuniroot
optimierte und getestete Suchalgorithmen (in ) - Sie müssen keinen schreiben selbst (und es wird wahrscheinlich nicht das effizienteste sein).Aufgrund der Position der Punkte ist dies fast unmöglich. Sie können Puffer mit einer Länge von 400 km 2 erstellen , aber Punkte, die näher an der Küste liegen, haben immer eine kleinere Fläche als die weiter entfernten (> 400 km 2 ).
Das einzige , was Sie tun können , ist eine do ausführen Pufferanalyse auf den Punkten und Clip mit der Küste Feature anschließend die erstellten Puffer.
quelle