Совмещение точечных объектов с узлами линий.
- gala-kt
- Участник
- Сообщения: 89
- Зарегистрирован: 26 июл 2010, 12:05
- Репутация: 6
- Откуда: Санкт-Петербург
Совмещение точечных объектов с узлами линий.
Существует ли какая-нибудь команда, либо утилита для совмещения точечных объектов с ближайшими к ним узлами линий?
Существует слой с точечными объектами, слой с линейными объектами. Точки должны быть расположены на линии, однако при увеличении масштаба оказывается, что расположение точек отходит от линейных объектов. На полилиниях в тех местах, где должны быть точки, проставлены узлы. Необходимо подкорректировать координаты точек таким образом, чтоб они встали ровно на эти узлы полилиний. Скорее всего, надо предварительно слить все в один слой, что делать дальше - мучаюсь в размышлениях.
Существует слой с точечными объектами, слой с линейными объектами. Точки должны быть расположены на линии, однако при увеличении масштаба оказывается, что расположение точек отходит от линейных объектов. На полилиниях в тех местах, где должны быть точки, проставлены узлы. Необходимо подкорректировать координаты точек таким образом, чтоб они встали ровно на эти узлы полилиний. Скорее всего, надо предварительно слить все в один слой, что делать дальше - мучаюсь в размышлениях.
-
- Гуру
- Сообщения: 4231
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: -344969098
- Откуда: Париж
Re: Совмещение точечных объектов с узлами линий.
Проблема имеет две стороны:
а) MapInfo хранит все данные в целочисленных координатах, в заголовке таблицы хранит границы и масштабный коэффициент. Для двух таблиц с разными границами физическое совмещение координат геообъектов - невозможно (ну скорее проблематично, т.к. требуется их кратность). Подробнее несколько раз обсуждалось на этом форуме
б) мир не имеет совершенства. какая вам разница, если расхождение составляет доли миллиметра? именно это причина того, что нет таких программ или модулей в открытом доступе. Те кому пришлось столкнуться с такой проблемой, решают ее на коленке, и на этом успокаиваются.
---
Если очень-очень хочется, то решение возможно только через программирование. Самое простое в этом программировании - выгрузка всех вершин и точек в MIF/MID файл. Затем
а) замена заголовка в файле точек, что бы системы координат были тождественны
б) поиск для каждой точки вершины, с которой у нее наименьшее расхождение ( в разумных пределах)
в) замена координат точки на координаты этой вершины
г) обратный экспорт точек в TAB файл
Access - 10 минут программирования. Из них 8 - выгрузка точек и вершин из текстового файла в таблицу БД
---
PS
Прочитал задачу еще раз, если речь идет именно о расположении на линии, а не в ближайшей вершине, то тут ответ - просто не возможно. И опять в силу того, что координаты в MI целочислены, т.е. они только отображаются на экране непрерывной линией, а если ставить вершины, то они могут располагаться только узлах сетки целочисленных координат, задаваемых так (максимальная_координата_границ_таблицы - минимальная_координата)/2 миллиарда.
а) MapInfo хранит все данные в целочисленных координатах, в заголовке таблицы хранит границы и масштабный коэффициент. Для двух таблиц с разными границами физическое совмещение координат геообъектов - невозможно (ну скорее проблематично, т.к. требуется их кратность). Подробнее несколько раз обсуждалось на этом форуме
б) мир не имеет совершенства. какая вам разница, если расхождение составляет доли миллиметра? именно это причина того, что нет таких программ или модулей в открытом доступе. Те кому пришлось столкнуться с такой проблемой, решают ее на коленке, и на этом успокаиваются.
---
Если очень-очень хочется, то решение возможно только через программирование. Самое простое в этом программировании - выгрузка всех вершин и точек в MIF/MID файл. Затем
а) замена заголовка в файле точек, что бы системы координат были тождественны
б) поиск для каждой точки вершины, с которой у нее наименьшее расхождение ( в разумных пределах)
в) замена координат точки на координаты этой вершины
г) обратный экспорт точек в TAB файл
Access - 10 минут программирования. Из них 8 - выгрузка точек и вершин из текстового файла в таблицу БД
---
PS
Прочитал задачу еще раз, если речь идет именно о расположении на линии, а не в ближайшей вершине, то тут ответ - просто не возможно. И опять в силу того, что координаты в MI целочислены, т.е. они только отображаются на экране непрерывной линией, а если ставить вершины, то они могут располагаться только узлах сетки целочисленных координат, задаваемых так (максимальная_координата_границ_таблицы - минимальная_координата)/2 миллиарда.
- gala-kt
- Участник
- Сообщения: 89
- Зарегистрирован: 26 июл 2010, 12:05
- Репутация: 6
- Откуда: Санкт-Петербург
Re: Совмещение точечных объектов с узлами линий.
Boris, спасибо за подробный ответ.
а) Обсуждение проблемы границ и системы координат мне встречалось, потому все слои были предварительно сохранены с одинаковыми пределами координатного пространства (сохранить копию - проекция - координатная система плана). Не знаю, насколько правильны такие действия. Система координат и проекция, само по себе, одна и та же для всех слоев. Может, я неверно понимаю проблему, следовательно, неверно с ней борюсь?
б) До долей миллиметров мне, действительно, разницы никакой. Главное, чтоб на запрос с условием пересечения геометрии точек линиями выдавался список с выборкой
В моем случае расхождения между объектами несколько больше. То есть трудность не в том, что я привязываю точку к узлу, а она отскакивает.
Опишу проблему подробнее: изначально были слой с полилиниями и слой с объектами, на них расположенными. Объекты представляли собой окружности очень небольшого размера, что меня не устраивало. Зато окружности геометрически пересекались с полилиниями (что меня вполне устраивало). В таблице с окружностями были созданы поля для координат, записаны координаты посредством Coordinate Extractor (как я понимаю, извлекаются координаты центра окружности), по сформировавшемуся содержимому полей созданы точки. А центр окружности на линии не попадает, то есть точки тоже. На самой линии близ созданных точек обязательно есть узел. Если двигать точки руками во включенном режиме SNAP, то все хорошо. Однако двигать вручную долго и много. Думала, что подобную задачу можно решить, создав какой нибудь хитрый запрос на поиск ближайших узлов в таком-то радиусе, и скомандовав всем точкам переместиться в найденные узлы. Однако самой мне такое сделать не под силу.
PS Решение с помощью исправления файлов MIF/MID мне понравилось, интересно, только опять же - ручное. А что именно программируется в Access?
а) Обсуждение проблемы границ и системы координат мне встречалось, потому все слои были предварительно сохранены с одинаковыми пределами координатного пространства (сохранить копию - проекция - координатная система плана). Не знаю, насколько правильны такие действия. Система координат и проекция, само по себе, одна и та же для всех слоев. Может, я неверно понимаю проблему, следовательно, неверно с ней борюсь?
б) До долей миллиметров мне, действительно, разницы никакой. Главное, чтоб на запрос с условием пересечения геометрии точек линиями выдавался список с выборкой

В моем случае расхождения между объектами несколько больше. То есть трудность не в том, что я привязываю точку к узлу, а она отскакивает.
Опишу проблему подробнее: изначально были слой с полилиниями и слой с объектами, на них расположенными. Объекты представляли собой окружности очень небольшого размера, что меня не устраивало. Зато окружности геометрически пересекались с полилиниями (что меня вполне устраивало). В таблице с окружностями были созданы поля для координат, записаны координаты посредством Coordinate Extractor (как я понимаю, извлекаются координаты центра окружности), по сформировавшемуся содержимому полей созданы точки. А центр окружности на линии не попадает, то есть точки тоже. На самой линии близ созданных точек обязательно есть узел. Если двигать точки руками во включенном режиме SNAP, то все хорошо. Однако двигать вручную долго и много. Думала, что подобную задачу можно решить, создав какой нибудь хитрый запрос на поиск ближайших узлов в таком-то радиусе, и скомандовав всем точкам переместиться в найденные узлы. Однако самой мне такое сделать не под силу.
PS Решение с помощью исправления файлов MIF/MID мне понравилось, интересно, только опять же - ручное. А что именно программируется в Access?
-
- Участник
- Сообщения: 63
- Зарегистрирован: 07 мар 2010, 10:02
- Репутация: 6
- Откуда: Казань
Re: Совмещение точечных объектов с узлами линий.
есть вот такая mbx.
- Вложения
-
создает точечные объекты на месте узлов.zip
- (3.02 КБ) 432 скачивания
- gala-kt
- Участник
- Сообщения: 89
- Зарегистрирован: 26 июл 2010, 12:05
- Репутация: 6
- Откуда: Санкт-Петербург
Re: Совмещение точечных объектов с узлами линий.
Насколько понимаю, с помощью такой утилитки можно только на узлах целого объекта создать точки? У меня сравнительно небольшое количество узлов в одном объекте должно быть задействовано.
-
- Гуру
- Сообщения: 4231
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: -344969098
- Откуда: Париж
Re: Совмещение точечных объектов с узлами линий.
Давайте определимся с задачей, а все остальное лиирика. Что вам нужно в прикладном плане - что бы точки находились, которые лежат на линии? Что бы находились ближайшие (в идеале совпадающие с ними) вершины?
Или еще что-то? Потому как простое совмещение узлов с точками это чистое украшательство.
Или еще что-то? Потому как простое совмещение узлов с точками это чистое украшательство.
- gala-kt
- Участник
- Сообщения: 89
- Зарегистрирован: 26 июл 2010, 12:05
- Репутация: 6
- Откуда: Санкт-Петербург
Re: Совмещение точечных объектов с узлами линий.
В самом конечном результате мне надо будет линию разделить на разные линии с разными id по пересечению с точками. Для этого нужно, чтобы точки лежали на линии. Т.к. координаты точек сильно менять нежелательно, хорошо бы, чтоб точки попадали на линию по кратчайшему расстоянию от нее. Т.к. передвинуть точки на линию невозможно, то ищу вариант "притянуть" точки к ближайшим узлам на линии.
На самом деле, необходимые действия уже выполнили руками, однако методы автоматизации процесса все равно интересны.
На самом деле, необходимые действия уже выполнили руками, однако методы автоматизации процесса все равно интересны.
-
- Интересующийся
- Сообщения: 24
- Зарегистрирован: 29 авг 2011, 16:51
- Репутация: 1
Re: Совмещение точечных объектов с узлами линий.
Посмотрите функцию Nearest она находит ближайший объект и поможет определить координаты по которым необходимо будет в последствии разрезать полилинию
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя