Страница 1 из 1
Itersect двух point векторов с погрешностью координат
Добавлено: 23 сен 2012, 16:50
SBoris
Здравствуйте.
Есть исходный точечный слой (векторный). Нужны были значения другого(их) раста(ов) - сделал из исходного растр (GRASS). Считал по растровой маске даные с растра. Полученный растр преобразовал в вектор. Получил вектор похожий на исходный векторный, но координаты немножко "поплыли" (есть некоторое отклонений в координатах точек) + в исходном файле были дубли точек, которые при конвертации в растр исчезли. То-есть было например 2002 точки, а стало 2000.
Пробовал intersect QGIS - не работает, то есть работает, так как если выбирать пересечение полученного векторного слоя с исходным - дубликаты тоже попадут в выборку... Видел скрипты, но для ArcGis.
Видел у Вас
это, но "страшновато" я в Гис недавно. Что и куда, по скрипту - непонятно.
Итого. В результате имеем два вектора 1-й длинной 2002, второй 2000 с немного отличающимися координатами точек.
Встал вопрос, как исходный и полученный векторы привести к "общему знаменателю" для их сравнения/корреляции в R?
Поскольку нужны вектра с одинаковой длинной и одинаковыми соответствующими координатами точек.
Re: Itersect двух point векторов с погрешностью координат
Добавлено: 23 сен 2012, 18:24
Максим Дубинин
если честно, то, кроме того что у вас два разных точечных слоя, ничего непонятно
определите что значит "общий знаменатель"? Что именно вы хотите сделать? Почему просто не выкинуть эти две лишние точки?
У вас порядок точек одинаковый в таблице? Если да, то выкидывайте две лишние и смело грузите в R, ему все равно какие там координаты, главное чтобы N было одинаковое и пары были корректные.
Re: Itersect двух point векторов с погрешностью координат
Добавлено: 23 сен 2012, 18:53
SBoris
Максим Дубинин писал(а):
определите что значит "общий знаменатель"?
Спасибо.
Я имел ввиду как сделать чтобы координаты точек совпадали.
Максим Дубинин писал(а):Что именно вы хотите сделать?
Сформировать (вернее один подкоректировать) два вектора пригодных для регрессионного анализа в R.
Максим Дубинин писал(а): Почему просто не выкинуть эти две лишние точки?
А как их найти?

Я не знаю какие из 2002 два дубля.
Максим Дубинин писал(а): У вас порядок точек одинаковый в таблице?
В том то и дело, что неодинаковый. Я когда сравнивал два вектора очень много перестановок (порядок) после плясок вектор-растр-вектор в GRASS.

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

Re: Itersect двух point векторов с погрешностью координат
Добавлено: 23 сен 2012, 19:06
Александр Мурый
SBoris писал(а):
Есть исходный точечный слой (векторный). Нужны были значения другого(их) раста(ов) - сделал из исходного растр (GRASS). Считал по растровой маске даные с растра. Полученный растр преобразовал в вектор. Получил вектор похожий на исходный векторный, но координаты немножко "поплыли"
Какая была исходная задача (до "уравнивания" двух наборов точек) — получить значения какого-то растра (растров) в исходных точках? Если так, то в GRASS есть модуль
v.what.rast, который заносит в таблицу атрибутов значения растра в точках.
Re: Itersect двух point векторов с погрешностью координат
Добавлено: 23 сен 2012, 19:11
Максим Дубинин
хотел предложить, после уточнения ровно тоже самое
1. строим буфера вокруг вектор-1, размер зоны порядка разницы в координатах близлежащих точек
2. выбираем все в вектор-2 вектором-1
3. находим две точки которые не выбрались - удаляем
если погрешность в координатах меньше, чем размер ячейки, т.е. обе точки попадают в одну, то мне кажется вам не нужно корректировать координаты, только убедиться что порядок один и тот же.
Re: Itersect двух point векторов с погрешностью координат
Добавлено: 23 сен 2012, 19:45
SBoris
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 - результат одинаковый.
Re: Itersect двух point векторов с погрешностью координат
Добавлено: 23 сен 2012, 19:58
SBoris
Спасибо
Максим Дубинин писал(а):хотел предложить, после уточнения ровно тоже самое
2. выбираем все в вектор-2 вектором-1
Вы имеете в виду
v.what.vect?
Максим Дубинин писал(а):
3. находим две точки которые не выбрались - удаляем
Как по мне, чисто теоретически, "эти 2 точки" будут выбраны тоже, так как попадут в выбираемую ячейку (у них координаты такие же -это 2 точки дубли). Или я не прав?
Максим Дубинин писал(а):
если погрешность в координатах меньше, чем размер ячейки, т.е. обе точки попадают в одну, то мне кажется вам не нужно корректировать координаты, только убедиться что порядок один и тот же.
Если через буферы, то да, тогда длинны двух векторов будут одинаковы.
Всё равно попробую.

Я упёртый.
Re: Itersect двух point векторов с погрешностью координат
Добавлено: 23 сен 2012, 20:06
Александр Мурый
SBoris писал(а):
Сначала думал, что v.what.rast апдейтит уже имеющийся столбец в атрибутивной таблице, но создав такой столбец и запустив v.what.rast - результат одинаковый.
Перед использованием <v.what.rast> задайте вычислительный регион по вашему растру:
Так поле "Cu_dep_sampl" есть или нет в таблице атрибутов? Приведите вывод команды
v.info -c shp1@traffic.
SBoris писал(а):
Если через буферы, то да, тогда длинны двух векторов будут одинаковы.
То, что вы называете "длинами" векторов — это количество объектов (и записей в таблице), так? А то точки — нулевые вектора и не имеют длины

Re: Itersect двух point векторов с погрешностью координат
Добавлено: 23 сен 2012, 21:03
SBoris
amuriy писал(а):
Перед использованием <v.what.rast> задайте вычислительный регион по вашему растру:
Как раз этого не хватало. - Помогло -работает.
amuriy писал(а):
Так поле "Cu_dep_sampl" есть или нет в таблице атрибутов? Приведите вывод команды v.info -c shp1@traffic.
[/code]
Да - есть, я его ручками создал раньше. Поле необходимо создать перед заполнением или апдейт уже существующего. У меня v.what.rast не хотел сам создавать новое поле.
amuriy писал(а):
Если через буферы, то да, тогда длинны двух векторов будут одинаковы.
То, что вы называете "длинами" векторов — это количество объектов (и записей в таблице), так? А то точки — нулевые вектора и имеют длины

Именно!

На сегодня всем спасибо. Воскресенье, как ни как

Re: Itersect двух point векторов с погрешностью координат
Добавлено: 24 сен 2012, 09:44
SBoris
Как говорится , Уторо вечера - мудреннее".

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