Страница 1 из 2
Помогите спроецировать точки на линию
Добавлено: 04 дек 2017, 12:47
AleXStam
Имеется неровный профиль с точким, также имеется профиль в виде кривой линии, нужно точки спроецировать на линию, подскажите как. Использовал функцию из Векторной трансформации связь смещения, и подгонкой резиновый лист, но при таком подходе нужно создавать для каждой точки связь смещения - это долго, т.к. точек штук 200 может быть
- Screenshot_1.jpg (20.59 КБ) 9404 просмотра
Re: Помогите спроецировать точки на линию
Добавлено: 04 дек 2017, 12:53
Александр Мурый
Re: Помогите спроецировать точки на линию
Добавлено: 04 дек 2017, 13:16
AleXStam
Возможно, но немогу понять в версии 10.2.2 этой функции нет?
Re: Помогите спроецировать точки на линию
Добавлено: 04 дек 2017, 15:40
giser
Это отдельный платный модуль. Правда, я не уверен, что он здесь поможет. Не до конца понятен принцип, по которому точки привязываются к линиям. Если судить по примеру, то к конечной точке линии.
Предлагаю топорный способ (подразумевается строго вертикальный перенос точек на линию):
1. Если у точек отсутствуют какие-либо уникальные атрибуты, то их нужно создать. Самый простой способ - скопировать objectID в новое поле.
2. Выделить все точки, скопировать, вставить в этот же точечный слой.
3. Вставленные точки выделить и с помощью инструмента Move сдвинуть их на такое значение Y, чтобы они оказались полностью визуально выше кривой линии профиля.
4. С помощью инструмента Points to line создать параллельные линии проецирования. В настройке Line_Field используем уникальное поле точек, о котором говорилось выше.
5. Если требуется перенос атрибутов из точечного слоя, то нужно будет с помощью Spatail Join присоединить атрибуты к линейному слою.
6. С помощью инструмента Intersect получить точки пересечения созданных параллельных линий и кривой.
Re: Помогите спроецировать точки на линию
Добавлено: 04 дек 2017, 16:02
Александр Мурый
Извиняюсь за оффтоп, но недавно была слегка похожая тема касательно QGIS:
https://gis-lab.info/forum/viewtopic.ph ... 95#p158295
Там был выложен рабочий скрипт для проецирования точек на линию. Можно попробовать сделать в QGIS. За консультациями обращайтесь на форум QGIS, если решитесь, там всё очевидно, в общем-то.
Re: Помогите спроецировать точки на линию
Добавлено: 04 дек 2017, 16:38
gamm
не, там точки на линии лежали, а здесь все не так. Здесь требует уточнения вообще понятие "спроецировать". Если речь о переносе точек по кратчайшему пути, это одно. Если речь о морфинге (совмещении) линий глобальной трансформацией - это совсем другое.
Если первое - то либо в цикле для каждой точки перебирать все сегменты, искать ближайший, а потом проецировать, либо снести линию на растр, построить дистанционное преобразование, и скатиться из точек в пиксели линии (либо этого будет достаточно, либо можно использовать как начальное приближение). Наверняка для этих операций (поиск ближайшей точки на линии) есть готовые программы, но "чукча не читатель, чукча писатель"
Re: Помогите спроецировать точки на линию
Добавлено: 04 дек 2017, 17:27
giser
Мне кажется, что усложняете
Я почти уверен, что перед ТС встала задача, решение которой я представил выше. Мне так кажется, потому что габариты линейного и точечного слоя визуально совпадают.
Конечно, я тоже рассматривал вариант с поиском кратчайшего расстояния до линии. Если задача стоит таким образом, то в ArcGIS она решается в 2 действия: с помощью инструмента Near находятся координаты ближайшей точки на линии, затем создается новый точечный слой по записанным координатам.
Re: Помогите спроецировать точки на линию
Добавлено: 04 дек 2017, 17:47
Игорь Белов
Всё обсуждение — гадание по полёту птиц и внутренностям жертвенных животных. Надо у топикстартера спросить, как он считает правильным это делать:
AleXStam писал(а): ↑04 дек 2017, 12:47
нужно создавать для каждой точки связь смещения
Re: Помогите спроецировать точки на линию
Добавлено: 04 дек 2017, 17:51
gamm
Там упоминание "rubber shit" какбэ намекает на морфинг. Но, несомненно, мнение ТС хотелось бы узнать
Re: Помогите спроецировать точки на линию
Добавлено: 05 дек 2017, 05:07
AleXStam
Что-то прям усложняется все, вот смотрите, что нужно:
- Screenshot_1.jpg (47.22 КБ) 9285 просмотров
Тут я с помощью смещения точек спроецировал(сместил) их на линию, но тут почти каждую так нужно указывать, а хотелось бы хотябы указать крайние и далее точки бы все сместились на линию
Re: Помогите спроецировать точки на линию
Добавлено: 05 дек 2017, 08:25
Игорь Белов
Как будто нужно оставить координату X прежней, а координату Y снять с линии. Тогда
«топорный» способ giser'а должен работать.
Re: Помогите спроецировать точки на линию
Добавлено: 18 дек 2017, 11:58
Monstria
AleXStam писал(а): ↑04 дек 2017, 12:47
нужно точки спроецировать на линию
Как раз у самого появилась такая же задача - решал по своемому...
https://youtu.be/kCWzZdIAin8 - тут можно посмотреть как работает
- это сам плагин.
PS... делал на коленке, решая "СВОИ" проблемы, поэтому не без проблем - к примеру не в меркатовской ск возможны исключения при малых значениях расстояний от точки к линии (округление)
PSS.. Так же в плагине еще две кнопки - настоятельно рекомендую ими не пользоваться - они вам не пригодятся в принципе
а прятать их было тупо лень.
Пожалуйста.
Re: Помогите спроецировать точки на линию
Добавлено: 18 дек 2017, 13:45
giser
Классно, но работает по принципу поиска ближайшего, а у ТС, как мы выяснили, немного другая задача
Re: Помогите спроецировать точки на линию
Добавлено: 18 дек 2017, 15:05
novia
1. представьте, что ваша линия это маршрут
2. запустите инструмент для точек
http://desktop.arcgis.com/en/arcmap/10. ... g-feat.htm
3. постройте "события" на маршруте
Re: Помогите спроецировать точки на линию
Добавлено: 18 дек 2017, 15:22
Monstria
giser писал(а): ↑18 дек 2017, 13:45
Классно, но работает по принципу поиска ближайшего, а у ТС, как мы выяснили, немного другая задача
Ну так поиск ближайшей линии это оптимальный и универсальный вариант (вариант предложенный novia) будет работать по тому же принципу ИМХО (не проверял на практике)
Сделать вертикальную проекцию не сложно - но уже не будет универсально .. Видимые проблемы:
1 - Не все вероятные точки могут пересекать линию (особенно если линия вертикально расположена)
2 - Не оптимально для множества объектов (особенно линий)
PS... Сделать именно так как хочет пользователь возможно, ограничив объекты выборкой и проецируя точку(и) вертикально проверять пересечения луча с полилинией - но у меня стояла цель притянуть точки к ближайшей линии по ближайшей траектории - поэтому и инструмент работает именно так (специально под топикстартера я ничего не делал - просто совпало)