Itersect двух point векторов с погрешностью координат

Вопросы общего характера по ГИС и дистанционному зондированию, не связанные с конкретным ПО.
Ответить
SBoris
Участник
Сообщения: 82
Зарегистрирован: 24 мар 2011, 19:15
Репутация: 1

Itersect двух point векторов с погрешностью координат

Сообщение SBoris » 23 сен 2012, 16:50

Здравствуйте.
Есть исходный точечный слой (векторный). Нужны были значения другого(их) раста(ов) - сделал из исходного растр (GRASS). Считал по растровой маске даные с растра. Полученный растр преобразовал в вектор. Получил вектор похожий на исходный векторный, но координаты немножко "поплыли" (есть некоторое отклонений в координатах точек) + в исходном файле были дубли точек, которые при конвертации в растр исчезли. То-есть было например 2002 точки, а стало 2000.
Пробовал intersect QGIS - не работает, то есть работает, так как если выбирать пересечение полученного векторного слоя с исходным - дубликаты тоже попадут в выборку... Видел скрипты, но для ArcGis.
Видел у Вас это, но "страшновато" я в Гис недавно. Что и куда, по скрипту - непонятно.
Итого. В результате имеем два вектора 1-й длинной 2002, второй 2000 с немного отличающимися координатами точек.
Встал вопрос, как исходный и полученный векторы привести к "общему знаменателю" для их сравнения/корреляции в R?

Поскольку нужны вектра с одинаковой длинной и одинаковыми соответствующими координатами точек.

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9129
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 748
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Itersect двух point векторов с погрешностью координат

Сообщение Максим Дубинин » 23 сен 2012, 18:24

если честно, то, кроме того что у вас два разных точечных слоя, ничего непонятно :)

определите что значит "общий знаменатель"? Что именно вы хотите сделать? Почему просто не выкинуть эти две лишние точки?

У вас порядок точек одинаковый в таблице? Если да, то выкидывайте две лишние и смело грузите в R, ему все равно какие там координаты, главное чтобы N было одинаковое и пары были корректные.
пристегивайтесь, турбулентность прямо по курсу

SBoris
Участник
Сообщения: 82
Зарегистрирован: 24 мар 2011, 19:15
Репутация: 1

Re: Itersect двух point векторов с погрешностью координат

Сообщение SBoris » 23 сен 2012, 18:53

Максим Дубинин писал(а): определите что значит "общий знаменатель"?
Спасибо.
Я имел ввиду как сделать чтобы координаты точек совпадали.
Максим Дубинин писал(а):Что именно вы хотите сделать?
Сформировать (вернее один подкоректировать) два вектора пригодных для регрессионного анализа в R.
Максим Дубинин писал(а): Почему просто не выкинуть эти две лишние точки?
А как их найти? :) Я не знаю какие из 2002 два дубля.
Максим Дубинин писал(а): У вас порядок точек одинаковый в таблице?

В том то и дело, что неодинаковый. Я когда сравнивал два вектора очень много перестановок (порядок) после плясок вектор-растр-вектор в GRASS.
:D Пока кушал, в голову пришла мысль. Сделать буферные зоны вокруг точек исходного слоя. Далее в растр. Считать маской, и обратно в шейп или XYZ. То-есть тем же макаром как и с остальными данными делал. Пробую.
- Ведь теория и практика две совершенно разые вещи (иногда) :)

Если есть более элегантный способ -буду признателен. :roll:

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

Re: Itersect двух point векторов с погрешностью координат

Сообщение Александр Мурый » 23 сен 2012, 19:06

SBoris писал(а): Есть исходный точечный слой (векторный). Нужны были значения другого(их) раста(ов) - сделал из исходного растр (GRASS). Считал по растровой маске даные с растра. Полученный растр преобразовал в вектор. Получил вектор похожий на исходный векторный, но координаты немножко "поплыли"
Какая была исходная задача (до "уравнивания" двух наборов точек) — получить значения какого-то растра (растров) в исходных точках? Если так, то в GRASS есть модуль v.what.rast, который заносит в таблицу атрибутов значения растра в точках.
Редактор материалов, модератор форума

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9129
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 748
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Itersect двух point векторов с погрешностью координат

Сообщение Максим Дубинин » 23 сен 2012, 19:11

хотел предложить, после уточнения ровно тоже самое

1. строим буфера вокруг вектор-1, размер зоны порядка разницы в координатах близлежащих точек
2. выбираем все в вектор-2 вектором-1
3. находим две точки которые не выбрались - удаляем

если погрешность в координатах меньше, чем размер ячейки, т.е. обе точки попадают в одну, то мне кажется вам не нужно корректировать координаты, только убедиться что порядок один и тот же.
пристегивайтесь, турбулентность прямо по курсу

SBoris
Участник
Сообщения: 82
Зарегистрирован: 24 мар 2011, 19:15
Репутация: 1

Re: Itersect двух point векторов с погрешностью координат

Сообщение SBoris » 23 сен 2012, 19:45

amuriy писал(а):
SBoris писал(а): Есть исходный точечный слой (векторный). Нужны были значения другого(их) раста(ов) - сделал из исходного растр (GRASS). Считал по растровой маске даные с растра. Полученный растр преобразовал в вектор. Получил вектор похожий на исходный векторный, но координаты немножко "поплыли"
Какая была исходная задача (до "уравнивания" двух наборов точек) — получить значения какого-то растра (растров) в исходных точках? Если так, то в GRASS есть модуль v.what.rast, который заносит в таблицу атрибутов значения растра в точках.
Да. Спасибо, это упрощает работу.
Но

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

v.what.rast vector=shp1@traffic raster=Cu_dep@traffic column=Cu_dep_sampl
ERROR: Column <Cu_dep_sampl> not found
:?:
Сначала думал, что v.what.rast апдейтит уже имеющийся столбец в атрибутивной таблице, но создав такой столбец и запустив v.what.rast - результат одинаковый.

SBoris
Участник
Сообщения: 82
Зарегистрирован: 24 мар 2011, 19:15
Репутация: 1

Re: Itersect двух point векторов с погрешностью координат

Сообщение SBoris » 23 сен 2012, 19:58

Спасибо
Максим Дубинин писал(а):хотел предложить, после уточнения ровно тоже самое
2. выбираем все в вектор-2 вектором-1
Вы имеете в виду v.what.vect?
Максим Дубинин писал(а): 3. находим две точки которые не выбрались - удаляем
Как по мне, чисто теоретически, "эти 2 точки" будут выбраны тоже, так как попадут в выбираемую ячейку (у них координаты такие же -это 2 точки дубли). Или я не прав? :?:
Максим Дубинин писал(а): если погрешность в координатах меньше, чем размер ячейки, т.е. обе точки попадают в одну, то мне кажется вам не нужно корректировать координаты, только убедиться что порядок один и тот же.
Если через буферы, то да, тогда длинны двух векторов будут одинаковы.
Всё равно попробую. :) Я упёртый.

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

Re: Itersect двух point векторов с погрешностью координат

Сообщение Александр Мурый » 23 сен 2012, 20:06

SBoris писал(а): Сначала думал, что v.what.rast апдейтит уже имеющийся столбец в атрибутивной таблице, но создав такой столбец и запустив v.what.rast - результат одинаковый.
Перед использованием <v.what.rast> задайте вычислительный регион по вашему растру:

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

g.region rast=Cu_dep@traffic
Так поле "Cu_dep_sampl" есть или нет в таблице атрибутов? Приведите вывод команды v.info -c shp1@traffic.
SBoris писал(а): Если через буферы, то да, тогда длинны двух векторов будут одинаковы.
То, что вы называете "длинами" векторов — это количество объектов (и записей в таблице), так? А то точки — нулевые вектора и не имеют длины :)
Последний раз редактировалось Александр Мурый 23 сен 2012, 21:42, всего редактировалось 1 раз.
Редактор материалов, модератор форума

SBoris
Участник
Сообщения: 82
Зарегистрирован: 24 мар 2011, 19:15
Репутация: 1

Re: Itersect двух point векторов с погрешностью координат

Сообщение SBoris » 23 сен 2012, 21:03

amuriy писал(а): Перед использованием <v.what.rast> задайте вычислительный регион по вашему растру:

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

g.region rast=Cu_dep@traffic
Как раз этого не хватало. - Помогло -работает.
amuriy писал(а): Так поле "Cu_dep_sampl" есть или нет в таблице атрибутов? Приведите вывод команды v.info -c shp1@traffic.
[/code]
Да - есть, я его ручками создал раньше. Поле необходимо создать перед заполнением или апдейт уже существующего. У меня v.what.rast не хотел сам создавать новое поле.
amuriy писал(а): Если через буферы, то да, тогда длинны двух векторов будут одинаковы.
То, что вы называете "длинами" векторов — это количество объектов (и записей в таблице), так? А то точки — нулевые вектора и имеют длины :)
Именно! :)
На сегодня всем спасибо. Воскресенье, как ни как :D

SBoris
Участник
Сообщения: 82
Зарегистрирован: 24 мар 2011, 19:15
Репутация: 1

Re: Itersect двух point векторов с погрешностью координат

Сообщение SBoris » 24 сен 2012, 09:44

Как говорится , Уторо вечера - мудреннее". :D Нашел элегантное решение в один шаг (GRASS):

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

v.what.vect vector=shp1@traffic column=elev qvector=alev@traffic qcolumn=value dmax=50
Фишка в параметре dmax=50 который задает поиск значения в окресностях с радиусом 50 (в единицах размерности карты). То-есть, для заполнения поля elev одного (точечного) вектора shp1 другим alev@traffic значениями поля value в условиях несовпадения координат точек (незначительного разброса, ошибки...).
Спасибо всем ещё раз.

Ответить

Вернуться в «Общие вопросы»

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

Сейчас этот форум просматривают: Bing [Bot] и 3 гостя