Страница 1 из 2

MapInfo. Функция Snap

Добавлено: 09 июн 2016, 13:56
xtxskif
Привет всем. Помогите разобраться с новой задачей. На рисунке видно что точки находятся не на линиях. Как автоматически поместить эти точки на линии? Слышал что это можно сделать с помощью функции Snap. Но как именно это сделать я не знаю.
Если можно получить необходимый результат каким-то иным образом, буду рад узнать.
Заранее спасибо

Re: MapInfo. Функция Snap

Добавлено: 09 июн 2016, 14:01
Донецков
А не проще построить новые линии по точкам?

Re: MapInfo. Функция Snap

Добавлено: 09 июн 2016, 14:22
xtxskif
можно и так сделать, но как тогда бить если этих точек очень много?
В данном случае интересует как точки поместить на линии.
Спасибо

Re: MapInfo. Функция Snap

Добавлено: 09 июн 2016, 14:35
ANAT01
А вы уверенны, что автоматический алгоритм поместит точки 9,10 и 11 на правильные линии и в правильные места?!
Куда вообще должны быть помещены точки на линии? В узлы или перпендикулярно?

Re: MapInfo. Функция Snap

Добавлено: 09 июн 2016, 14:42
xtxskif
Не уверен. Но жду что кто то подскажет вариант решения данной задачи.
На вопрос "куда должны быть помещены точки на линии? В узлы, к ближайшей или перпендикулярно?".
давайте рассмотрим все варианты.

Re: MapInfo. Функция Snap

Добавлено: 09 июн 2016, 15:34
ANAT01
В любом случае это нетривиальная задача. Вряд ли вам кто-то предложит решение.

Re: MapInfo. Функция Snap

Добавлено: 09 июн 2016, 15:44
xtxskif
для решения данной задачи есть функция SNAP, но я не знаю как ее использовать. Думаю кто то уже стыкался с подобной проблемой и знает как она решается.

Re: MapInfo. Функция Snap

Добавлено: 09 июн 2016, 16:16
Игорь Белов
Есть такая утилита, писал на мапбейсике. Выделяешь одну полилинию, указываешь на таблицу с точками и поле, куда писать продольную координату (т. е. длину от начала линии). Получаешь точки на линии.

Под QGIS написал более осмысленный алгоритм. Указываешь слой линий, поле идентификатора, слой точек, поле, содержащее идентификаторы линий. На выходе слой точек, лежащих на соответствующих линиях. В выходной таблице все поля из входной плюс продольная и поперечная координаты (длина вдоль линии от начала и расстояние от линии со знаком соответственно).

Re: MapInfo. Функция Snap

Добавлено: 09 июн 2016, 16:29
ANAT01
Справочник по MapBasic, 462 страница

С mapbasic в плотную не работал и могу ошибаться, но судя по структуре запроса:

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

Objects Snap From tablename
  [ Tolerance [ Node node_distance ] [ Vector vector_distance ]
  [ Units unit_string] ]
  [ Thin [ Bend bend_distance ] [ Distance spacing_distance ]
На вход подается только одна таблица(или выделение)! Таким образом у вас не получится взять точки из одной таблицы(селектора) и прилепить к линиям в другой(селектору).

Как сказано в описании - эта функция служит для генерализации. Она собирает узлы объектов находящиеся на заданной дистанции в одну точку.

Re: MapInfo. Функция Snap

Добавлено: 09 июн 2016, 16:57
ANAT01
ErnieBoyd, но тогда точки нужно как минимум классифицировать.
Судя по разбросу точек на картинке, это трудно сделать автоматически (например по буферу) и куда отнести 4 точку если она одинаково (в рамках заданного расстояния, например) подходит и к одной и ко второй линии.

Re: MapInfo. Функция Snap

Добавлено: 09 июн 2016, 18:05
xtxskif
в MapInfo есть функция Snap. на рисунке скрин окна данной функции

Re: MapInfo. Функция Snap

Добавлено: 09 июн 2016, 18:29
ANAT01
Это диалоговое окно к функции которую я привел выше. Читайте что оно делает внимательнее. Оно вам в вашей задаче никак не поможет. Вам нужно то, что описывает ErnieBoyd

[ Сообщение с мобильного устройства ]

Re: MapInfo. Функция Snap

Добавлено: 09 июн 2016, 21:26
xtxskif
но точки - это одна таблица, а линии - другая. Как быть?

Re: MapInfo. Функция Snap

Добавлено: 10 июн 2016, 07:50
Игорь Белов
Сказал "А", говорю "Б".
  • pinup-src.zip — читайте до просветления
  • pinup.mbx.zip — готовый к использованию модуль
xtxskif писал(а):но точки - это одна таблица, а линии - другая. Как быть?
Выделяете линию из одного слоя, указываете на другой слой с точками, который должен содержать хотя бы одну колонку числового типа. Если поднят флажок "Explicit", в косметическом слое создаются точки на линии. В указанное числовое поле таблицы точек всегда пишется продольная координата.
ANAT01 писал(а):но тогда точки нужно как минимум классифицировать
А как же иначе? Цель разумной деятельности вообще и в ГИС в частности — уменьшение энтропии. От хаоса к орднунгу!

Re: MapInfo. Функция Snap

Добавлено: 10 июн 2016, 11:08
xtxskif
а если линий много, программа видает сообщение чтобы выбрать 1 линию, но мне нужно поместить точки на все линии. В ситуции где точка находиться между 2-мя линиями точка должна быть помещена на линию к которой она находиться ближе.