Mit ArcMap die Auswahl "meistens innerhalb" durchführen?

8

Ich suche nach einer Möglichkeit, um festzustellen, ob sich eine Polylinie "meistens innerhalb" eines Polygons befindet. Da meistens innerhalb willkürlich ist, müsste ich bei seiner Ausführung einen Prozentsatz eingeben können.

Ich dachte, dass es in ArcMap eine Option mit Select By Location gegeben haben könnte, aber es scheint keine zu geben. Es gibt ähnliche Methoden, wie "vollständig im Inneren", aber ich sehe nicht, wie ich eine davon verwenden kann, um das zu erreichen, wonach ich suche.

Gibt es diese Funktionalität oder eine Methode, um dies zu erreichen?

Amasephy
quelle
'meistens innerhalb' definieren ... 75% innerhalb?
DPSSpatial
Das ist ein Schwerpunkt innerhalb der Option, so dass in der Regel meist innerhalb
HeikkiVesanto
@mapBaker Guter Punkt über den Prozentsatz. Wenn Sie ArcPy verwenden, kann dies möglicherweise eine Variable sein, die angepasst werden kann, um das gewünschte Ergebnis zu erzielen.
Amasephy
1
@Vesanto Der Schwerpunkt würde nicht funktionieren. Wenn die Polylinie die Ecke eines Polygons abschneidet, könnte sich der Schwerpunkt innerhalb des Polygons befinden, ein erheblicher Teil davon jedoch möglicherweise nicht.
Amasephy
2
Ich würde einen Schnittpunkt zwischen dem Polygon und der Linie FC und dann eine Statistik machen, um den Prozentsatz jeder Linie in einem bestimmten Polygon (oder einem beliebigen Polygon) zu bestimmen. Daraus würde ich dann meine Auswahl treffen.
Klassen

Antworten:

8

Dann müssten Sie nur noch eine Tabelle-zu-Tabelle-Verknüpfung für die beiden Zeilendateien (Original und Ausgabe des GP-Tools) durchführen und dann die prozentuale Differenz zwischen den beiden Shape.Len-Feldern berechnen (wenn ein Liniensegment in der Originaldatei 100 Fuß lang ist und dasselbe Liniensegment, das am Polygon abgeschnitten ist, ist 75 Fuß lang, dann würden 75% dieser Linie innerhalb des Polygons liegen. Dann können Sie einfach ein Attribut auswählen, das auf diesem Prozentsatz basiert.

Ich weiß wieder, dass dies ziemlich kompliziert ist, es erstellt einen Zwischendatensatz und es gibt wahrscheinlich einen einfacheren Weg, dies zu tun, von dem ich nichts weiß. Wenn Sie jedoch ein Modell oder ein Skript schreiben, um dies zu tun, und die Ausgabezeile FC löschen, wenn Sie damit fertig sind, sollte es dem Endbenutzer nicht allzu schwierig erscheinen ... auch wenn es ein bisschen schmerzhaft ist zunächst zu bauen.

Nur ein paar Gedanken, und lassen Sie mich wissen, wenn das keinen Sinn ergibt, und ich werde versuchen, es besser zu erklären.

John
quelle
+1 Das klingt für mich nach ziemlich guten Gedanken, weil sie die ArcGIS-Funktionen gut nutzen und es, egal wie es gemacht wird, wirklich keine Möglichkeit gibt, irgendeine Form von Polygon-Polyline-Overlay-Operation zu vermeiden. (Übrigens, ich denke, Sie waren das Opfer eines Drive-by-Downvoters und ich entschuldige mich dafür.)
whuber
@ John, das habe ich auch gedacht ... ABER - um die Verknüpfung durchzuführen, benötigen die Eingabezeilen ein UNIQUEID-Feld (wohlgemerkt nicht das ArcGIS OBJECTID-Feld), auf dem Sie die Verknüpfung durchführen können ...
DPSSpatial
1
@mapBaker Danke, das ist ein guter Punkt (ich hatte vergessen, ob der Clip die Eingabe-OID in der Ausgabe beibehalten hat, wie es einige Tools tun). Sie können die OID in einem anderen Feld berechnen, bevor Sie den Clip ausführen, um eine eindeutige ID zu erhalten, falls diese noch nicht verfügbar ist.
John
@ John ohhhh K ...
DPSSpatial
Diese Lösung würde für mich funktionieren, aber ich denke, dass die Verwendung von Intersect anstelle von Clip durch dklassen dies einfacher macht. Am Ende habe ich eine Kombination der Antworten verwendet, die ich erhalten habe. Ich bin mir nicht sicher, wer für die Beantwortung der Frage eine Gutschrift erhalten soll.
Amasephy
3

Basierend auf den Antworten, die ich hier erhalten habe, habe ich eine Kombination von Ideen verwendet.

Zuerst habe ich meinem ursprünglichen Datensatz ein Feld für Länge und Prozent hinzugefügt. Ich habe die Shape.Length-Werte in das Feld Length kopiert.

Zweitens habe ich anstelle von Clip, was in diesem Fall wesentlich mehr Arbeit bedeutet, das Intersect-Tool verwendet. Dadurch werden die Polylinien "abgeschnitten", die die Polygone schneiden, und einige potenziell wertvolle Attribute hinzugefügt. Obwohl es ein wirklich eindeutiges ID-Feld gibt, denke ich nicht, dass es wirklich erforderlich ist, wenn ein statisches Längenfeld verwendet wird.

Schließlich berechne ich einfach den Prozentsatz der Differenz zwischen dem neuen Feld Shape.Length und dem Feld Static Length zum Feld Percent. Alle Polylinien, die die Polygongrenze geschnitten haben, haben einen Prozentsatz von weniger als 100.

Amasephy
quelle
2
  1. Teilen Sie die Polylinie an jedem Scheitelpunkt.
  2. Rufen Sie für jedes Segment vollständig innerhalb der Endpunkte auf.
  3. Jedes Segment, das sich vollständig innerhalb befindet, hat 100% seiner Länge innerhalb des Polygons (vorausgesetzt, es werden keine wiedereintretenden Polygone verwendet), und seine Länge kann zu einer Summe hinzugefügt werden.
  4. Alle Teillinien können in beispielsweise 10 Segmente aufgeteilt und dieselbe Berechnung angewendet werden.
  5. Vergleichen Sie die Summe mit der berechneten Länge, um eine Auflösung von 10% zu erhalten (wenn Sie genauere Ergebnisse benötigen, können Sie die Teillinien feiner unterteilen).
  6. Sie können sogar die Gesamtlänge der Außenlinien beibehalten und die Teillinienberechnung nur dann durchführen, wenn Sie keine Antwort über Ihren Schwellenwert hinaus haben.
Steve Barnes
quelle