Как преобразовать долготу и широту в координаты Unity 3D на основе долготы и широты, нанесенных на 0, 0 в Unity?Учитывая широту и долготу полилинии, преобразуйте в декартовы координаты и присвойте результаты графика другой известной широте и долготе
Существует ряд предложений о том, как это сделать, но мне еще предстоит увидеть полный и краткий ответ на этот вопрос.
Мне нужно построить серию полилиний в Unity 3D, которые представляют линии, нарисованные на карте. Каждая точка в полилинии представлена широтой и долготой. Координаты представлены как EPSG: 4269 NAD83.
Сценарий начинается, когда долгота и широта пользователя отправляются на сервер MongoDB в качестве пространственного запроса, а сервер отвечает подачей геойсона, содержащей массив координат, который представляет каждую точку в полилинии.
Пользователь в Unity3D расположен непосредственно в центре карты (0, 0). Компас внутри устройства пользователя указывает ось Z на север. Х-ось представляет восток/запад. Ось Y представляет собой высоту.
Цель состоит в том, чтобы нарисовать линии на экране, представляющие геопространственные объекты применительно к пользователю. Программа способна правильно делать запросы, анализировать подачу геойсона и строить линии, но линии, очевидно, неправильно расположены без правильного преобразования из широты/долготы в децибел 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;
}
Ой, это звучит как намек на вопрос не ясен. Я перепутал это объяснение? – Twitch
Извините, это была просто мотивационная шутка. :) Я думаю, что это очень хорошо, но я думаю, вам нужно больше рассказать о том, какую проблему вам нужно решить. Что-то о линиях не рисуется правильно? Любой код для показа? Желаю вам хорошо – MickyD
@mickyd спасибо: o) добавил образец кода - надеюсь, это все еще имеет смысл; Я много раз менял его, пытаясь понять, почему результаты Unity выглядят не так, как результаты карты. – Twitch