Прив’язати лінії до пунктів автоматично?


19

У мене є два векторних файли: один файл - це точки, що представляють люки, а другий - полілінійний файл, що представляє труби, що ведуть до каналізаційних люків і з них. Мені потрібно підключити лінії на певній відстані до найближчого люка.

Чи є простий спосіб досягти цього, не роблячи це вручну?

рядки -> точки

Оновлення

Відповідно до Олександра, я експортував свої формати файлів у просторовий формат. Не впевнений, що далі.

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

Оновлення №2 Я створив новий db-файл та імпортував shapefiles у новий db за допомогою просторі-gui, я відкоригував свій SQL-запит, але як ви бачите, я отримую помилку "немає такого стовпця: f.geom"

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


У просторовій таблиці (шарі) Spatialite геометричні особливості зберігаються в атрибуті. Назви можуть бути різними. У таблиці "труба" цей атрибут називається Геометрія. Я оновлю свою відповідь, вважаючи, що mh також є атрибутом Geometry.
Олександр Нето

Я отримав помилку "немає такої функції: ST_Snap". Я використовую QGIS 1.8 для Windows 7 64bit.
GreyHippo

Який у вас просторіал? Перевірити це можна в QGIS> Довідка> Про
Олександр Нето

"немає такої колонки: f.geom" - спробуйте з f.Geometry
vinayan

Моя версія
просторіалу

Відповіді:


26

Якщо ви готові розмістити свої дані в Postgis (або Spatialite ), ви можете використовувати ST_Snap, щоб робити те, що вам потрібно.

Просто використовуйте в якості введення рівень шару рядків \ таблицю, а ваш рівень точок як орієнтир, і встановіть допуск. Щось на зразок цього:

SELECT
    f.gid as gid,
    ST_Snap(f.Geometry, g.Geometry, 2) as geom
FROM
    pipe as f,
    (SELECT ST_Collect(Geometry) as Geometry
     FROM mh) as g

Результат такий:

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

Потім можна оновити геометрії за допомогою ідентифікатора функції.


Де б я поставив код "Вибрати ... З ..."? Що означає "використання ідентифікатора функції"?
GreyHippo

Після імпорту ваших файлів у базу даних (постгіс або просторіт) ви можете скористатися диспетчером DB, щоб переглянути таблиці вашої бази даних та запустити SQL-запит (код) у вікні SQL, а потім завантажити його у своє полотно. Скажіть, чи це працює для вас, і тоді ми виконаємо частину оновлення.
Олександр Нето

Олександре, див. Оновлення вище. Я експортував файл у два файли spatiallite.
GreyHippo

Ви повинні розмістити обидва файли в одній базі даних просторових даних, просто перетягніть скажіть "pipe" на базу даних "mh.sqlite". Після цього оновіть SQL-код, щоб змінити "точки" на "mh", а "рядки" на "pipe". Також адаптуйте "gid" до ідентифікатора "pipe". Після цього можна виконати та завантажити результати.
Олександр Нето

3

Я мало знаю про QGIS або GRASS, але деякі швидкі Googling дали результат v.clean в GRASS повинен зробити свою справу.

Подивіться на цю посаду та на цю .

Альтернативи QGIS та GRASS:

Якби я робив це в ArcGIS, я, ймовірно, зберігав би свої дані у наборі даних про особливості у базі даних Geodata File та створив би топологію для ідентифікації областей, де точковий шар не був у кінцевих точках рядків. Потім виправити помилки можна за допомогою Інспектора помилок .

Але, мабуть, найшвидше і найпростіше рішення було б у FME. Ви можете спробувати скористатися інструментом Snapper або ще краще - інструментом AnchoredSnapper . Якщо ви використовуєте AnchoredSnapper, переконайтесь, що ваш тип оснастки - це кінцева точка. Звичайно, вам знадобиться ліцензія на FME. Але ви можете завантажити 14-денну пробну версію, якщо у вас її немає.


Я подивився на v.clean, але він використовує лише один шар, мені потрібно порівняти один шар з іншим. Крім того, я більше шукав варіант QGIS / opensource.
GreyHippo

1
@GreyHippo, GRASS є відкритим кодом
artwork21

1
Я знаю, що GRASS є відкритим кодом, але інші варіанти - ні.
GreyHippo


-1

Ручний спосіб

Qgis -> Settings -> Параметри оснащення (і я не впевнений, але це може знадобитися розширення CadTools) та включити топологічне редагування.

Автоматичний спосіб

v.clean, який знаходиться в інструментах GRASS в панелі інструментів SEXTANTE в QGIS. Якщо у вас є PostGIS 2.0, тоді ST_Snap і ST_SnapToGrid () (І немає причини, чому ви не можете його використовувати, це дуже хороший просторовий інструмент)

Комерційний шлях

Інструмент FME та MRF (комерційне розширення, у мене була версія для оцінки. Це дуже добре).

Також мене цікавить питання щодо управління водопровідними каналізаціями та інструментами з відкритим кодом, чи є у вас підказки?


Я думаю, що саме це означає GreyHippo, роблячи це вручну. Просто використовуючи параметри Snapping, вам доведеться переміщати кожен висячий вузол вручну, щоб активувати прив'язку. Або я щось пропускаю?
Джейк

ні. я був сліпим.
simplexio

Simplexio, я НЕ хочу робити це вручну. Я сподівався на плагін або процес, про який я не знаю.
GreyHippo

Я не думав, що ви можете використовувати GRASS v.clean на двох шарах?
GreyHippo

1
якщо я пригадую правильно, він може виправити занадто короткі рядки. Ви бачите, проблема у вас не в тому, що ваші каналізаційні колодязі розташовані не в потрібних місцях, а в тому, що ваша каналізаційна мережа не є топологічно правильною. А для цього потрібен лише шар шару. Кожна система комунальних мереж, яку я бачив, передбачає, що в кожному перехресті каналізації є люк. Цей випуск передбачає, що ви хочете мати правильну топологію.
simplexio
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.