Нахождение перевода между точками - PullRequest
0 голосов
/ 07 декабря 2009

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

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

Итак, я вручную собрал небольшой набор координат для каждой карты, которые соответствуют друг другу. Например, точка (244 312) на первой карте соответствует точке (598 624) на второй карте, а (1323 374) на первой карте соответствует (2793 545) на второй карте и т. Д.

Итак, я пытаюсь определить перевод для размеров X и Y. Итак, учитывая набор точек для старых и новых карт, как мне найти уравнения x' = A*x + C и y' = B*x + D для автоматического перевода любой точки из старой карты в новую?

Ответы [ 2 ]

3 голосов
/ 08 декабря 2009

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

По сути, вы минимизируете сумму ((A xi + B-xi ') ^ 2 + (C yi + D-yi') ^ 2), выбирая оптимальные A, B, C, D.

3 голосов
/ 07 декабря 2009

У вас есть координаты двух точек на обеих картах, (x 1 , y 1 ), (x ' 1 , y' 1 ), (x 2 , y 2 ) и (x ' 2 , y' 2 ).

A = (x'<sub>1</sub> - x'<sub>2</sub>)/(x<sub>1</sub> - x<sub>2</sub>)
B = (y'<sub>1</sub> - y'<sub>2</sub>)/(y<sub>1</sub> - y<sub>2</sub>)
C = x'<sub>1</sub> - A x<sub>1</sub>
D = y'<sub>1</sub> - B y<sub>1</sub>

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

...