Получение начальной и конечной точек для каждой линии в шейп-файле линии в ArcGIS Desktop или QGIS?


15

У меня есть векторный (полилиний) шейп-файл, и мне нужно извлечь начальную и конечную точки (узлы) каждой линии и создать шейп-файл с этими точками. Затем мне нужно добавить в таблицу атрибутов полилинии начальную и конечную точки для каждой линии на основе идентификатора точек.

Как я могу сделать это простым способом в ArcGIS Desktop или QGIS?


2
В ArcGIS, если у вас есть расширенная лицензия, вы можете использовать инструмент Набор инструментов управления данными -> Набор инструментов -> Инструмент Вершины к точкам с опцией Оба конца. Все атрибуты строки сохраняются. Однако вам нужно будет добавить поле в исходный класс линейных объектов и рассчитать идентификатор объекта в вашей линии, чтобы сохранить это значение в точках. Если у вас есть другое поле уникального значения в ваших строках, вы можете присоединиться и рассчитать FID после запуска инструмента. Последний вариант будет включать в себя пространственное соединение с параметром «Один ко многим» и удаление копий с плохими атрибутами.
Ричард Фэйрхерст

Отвечает ли это на ваш вопрос? "Как мне получить координаты начальной и конечной точек с помощью Python / arcpy?" gis.stackexchange.com/q/31684/8104
Аарон

Я попробовал подобный подход, но заблудился по пути. Я постараюсь переделать это. Лучше всего будет создать макрос, который сделает всю эту работу вместе, чтобы впоследствии любой мог сделать такую ​​же процедуру. Ура!
user51651

Метод @RichardFairhurst, который, вероятно, следует также предложить в качестве ответа. Вот как я это делал исторически
19

Ответы:


8

Это однострочник для GDAL. Эта команда создает шейп-файл из начальных узлов с выбранными атрибутами:

ogr2ogr -f "ESRI Shapefile" -dialect sqlite output.shp -sql "select ST_StartPoint(geometry), attribute_1, attribute_2, attribute_3 from input" input.shp

Используйте ST_EndPoint для конечных точек.


Большое спасибо! Это, вероятно, сделало работу, но я искал что-то более простое (визуальное), чтобы другие люди без навыков программирования могли выполнить задачу.
user51651

Где вы пишете эту команду?
blue_chip

К командной строке. В Linux используйте обычную оболочку. В Windows используйте командное окно, но позаботьтесь о том, чтобы в вашей среде были правильные пути. Оболочка Osgeo4w делает это автоматически.
user30184


6

Решение QGIS: можно извлечь начальный и конечный узлы (координаты) файла векторного файла, просто используя xat и yat в полевом калькуляторе с соответствующими индексами 0 (начало) и -1 (конец).

xat(0)    
yat(0)
xat(-1)
yat(-1)

5

Для решения ArcGIS я создал инструмент геообработки, который создает точки на линиях.

Вы можете скачать его и посмотреть код здесь: Создание точек на линиях

Для Типа вам нужно выбрать «Начать / закончить». Это создаст новый класс точечных объектов, который содержит начальную и конечную точки для каждой полилинии.

Класс выходных точечных объектов также будет иметь поле LineOID, в котором записывается OID полилинии, из которой он был создан. Таким образом, вы можете присоединить свои данные атрибута обратно.

Вот скриншот того, как бы вы установили параметры:

введите описание изображения здесь


Это здорово, Ян! Я скачаю его, протестирую и предоставлю обратную связь как можно скорее. Я думаю, что этот инструмент пригодится для того, что мне нужно, и поможет лучше автоматизировать процесс! Спасибо!
user51651

Привет, Ян, почему, но я не могу заставить твой инструмент работать в ArcGIS 10.0 или 10.1 ... Я добавил его в панель инструментов, но он не обедает ... = /
user51651

@ user51651 Вы получаете сообщение об ошибке? Он не будет работать с 10.0, но он должен работать с 10.1 и выше. Если вы перейдете в меню Геообработка, а затем Результаты. Там есть какие-нибудь сообщения?
ianbroad

3

Для добавления координаты конечных точек в таблицу атрибутов, используя ArcGIS, вы можете использовать калькулятор поля (не нужно создавать геометрию). Нажмите на имя поля, калькулятор поля, затем используйте синтаксис Python с единственными строками ниже (пример с координатой X):

!shape.firstPoint.X!

!shape.lastPoint.X!

обратите внимание, что все внутри!


Это действительно хороший ответ, я не осознавал, что это возможно. Снимок этого в Field Calculator может помочь менее знакомым людям с этой задачей. Я полагаю, вы могли бы сделать это и со значениями M?
bwp8nt

2

В QGIS используйте инструмент Extract Specific Vertices . Установите индексы вершин на 0, чтобы получить начальные точки, и -1, чтобы получить конечные точки, или 0, -1, чтобы получить оба.

QGIS Извлечь конкретные вершины

Обратите внимание на описание:

Первая вершина соответствует индексу 0, вторая вершина имеет индекс 1 и т. Д. Отрицательные индексы могут использоваться для поиска вершин в конце геометрии, например, индекс -1 соответствует последней вершине, - 2 соответствует второй последней вершине и т. Д.


1

В ArcGIS, если у вас есть расширенная лицензия, вы можете использовать инструмент Набор инструментов управления данными -> Набор инструментов -> Инструмент Вершины к точкам с опцией Оба конца. Все атрибуты строки сохраняются. Однако вам нужно будет добавить поле в исходный класс линейных объектов и рассчитать идентификатор объекта в вашей линии, чтобы сохранить это значение в точках. Если у вас есть другое поле уникального значения в ваших строках, вы можете присоединиться и рассчитать FID после запуска инструмента. Последний вариант будет включать в себя пространственное соединение с параметром «Один ко многим» и удаление копий с плохими атрибутами.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.