Преобразование широты, долготы и положения на экране в приложении дополненной реальности

Это мой первый пост на этом форуме, и я новичок в программировании. Я хочу создать приложение, в котором я могу точно видеть, где находятся некоторые значения GPS на моем телефоне. Я знаю много приложений, вроде junaio, mixare и других, но они только показывают направление на объекты и не очень точны (у них нет цели спроецировать его на точную позицию на экране) - поэтому я хочу построить сам. Я программирую на андроиде, но думаю, что и на айфоне будет то же самое.

Я выполнил шаги, предложенные из dabhaid:

Есть три шага.

1) Определите свое положение и ориентацию с помощью датчиков.

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

3) Сделайте перспективную проекцию http://en.wikipedia.org/wiki/3D_projection#Perspective_projection чтобы выяснить, где на плоскости, которая является вашим дисплеем (хорошо, датчик вашей камеры), должны появиться объекты, чтобы вы могли их увеличить.

Шаг 1: легко, у меня есть GPS-положение и все ориентации с моего мобильного устройства (x, y, z). Для дальнейших уточнений я могу использовать некоторый алгоритм для сглаживания этих значений (средний, низкий фильтр и т. д.).

Шаг 2: я не знаю, что именно подразумевается под плоским координатным пространством. У меня есть несколько разных подходов к преобразованию моего координатного пространства GPS. Один из них — ECEF (земля по центру), где 0,0,0 — центр земли. Почему-то мне это не кажется хорошим, потому что каждое небольшое изменение ОДНОЙ оси приводит к изменению двух других осей. Поэтому, если я изменю высоту, все 3 оси изменятся. Я не знаю, смогу ли я выполнить шаг 3 с этой системой координат. На шаге 2 упоминается: использование гаверсинуса - это дало бы мне расстояние до точки, но я не получаю из него x, y, z. Должен ли я вычислять x,y с помощью использования тригометрии (азимут (альфа) + расстояние (гипотенуза))?

Шаг 3. Этот метод выглядит очень круто! Если у меня есть координатное пространство из шага 2, я могу вычислить d_x,d_y,d_z, используя формулу из Википедии. Но после этого шага я еще не закончил, потому что у меня есть только координаты, а для проецирования на экран мне нужны только две координаты? Текст из википедии продолжается путем вычисления b_x,b_y Они используют e_x,e_y,e_z, что является положением зрителя относительно поверхности дисплея -> Как я могу получить эти значения с моего мобильного устройства? (андроид/ios). Другой подход, предложенный в Википедии, заключается в следующем: вычисление b_x,b_y по с использованием формулы, упомянутой в Википедии. В этой формуле они используют s_x, s_y — размер экрана и r_x, r_y — размер поверхности записи. Опять же, как я могу получить поверхность записи с моего мобильного устройства?

Я не могу найти ничего для него в Интернете. Кажется, что никто на android/ios никогда раньше не реализовывал перспективную проекцию...

Большое спасибо за все ваши ответы! Также не помешали бы ссылки на полезные сайты!


person stackie87    schedule 22.05.2013    source источник


Ответы (2)


Я думаю, вы можете найти много ответов в этой другой теме: Преобразование точек GPS в точки экрана с помощью перспективной проекции в Android.

Надеюсь помог, до свидания!

person benjaminplanche    schedule 25.05.2013

Вот простое решение, которое я сделал по этому вопросу.

A: Отображение местоположения GPS на предварительном просмотре камеры в Android

Надеюсь, это помогло. :D

person 高崇軒    schedule 19.06.2013