Устаканить информацию по привязке

Системы координат, проекции, преобразования, привязка
Ответить
Luzerka
Новоприбывший
Сообщения: 8
Зарегистрирован: 04 дек 2009, 15:51
Репутация: 0

Устаканить информацию по привязке

Сообщение Luzerka »

Доброго времени. Обчитался я статей, каша походу полная.
Текущая цель(начальная): Хоть как нибудь добиться программной реализации привязки карты.
Что необходимо для привязки:
1. географические координаты точек
2. координаты точек на карте(проекция участка зем поверх), представляющие собой номер пикселья по х и номер пикселя по у. Они соответствуют географическим координатам.
3. географическая система координат(предположительно буду использовать WGS84)
4. какая-то проекция.
Читал статьи и форумы, читал... и каким-то образом вышел на цикл(?) статей про Полиномиальные преобразования.
("Полиномиальные преобразования", "Полиномиальные преобразования - Математика", "Полиномиальные преобразования - примеры реализации")
Стало понятно, что это как раз то, что нужно для привязки карты.
Но тогда встает вопрос, а где там применяется проекция? попробую сам ответить - возможно проекция применяется в контрольных точках.( ? :) )

Вопросы по полиномиальным преобразованиям тоже возникли, задам здесь же.
x,y - координаты в исходной системе координат (известны)
x',y' - координаты в конечной системе координат (известны)
вот как в статьях сказано.
х и у - это исходная, т.е допустим координаты х и у на карте в проекции
х' и y' - это координаты ширины и долготы в пространстве
Так чтоли?) Если да, то тогда в каком виде брать широты и долготу, есть же разные виды представления их

По статье примеры реализации: Там идет перевод из какой-то локальной системы координат в проекцию.
Но как можно на растровой карте отобразить такую точку: (557124.596,5479746.857)?

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

Re: Устаканить информацию по привязке

Сообщение Максим Дубинин »

это не "какая-то локальная СК", это любая локальная СК
проекция при полиномиальных преобразованиях никчему
проекционные преобразования и полиномиальные - абсолютно разные (есть нюансы, но вам они в данном случае точно не нужны).
обычно после привязки, растру просто назначают (описывают) проекцию, согласно проекции использованных x',y'
пристегивайтесь, турбулентность прямо по курсу
Luzerka
Новоприбывший
Сообщения: 8
Зарегистрирован: 04 дек 2009, 15:51
Репутация: 0

Re: Устаканить информацию по привязке

Сообщение Luzerka »

Спасибо большое за ответ:)
А в данном случаи не нужны, потому что проекции дают более точную привязку, а я насчет нее пока не заморачиваюсь?:)
Но все равно не понятно: как можно на растровой карте отобразить такую точку: (557124.596,5479746.857)?
Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9129
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 748
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Устаканить информацию по привязке

Сообщение Максим Дубинин »

точность тут непричем
в общем случае, такую точку можно отобразить на растровой карте спроецированной в ту же СК что и эти цифры.
пристегивайтесь, турбулентность прямо по курсу
Luzerka
Новоприбывший
Сообщения: 8
Зарегистрирован: 04 дек 2009, 15:51
Репутация: 0

Re: Устаканить информацию по привязке

Сообщение Luzerka »

кое-какой прогресс у меня наметился.взял кусок карты, и попробовал привязать, использовал пример на C# из статьи. Но в чем проблема, по долготе высчитывается все точно, я бы даже сказал очень точно ) видимо просто малюсенькая карта. а вот по широте... широта скачит с амплитудой 20 целых. причем граница проведеная вертикально ровно по середине карты :)
Навсякий приложу пример, что у меня получилось, если кому не лень будет смотреть )
закачал на слил slil.ru/28358326
Последний раз редактировалось Luzerka 07 дек 2009, 15:21, всего редактировалось 1 раз.
Luzerka
Новоприбывший
Сообщения: 8
Зарегистрирован: 04 дек 2009, 15:51
Репутация: 0

Re: Устаканить информацию по привязке

Сообщение Luzerka »

наблюдательным путем выявил, что возле всех точек при подходе к ним координаты становились кооректными, за исключением одной. свдинул эту точку случайным образом на 10 метров примерно и переопределил для ней координаты. и стало все хорошо. В тех статьях я читал, что небольшое отклонение может приводить к потере точности, но чтобы потеря точности была такой огромной я даже не ожидал.
Каким же образом тогда нужно привязывать карты, чтобы не терялась точность? Неужели каждой карте необходимо уделять некоторое большое кол-во времени, чтобы подобрать точки ?
Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9129
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 748
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Устаканить информацию по привязке

Сообщение Максим Дубинин »

что значит огромная? 20 чего? метров? это нормальная ошибка
Luzerka писал(а):Неужели каждой карте необходимо уделять некоторое большое кол-во времени, чтобы подобрать точки ?
Именно так, поздравляю, вы постигли главную хитрость процесса привязки.
пристегивайтесь, турбулентность прямо по курсу
Luzerka
Новоприбывший
Сообщения: 8
Зарегистрирован: 04 дек 2009, 15:51
Репутация: 0

Re: Устаканить информацию по привязке

Сообщение Luzerka »

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

Re: Устаканить информацию по привязке

Сообщение Максим Дубинин »

20 градусов быть не должно
проверяйте и перепроверяйте
пристегивайтесь, турбулентность прямо по курсу
Luzerka
Новоприбывший
Сообщения: 8
Зарегистрирован: 04 дек 2009, 15:51
Репутация: 0

Re: Устаканить информацию по привязке

Сообщение Luzerka »

Преобразовывая экранные координаты в географические - получаю некоторые значения. а преобразовывая эти некоторые значения обратно получаю совершенно другие координаты ) очень сильно отличающиеся от начальных. Почему такое происходит?
Luzerka
Новоприбывший
Сообщения: 8
Зарегистрирован: 04 дек 2009, 15:51
Репутация: 0

Re: Устаканить информацию по привязке

Сообщение Luzerka »

актуально до сих пор... Формулы же позволяют преобразовывать из одной ск в другую) а тут получается что не так.
Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Устаканить информацию по привязке

Сообщение Denis Rykov »

Luzerka писал(а):Преобразовывая экранные координаты в географические - получаю некоторые значения. а преобразовывая эти некоторые значения обратно получаю совершенно другие координаты ) очень сильно отличающиеся от начальных. Почему такое происходит?
А что есть формулы которые переводят географические координаты в экранные?
Spatial is now, more than ever, just another column- The Geometry Column.
Luzerka
Новоприбывший
Сообщения: 8
Зарегистрирован: 04 дек 2009, 15:51
Репутация: 0

Re: Устаканить информацию по привязке

Сообщение Luzerka »

вопщем народ. я туп наверное. но нифига не пойму)
из статьи полиномиальные преобразования примеры реализации взял код

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

            
            double[,] m = new double[n + 1, n + 1];
            double[] bForX = new double[n + 1];
            double[] bForY = new double[n + 1];
            for (int i = 0; i < points.Count; i++)
            {
                m[1, 1] = n;
                m[1, 2] = m[2, 1] += x1[i];
                m[1, 3] = m[3, 1] += y1[i];
                m[1, 4] = m[4, 1] = m[2, 2] += Math.Pow(x1[i], 2);
                m[1, 5] = m[5, 1] = m[2, 3] = m[3, 2] += x1[i] * y1[i];
                m[1, 6] = m[6, 1] = m[3, 3] += Math.Pow(y1[i], 2);
                m[2, 4] = m[4, 2] += Math.Pow(x1[i], 3);
                m[2, 5] = m[5, 2] = m[3, 4] = m[4, 3] += Math.Pow(x1[i], 2) * y1[i];
                m[2, 6] = m[6, 2] = m[3, 5] = m[5, 3] += x1[i] * Math.Pow(y1[i], 2);
                m[3, 6] = m[6, 3] += Math.Pow(y1[i], 3);
                m[4, 4] += Math.Pow(x1[i], 4);
                m[4, 5] = m[5, 4] += Math.Pow(x1[i], 3) * y1[i];
                m[4, 6] = m[6, 4] = m[5, 5] += Math.Pow(x1[i], 2) * Math.Pow(y1[i], 2);
                m[5, 6] = m[6, 5] += x1[i] * Math.Pow(y1[i], 3);
                m[6, 6] += Math.Pow(y1[i], 4);

                bForX[1] += x2[i];
                bForX[2] += x1[i] * x2[i];
                bForX[3] += y1[i] * x2[i];
                bForX[4] += Math.Pow(x1[i], 2) * x2[i];
                bForX[5] += x1[i] * y1[i] * x2[i];
                bForX[6] += Math.Pow(y1[i], 2) * x2[i];

                bForY[1] += y2[i];
                bForY[2] += x1[i] * y2[i];
                bForY[3] += y1[i] * y2[i];
                bForY[4] += Math.Pow(x1[i], 2) * y2[i];
                bForY[5] += x1[i] * y1[i] * y2[i];
                bForY[6] += Math.Pow(y1[i], 2) * y2[i];
            }
Из него следует, что мы заполняем матрицу m и bForX ну далее делаем их произведение и получаем коэфиценты а0-а5

Если привести указанный код выше, то получаем нечто такое

Изображение

а в самих формулах в статьи вот что:
Изображение

Откуда тогда такая матрица берется, которая из кода? я предположил, что это соединенная, через формулу обратной матрицы (A^-1 = 1/detA * C) но черт побери, никак ведь такой не получается...
Ответить

Вернуться в «Координаты и привязка»

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

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