Ich habe ein Problem in ArcGIS. Ich arbeite an einer Navigationsdatenbank. In unserer Datenbank werden einspurige Straßen durch eine einzelne Linie dargestellt, während eine mehrspurige Straße (Straße mit Teiler in der Mitte) durch zwei parallele Linien (rote Linien im Bild) dargestellt wird.
Ich habe ein Punkt-Shapefile mit einigen Punkten, die in die mehrspurige Straße und einige außerhalb fallen.
Ich möchte ein ArcPy-Skript erstellen, das die Punkte findet, die in mehrspurige Straßen fallen. dh zwischen diesen parallelen Linien (im Bild markiert).
Ich weiß nicht, wie ich das erreichen soll. Kann mir jemand helfen?
Ich habe einige Übungen dazu gemacht und festgestellt, dass das Erstellen eines Puffers auf einer Seite der Linie innerhalb eines mehrspurigen Polygons (in Abbildung gezeigt) erstellt werden kann.
Jetzt besteht das Problem darin, dass das Polygon tatsächlich die Linie überschreitet (dh die mehrspurige Grenze überlappt). so wird es unnötige Punkte fangen. Gibt es eine Möglichkeit, dieses Polygon an der Straßenlinie auszurichten?
Hinweis: Integrieren funktioniert hier nicht, da es auch die Straßenlinie verschiebt. Ich muss nur das Polygon entlang der Straßenlinie ausrichten.
quelle
Antworten:
Ich würde unten arcpy (sogar manuell!) Algorithmus versuchen-
quelle
Ich würde sagen, das ist eine geometrische Übung.
PSEUDO-CODE:
Wie man sieht, gibt es Sonderfälle - eingekreiste schwarze Punkte:
Alle oben genannten Fälle sind sehr unwahrscheinlich. Dennoch scheint es am sichersten zu sein, nur mit zweilinigen Straßen zu arbeiten, dh sie in eine separate Feature-Class zu exportieren. Fall 3 ist lustig, wir überlassen es dem Zufall, da der kürzeste Abstand zur Linie niemals Null ist und somit eine "entgegengesetzte" Richtung des Strahls gefunden werden kann, der 2 Punkte verbindet.
Python-Implementierung:
Es gibt eine andere mögliche Lösung, die vielleicht eleganter ist. Es geht um Triangulation. Lassen Sie mich wissen, ob es von Interesse ist und ich werde meine Antwort aktualisieren
quelle
Da die Straßen parallel sind, habe ich angenommen, dass sie mit dem
Copy Parallel
Werkzeug in der Bearbeitungssymbolleiste erstellt wurden, sodass das Linienpaar dieselbe Richtung hat. Wir können dann über die Koordinaten der ersten Zeile iterieren und sie einem Polygon hinzufügen und dann über die Rückseite der zweiten Zeile iterieren . Es gibt definitiv einen besseren Weg, um sich dem Ergreifen von Linienpaaren zu nähern. Der OID-Ansatz funktioniert, ist aber nicht sehr hübsch.Von dort aus ist es ein Aufruf, die Ebene nach Ort zu schneiden / auszuwählen / was haben Sie. Beachten Sie, dass das
S
geformte Polygon nicht perfekt ist, da ich es freihändig gezeichnet habe und es einige Bögenexplode_to_points
gibt, die nicht richtig funktionieren. Einfach laufenDensify
oder gleichwertig.quelle
m
Auflösung, Mehrteiligkeit usw. abzudecken ). Ich weiß nicht, wie solche Funktionen tatsächlich in einem Netzwerk dargestellt werden.