Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   www.boolean.name > Программирование в широком смысле слова > Математика

Математика Методы математического моделлирования, программирование математических концепций, роль математики в создании игр

Ответ
 
Опции темы
Старый 21.12.2016, 17:30   #1
RegIon
Элита
 
Аватар для RegIon
 
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,157
Написано 502 полезных сообщений
(для 1,012 пользователей)
lat/llong -> Units

Использую static google maps API, что бы запрашивать карту., но возник вопрос, как транслировать координаты в x,z Unity относительно карты.
Проблема еще в том, что нужно учесть размер текстуры и zoom.

Перевожу из метров в меркат и обратно таким образом:

public static class MapConverter {

    
//http://www.smipple.net/snippet/DonnyV/Convert%20x,y%20from%20WGS%2084%20meters%20to%20Lat-%20Long
    //http://www.maptiler.org/google-maps-coordinates-tile-bounds-projection/

    
public static GoogleMapLocation UnitsToMercatorLocation(Vector2 pos)
    {
        
Vector2 ret UnitsToMercator(pos);
        return new 
GoogleMapLocation()
        {
            
longitude ret.x,
            
latitude ret.y,
            
address ""
        
};
    }

    public static 
Vector2 MercatorToUnits(GoogleMapLocation pos)
    {
        return 
MercatorToUnits(new Vector2(pos.longitudepos.latitude));
    }

    public static 
Vector2 MercatorToUnits(Vector2 pos)
    {
        
//float x = pos.y  * 20037508.34f / 180;
        
double x pos.x  200375.0834 180;
        
double y Math.Log(Math.Tan((90 pos.y) * Math.PI 360)) / (Math.PI 180);
        
200375.0834 180;
        return new 
Vector2((float), (float)y);
    }

    public static 
Vector2 UnitsToMercator(Vector2 pos)
    {
        
double lon = (pos.200375.0834) * 180;
        
double lat = (pos.200375.0834) * 180;

        
lat 180 Math.PI * (Math.Atan(Math.Exp(lat Math.PI 180)) - Math.PI 2);
        return new 
Vector2( (float)lon, (float)lat);
    }

но как учесть zoom. Пытаюсь так, но что-то фигня какая-то выходит, постоянное смещение c накоплением:
Vector3 TransformLocationToPos(GoogleMapLocation loc)
    {

        
_pos = -MapConverter.MercatorToUnits(loc) + map.CenterLocationUnits;
        
        var 
_pos.z;
        
_pos._pos.y;
        
_pos.t;

        
_pos _pos / (<< (15 map.zoom));
        
        return 
_pos;
    } 
__________________
Сайт: http://iexpo.ml
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +1, время: 07:23.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com