Polyline To Line

ArcGIS 8.x,9.x,10.x (Arcview, ArcEditor, Arcinfo).
Ответить
Antifriz
Активный участник
Сообщения: 100
Зарегистрирован: 07 мар 2013, 00:16
Репутация: 1

Polyline To Line

Сообщение Antifriz » 02 фев 2014, 16:59

Есть слой полилиний, состоящий из множества вот таких полилиний:
Изображение
Нужен инструмент для переобразования их в векторы, как на этом рисунке:
Изображение
То есть слой полилиний нужно конвертировать в слой прямых, каждая из которых является вектором соответственной полилинии. Есть ли такой инструмент?

Если нет, посоветуйте, как полилинии исходного слоя разрезать на отдельные отрезки (не вручную, а автоматически).

gamm
Гуру
Сообщения: 4168
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1107
Ваше звание: программист
Откуда: Казань

Re: Polyline To Line

Сообщение gamm » 02 фев 2014, 17:20

Antifriz писал(а):Если нет, посоветуйте, как полилинии исходного слоя разрезать на отдельные отрезки (не вручную, а автоматически).
можно выгрузить в SHAPE, затащить в R, и убить (в цикле) все точки в линиях, кроме первой и последней. А потом сохранить.

Andrey Zhukov
Гуру
Сообщения: 838
Зарегистрирован: 10 дек 2009, 23:24
Репутация: 169
Ваше звание: старик-гисовик
Откуда: Москва
Контактная информация:

Re: Polyline To Line

Сообщение Andrey Zhukov » 02 фев 2014, 18:40

Давайте делать троллейбус из буханки хлеба нужного сорта :)
Arcpy в помощь.
Polyline object всегда ответит на вопрос, где у него начало, а где конец. Можно калькулятором спросить !Shape!.firstPoint и !Shape!.lastPoint.
Если сложновато, маякните, помогу сочинить скрипт.

Antifriz
Активный участник
Сообщения: 100
Зарегистрирован: 07 мар 2013, 00:16
Репутация: 1

Re: Polyline To Line

Сообщение Antifriz » 02 фев 2014, 19:37

fall_out_bug писал(а):Давайте делать троллейбус из буханки хлеба нужного сорта :)
Arcpy в помощь.
Не совсем понял, что вы имеете в виду. Объясните, пожалуйста, подробней.

Andrey Zhukov
Гуру
Сообщения: 838
Зарегистрирован: 10 дек 2009, 23:24
Репутация: 169
Ваше звание: старик-гисовик
Откуда: Москва
Контактная информация:

Re: Polyline To Line

Сообщение Andrey Zhukov » 02 фев 2014, 22:02

Все довольно просто. Любое геоинформационное ПО умеет делать практически всё. ArcGIS надо реже обрабатывать напильником, но расширяемость у него отличная. Самый простой способ - с помощью библиотеки arcpy для Python 2.7. Я дал ссылку на классы Geometry, которые можно использовать в собственных скриптах. Например, нужно создать из вашего линейного фичекласса новый фичекласс, который превратит ваши полилинии в их "векторы".
Открываем в ArcCatalog или ArcMap консоль (окно) Python. Для начала определяем, какой нам фичекласс нужен. Я просто возьму из ArcTutor.

Код: Выделить всё

inputFC = r'C:\arcgis\ArcTutor\Editing\Zion.gdb\Roads'
Чтобы не заморачиваться, возьмем самый простой инструмент, Create Feature Class, с помощью него создадим из консоли новый класс объектов. Пойдем прям по коду из справки:

Код: Выделить всё

out_path = r'C:\arcgis\ArcTutor\Editing\Zion.gdb'
out_name = 'RoadsV'
geometry_type = 'POLYLINE'
template = inputFC
has_m = 'DISABLED'
has_z = 'DISABLED'
spatial_reference = arcpy.Describe(inputFC).spatialReference
По ходу пьесы мы еще зацепили отличный инструмент Describe, который позволяет расспросить класс объектов о всех его свойствах.

Код: Выделить всё

outputFC = arcpy.CreateFeatureclass_management(out_path, out_name, geometry_type, template, has_m, has_z, spatial_reference)
Записали в переменную наш готовый фичекласс. Дальше начинаем работать с курсорами:

Код: Выделить всё

sCursor = arcpy.da.SearchCursor(inputFC,["SHAPE@","*"])
iCursor = arcpy.da.InsertCursor(outputFC,["SHAPE@","*"])
Открыли курсор на чтение в исходном классе объектов и курсор на запись в созданном. Берем в цикле записи из входного класса, немножко их обрабатываем и кладем в выходной:

Код: Выделить всё

for row in sCursor:
   polyline = arcpy.Polyline(arcpy.Array([row[0].firstPoint,row[0].lastPoint]))
   newRow = (polyline,)+row[1:]
   iCursor.insertRow(newRow)
Что мы сделали: взяли геометрию "SHAPE@", она же первая (нулевая) запись в кортеже row, спросили у нее первую и последнюю точки, сделали из них новую линию; к этой линии добавили остальные атрибуты, записали новую строку.
Потом обязательно надо прибраться:

Код: Выделить всё

del sCursor
del iCursor
Наслаждаемся нашими "векторами" :)

Antifriz
Активный участник
Сообщения: 100
Зарегистрирован: 07 мар 2013, 00:16
Репутация: 1

Re: Polyline To Line

Сообщение Antifriz » 02 фев 2014, 23:19

Не смог до конца разобраться в предназначении некоторых частей скрипта, но для того, чтобы подставить в скрипт свои данные у меня смекалки хватило. Спасибо огромное.

gamm
Гуру
Сообщения: 4168
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1107
Ваше звание: программист
Откуда: Казань

Re: Polyline To Line

Сообщение gamm » 03 фев 2014, 06:52

fall_out_bug писал(а):Давайте делать троллейбус из буханки хлеба нужного сорта
желающие могут делать абсолютно то же самое на Питоне (объем усилий такой же), с тем небольшим отличием, что при использовании R Арка вообще не нужна. Но это, опять же, дело вкуса :mrgreen:

Andrey Zhukov
Гуру
Сообщения: 838
Зарегистрирован: 10 дек 2009, 23:24
Репутация: 169
Ваше звание: старик-гисовик
Откуда: Москва
Контактная информация:

Re: Polyline To Line

Сообщение Andrey Zhukov » 03 фев 2014, 08:06

gamm, дык человек спрашивал про арку в разделе про арку. При чем здесь вообще R? Вы прям как тот студент с блохой :)

Antifriz
Активный участник
Сообщения: 100
Зарегистрирован: 07 мар 2013, 00:16
Репутация: 1

Re: Polyline To Line

Сообщение Antifriz » 03 фев 2014, 13:38

Кстати, нашел решение второй проблемы. А именно, как полилинии порезать на отрезки:
ArcToolbox - Data Management Tools - Features - Split Line At Vertices

gamm
Гуру
Сообщения: 4168
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1107
Ваше звание: программист
Откуда: Казань

Re: Polyline To Line

Сообщение gamm » 03 фев 2014, 17:20

fall_out_bug писал(а):человек спрашивал про арку в разделе про арку.
извините - я думал человеку нужно задачу решать, а тут собрание свидетелей Арки. Еще раз извините ...

Andrey Zhukov
Гуру
Сообщения: 838
Зарегистрирован: 10 дек 2009, 23:24
Репутация: 169
Ваше звание: старик-гисовик
Откуда: Москва
Контактная информация:

Re: Polyline To Line

Сообщение Andrey Zhukov » 03 фев 2014, 19:39

Собрание клуба анонимных R-голиков в соседнем разделе :)

Ответить

Вернуться в «ArcGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость