Ich denke immer wieder, dass mir etwas fehlen muss, aber in ArcGIS 10 scheint es kein Werkzeug zu geben, um Features (insbesondere Polygone) aus einem Layer an einer Punktposition (X, Y) über ArcPy auszuwählen. Die Parameter für ein solches Werkzeug wären lediglich ein Layername und eine XY-Position.
Zur Umgehung dieses Problems erstelle ich eine Punkt-Feature-Class, die den Punkt enthält, und führe darauf eine SelectLayerByLocation aus. Wenn sich die Polygon-Feature-Class jedoch in Oracle befindet (Zugriff über ArcSDE 9.x) und 3,5 Millionen Polygone enthält, kann die Auswahl mehr als 5 Minuten dauern, wenn ich denke, dass eine oder zwei Sekunden (mit weniger Code) erforderlich sind angemessener. Die Feature-Class hat einen räumlichen Index und ich habe versucht, arcpy.env.extent (das SelectLayerByLocation anscheinend ignoriert) zu verwenden, um den geografischen Bereich einzuschränken, auf den zugegriffen wird, aber die Leistung bleibt sehr schlecht.
Gibt es eine schnellere Möglichkeit, dies mit ArcGIS Desktop 10 und ArcPy zu tun?
Antworten:
Ein anderer Ansatz hierfür wäre die Verwendung des Werkzeugs "Spatial Join". Verwenden Sie den Punkt wie oben als Eingabe-Feature-Layer und den Polygon-Layer als Identitäts-Features.
Im Gegensatz zu SelectLayerByLocation berücksichtigt SpatialJoin die Extent-Umgebung.
JOIN_ONE_TO_MANY scheint möglicherweise nicht intuitiv zu sein. Da Sie jedoch nur über eine Join-Funktion verfügen, besteht die Hauptfunktion dieser Option darin, die Aggregation und die Zusammenführungsregeln zu deaktivieren. KEEP_COMMON stellt sicher, dass Ihre Ausgabe nur auf das Polygon beschränkt ist, das Ihren Punkt schneidet. Die Feldzuordnungen beschränken die Ausgabeattribute nur auf die Form und die Attribute der Polygonebene. Die Standardeinstellung würde auch die Attribute des Punkt-Layers enthalten.
Die restlichen Standardeinstellungen funktionieren einwandfrei, sodass Sie die verbleibenden Argumente weglassen können.
quelle
Ich habe gerade etwas realisiert...
Wenn Sie damit einen Geoverarbeitungsservice implementieren, können Sie stattdessen auch einen Feature-Service mit Ihrem Polygon-Layer implementieren und die Abfrageoperation für den Feature-Service verwenden.
Sie können eine einfache XY-Position mit der Funktion "Feature-Service-Abfrage" verwenden und die Ausgabeattribute einschließlich der Form steuern.
Möglicherweise haben Sie Einschränkungen hinsichtlich der Größe, mit der Sie die Polygon-Feature-Class verfügbar machen können. Wenn Sie sie jedoch bereits für den Geoverarbeitungs-Service verfügbar machen, sollten Sie auch einen Feature-Service erstellen können.
quelle
Diese Antwort stammt aus den alten ArcGIS-Diskussionsforen .
Vielen Dank an Jason Scheirer für etwas präziseren Code:
Und besonders an Chris Snyder für einen Leistungstipp:
quelle