Задача: расчет расстояния

Вопросы по свободной ГИС QGIS. Сообщения об ошибках, предложения по улучшению, локализация.
Ответить
kryl
Завсегдатай
Сообщения: 324
Зарегистрирован: 14 фев 2010, 20:42
Репутация: 0

Задача: расчет расстояния

Сообщение kryl » 25 сен 2011, 22:03

Есть точечный слой с уникальным ID.
Есть полигональный слой с уникальным ID.
Необходимо рассчитать расстояние от точечного объекта до ближайшего полигонального с одинаковым с ним ID.
Если точка лежит внутри полигона с таким же ID то расстояние равно 0.

Как бы это расстояние рассчитать в QGIS?

kryl
Завсегдатай
Сообщения: 324
Зарегистрирован: 14 фев 2010, 20:42
Репутация: 0

Re: Задача: расчет расстояния

Сообщение kryl » 25 сен 2011, 23:06

Пока приходит в голову только 1 вариант: загнать 2 шейпа в SpataiLihgt и там сотворить запрос с Distance(). Вот только не соображу синтаксис.

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Репутация: 792
Ваше звание: званий не имею
Откуда: Москва

Re: Задача: расчет расстояния

Сообщение Александр Мурый » 25 сен 2011, 23:15

"SpataiLihgt" улыбнуло :)
Мне вот пришёл в голову грассовский модуль v.distance. Но по умолчанию (просто от точек к полигонам) не выйдет считать, т.к. надо выполнить условия -- "до ближ-го с таким же ID + если внутри полигона с таким же ID, то расстояние == 0". Похоже, тут нужен будет лёгкий (?) скриптинг.
Редактор материалов, модератор форума

kryl
Завсегдатай
Сообщения: 324
Зарегистрирован: 14 фев 2010, 20:42
Репутация: 0

Re: Задача: расчет расстояния

Сообщение kryl » 26 сен 2011, 00:54

Получилось таки.
Сначала считаем у точек Х Y
потом join точек к полигонам
потом из X Y делаем калькулятором поле wkt
потом запрос

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

SELECT Distance("fr2".'Geometry', PointFromText("wkt"))  AS Geometry1 FROM "fr2"
видимо все шаги можно гораздо изящнее объединить в 1 запросе, но знания SQL не хватает.

kryl
Завсегдатай
Сообщения: 324
Зарегистрирован: 14 фев 2010, 20:42
Репутация: 0

Re: Задача: расчет расстояния

Сообщение kryl » 26 сен 2011, 01:03

ага, вот так можно:

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

SELECT Distance("fr2".'Geometry',"fr_lpt".'Geometry') AS Dist
FROM "fr2" INNER JOIN "fr_lpt" ON "fr_lpt".'ID'="fr2".'ID2'

Ответить

Вернуться в «QGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость