Помогите спроецировать точки на линию
- AleXStam
- Новоприбывший
- Сообщения: 4
- Зарегистрирован: 04 дек 2017, 12:43
- Репутация: 0
- Откуда: Новосибирск
- Контактная информация:
Помогите спроецировать точки на линию
Имеется неровный профиль с точким, также имеется профиль в виде кривой линии, нужно точки спроецировать на линию, подскажите как. Использовал функцию из Векторной трансформации связь смещения, и подгонкой резиновый лист, но при таком подходе нужно создавать для каждой точки связь смещения - это долго, т.к. точек штук 200 может быть
-
- Гуру
- Сообщения: 5173
- Зарегистрирован: 26 сен 2009, 16:26
- Репутация: 793
- Ваше звание: званий не имею
- Откуда: Москва
Re: Помогите спроецировать точки на линию
Редактор материалов, модератор форума
- AleXStam
- Новоприбывший
- Сообщения: 4
- Зарегистрирован: 04 дек 2017, 12:43
- Репутация: 0
- Откуда: Новосибирск
- Контактная информация:
Re: Помогите спроецировать точки на линию
Возможно, но немогу понять в версии 10.2.2 этой функции нет?
-
- Завсегдатай
- Сообщения: 388
- Зарегистрирован: 09 ноя 2012, 09:25
- Репутация: 113
- Откуда: Москва
Re: Помогите спроецировать точки на линию
Это отдельный платный модуль. Правда, я не уверен, что он здесь поможет. Не до конца понятен принцип, по которому точки привязываются к линиям. Если судить по примеру, то к конечной точке линии.
Предлагаю топорный способ (подразумевается строго вертикальный перенос точек на линию):
1. Если у точек отсутствуют какие-либо уникальные атрибуты, то их нужно создать. Самый простой способ - скопировать objectID в новое поле.
2. Выделить все точки, скопировать, вставить в этот же точечный слой.
3. Вставленные точки выделить и с помощью инструмента Move сдвинуть их на такое значение Y, чтобы они оказались полностью визуально выше кривой линии профиля.
4. С помощью инструмента Points to line создать параллельные линии проецирования. В настройке Line_Field используем уникальное поле точек, о котором говорилось выше.
5. Если требуется перенос атрибутов из точечного слоя, то нужно будет с помощью Spatail Join присоединить атрибуты к линейному слою.
6. С помощью инструмента Intersect получить точки пересечения созданных параллельных линий и кривой.
Предлагаю топорный способ (подразумевается строго вертикальный перенос точек на линию):
1. Если у точек отсутствуют какие-либо уникальные атрибуты, то их нужно создать. Самый простой способ - скопировать objectID в новое поле.
2. Выделить все точки, скопировать, вставить в этот же точечный слой.
3. Вставленные точки выделить и с помощью инструмента Move сдвинуть их на такое значение Y, чтобы они оказались полностью визуально выше кривой линии профиля.
4. С помощью инструмента Points to line создать параллельные линии проецирования. В настройке Line_Field используем уникальное поле точек, о котором говорилось выше.
5. Если требуется перенос атрибутов из точечного слоя, то нужно будет с помощью Spatail Join присоединить атрибуты к линейному слою.
6. С помощью инструмента Intersect получить точки пересечения созданных параллельных линий и кривой.
Последний раз редактировалось giser 04 дек 2017, 18:58, всего редактировалось 1 раз.
-
- Гуру
- Сообщения: 5173
- Зарегистрирован: 26 сен 2009, 16:26
- Репутация: 793
- Ваше звание: званий не имею
- Откуда: Москва
Re: Помогите спроецировать точки на линию
Извиняюсь за оффтоп, но недавно была слегка похожая тема касательно QGIS: https://gis-lab.info/forum/viewtopic.ph ... 95#p158295
Там был выложен рабочий скрипт для проецирования точек на линию. Можно попробовать сделать в QGIS. За консультациями обращайтесь на форум QGIS, если решитесь, там всё очевидно, в общем-то.
Там был выложен рабочий скрипт для проецирования точек на линию. Можно попробовать сделать в QGIS. За консультациями обращайтесь на форум QGIS, если решитесь, там всё очевидно, в общем-то.
Редактор материалов, модератор форума
-
- Гуру
- Сообщения: 4048
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1050
- Ваше звание: программист
- Откуда: Казань
Re: Помогите спроецировать точки на линию
не, там точки на линии лежали, а здесь все не так. Здесь требует уточнения вообще понятие "спроецировать". Если речь о переносе точек по кратчайшему пути, это одно. Если речь о морфинге (совмещении) линий глобальной трансформацией - это совсем другое.Александр Мурый писал(а): ↑04 дек 2017, 16:02Извиняюсь за оффтоп, но недавно была слегка похожая тема касательно QGIS: https://gis-lab.info/forum/viewtopic.ph ... 95#p158295
Если первое - то либо в цикле для каждой точки перебирать все сегменты, искать ближайший, а потом проецировать, либо снести линию на растр, построить дистанционное преобразование, и скатиться из точек в пиксели линии (либо этого будет достаточно, либо можно использовать как начальное приближение). Наверняка для этих операций (поиск ближайшей точки на линии) есть готовые программы, но "чукча не читатель, чукча писатель"
-
- Завсегдатай
- Сообщения: 388
- Зарегистрирован: 09 ноя 2012, 09:25
- Репутация: 113
- Откуда: Москва
Re: Помогите спроецировать точки на линию
Мне кажется, что усложняете Я почти уверен, что перед ТС встала задача, решение которой я представил выше. Мне так кажется, потому что габариты линейного и точечного слоя визуально совпадают.
Конечно, я тоже рассматривал вариант с поиском кратчайшего расстояния до линии. Если задача стоит таким образом, то в ArcGIS она решается в 2 действия: с помощью инструмента Near находятся координаты ближайшей точки на линии, затем создается новый точечный слой по записанным координатам.
Конечно, я тоже рассматривал вариант с поиском кратчайшего расстояния до линии. Если задача стоит таким образом, то в ArcGIS она решается в 2 действия: с помощью инструмента Near находятся координаты ближайшей точки на линии, затем создается новый точечный слой по записанным координатам.
- Вложения
-
- Пример.png (3.36 КБ) 9258 просмотров
Последний раз редактировалось giser 04 дек 2017, 18:25, всего редактировалось 1 раз.
- Игорь Белов
- Гуру
- Сообщения: 2229
- Зарегистрирован: 04 янв 2011, 22:00
- Репутация: 1501
- Откуда: Казань
Re: Помогите спроецировать точки на линию
Всё обсуждение — гадание по полёту птиц и внутренностям жертвенных животных. Надо у топикстартера спросить, как он считает правильным это делать:
The purpose of computing is insight, not numbers
-
- Гуру
- Сообщения: 4048
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1050
- Ваше звание: программист
- Откуда: Казань
Re: Помогите спроецировать точки на линию
Там упоминание "rubber shit" какбэ намекает на морфинг. Но, несомненно, мнение ТС хотелось бы узнать
- AleXStam
- Новоприбывший
- Сообщения: 4
- Зарегистрирован: 04 дек 2017, 12:43
- Репутация: 0
- Откуда: Новосибирск
- Контактная информация:
Re: Помогите спроецировать точки на линию
Что-то прям усложняется все, вот смотрите, что нужно:
Тут я с помощью смещения точек спроецировал(сместил) их на линию, но тут почти каждую так нужно указывать, а хотелось бы хотябы указать крайние и далее точки бы все сместились на линию- Игорь Белов
- Гуру
- Сообщения: 2229
- Зарегистрирован: 04 янв 2011, 22:00
- Репутация: 1501
- Откуда: Казань
Re: Помогите спроецировать точки на линию
Как будто нужно оставить координату X прежней, а координату Y снять с линии. Тогда «топорный» способ giser'а должен работать.
The purpose of computing is insight, not numbers
-
- Активный участник
- Сообщения: 133
- Зарегистрирован: 17 май 2011, 06:22
- Репутация: 50
- Откуда: Нижний Новгород
Re: Помогите спроецировать точки на линию
Как раз у самого появилась такая же задача - решал по своемому...
https://youtu.be/kCWzZdIAin8 - тут можно посмотреть как работает
- это сам плагин.
PS... делал на коленке, решая "СВОИ" проблемы, поэтому не без проблем - к примеру не в меркатовской ск возможны исключения при малых значениях расстояний от точки к линии (округление)
PSS.. Так же в плагине еще две кнопки - настоятельно рекомендую ими не пользоваться - они вам не пригодятся в принципе а прятать их было тупо лень.
Пожалуйста.
-
- Завсегдатай
- Сообщения: 388
- Зарегистрирован: 09 ноя 2012, 09:25
- Репутация: 113
- Откуда: Москва
Re: Помогите спроецировать точки на линию
Классно, но работает по принципу поиска ближайшего, а у ТС, как мы выяснили, немного другая задача
- novia
- Гуру
- Сообщения: 2261
- Зарегистрирован: 29 апр 2011, 15:06
- Репутация: 489
- Откуда: Тель-Авив
Re: Помогите спроецировать точки на линию
1. представьте, что ваша линия это маршрут
2. запустите инструмент для точек http://desktop.arcgis.com/en/arcmap/10. ... g-feat.htm
3. постройте "события" на маршруте
2. запустите инструмент для точек http://desktop.arcgis.com/en/arcmap/10. ... g-feat.htm
3. постройте "события" на маршруте
понравилось? жми палец вверх
-
- Активный участник
- Сообщения: 133
- Зарегистрирован: 17 май 2011, 06:22
- Репутация: 50
- Откуда: Нижний Новгород
Re: Помогите спроецировать точки на линию
Ну так поиск ближайшей линии это оптимальный и универсальный вариант (вариант предложенный novia) будет работать по тому же принципу ИМХО (не проверял на практике)
Сделать вертикальную проекцию не сложно - но уже не будет универсально .. Видимые проблемы:
1 - Не все вероятные точки могут пересекать линию (особенно если линия вертикально расположена)
2 - Не оптимально для множества объектов (особенно линий)
PS... Сделать именно так как хочет пользователь возможно, ограничив объекты выборкой и проецируя точку(и) вертикально проверять пересечения луча с полилинией - но у меня стояла цель притянуть точки к ближайшей линии по ближайшей траектории - поэтому и инструмент работает именно так (специально под топикстартера я ничего не делал - просто совпало)
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 6 гостей