Trouver le milieu de la ligne à l'aide d'ArcPy?


12

Comment calculer le milieu d'une polyligne en utilisant le cadre de géotraitement , par exemple dans un script Python?

La propriété polyline.centroid renvoie le vrai centroïde s'il se trouve dans ou sur l'entité; sinon, le point d'étiquette est renvoyé . Le centroïde est rarement situé sur des lignes non droites, ce qui est inutile à mes fins.

L' outil Entités sommets vers points a une option au milieu, mais cela nécessite ArcInfo, que je n'ai pas actuellement.

Une option pourrait être d'ajouter des mesures aux polylignes et de créer un événement d'itinéraire 50% le long de la ligne.

Une autre solution consiste à utiliser l'option Calculer la géométrie dans ArcMap, mais idéalement, je dois automatiser ce processus dans un script.

Des suggestions meilleures / plus rapides?

Je suis limité à ArcGIS 10.0 (sans accès à une licence de niveau ArcInfo) pour le moment.


4
Voir cette question . Au final, j'ai utilisé les fonctions de référencement linéaire de Shapely pour déterminer le point médian.
— Mike T

1
Je pense que @MikeToews a la bonne idée, et utilise simplement les fonctions de référencement linéaire dans ArcGIS au lieu de les intégrer à Shapely. Il semble que ce soit la fonction que vous souhaitez: Créer une couche d'événements de route - Référencement linéaire . Vous pouvez probablement créer la table d'événements à la volée. C'est pour 10.1, mais devrait être le même dans 10.0.
— Obtenez Spatial

1
Ce blog semble contenir un algorithme qui pourrait être converti en Python / ArcPy: rbrundritt.wordpress.com/2008/10/14/…
— PolyGeo

Est-ce que quelqu'un l'a fait en javascript? Je l'ai fait avec succès uniquement dans Arcpy. Sincèrement Ezequias
— Ezequias

Si vous avez une nouvelle question, veuillez la poser en cliquant sur le bouton Poser une question . Incluez un lien vers cette question si cela permet de fournir un contexte. - De l'avis
— BERA

Réponses:


23

La classe Polyline a une nouvelle méthode appelée "positionAlongLine" dans ArcGIS 10.1. Cela renverra un objet PointGeometry avec exactement un point à une distance spécifiée de l'extrémité de départ de la ligne, ou une fraction de la distance entre le début et la fin . Pour trouver le point médian, il vous suffit de le faire positionAlongLine(0.5,True). Pour trouver les points médians des lignes et ajouter leurs coordonnées à la table attributaire, vous pouvez faire Field Calculator sur l'instruction suivante:

  • !Shape!.positionAlongLine(0.5,True).firstPoint.X
  • !Shape!.positionAlongLine(0.5,True).firstPoint.Y

Notez que vous devez utiliser l'analyseur Python dans la calculatrice de champ pour que cela fonctionne.

Si vous vouliez accéder à cet objet point en Python, vous feriez simplement ce qui suit:

Input_shp = "C:\Temp\Line.shp"
Cursor = arcpy.SearchCursor(Input_shp)
for Feature in Cursor:
    Midpoint = Feature.shape.positionAlongLine(0.50,True).firstPoint
    print Midpoint.X
    print Midpoint.Y

merci, ça a l'air super. J'aurais dû mentionner que je suis actuellement limité à 10.0, donc l'option Route ci-dessus peut suffire pour l'instant
— Stephen Lead

Erreur: la ligne contient une mauvaise valeur. En utilisant arcGIS10, avec Python vérifié dans Model Builder, j'ai utilisé la même déclaration:! Shape! .PositionAlongLine (0.5, True) .firstPoint.X
— juasmilla

1

Avec la licence ET Geo Wizards, vous pouvez essayer la fonction "Polyline to Point" avec l'option "Middle points" et "Remove Duplicate Points" (facultatif): http://www.ian-ko.com/ET_GeoWizards/UserGuide/convertPl2Pnt. htm

Vous pouvez implémenter ET Geo Wizards comme ceci:

toolbox_ETgeowizards = arcpy.GetParameterAsText(0) # Location ET Toolbox (Type: Toolbox)
arcpy.ImportToolbox(toolbox_ETgeowizards)

...

arcpy.ET_GPPolylineToPoints(pInFeatureClass, sOutFileName, sExportOption, bRemoveDuplicates)

Pour les variables d'entrée de la fonction ET, veuillez consulter: http://www.ian-ko.com/ET_GeoWizards/UserGuide/Scripting/scripting_PolylineToPoint.htm

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.