Нахождение средней точки линии с использованием ArcPy?

12

Как можно вычислить среднюю точку полилинии, используя инфраструктуру геообработки , например, в скрипте Python?

Свойство polyline.centroid возвращает истинный центроид, если он находится внутри или внутри объекта; в противном случае точка метки возвращается . Центроид редко расположен на неровных линиях, что бесполезно для моих целей.

У инструмента Feature Vertices to Points есть опция midpoint, но для этого требуется ArcInfo, которого у меня сейчас нет.

Одним из вариантов может быть добавление мер к полилиниям и создание события маршрута на 50% вдоль линии.

Другой обходной путь - использовать опцию Calculate Geometry в 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
Если у вас есть новый вопрос, задайте его, нажав кнопку « Задать вопрос» . Включите ссылку на этот вопрос, если это помогает обеспечить контекст. - Из обзора
Бера

Ответы:

23

Класс Polyline имеет новый метод с именем "positionAlongLine" в ArcGIS 10.1. Это вернет объект PointGeometry с ровно одной точкой на указанном расстоянии от начального конца линии или долей расстояния между началом и концом . Чтобы найти середину, вам просто нужно сделать positionAlongLine(0.5,True). Чтобы найти середины для линий и добавить их координаты в таблицу атрибутов, вы можете использовать Калькулятор поля для следующего оператора:

  • !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
dmahr
источник
спасибо, это выглядит великолепно. Я должен был упомянуть, что в настоящее время я ограничен до 10.0, так что, возможно, на данный момент, возможно, будет достаточно описанного выше варианта маршрута
Стивен Лид,
Ошибка: строка содержит неверное значение. Используя arcGIS10, с проверенным Python в Model Builder, я использовал тот же оператор:! Shape! .PositionAlongLine (0.5, True) .firstPoint.X
juasmilla
1

С лицензией ET 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.

KalleBlomquist
источник