1

Как преобразовать долготу и широту в координаты Unity 3D на основе долготы и широты, нанесенных на 0, 0 в Unity?Учитывая широту и долготу полилинии, преобразуйте в декартовы координаты и присвойте результаты графика другой известной широте и долготе

Существует ряд предложений о том, как это сделать, но мне еще предстоит увидеть полный и краткий ответ на этот вопрос.

Мне нужно построить серию полилиний в Unity 3D, которые представляют линии, нарисованные на карте. Каждая точка в полилинии представлена ​​широтой и долготой. Координаты представлены как EPSG: 4269 NAD83.

Сценарий начинается, когда долгота и широта пользователя отправляются на сервер MongoDB в качестве пространственного запроса, а сервер отвечает подачей геойсона, содержащей массив координат, который представляет каждую точку в полилинии.

Пользователь в Unity3D расположен непосредственно в центре карты (0, 0). Компас внутри устройства пользователя указывает ось Z на север. Х-ось представляет восток/запад. Ось Y представляет собой высоту.

Цель состоит в том, чтобы нарисовать линии на экране, представляющие геопространственные объекты применительно к пользователю. Программа способна правильно делать запросы, анализировать подачу геойсона и строить линии, но линии, очевидно, неправильно расположены без правильного преобразования из широты/долготы в децибел Unity3D.

Эта формула является в основном последней частью головоломки. Я пишу программу для Unity3D с помощью C#.

Вот представление того, как линии выглядят в онлайн-карте. Синий штырь представляет местоположение пользователя:

enter image description here

Вот является представление о том, что пользовательский интерфейс выглядит как на мобильном устройстве пользователя (строки не правильно нанесено):

enter image description here

Образец кода Мне удалось заполнить его, пытаясь сделать все это:

// 
// Longitude and Latitude to Unity 
// 
public Vector3 LatLonUnity(double longitude, float elevation, double latitude){ 
    // code based on http://stackoverflow.com/questions/32311647/converting-gps-coordinates-to-x-y-z-coordinates 

    float u_lat = Convert.ToSingle ((latitude - DrawLines.user_latitude)/0.00001 * 0.12179047095976932582726898256213); 

    float u_lon = Convert.ToSingle ((longitude - DrawLines.user_longitude)/0.000001 * 0.00728553580298947812081345114627); 

    Vector3 geo_unity = new Vector3 (-u_lon, elevation, -u_lat); 

    return geo_unity; 

} 
+0

Ой, это звучит как намек на вопрос не ясен. Я перепутал это объяснение? – Twitch

+0

Извините, это была просто мотивационная шутка. :) Я думаю, что это очень хорошо, но я думаю, вам нужно больше рассказать о том, какую проблему вам нужно решить. Что-то о линиях не рисуется правильно? Любой код для показа? Желаю вам хорошо – MickyD

+0

@mickyd спасибо: o) добавил образец кода - надеюсь, это все еще имеет смысл; Я много раз менял его, пытаясь понять, почему результаты Unity выглядят не так, как результаты карты. – Twitch

ответ

0

Широта θ и Долгота φ являются два из компонентов сферических полярных координатах (другой радиус планеты r, который вы должны также указать).

enter image description here

Для координат на высоте h, просто замените enter image description here