Near (Analyse)
Zusammenfassung
Hiermit wird innerhalb des Suchradius die Entfernung jedes einzelnen Features in den Eingabe-Features zum nächstgelegenen Feature in den Near-Features berechnet.
Weitere Informationen zum Berechnen der Nähe mit Geoverarbeitungswerkzeugen
Bild
Verwendung
-
Die folgenden beiden Felder werden der Attributtabelle der Eingabe-Features hinzugefügt. Die Feldwerte werden aktualisiert, wenn die Felder bereits vorhanden sind.
- NEAR_FID – Dient zum Speichern der Feature-ID des nächstgelegenen Features.
- NEAR_DIST – Dient zum Speichern des Abstands von einem Eingabe-Feature zum nächstgelegenen Feature. Der Wert dieses Feldes ist in der linearen Einheit des Koordinatensystems der Eingabe angegeben.
-
Der Wert für NEAR_FID und NEAR_DIST ist -1, falls innerhalb des Suchradius kein Feature gefunden wird.
Optional können der Attributtabelle von Eingabe-Features auch die Felder NEAR_X, NEAR_Y, NEAR_ANGLE und NEAR_FC hinzugefügt werden, wie in den Einträgen zu Near-Features und optionalen Parametern erklärt. Der Wert eines Feldes wird aktualisiert, wenn die Felder bereits vorhanden sind. Wenn innerhalb des Suchradius kein Feature gefunden wird, betragen die Werte dieser Felder -1 für NEAR_X und NEAR_Y, 0 für NEAR_ANGLE und NULL für NEAR_FC.
-
Eingabe-Features und Near-Features können vom Typ "Punkt", "Multipunkt", "Linie" oder "Polygon" sein.
-
Die Near-Features können eine oder mehrere Feature-Classes mit unterschiedlichen Shape-Typen umfassen.
-
Dasselbe Dataset kann sowohl für Eingabe-Features als auch für Near-Features verwendet werden. Wenn das nächstgelegene Feature eines Eingabe-Features das Feature selbst ist (NEAR_DIST ist 0), wird dieses Feature bei der Berechnung ignoriert, und es wird nach dem nächsten nächstgelegenen Feature gesucht.
-
Die Eingabe-Features können ein Layer sein, auf dem Sie eine Auswahl durchgeführt haben. Die selektierten Features werden beim Ausführen des Werkzeugs verwendet und aktualisiert. Die verbleibenden Features haben die Werte der auf -1 festgelegten neu erstellten Felder (z. B. NEAR_FID und NEAR_DIST).
Die von diesem Werkzeug berechneten Entfernungen sind in der Einheit des Koordinatensystems der Eingabe-Features angegeben. Wenn die Eingabe in einem geographischen Koordinatensystem ist und die Ausgabeentfernungen in einer linearen Einheit (im Gegensatz zu Dezimalgrad) gemessen werden sollen, müssen Sie zunächst die Eingabe mit dem Werkzeug "Projizieren" in ein projiziertes Koordinatensystem projizieren. Verwenden Sie für beste Ergebnisse eine äquidistante Projektion oder eine für das Untersuchungsgebiet geeignete Projektion (z. B. UTM).
Wenn mehr als ein Near-Feature die gleiche kürzeste Entfernung vom Eingabe-Feature aufweist, wird eines davon nach dem Zufallsprinzip als nächstgelegenes Feature ausgewählt.
Syntax
Parameter | Erläuterung | Datentyp |
in_features |
Die Eingabe-Features können vom Typ "Punkt", "Polylinie, "Polygon" oder "Multipoint" sein. | Feature Layer |
near_features [near_features,...] |
Wert, der verwendet wurde, um die nächsten Features von Eingabe-Features zu suchen. Es können einer oder mehrere Near-Features-Einträge vorhanden sein. Jeder Eintrag kann vom Typ "Punkt", "Polylinie", "Polygon" oder "Multipoint" sein. Falls mehrere Near-Features-Einträge angegeben werden, wird der Eingabetabelle ein neues Feld NEAR_FC hinzugefügt, um die Pfade der Quell-Feature-Class mit den nächstgelegenen Features zu speichern. | Feature Layer |
search_radius (optional) |
Gibt den Radius an, der zum Suchen nach Near-Feature-Kandidaten verwendet wird. Die Near-Features innerhalb dieses Radius werden in die Berechnung des nächstgelegenen Features einbezogen. Wenn kein Wert angegeben wird, also der Standardradius (leer) verwendet wird, werden alle Near-Features in die Berechnung einbezogen. Als Suchradiuseinheit werden standardmäßig die Einheiten des Koordinatensystems der Eingabe-Features verwendet. Die Einheiten können in jede beliebige Einheit geändert werden. Dies hat jedoch keine Auswirkungen auf die Einheiten des Ausgabefeldes NEAR_DIST, die von den Einheiten des Koordinatensystems der Eingabe-Features abhängen. | Linear unit |
location (optional) |
Gibt an, ob X- und Y-Koordinaten der nächstgelegenen Position des Near-Features in die neuen Felder NEAR_X und NEAR_Y geschrieben werden.
| Boolean |
angle (optional) |
Gibt an, ob die Werte der nächstgelegenen Winkel in Dezimalgrad berechnet und in ein neues Feld (NEAR_ANGLE) geschrieben werden. Ein nächstgelegener Winkel wird von der X-Achse (horizontale Achse) in Richtung der Linie gemessen, die ein Eingabe-Feature mit dem nächsten Feature an den nächstgelegenen Positionen verbindet. Der Dezimalgradbereich beträgt 0 bis 180 bzw. 0 bis -180: 0 nach Osten, 90 nach Norden, 180 (-180°) nach Westen und -90 nach Süden.
| Boolean |
Codebeispiel
Das folgende Skript für das interaktive Python-Fenster veranschaulicht, wie Sie die Funktion "Near" im unmittelbaren Modus verwenden.
import arcpy
arcpy.env.workspace = "C:/data/city.gdb"
## find the nearest road from each house
arcpy.Near_analysis('houses', 'roads')
Das folgende Skript im Python-Fenster veranschaulicht, wie Sie die Funktion "Near" in einem eigenständigen Skript verwenden.
# Name: Near.py
# Description: Finds nearest features from input feature class to near feature class.
import arcpy
from arcpy import env
# Set workspace environment
env.workspace = "C:/data/city.gdb"
try:
# set local variables
in_features = "houses"
near_features = "parks"
# find features only within search radius
search_radius = "5000 Meters"
# find location nearest features
location = "LOCATION"
# avoid getting angle of neares features
angle = "NO_ANGLE"
# execute the function
arcpy.Near_analysis(in_features, near_features, search_radius, location, angle)
# get geoprocessing messages
print arcpy.GetMessages()
except arcpy.ExecuteError:
print arcpy.GetMessages(2)
except Exception as ex:
print ex.args[0]
Das folgende Python-Skript veranschaulicht, wie der nächstgelegene Winkel in Azimuth konvertiert wird.
# Name: near_angle_to_azimuth.py
import arcpy
# Near tool does not calculate angle in azimuths
# This script, using the output of the tool, converts the angles
# to azimuth angles.
in_table = r"C:/data/city.gdb/near_table"
angles = arcpy.da.SearchCursor(in_table, ["NEAR_ANGLE"])
azimuth_angles = []
with angles as rows:
for row in rows:
angle = row[0]
if angle <= 180 and angle > 90:
azimuth_angles.append(360.0 - (angle - 90))
else:
azimuth_angles.append(abs(angle - 90))
# Use these azimuth angles as necessary.
Zeigt die Nachbearbeitung mit der abgeleiteten Ausgabe des Werkzeugs "Near". Das Skript ermittelt für jedes nächstgelegene Feature, welchem Eingabe-Feature es am nächsten ist.
# Name: features_closest_to_input.py
"""
This script finds, for each input feature, a list of near feature it is closest to.
If near features 6, 7, 10 are closest to input feature 3 then the
resulting dictionary will have a list [6, 7, 10] as value for key 3
"""
import os
import arcpy
in_fc = r"C:\data\cities.gdb\cities_many"
# create a dictionary to hold the list of near ids for each input id
nearest_dict = dict()
with arcpy.da.SearchCursor(in_fc, ["OID@", "NEAR_FID"]) as rows:
for row in rows:
nearest_id = row[0] # get OID value for that row
input_id = row[1] # get NEAR_FID value
if input_id in nearest_dict:
# if a dict key already exists, append near id to value list for that key
nearest_dict[input_id].append(nearest_id)
else:
# if the key does not exist then create a new list with near id
# and add it to the dictionary
nearest_dict[input_id] = [nearest_id]
print nearest_dict
# output will look like:
# {1: [13, 28], 2: [2, 9, 14, 20, 22], 3: [11, 12, 24, 25]}