ArcGIS Desktop

  • ArcGIS Pro
  • ArcMap

  • My Profile
  • Aide
  • Sign Out
ArcGIS Desktop

ArcGIS Online

La plateforme cartographique de votre organisation

ArcGIS Desktop

Un SIG professionnel complet

ArcGIS Enterprise

SIG dans votre entreprise

ArcGIS Developers

Outils de création d'applications de localisation

ArcGIS Solutions

Modèles d'applications et de cartes gratuits pour votre secteur d'activité

ArcGIS Marketplace

Téléchargez des applications et des données pour votre organisation.

  • Documentation
  • Support
Esri
  • Se connecter
user
  • Mon profil
  • Déconnexion

ArcMap

  • Accueil
  • Commencer
  • Carte
  • Analyser
  • Gérer les données
  • Outils
  • Extensions

Écrire des géométries

  • Création de géométrie à partir de listes de coordonnées

À l’aide des curseurs d’insertion et de mise à jour, les scripts peuvent créer de nouvelles entités dans une classe d’entités ou mettre à jour des entités existantes. Un script permet de définir une entité en créant un objet Point, en définissant ses propriétés et en la plaçant dans un Array. Ce tableau peut ensuite être utilisé pour définir la géométrie d’une entité à l’aide des classes de géométrie Polygon, Polyline, PointGeometry ou Multipoint.

import arcpy
fc = "c:/data/gdb.gdb/roads"
cursor = arcpy.da.InsertCursor(fc, ["SHAPE@"])
array = arcpy.Array([arcpy.Point(-77.4349451, 37.5408265),
                     arcpy.Point(-78.6384349, 35.7780943)])
spatial_reference = arcpy.SpatialReference(4326)
polyline = arcpy.Polyline(array, spatial_reference)

cursor.insertRow([polyline])

Comme illustré ci-dessus, une seule partie de géométrie est définie par un tableau de points. De même, une entité multi-parties peut être créée à partir d’un tableau de tableaux de points, comme indiqué ci-dessous à l’aide du même curseur.

first_part = arcpy.Array([arcpy.Point(-77.4349451, 37.5408265),
                          arcpy.Point(-78.6384349, 35.7780943)])
second_part = arcpy.Array([arcpy.Point(-79.7910143, 36.0786785),
                           arcpy.Point(-80.8546435, 35.2315402)])

array = arcpy.Array([first_part, second_part])
spatial_reference = arcpy.SpatialReference(4326)
multipart_feature = arcpy.Polyline(array, spatial_reference)

cursor.insertRow([multipart_feature])

Lors de l’écriture des entités ponctuelles, un objet point unique sert à définir la géométrie d’une entité ponctuelle. Les points peuvent être créés plus facilement (et efficacement) à l’aide du jeton SHAPE@XY (et des jetons SHAPE@M et SHAPE@Z si nécessaire).

import arcpy

# fc is a point feature class
fc = "c:/data/gdb.gdb/stops"
cursor = arcpy.da.InsertCursor(fc, ["SHAPE@XY"])
xy = (5997594.4753, 2069901.75682)

cursor.insertRow([xy])

Toutes les géométries sont validées avant leur enregistrement dans une classe d’entités. Les problèmes de boucles mal orientées et de polygones qui s’entrecoupent, entre autres, sont corrigés lorsque la géométrie est simplifiée avant son insertion.

L’exemple ci-dessous montre comment lire un ensemble de coordonnées (définies par coords_list) contenant une série de coordonnées linéaires, puis les utiliser pour créer une classe d’entités. :

# Create a new line feature class using a text file of coordinates.
#   Each coordinate entry is semicolon delimited in the format of ID;X;Y
import arcpy
import os

# List of coordinates (ID, X, Y)
coords_list = [[1, -61845879.0968, 45047635.4861], 
               [1, -3976119.96791, 46073695.0451],
               [1, 1154177.8272, -25134838.3511],
               [1, -62051091.0086, -26160897.9101],
               [2, 17365918.8598, 44431999.7507],
               [2, 39939229.1582, 45252847.3979],
               [2, 41170500.6291, 27194199.1591],
               [2, 17981554.5952, 27809834.8945],
               [3, 15519011.6535, 11598093.8619],
               [3, 52046731.9547, 13034577.2446],
               [3, 52867579.6019, -16105514.2317],
               [3, 17160706.948, -16515938.0553]]

# The output feature class to be created
outFC = arcpy.GetParameterAsText(0)

# Get the template feature class
template = arcpy.GetParameterAsText(1)

cur = None
try:
    # Create the output feature class
    arcpy.CreateFeatureclass_management(os.path.dirname(outFC),
                                        os.path.basename(outFC), 
                                        "POLYLINE", template)

    # Access spatial reference of template to define spatial
    # reference of geometries
    spatial_reference = arcpy.Describe(template).spatialReference

    # Open an insert cursor for the new feature class
    cur = arcpy.da.InsertCursor(outFC, ["SHAPE@"])

    # Create an array object needed to create features
    array = arcpy.Array()

    # Initialize a variable for keeping track of a feature's ID.
    ID = -1
    for coords in coords_list: 
        if ID == -1:
            ID = coords[0]

        # Add the point to the feature's array of points
        #   If the ID has changed, create a new feature
        if ID != coords[0]:
            cur.insertRow([arcpy.Polyline(array)])
            array.removeAll()
        array.add(arcpy.Point(coords[1], coords[2], ID=coords[0]))
        ID = coords[0]

    # Add the last feature
    polyline = arcpy.Polyline(array, spatial_reference)
    cur.insertRow([polyline])


except Exception as e:
    print(e)
finally:
    # Clean up the cursor if necessary
    if cur:
        del cur

Pour créer des entités surfaciques et polylignes à plusieurs parties et des entités surfaciques avec des anneaux intérieurs, commencez par créer un tableau de tableaux. Transmettez ensuite ce tableau aux classes Polygon et Polyline.

Création de géométrie à partir de listes de coordonnées

Il est également possible de créer une géométrie à partir d’une liste de coordonnées. Cette approche peut avoir l’avantage d’améliorer les performances car elle évite la surcharge liée à la création des objets de géométrie. Elle est cependant limitée aux entités une partie et, dans le cas des polygones, dépourvues de boucle intérieure. Toutes les coordonnées doivent être exprimées dans les unités de la référence spatiale de la classe d’entités.

Dans l’exemple ci-dessous, une entité polyligne unique est créée à partir d’une liste de paires x,y.

import arcpy

coordinates = [(-117.2000424, 34.0555514), 
               (-117.2000788, 34.0592066), 
               (-117.1957315, 34.0592309), 
               (-117.1956951, 34.0556001)]

# Create a feature class with a spatial reference of GCS WGS 1984
result = arcpy.management.CreateFeatureclass(
    arcpy.env.scratchGDB, "esri_square", "POLYLINE", spatial_reference=4326)
feature_class = result[0]

# Write feature to new feature class
with arcpy.da.InsertCursor(feature_class, ['SHAPE@']) as cursor:
    cursor.insertRow([coordinates])

De même, dans l’exemple ci-dessous, une entité polyligne 3D unique est créée à partir d’une liste de paires x,y,z.

import arcpy

coordinates = [(-117.2000424, 34.0555514, 1), 
               (-117.2000788, 34.0592066, 2), 
               (-117.1957315, 34.0592309, 5), 
               (-117.1956951, 34.0556001, 2)]

# Create a feature class with a spatial reference of GCS WGS 1984
result = arcpy.management.CreateFeatureclass(
    arcpy.env.scratchGDB, "esri_square_z", "POLYLINE", has_z="ENABLED", 
    spatial_reference=4326)
feature_class = result[0]

# Write feature to new feature class
with arcpy.da.InsertCursor(feature_class, ['SHAPE@']) as cursor:
    cursor.insertRow([coordinates])

Rubriques connexes

  • Accès aux données à l'aide de curseurs
  • Spécification d'une requête dans Python
  • Lecture des géométries
  • Utilisation d'objets géométrie avec les outils de géotraitement

ArcGIS Desktop

  • Accueil
  • Documentation
  • Support

ArcGIS

  • ArcGIS Online
  • ArcGIS Desktop
  • ArcGIS Enterprise
  • ArcGIS
  • ArcGIS Developer
  • ArcGIS Solutions
  • ArcGIS Marketplace

A propos d'Esri

  • A propos de la société
  • Carrières
  • Blog d’Esri
  • Conférence des utilisateurs
  • Sommet des développeurs
Esri
Donnez-nous votre avis.
Copyright © 2021 Esri. | Confidentialité | Légal