2010-06-24 6 views
1

В настоящее время мне удалось интегрировать OpenStreetMap в API Карт Google, как описано в this example. Интересно, могу ли я также интегрировать Bing Maps плитки в API Карт Google. Является ли это возможным? Я ничего не мог с этим поделать.Интеграция Bing Maps в API Карт Google

Примечание: Я знаю о mapstraction, но на данный момент я хотел бы придерживаться API Карт Google.

Заранее спасибо.

+0

Я не знаю ни одного из продуктов напрямую, но моя догадка не лишена каких-либо нарушений в лицензировании кого-то. – msw

ответ

7

На основании примера OpenStreetMap, который вы указали, я бы сказал, что это возможно, но это может быть довольно сложной задачей. Я бы настоятельно советовал ему, так как пример OSM использует версию 2 API Google и теперь официально устарел.

Но если вы хотите попробовать, я бы адаптировал пример OSM, чтобы указать на плитки Bing и убедиться, что свойство tileUrlTemplate соответствует формату Bing для хранения плиток. К сожалению, Bing использует quad tree format, в то время как Google использует coordinate based format для хранения плит и доступа к ним через URL. Важно понимать различия, если вы собираетесь сделать пример работы, поэтому обязательно загляните в ссылки на документацию выше. Кроме того, MapTiler имеет fantastic visualization различных форматов плитки. Я нашел это бесценным.

Лично я бы использовал OpenLayers. Поскольку Bing и Google используют сферический меркатор, добавление нескольких источников плитки на одну карту - тривиальное упражнение. Пример Here.

+1

+1 для OpenLayers - независимый API, с доступом к данным Google, Bing, OSM и Yahoo – geographika

+4

Еще один ключевой момент в пользу OpenLayers; использование Bing/Google/OSM через OL * не нарушает ни один из API *; Использование плиток Bing в GMaps делает. –

1
function TileToQuadKey (x, y, zoom){ 
    var quad = ""; 
    for (var i = zoom; i > 0; i--) { 
    var mask = 1 << (i - 1); 
    var cell = 0; 
    if ((x & mask) != 0) cell++; 
    if ((y & mask) != 0) cell += 2; 
    quad += cell; 
    } 
    return quad; 
} 

var bingMapType = new google.maps.ImageMapType({ 
    name: "Bing", 
    getTileUrl: function(coord, zoom) { 
    // this returns aerial photography 
    return "http://ecn.t1.tiles.virtualearth.net/tiles/a" + 
     TileToQuadKey(coord.x, coord.y, zoom) + ".jpeg?g=1173&n=z"; 
     // i dont know what g=1173 means 
    }, 
    tileSize: new google.maps.Size(256, 256), 
    maxZoom: 21 
}); 
+0

Это не принесет максимальных результатов из CDN (поскольку вы используете только сервер t1, в то время как он использовался, чтобы быть сбалансированным, изменяющимся на четырехкассетной клавиатуре). И, как описано в предыдущих комментариях, это невозможно сделать из-за нарушения Условий использования. –

+0

Правильно, вы можете пойти как «ecn.t» + (Math.floor (Math.random() * 3) +1) + '. Плитки' и делать это только в том случае, если у вас есть соответствующая лицензия – ryanmonk

Смежные вопросы