Эксперимент: Как это работает… maps.google.com+maps.live.com

    Увидев вот это на Хабре, решил попробовать кое что сделать. Что такое java и FireBug до сего дня в глаза не видел. Тем интереснее…
    Дело в том что живу я в Тамбове, а снимок столь маленького города со спутника от google очень слабой детализации. Совсем недавно я узнал о том, что на maps.live.com отличный спутниковый снимок родного города.


    Вот максимально доступная на сегодня детализация Тамбова от обоих сервисов.

    Вдохновившись прочтенным тут и тут решил попробовать накинуть снимок live.com на googlmaps. Т.к. к картам от Google привязано куча вкусного и у них всем известное API.

    Первые эксперименты с FireBug позволили сделать несколько очень интересных открытий относительно live.com....
    • изображение так же представлено слоями
    • изображение так же поделено на куски в виде jpg файлов размером 256 х 256px, называемые тайлы(tile)
    • границы разделов совпадают!!! (ура товарищи)
    • Live.com отдает кусочки бОльшей детализации, чем можно получить через сайт. (это не значит что изображение на них четче, но факт в том что они есть)

    Один и тот же кусочек карты с разных сервисов, границы совпали идеально!!!


    В Live.com поделили Землю так же, как и в Google, но нумерацию тайлов они изменили.
    Рассмотрим для примера тайл
    http://ecn.t1.tiles.virtualearth.net/tiles/a12031123231111.jpeg?g=282&mkt=en-us
    Имя файла у нас a12031123231111.jpeg. Что бы получить увеличенное изображение, делим его на 4 части, как на рисунке. Если нам нужен тайл из квадрата под номером 0, то имя файла получаем следующие a120311232311110.jpeg. Просто дописываем к имени файла номер нужного квадрата.(Напоминает уроки гражданской обороны, когда изучали квадраты на военных картах)




    Если же нужно получить изображение с меньшим масштабом, то просто стираем последние цифры в имени файла.
    Т.е. вся Земля у нас изначально поделена на 4 квадрата. А дальше погнали приближать очень забавный квест получается :)



    Вывод который я сделал для себя. Скачиваю снимки с Live.com и подвязываю их к googlemaps.
    Сразу же напрашивается мысль, зачем качать, если снимки и так доступны в сети. В общем возникла идея сделать некий парсер который использую GoogleMaps накладывает тайлы от Live.com. Об этом я напишу в следующей статье, если кому интересно…

    Что из этого получилось можно посмотреть тут.

    UPD: Уже после написания, я узнал о программе SASGIS, в которой все это уже реализовано…
    Ads

    Comments 58

      0
      А у нас совсем весело. Мало того, что г. Тольятти подписан Самарой, так еще Автозаводским районом назвали Центральный район. И что-то не нашел я как посмотреть спутниковый снимок.
        +1
        Над картой на синей полосе ткнуть в «Aerial».

        На карту лучше вообще не смотреть. Кажется, они пользовались какими-то картами 20-летней давности (судя по отсутствию части станций метро и названию города Ленинград).
          0
          я добавил ссылку на то что у меня вышло dl.getdropbox.com/u/930263/2.html
          Там есть возможность переключатся между космоснимком от Google (кнопка спутник) и от Live.com (кнопка Live.com). Названия улиц в режиме гибрид берутся с Гугл.
            0
            Еще на карте сотни несуществующих деревень и поселков.
              0
              Да и сами снимки бородатые. По крайней мере карты севера Питера были сделаны где-то лет 8 назад. Ну и плюс ко всему баги, типа дороги по озеру.
                +6
                Да не «где-то», а восемь лет назад. Почему? Потому что сфотографирована моя машина около дома, которую я продал семь лет назад :))))
            0
            Тоже этим занимался. Правый берег моего города на гугле свежий (2007г) и хорошего качества, а вот левый берег в очень низком разрешении. Писал скрипт, берущий карты с яху для нужного участка.
            • UFO just landed and posted this here
                0
                простите неграмошный я, поправил. спасибо за замечание.
                +2
                Забавно.
                У Гугла проекция своя собственная, отличающаяся от стандартной меркаторовской ESRI:54004.
                Выходит, некрософт у них не только тайлинг, но и проекцию потырила! Ололо!
                  0
                  А чем у гугла проекция отличается от Меркатора? И что значит стандартный?

                  groups.google.com/group/Google-Maps-API/msg/8222b18e7921f6e6?pli=1
                  en.wikipedia.org/wiki/Mercator_projection
                  0
                  Если так, то и впрямь забавно — тайлы сходной структуры не только они делают.

                  А если все таки у MS стандартный меркатор?
                  Тайлинг близкий должен получаться — в пределах средней точности покрытия. Где здесь эллипс существенно скажется? Я не соображу с ходу, как проверить.
                  0
                  Интересно, карты с лайв.ком, а управление и ссылки на гугл. Как-то это не правильно, мягко говоря.
                    +1
                    а я виноват, что мой город google не детализирует, а на live.com поиск кириллицей не находит. Вот и получился такой симбиоз двух сервисов. Интересно кстати сравнить одну и ту же поверхность от разных сервисов.
                    +1
                    «Удивив вот эту сылку»
                    Ну и как, ссылка сильно была удивлена?
                      0
                      спасибо, теперь исправил, впопыхах первый раз не то исправил :)
                      0
                      понятно, что автор стал изобретать велосипед, но ведь сделал же, реализовал, и здесь выложил свои душевные переживания (аж ссылки удивились), вопрос теперь в другом: вомзожно ли как-то автоматом определять, у какого из геосервисов спутниковое изображение одного и того же участка лучше, чтобы его и отображать?
                        0
                        лучше — понятие субъективное, я думаю каждый решит сам какой спутниковый снимок его города лучше.
                        А вот с автоматической переключением на сторонний сервис при отсутствии тайла с нужным масштабом думаю можно что нибудь придумать.
                        +2
                        >Что такое java
                        javascript все-таки, а так отличный эксперимент!
                          +2
                          Значит что такое java я таки и не знаю до сих пор :)
                          +1
                          Проверил сам — снимки на live maps и google maps для моего города одинаковые, но на гугле чуть детальнее. Нет в мире совершенства…
                            0
                            они не детальнее — они абсолютно одинаковые: см. например машины на дорогах.
                              0
                              Ну я по ним машинкам как раз и разглядел, что снимки одинаковые. Только похоже, что у гугла можно приблизить поболее.
                            0
                            Грозный то де не видно, половина города + Ханкала закрыты то ли облаками, то ли специально замазали
                              +2
                              Вручную подставляя циферки с карты мира дошел до своего дома… прикольно )
                                0
                                Гы. В Live у нас даже районы города обозначены, латиницей. Я и не знал, что они так называются: Zabolot'ye, Zatropov'ye.
                                  0
                                  Очень круто. Сам из Табмова — всегда хотел посомтреть на родной город в нормальном разрешении! Спасибо!
                                    +1
                                    Это всё, конечно, хорошо, но условия использования тайлов Live.com запрещают обращение к ним не через их собственное API. Как и Google. Так что если хотите, чтобы это было легально — придётся вам извращаться с интеграцией обоих API между собой. :)

                                    Кстати, эта работа была уже давно до вас проделана. :) Смотрите mapstraction.com/
                                      0
                                      Сервис супер
                                      но нету яндекса )
                                      также непонятно почему они используют контролсы от гугла.
                                        0
                                        Это OpenSource-библиотека, можете попробовать добавить поддержку Яндекса сами. :) Это должно быть несложно.

                                        Контролы они используют разные в зависимости от выбранного провайдера.
                                        0
                                        Кажется идеальной была бы библиотека, которая сама рисовала управление, точки, линии. При переключении на другую карту менялась только подложка. Ну и API для разных сервисов общий.

                                        Случайно такой не знаете? )
                                          +1
                                          Есть невероятно мощная и тяжелая либа OpenLayers (http://openlayers.org/) — она предоставляет общий интерфейс, но очень тормозная, неудобна в использовании и всё равно использует API других сервисов.

                                          Чистой же либы, использующей картинки разных провайдеров данных напрямую, не может существовать в принципе, как я упоминал выше, из-за ограничений Terms of Use соответствующих продуктов.
                                        +2
                                        Отличная статья! А вы не думали, как можно тайлы от Яндекс-карт подвзять к гуглкартам? Може уже есть такой проект?

                                        Просто у гуглкарт отличное API, например мне очень нрафится функция отрисовки KML на карте. А у яндекса более детализированные карты Украины, России.
                                          0
                                          поддерживаю
                                          яндекс тайлы + google карты\апи очень бы пригодились
                                            0
                                            Думаю не проблема…
                                            Но тайлы Яндекса немного не совпадают с Гугловскими тайлами.
                                              0
                                              Погорячился, при другом увеличении границы тайлов Яндекса не совпадают с границами тайлов Гугл.
                                              Поюзайте программу SAS.Планета sasgis.ru/

                                              если уж очень нужно яндекс тайлы + google карты\апи то предлагаю альтернативное решение. Через SAS.Планета скачать нужный участок в кеш, склеить и нарезать на тайлы самостоятельно. После этого использовать гуглапи со своими тайлами.
                                                0
                                                SAS.планету знаю, использую, но хочу веб-решение =)
                                                А по поводу скачать и нарезать — даже для одной области и 12 уровней зума это выходит уже нетривиальное решение.

                                                В google maps api ведь даже есть функционал необходимый, для подключения тайлов карт собственных… вот только я не силен в географии, системах координат, проекциях, поэтому не осилю эту задачу…
                                                  0
                                                  сделайте сначала для одного уровня ЗУМА, а потом решите нужно ли Вам все 12 уровней.
                                                  Я тоже в этом не силен, я просто прочитал вот это karta39.ru/blog/2009/01/26/kratkoe-rukovodstvo-po-dobavleniu-sobstvennix-kart-na-google-maps/ и сделал все как там написано, а после уже появилась эта идея…
                                                    0
                                                    спасибо за ссылку, почитаю. А по поводу зума — да, реально нужны все уровни…
                                                    0
                                                    Нарезать свою карту на тайлы можно довольно просто — с помощью Global Mapper версии >10.02. Достаточно скормить ей растр с привязкой полученный из SAS.Планета и в меню Export web format s выбрать Google Maps tiles.
                                              +1
                                              Как я уже ответил baxtep2:

                                              Несовпадение границ тайлов google и yandex происходит из-за различия в проекции
                                              В google — меркатор на сферу, в yandex — на эллипсоид.
                                              При отображении небольших областей достаточно просто сдвинуть тайл яндекса относительно гугл:

                                              1. Находим географические к-ты левого верхнего угла гугл-тайла.
                                              Lon = ((xG)-zoom/2)/(zoom/360)
                                              Lat = ((yG)-zoom/2)/-(zoom/(2*PI))
                                              Lat = (2*arctan(exp(Lat))-PI/2)*180/PI
                                              где zoom — масштаб 0..24
                                              xG,yG — к-ты пикселя верхнего левого угла гугл-тайла.

                                              2. Находим к-ты пикселя на яндекс-карте соответствующие найденным выше географическим к-там, для этого можно воспользоваться:

                                              z = sin(Lat*deg)
                                              c = (PixelsAtZoom]/(2*Pi))
                                              x = round(PixelsAtZoom/2+Lon*(PixelsAtZoom/360)) //x можно не считать, он будет таким же как у гугл, смещение идет только по широте.
                                              y = round(PixelsAtZoom/2-c*(ArcTanh(z)-exct*ArcTanh(exct*z))
                                              где
                                              PixelsAtZoom — размер всей карты в пикселях на нужном масштабе (256,512,1024 итд).
                                              Lat,Lon — соответственно широта и долгота
                                              exct — эксцентриситет эллипсоида, равен sqrt(radiusa*radiusa-radiusb*radiusb)/radiusa;
                                              где sradiusa=6378137
                                              sradiusb=6378137

                                              3. Находим к-ты яндекс-тайла:
                                              xT = x div 256 //опять же, необязательно, x будет совпадать с гугл.
                                              yT = y div 256
                                              по этим к-ам загружаем яндекс-тайл:
                                              sat01.maps.yandex.net/tiles?l=sat&v=1.8.0&x=&y=&z=;
                                              где zoom — масштаб 0..24
                                              4. Находим смещение яндекс-тайла относительно гугл-тайла:
                                              dx = x mod 256
                                              dy = y mod 256
                                              где x,y — к-ты пикселя полученные на 2м шаге.
                                              Все. Теперь достаточно вывести тайлы полученные на шаге 3 со смещением, полученным на шаге 4, относительно тайлов google.
                                                0
                                                Опубликовал это как пробную первую статью: shuisky.habrahabr.ru/blog/60508/

                                                Если у вас или других пользователей есть вопросы, задавай там. Можно списком. По возможности ответим.
                                                _______________________
                                                Разработчики SAS.Планета

                                              0
                                              maps.obana.info — тут уже все сделано так, что бы можно было одни и те же места из разных карт можно было просматривать
                                                0
                                                да согласен, но нет как раз того, что я сделал там нет.

                                                (космоснимки от Live.com, а названия улиц от Google.com)
                                                0
                                                Скрестить бы вместе гугловые, майкрософтоские и яндексовские карты… Ижевск, например, в хорошем разрешении есть только в яндексе, а в гугле лишь местами.
                                                  0
                                                  ижевск хорошо проработан на дижитал глобе
                                                  0
                                                  Хохо, нашёл дом своей бабушки :)
                                                    0
                                                    Привет Тамбову! Почти родной город :-)
                                                      0
                                                      Очень старые фотки, у нас уже три тысячи раз все поменялось )
                                                        –1
                                                        ниасилил трактат, но аффтар наверно не видел программы SAS.Планета — погугли, посмотри )
                                                          0
                                                          последняя строчка трактата
                                                          «UPD: Уже после написания, я узнал о программе SASGIS, в которой все это уже реализовано… „
                                                          0
                                                          Уже давно пользуюсь программой SASGIS — очень выручает (да и просто интересно мир посмотреть). А благодаря возможности выбора карт и слоев — для меня лучше, чем Google Earth. Особенно пригодилась, когда на майские праздники в Казань ездил.

                                                          Просто дома загрузил карту области (выделенный фрагмент) с нужной мне детализацией (8-18), а уже на месте работал с кэшем.

                                                          Большой плюс в том, что я в сети Яндекса (Яндекс.Локальная сеть). Соответственно, загрузка карт и дополнительных слоев с него идет очень быстро.
                                                            0
                                                            Хм, ГИС это конечно интересно. ТОлько вот мой город обрезан на Гуглозёме, а на других сервисах — фотографии низкого разрешения.
                                                              0
                                                              Хммм…
                                                              Спасибо большое, хоть посмотрел, как выглядело Митино лет 8 назад. Карты на live настолько старые, что страшно становится
                                                                +1
                                                                все зависит от места. Не забывайте, что Земля гораздо больше чем Московская область…
                                                                Снимок Тамбова вполне свежий, а других вообще нет ни на одном сервисе
                                                                0

                                                                Only users with full accounts can post comments. Log in, please.