Как я могу преобразовать долготу и широту в 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;
}