Знаходження середини лінії за допомогою ArcPy?


12

Як можна обчислити середню точку полілінії, використовуючи рамку геообробки , наприклад, в сценарії Python?

Polyline.centroid властивість повертає Істинний центр ваги , якщо він знаходиться в межах або функції; в іншому випадку точка мітки повертається . Центроїд рідко розташований на непрямих лініях, що в моїх цілях марно.

Інструмент Feature Vertices to Points має опцію середньої точки, але для цього потрібен ArcInfo, якого у мене зараз немає.

Можливим може бути додавання заходів до поліліній та створення події маршруту на 50% по лінії.

Іншим вирішенням є використання параметра обчислити геометрію в ArcMap, але в ідеалі мені потрібно автоматизувати цей процес у сценарії.

Будь-які кращі / швидші пропозиції?

На даний момент я обмежений ArcGIS 10.0 (без доступу до ліцензії рівня ArcInfo).


4
Дивіться це питання . Зрештою, я використовував функції лінійного посилання в Shapely для визначення середини.
Майк Т

1
Я думаю, що у @MikeToews є правильна ідея, і просто використовуйте функції лінійного посилання в ArcGIS, а не приймати їх у Shapely. Схоже, це та функція, яку ви хотіли б: Зробити шар події маршруту - лінійна референція . Ви, ймовірно, можете скласти таблицю подій на льоту. Це для 10,1, але має бути однаковим у 10,0.
Отримайте просторовий

1
Здається, що цей блог містить алгоритм, який можна було б перетворити на Python / ArcPy: rbrundritt.wordpress.com/2008/10/14/…
PolyGeo

Хтось це робив у javascript? Я зробив це успішно лише в Arcpy. З повагою Ezequias
Ezequias

Якщо у вас є нове запитання, будь ласка, задайте його, натиснувши кнопку Задати питання . Додайте посилання на це питання, якщо це допомагає надати контекст. - З огляду
BERA

Відповіді:


23

Клас Polyline має новий метод під назвою "positionAlongLine" в ArcGIS 10.1. Це поверне об’єкт PointGeometry з точно однією точкою на вказаній відстані від початкового кінця рядка або часткою відстані між початком і кінцем . Щоб знайти середину, вам просто потрібно було б зробити positionAlongLine(0.5,True). Щоб знайти середні точки для рядків та додати їх координати до таблиці атрибутів, ви можете зробити Field Calculator за наступним висловом:

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

Зауважте, що для цього вам потрібно використовувати аналізатор Python у калькуляторі поля.

Якщо ви хочете отримати доступ до цього об’єкта точки в Python, ви просто зробите наступне:

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

дякую, це виглядає чудово. Я мав би зазначити, що в даний час я обмежений 10.0, тому варіанту маршруту вище, можливо, зараз вистачить
Stephen Lead

Помилка: рядок містить неправильне значення. Використання arcGIS10 з Python перевірив в Model Builder, я використовував той же самий твердження :! Форма .positionAlongLine (0,5, True) .firstPoint.X
juasmilla

1

Маючи ліцензію Geo Geo Wizards, ви можете спробувати функцію "Полілінія до точки" з опціями "Середні точки" та "Видалити дублікати точок" (необов'язково): http://www.ian-ko.com/ET_GeoWizards/UserGuide/convertPl2Pnt. htm

Ви можете реалізувати ET Geo Wizards так:

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

...

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

Інформацію про вхідні змінні функції ET див .: http://www.ian-ko.com/ET_GeoWizards/UserGuide/Scripting/scripting_PolylineToPoint.htm

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.