По заданной широте и долготе ломаной линии преобразовать в декартовы координаты и отобразить результаты со ссылкой на другую известную широту и долготу.

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

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

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

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

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

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

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

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

введите описание изображения здесь

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

введите описание изображения здесь

Пример кода, который мне удалось изменить, пытаясь заставить все это работать:

//
// 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;

}

person Twitch    schedule 08.06.2016    source источник
comment
Ой, это похоже на намек, вопрос был непонятен. Я слишком долго думал над объяснением?   -  person Twitch    schedule 09.06.2016
comment
Извини, нет, это была просто мотивационная шутка. :) Я думаю, что с точки зрения деталей это очень хорошо, но я думаю, что вам нужно рассказать больше о том, в решении какой проблемы вам нужна помощь. Что-то не так в линиях? Есть код, который нужно показать? Желаю тебе всего наилучшего   -  person MickyD    schedule 09.06.2016
comment
@mickyd спасибо: o) добавил образец кода - надеюсь, он все еще имеет смысл; Я настраивал его снова и снова, пытаясь понять, почему результаты Unity не похожи на результаты карты.   -  person Twitch    schedule 09.06.2016
comment
Спасибо за добавление образца кода. Я не очень разбираюсь в гео-пространственных вещах, но надеюсь, что кто-то еще придет и сможет помочь вам с вашим кодом. Удачи, товарищ, пользователь Unity :)   -  person MickyD    schedule 09.06.2016


Ответы (1)


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

введите описание изображения здесь

Для координат на высоте h просто замените  введите описание изображения здесь

person Community    schedule 29.06.2016