Рендеринг точек на земном шаре с правильной долготой и широтой в OpenGL
Я большую часть дня ломал голову над получением правильного вывода из данных о долготе и широте. Я знаю, что эти данные верны, нанося их на карты Google. Например, я покажу данные для этих широтных и длинных координат: Долгота: 4.905396 Широта: 52.364643
При нанесении на карты Google он показывает правильное местоположение, которое Амстердам в Нидерландах:
Теперь, когда я рисую это в своем приложении, это выглядит следующим образом:
И да, Google Maps - это двухмерное представление, а мое - 3D, но это было только для того, чтобы доказать правильность значений долготы и широты, поэтому, если моя формула преобразования их в трехмерное пространство верна, они должны появиться в одном месте.
Я читал много статей в Интернете, а также сам стекопоток. Я прошел через эти статьи и применил все различные типы формул, которые я видел:
Преобразование широты и долготы в точку в трехмерном пространстве
а также
3D координаты на сфере в широту и долготу
Эти два, казалось, имели ясное объяснение с хорошими примерами, но, похоже, ничего не работает. То, что я сейчас делаю, - это вычисление положения в трехмерном пространстве, а затем его нормализация и использование его в качестве направления для рисования линии с точкой на конце, как вы можете видеть на скриншоте моего приложения. Это не отличается от простого рисования линии от центра до расчетного положения при использовании радиуса Земли, который используется в большинстве примеров.
Моя текущая формула:
X = r * cos(latitude) * cos(lontitude);
Y = r * cos(latitude) * sin(longitude);
Z = r * sin(latitude);
Что не так, я знаю, но я просмотрел все примеры, которые я видел в Интернете, и ни один из них не показал мне правильные данные. Протестировав его с данными из карт Google, я знаю, что, по крайней мере, ввод правильный.
Update1:
Я проверил топологию моей текстуры, вот что происходит, когда ее широта и долгота равны 0,0000 и 0,0000:
Таким образом, это означает, что это уже неправильно, но отключено с нечетным смещением, как показывает карта Google, это должно быть так:
Зеленая стрелка обозначает 0,0000, 0,0000. Так что мой выключен, что очевидно, его нет в стороне. Я думаю, что это может быть (не думаю / надеюсь на это) текстура, я использую эту: http://naturalearth.springercarto.com/ne3_data/16200/textures/2_no_clouds_16k.jpg
Который я получил от:Shadedrelief Естественные текстуры Земли
Обновление 2: Я проверил топологию моей сферы с помощью текстуры, кажется, что она отключена для 0,0 и 0,0, но я также сомневаюсь в моей формуле. Я пробовал много разных из Интернета, и некоторые из них получают те же 0.0 0.0, что и моя первая формула, но много не делают. Моя долгота и широта в градусах с -180 ~ 180 и -90 ~ 90.
Обновление 3: Это вид на участок в Амстердаме, немного отклоненный, как у пионта 0,0 0,0 лат / лонг. Где-то или карта или расчеты не верны, я думаю. Я постараюсь адаптировать текстуру, чтобы она немного сдвинулась.