Интеграция плиток Bing Maps в API Карт Google - PullRequest
1 голос
/ 24 июня 2010

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

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

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

Ответы [ 2 ]

7 голосов
/ 25 июня 2010

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

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

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

2 голосов
/ 26 февраля 2013
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
});
...