Récupérer les coordonnées des points de début et de fin avec ArcPy? [fermé]

9

Comment récupérer les coordonnées de point de départ et d'arrivée avec ArcPy pour une classe d'entités polylignes?

Je m'attends à passer un identifiant de segment à un sous-programme et à lui faire passer les coordonnées de début et de fin. La méthode Field Calculator ne fonctionne pas pour moi, car j'ai besoin de la valeur pour d'autres calculs qui ne peuvent pas être effectués. (Je préfère également ne pas modifier les données pour stocker ces coordonnées en tant qu'attributs.) J'essaie de calculer la plage d'adresses pour un schéma d'adressage "centré". La valeur de l'adresse dépend de la distance jusqu'au "centre du comté".

Ivar Husa
la source

Réponses:

15

Le processus semble avoir changé entre ArcGIS 10.0 et 10.1. Je vais inclure un échantillon pour les deux.

Voici le document d'aide sur la lecture des géométries dans 10.1 à l'aide d'arcpy: Lecture des géométries 10.1
Ce document traite des paramètres d'un type de géométrie de polyligne : Polyligne (arcpy)

10.1

import arcpy

infc = arcpy.GetParameterAsText(0)

# Enter for loop for each feature
#
for row in arcpy.da.SearchCursor(infc, ["OID@", "SHAPE@"]):
    # Print the current line ID

    print("Feature {0}:".format(row[0]))

    #Set start point
    startpt = row[1].firstPoint

    #Set Start coordinates
    startx = startpt.X
    starty = startpt.Y

    #Set end point
    endpt = row[1].lastPoint

    #Set End coordinates
    endx = endpt.X
    endy = endpt.Y

10,0

Voici le document d'aide sur la lecture des géométries dans 10.0 à l'aide d'arcpy: Lecture des géométries 10.0
Ce document présente les paramètres d'un objet Geometry : Geometry

import arcpy

infc = arcpy.GetParameterAsText(0)

# Identify the geometry field
#
desc = arcpy.Describe(infc)
shapefieldname = desc.ShapeFieldName

# Create search cursor
#
rows = arcpy.SearchCursor(infc)

# Enter for loop for each feature/row
#
for row in rows:
    # Create the geometry object
    #
    feat = row.getValue(shapefieldname)

    # Print the current line ID
    #
    print "Feature %i:" % row.getValue(desc.OIDFieldName)

    #Set start point
    startpt = feat.firstPoint

    #Set Start coordinates
    startx = startpt.X
    starty = startpt.Y

    #Set end point
    endpt = feat.lastPoint

    #Set End coordinates
    endx = endpt.X
    endy = endpt.Y

La différence entre les deux réside essentiellement dans la façon dont vous accédez à la géométrie de l'entité. Des raccourcis ont été ajoutés dans 10.1 pour faciliter l'accès à l'objet géométrique.

Obtenez spatial
la source
6

J'ai déjà fait cela auparavant et je préfère utiliser un curseur de recherche et lire la géométrie. Il crée une boucle et vous permet de faire des calculs sur chaque forme.

inFeatures = "Feature"
shapeName = arcpy.Describe (inFeatures).shapeFieldName
rows = arcpy.SearchCursor(inFeatures)
for row in rows:
    feat = row.getValue(shapeName)
    xy1 = feat.firstPoint
    xy2 = feat.lastPoint

Cette boucle vous permet d'ajouter des calculs avec elle et d'aller forme par forme.

Il existe une aide supplémentaire dans l'aide: Utilisation de la géométrie en Python

Cody Brown
la source
1

Vous devriez pouvoir utiliser les propriétés firstPoint et lastPoint de l' objet Polyligne .

deux vitesses
la source