Ich habe Startpunkt und Endpunkt einer Polylinie. Wie kann ich einen Punkt auf dieser Polylinie von Endpunkten erhalten, die durch den angegebenen Abstand angegeben sind?
Wie kann ich dies mithilfe von arcpy erreichen, vorausgesetzt, dieses Skript sollte in ArcView funktionieren, ohne dass Module importiert werden ( wie diese Antwort ). Ich versuche, Werte nicht fest zu codieren.
Verwandte Frage:
arcpy
line
linear-referencing
Nutzer
quelle
quelle
object.interpolate(distance[, normalized=False])
. Ist es eine Methode von Arcpy? Wenn ja, können Sie bitte den Link posten. Ich habe es gegoogelt, aber nicht gefunden.Antworten:
Dies klingt ähnlich wie "Lineare Referenzierung" und dieses Toolset wäre in ArcView verfügbar. Darüber hinaus können Sie dieses Tool sehr einfach skripten.
Link zur ESRI-Hilfe für die lineare Referenzierung
quelle
Basierend auf Ihren Anforderungen, wie @LouisH erwähnt, ist die Verwendung der linearen Referenzierung definitiv der richtige Weg. Ich habe einen Code zusammengeschustert, der Ihren Bedarf an nicht hartcodierten Elementen erfüllen sollte, sondern sie stattdessen als Parameter anfordert.
Zur Erläuterung verwendet das unten verwendete lineare Referenzierungswerkzeug "Routen", in Ihrem Fall die Linienmerkmale, und platziert "Ereignisse", in Ihrem Fall die Punkte, basierend auf einem Entfernungsfeld entlang dieser. Dies führt zu einem FeatureLayer, der im Speicher gespeichert ist. Dies ist der Grund für die letzte Funktion, die die Features in eine Ausgabe-Feature-Class kopiert.
Bearbeiten - Eine Sache, über die Sie mit diesem Werkzeug nachdenken sollten, und wahrscheinlich jede Operation zum Lokalisieren von Punkten basierend auf dem Abstand vom Ende einer Linie, ist das Ende der Linie, von dem aus Sie beginnen. Das lineare Referenzierungswerkzeug arbeitet beispielsweise basierend auf der digitalisierten Richtung einer Linie. Es ist wichtig sicherzustellen, dass Sie auf irgendeine Weise feststellen können, auf welchem Endpunkt Ihre Messungen basieren.
quelle
Das Lösen eines solchen linearen Referenzproblems
without importing any modules
liegt außerhalb meines Bereichs.Ich habe verwendet
Shapely
(Python-Paket für die Manipulation und Analyse von 2D-Geodatengeometrien. Und es ist BSD-lizenziert :-))Laden Sie es hier herunter . Die Version 2.6 ist die einzige, die arcgis 10 arcpy unterstützt. Es handelt sich um eine einfache Installation (Größe 1,5 MB).
und jetzt ist hier das arcpy-Skript, um den Zweck zu erreichen. Verzeih meine Python. Nur heute habe ich etwas über die Schleifen, Tupel usw. gelernt :)
Hinweis : Dies funktioniert nicht, wenn das Feature Kurvensegmente enthält
quelle
Ich fand diese Frage beim Versuch, das zu tun, was ich für dasselbe halte. Ich wollte, dass alles über arcpy erledigt wird. Die Verwendung der linearen Referenzierung war für mich nicht sinnvoll, da ich die Punktereignisse noch nicht habe (und nicht herausfinden konnte, wie ich sie mit LR abrufen kann). Der Kern dessen, was ich letztendlich benutzte, war
Dies erfordert Arc 10.1 oder höher. Ich konnte nicht herausfinden, ob dies unter der von mir angegebenen ArcInfo-Lizenzstufe (OP-spezifiziertes ArcView) verfügbar war.
In meinem obigen Beispiel wollte ich einen Punkt nicht in einem festen Abstand, sondern um einen Prozentsatz der gesamten Linienlänge. Dazu habe ich das zweite optionale Argument an geliefert
positionAlongLine
. Sie überspringen das zweite Argument, wenn Sie nur einen absoluten Abstand angeben möchten. Hier ist das Dokument .Das ausführlichere Codebeispiel ist
'flFL'
ist meine FeatureLayer-Linie, auf der ich die Punkte lokalisieren möchte. Läuft ziemlich schnell.NumPyArrayToFeatureClass
war eine sehr schöne Möglichkeit, alle meine Punkte wieder in eine Feature-Klasse zu stecken (danke an meinen Kollegen Curtis für diesen Teil!). Hatte mit experimentiert,Append_management
aber das war ein bisschen langsamer.quelle
Könnte ein Overkill sein, aber wenn Sie Zugriff auf die Netzwerkanalyse-Erweiterung haben, können Sie ein Netzwerk aus Ihren Polylinien erstellen und dann Servicebereiche um Ihre Eingabepunkte erstellen , wobei Sie die SA-Größe als interessierende Entfernung angeben. Hier ist ein flüchtiges Beispiel mit 111 Metern SA vom Punkt:
Dann müssten Sie Punkte finden, an denen SA die Linie kreuzt.
quelle
Ich denke, Sie können es mit Feature Vertices To Points (Datenverwaltung) Methode erhalten. Weitere Informationen erhalten Sie hier .
oder Sie können aus Split Linie bei Point (Data Management) überprüfen hier .
Sie sind nicht genug, aber Sie können Ihren eigenen Code schreiben ...
ich hoffe es hilft dir ...
quelle