Mehr

Wie bearbeite ich die Polylinie „Self Intersecting“ in ArcGIS for Desktop?

Wie bearbeite ich die Polylinie „Self Intersecting“ in ArcGIS for Desktop?


Ich versuche herauszufinden, wie man eine sich selbst schneidende Polylinie (Interstate Ramp) so bearbeitet, dass ich am Ende eine Von-Knoten-, Selbst-Schnittschleife und dann Endknoten habe.

Ich verwende ArcGIS Version 10.3 und die Daten werden in einer Feature-Class einer File-Geodatabase gespeichert

Richard. Tolle und aufschlussreiche Kommentare, aber ich denke, ich habe eine Lösung gefunden, die für uns beide nützlich sein könnte. Ich habe festgestellt, dass wenn ich, wie Sie gesagt haben, zwei Features erstelle, dann die Features zurückverfolge (Rampe) und dann die zugrunde liegenden Features lösche, bleibt mir eine sich selbst schneidende Linie, die im Netzwerkanalysten gut zu funktionieren scheint (siehe Abbildung). Das einzige Problem, das ich jetzt habe, ist, dass ich beim Verfolgen der neuen Funktion alle Attributionen verliere, sodass ich vermute, dass eine Art Join die Attribute neu auffüllt.

Um Attribute von einem Feature auf eine andere Feder zu kopieren, habe ich das folgende Verfahren verwendet…

1.Klicken Sie auf das Menü Editor und dann auf Bearbeitung starten.

2.Klicken Sie auf das Bearbeitungswerkzeug Bearbeitungswerkzeug in der Editor-Symbolleiste.

3.Wählen Sie die Features aus, deren Attribute Sie bearbeiten möchten.

4.Klicken Sie in der Editor-Symbolleiste auf die Schaltfläche Attribute.

5.Klicken Sie im Dialogfeld Attribute mit der rechten Maustaste auf das Feature, von dem Sie kopieren möchten, und klicken Sie auf Kopieren.

6.Klicken Sie mit der rechten Maustaste auf das Feature, in das Sie einfügen möchten, und klicken Sie auf Einfügen.


Wenn Sie aus den angezeigten Linien ein einzelnes Polylinien-Feature erstellen, wird immer ein Multipart-Feature erstellt. Diese Regel für sich selbst schneidende Features ist in die Esri-Spezifikationen für eine Polylinie integriert und kann nicht überschrieben werden. Polygone bestehen aus geschlossenen Polylinien, und Polygone müssen ein mehrteiliges Polylinien-Feature an Selbstschnittpunkten erzwingen, damit es richtig gezeichnet wird. Das Zulassen ununterbrochener Selbstschnittpunkte einer einzelnen Teillinie würde dazu führen, dass beide Seiten der Linie gleichzeitig das Innere und Äußere des Polygons bilden (ähnlich einem Möbiusstreifen), und das ist nicht zulässig. Esri beschloss, diese Regel für alle Polylinien zu erzwingen.

Ich habe einfach akzeptiert, dass ich immer zwei Features für Loop-Rampenlinien erstellen muss, um sicherzustellen, dass sie richtig ausgerichtet sind. Ich teile solche Zeilen immer irgendwo innerhalb der Schleife auf. Ich verwende ein für dieses Linienpaar spezifisches Attribut, damit mein Python-Code oder meine Geoverarbeitungswerkzeuge verstehen können, dass das Linienpaar analytisch als einzelne Linie behandelt werden soll, um die Endpunkte zu finden, die den Übergang von einer Autobahn zu der Autobahn beginnen und beenden Sonstiges. Für ein Richtungsattribut weise ich beiden Segmenten die endgültige Linienenderichtung (in Ihrem Beispiel SW) zu, obwohl das Ende einer der Linien möglicherweise in eine andere Richtung zeigt (obwohl Sie in Ihrem Beispiel den Zeilenumbruch kurz vor dem Selbstschnitt, so dass die Enden beider Linien nach SW zeigen).

Darüber hinaus gibt es keine Möglichkeit, das Werkzeug Route erstellen mit solchen Schleifen zu verwenden, um eine einzelne Route zu erstellen, ohne völlig unbrauchbare Routen zu erstellen. Der Algorithmus Create Routes konvertiert alle sich selbst schneidenden Linien in Multipart-Linien für jedes Scheitelpunktpaarsegment und verschlüsselt die Segmentteilsequenz. Da ich keinen Wert darin sehe, meine Routen durch manuelle Bearbeitung zu pflegen, und auf einen automatisierten Prozess angewiesen bin, um meine Routen jede Woche vollständig neu zu generieren, erstelle ich zwei separate Routen mit einem ähnlichen Routennamen aus den beiden Linien, die ich in der Schleife unterbrochen habe. Wenn Sie nicht auf eine automatisierte Wartung angewiesen sind, können Sie die Linien natürlich manuell bearbeiten, um die meisten brauchbaren Kennzahlen zu erhalten, aber es ist zeitaufwändig, solche Änderungen vorzunehmen, und sie melden immer noch komplexe Kennzahlen am Schnittpunkt.

Jeff: Interessantes Verhalten mit dem Trace-Tool. Mir war nicht bewusst, dass es sich anders verhält als die normalen Zeichenwerkzeuge. In meinem Fall verwende ich derzeit keinen Network Analyst und hauptsächlich LR. Ich habe eine einzelne Teillinien-Rampenschleifenform getestet, die mit dem Verfolgungswerkzeug mit dem Werkzeug Route erstellen erstellt wurde, um Maßnahmen zuzuweisen. Die Ausgabe Route erstellen war ebenfalls eine einzelne Teillinie, und die Maßnahmen wurden durch die Selbstkreuzung auf die gleiche Weise wie bei jeder normalen Linie ohne Selbstkreuzung korrekt zugewiesen. Dieser zusätzliche Schritt während der Bearbeitung zum Erstellen von Features ist nicht allzu schwierig oder zeitaufwändig. Ich werde meine Rampen höchstwahrscheinlich mit dieser Technik neu erstellen.

Was Attribute aus den Originallinien angeht, würde ich das Werkzeug Attributübertragung in der Werkzeugleiste Räumliche Anpassung verwenden. Diese Methode fügt während der Bearbeitung des Features nur wenige Klicks hinzu, um die Attribute zu übertragen. Dies ist einfacher, als eine separate Feature-Class zu verwalten, die mit einem Join-Attribut oder einem räumlichen Join erstellt wurde.


Beeindruckend! Hätte nie gedacht, dass es so kompliziert ist. Um für meine Arroganz zu bezahlen, habe ich ein Skript geschrieben, das damit umgeht. Das Skript geht davon aus, dass die erste Ebene im Inhaltsverzeichnis die Zielpolylinienebene ist. Das Werkzeugparameter-Skript erhält eine Auswahl und füllt einen und den einzigen Skriptparameter (Type Long, MultiValue = Yes).

Validierungsskript:

def initializeParameters(self): """Verfeinern Sie die Eigenschaften der Parameter eines Werkzeugs. Diese Methode wird aufgerufen, wenn das Werkzeug geöffnet wird.""" mxd = arcpy.mapping.MapDocument("CURRENT") lyr = arcpy.mapping.ListLayers( mxd)[0] d=arcpy.Describe(lyr) aBmNodes=d.FIDset self.params[0].value=aBmNodes self.params[0].enabled=1 return

Der Benutzer muss die ausgewählten Zeilen-FIDs in der richtigen Reihenfolge mischen, z. für 3 ausgewählte Zeilen unten gezeigt:

die richtige reihenfolge ist:

Skript zum Anhängen an das Tool:

import arcpy, traceback, os, sys try: def showPyMessage(): arcpy.AddMessage(str(time.ctime()) + " - " + message) aBmLinks = arcpy.GetParameterAsText(0) aBmLinks=aBmLinks.split('; ') nSet=len(aBmLinks) if nSet<2: arcpy.AddWarning("Bitte wählen Sie mindestens 2 Zeilen aus") raise SystemExit('Fehlende Eingabe') mxd = arcpy.mapping.MapDocument("CURRENT") lyr = arcpy. mapping.ListLayers(mxd)[0] d=arcpy.Describe(lyr);fidName=d.OIDFieldName first = arcpy.AddFieldDelimiters(lyr.workspacePath, fidName) arr=arcpy.Array() für fid in aBmLinks: quer=" %s=%s"%(first,fid) mit arcpy.da.SearchCursor(lyr, ("[email protected]","[email protected]"),quer,explode_to_points=True) als Cursor: für Zeile im Cursor: arr.add (row[1].firstPoint) # pLine=arcpy.Polyline(arr) # with arcpy.da.UpdateCursor(lyr,"[email protected]",quer) as curT: # für Zeile in curT:curT.updateRow((pLine, )) außer: message = "
*** PYTHON-FEHLER *** "; showPyMessage() message = "Python Traceback Info: " + traceback.format_tb(sys.exc_info()[2])[0]; showPyMessage() message = "Python-Fehlerinfo: " + str(sys.exc_type)+": " + str(sys.exc_value) + "
"; showPyMessage()

Entfernen Sie das Kommentarzeichen der letzten 3 Linie, und es wird die Geometrie des letzten Features in der sortierten Liste (FID=0 im gezeigten Beispiel) durch eine einzelne Teil-Polylinie ersetzt.


Schau das Video: ArcGIS - Parcel Editor - Assigning sequential parcel numbers by drawing a line