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.