Привязка тайлов Яндекс карт к координатам

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Ответить
Аватара пользователя
Старик
Новоприбывший
Сообщения: 11
Зарегистрирован: 13 фев 2010, 16:11
Репутация: 0
Контактная информация:

Привязка тайлов Яндекс карт к координатам

Сообщение Старик » 13 фев 2010, 16:53

Здравтвуйте уважаемые геодезисты.
Мне понадобилась карта местности.Для водного туризма. На бумаге.
Скачал тайлы с яндекс карт склеил распечатал, все очень здорово.
Единствено что хотелось нарисовать координатную сетку. Долготу нашел без проблем
размер общей карты известен 256*(2^z) пикселов где z - увеличение.
Делю на 360 градусов получаю количество пикселов на градус. Гринвич по серидине. Верхний левый угол моей карты тоже знаю.Все остальное труда не составило.

А вот с широтой начались проблемы.
Гуглавская формула есть, но она не подходит.Там кажется думают что земля имеет форму шара.

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

п.с. Убедительная просьба не предлагайте готовые программы или решения. Я хочу только формулу.
Последний раз редактировалось Старик 16 фев 2010, 23:27, всего редактировалось 2 раза.

Аватара пользователя
Komяpa
Интересующийся
Сообщения: 16
Зарегистрирован: 13 сен 2009, 11:24
Репутация: 0
Откуда: Minsk
Контактная информация:

Re: Кто может привязать координаты в Яндекс картах.помогите.

Сообщение Komяpa » 13 фев 2010, 18:00

Если немножко погуглить, можно найти такую формулу в maemo-mapper-shmuma (приведена на питоне):

Код: Выделить всё

        M_PI_4 = 0.78539816339744830962
        YANDEX_Rn = 6378137.0
        YANDEX_E = 0.0818191908426
        YANDEX_A = 20037508.342789
        YANDEX_F = 53.5865938
        YANDEX_AB = 0.00335655146887969400
        YANDEX_BB = 0.00000657187271079536
        YANDEX_CB = 0.00000001764564338702
        YANDEX_DB = 0.00000000005328478445
        

        tmp=math.tan(M_PI_4+(lat*math.pi/180.)/2.0);
        pow_tmp = math.pow(math.tan(M_PI_4+math.asin(YANDEX_E*math.sin(lat*math.pi/180.))/2.0),YANDEX_E);
        x = (YANDEX_Rn*(lon*math.pi/180.) + YANDEX_A) * YANDEX_F;
        y = (YANDEX_A - (YANDEX_Rn * math.log (tmp / pow_tmp))) * YANDEX_F;
Ну и вообще, см.
http://code.google.com/p/twms/source/br ... dex.py#364
Последний раз редактировалось Komяpa 13 фев 2010, 22:35, всего редактировалось 1 раз.
[OSM BY Team]
[http://latlon.org/] [jabber: me@komzpa.net] [mobile: +375257407159]

Аватара пользователя
Старик
Новоприбывший
Сообщения: 11
Зарегистрирован: 13 фев 2010, 16:11
Репутация: 0
Контактная информация:

Re: Кто может привязать координаты в Яндекс картах.помогите.

Сообщение Старик » 13 фев 2010, 19:48

Здарова Котяра
Спасибо за беспокойство но в формуле чтото не так

вобще не используются
YANDEX_AB = 0.00335655146887969400
YANDEX_BB = 0.00000657187271079536
YANDEX_CB = 0.00000001764564338702
YANDEX_DB = 0.00000000005328478445

и отсутсвует увеличение, то есть общий размер карты в пикселах.

Konstantin Tokar
Активный участник
Сообщения: 178
Зарегистрирован: 16 июл 2008, 09:56
Репутация: 1
Откуда: Москва

Re: Кто может привязать координаты в Яндекс картах.помогите.

Сообщение Konstantin Tokar » 13 фев 2010, 20:19

Внутри JS файла яндексового API есть функции преобразования.


Аватара пользователя
Старик
Новоприбывший
Сообщения: 11
Зарегистрирован: 13 фев 2010, 16:11
Репутация: 0
Контактная информация:

Re: Кто может привязать координаты в Яндекс картах.помогите.

Сообщение Старик » 14 фев 2010, 11:50

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

Аватара пользователя
Старик
Новоприбывший
Сообщения: 11
Зарегистрирован: 13 фев 2010, 16:11
Репутация: 0
Контактная информация:

Re: Кто может привязать координаты в Яндекс картах.помогите.

Сообщение Старик » 14 фев 2010, 17:15

Пора возвращать долги
Я пишу на C# от майкрософта

Сравнивал с API яндекс карт полностью совпадает.
правда переводил X,Y в Lat Lon а потом обратно
Х совпал полность
а в Y расхождение на 1 пиксел на любом увеличении. На глаз все равно не видно.
Так что пользуйтесь. :D

Код: Выделить всё

    class wgs84
    {   // C# клас для конвертации яндекс карт в координаты и обратно
        // координаты в формате DD.DDDDD
        // положение на карте x,y в пикселах от верхнего левого угла на глобальной карте
        // то есть чтобы вычислить координаты в конкретном тайле нужно знать его смещение на глобальной карте
        // z - zoom увеличение

        
        static public double YtoLat(long y, int z) //перевод пиксела ось Y в широту Lat
        {
            double a = 6378137.0;
            double c1 = 0.00335655146887969;
            double c2 = 0.00000657187271079536;
            double c3 = 0.00000001764564338702;
            double c4 = 0.00000000005328478445;


            double mercY = 20037508.342789 - (y * Math.Pow(2,23 - z)) / 53.5865938;
            double g = Math.PI / 2 - 2 * Math.Atan(1 / Math.Exp(mercY / a));
            double zz = g + c1 * Math.Sin(2 * g) + c2 * Math.Sin(4 * g) + c3 * Math.Sin(6 * g) + c4 * Math.Sin(8 * g);
            return (zz * 180 / Math.PI);
        
        }
        
        static public long LatToY(double lat, int z) // перевод широты Lat в координаты пиксела ось Y
        {
            double rLat = lat * Math.PI / 180;
            double a = 6378137.0;
            double k = 0.0818191908426;

            double zz = Math.Tan(Math.PI / 4 + rLat / 2)  / Math.Pow((Math.Tan(Math.PI / 4 + Math.Asin(k * Math.Sin(rLat)) / 2)), k);
            double y = (20037508.342789 - a * Math.Log(zz)) * 53.5865938 / Math.Pow( 2 ,23 - z);
            return ((long)y );
        
        }
        
        static public double XtoLon(long x, int z) //перевод пиксела ось X в долготу Lon 
        {
            double lon = 360.0 * (double)x / (double)(256 * Math.Pow(2, z)) - 180.0; 
            if (lon > 180) lon -= 360;//вычисление долготы по пикселу
            return (lon);
        }
        
        static public long LonToX(double lon, int z) // перевод долготы Lon в координаты пиксела ось X
        { 
            double  l =  (lon + 180.0)/360.0*(256 * Math.Pow(2, z));
            return((long)l);
        
        }
    }

wowka777
Новоприбывший
Сообщения: 4
Зарегистрирован: 04 авг 2010, 13:57
Репутация: 0

Re: Привязка тайлов Яндекс карт к координатам

Сообщение wowka777 » 04 авг 2010, 17:36

Старик -СПАСБО!!!!

kyrie
Новоприбывший
Сообщения: 2
Зарегистрирован: 14 окт 2010, 13:08
Репутация: 0

Re: Привязка тайлов Яндекс карт к координатам

Сообщение kyrie » 14 окт 2010, 14:08

Мужики, подскажите, плиз:
- константа 53.5865938 - она откуда взялась (как её получили)?
- Я правильно понял, что это - масштабный множитель 53.58.../2^23-z ? Из-за того, что не понимаю откуда взялась константа, не ясно, почему множитель такой
- Откуда взялось ограничение на максимальный масштаб = 23? Яндекс тоже о нем пишет (что мол макс 23, но реально - 17).
- Почему в знаменателе масштабного множителя 2 в степени не z, а 23-z ? (тут похоже я прсото туплю, но не въезжаю).
- Это преобразование как соотноситься с тем, что на http://ru.wikipedia.org/wiki/%D0%9F%D1% ... 1%80%D0%B0 ? Там неизвестная мне функция ath, о которой я ничего найти не смог.

Подскажите?

Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

Re: Привязка тайлов Яндекс карт к координатам

Сообщение Mavka » 14 окт 2010, 14:14

ath - гиперболический арктангенс
лангольеры под окном жрали время ом-ном-ном

kyrie
Новоприбывший
Сообщения: 2
Зарегистрирован: 14 окт 2010, 13:08
Репутация: 0

Re: Привязка тайлов Яндекс карт к координатам

Сообщение kyrie » 14 окт 2010, 14:59

Блин, h заставил подозревать, что оно гиперболическое...но на arcth показалось непохоже.
Спасибо большое.

Ответить

Вернуться в «Веб-картография»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 5 гостей