Наложение API Карт Google 3, необходимо получить прогноз - PullRequest
1 голос
/ 21 ноября 2010

Я пытаюсь наложить на Google Maps.Я сгенерировал плитки моего изображения с помощью maptiler, но пример, сгенерированный maptiler, относится к v2, и я хочу использовать v3.Пример, сгенерированный maptiler, также очень сложен и выполняет некоторые ненужные операции с непрозрачностью.Теперь v3 GM сильно изменился по сравнению с v2, и у меня есть некоторые проблемы для генерации LatLng определенной точки на экране.getProjection () остается неопределенным, что бы я ни делал, есть идеи, как получить проекцию?

<script> 
  var mapBounds = new google.maps.LatLngBounds();
  var mapMinZoom = 8;
  var mapMaxZoom = 14;
  var overlay;

  var maptiler = new google.maps.ImageMapType({
    getTileUrl: function(coord, zoom) {
          if ((zoom < mapMinZoom) || (zoom > mapMaxZoom)) {
        return "none.png";
      } 
      var ymax = 1 << zoom;
      var y = ymax - coord.y -1;
      var tileBounds = new google.maps.LatLngBounds(
        overlay.getProjection().fromDivPixelToLatLng( new google.maps.Point( (coord.x)*256, (coord.y+1)*256 ) , zoom ),
        overlay.getProjection().fromDivPixelToLatLng( new google.maps.Point( (coord.x+1)*256, (coord.y)*256 ) , zoom )
      );
      if (mapBounds.intersects(tileBounds)) {
        return "" + zoom + "/" + coord.x + "/" + (Math.pow(2,zoom)-coord.y-1) + ".png";
      } else {
       return "none.png";
      }
   },
   tileSize: new google.maps.Size(256, 256),
   isPng: true
  });

  var map;
  function initialize() {
    map = new google.maps.Map(document.getElementById("map_canvas"));
    map.setZoom(11);
    map.setMapTypeId('satellite');
    mapBounds.extend(new google.maps.LatLng(50.9388615939, 3.80480816501));
    mapBounds.extend(new google.maps.LatLng(51.4402541425, 4.73612507791));
    map.fitBounds(mapBounds);

    overlay = new google.maps.OverlayView();
    overlay.draw = function() {};
    overlay.setMap(map);

    map.overlayMapTypes.insertAt(0, maptiler);
  }
</script> 

часть наложения - это хак, который я нашел в интернете и который должен был привести вас к проекции.к сожалению, это не сработало.Любые идеи, как это исправить?в V2 вы могли бы сделать что-то вроде этого:

var mercator = new GMercatorProjection()
mercator.fromPixelToLatLng( new GPoint( (tile.x)*256, (tile.y+1)*256 ) , zoom )

Но это невозможно в v3.

Кто-нибудь, кто может помочь?

Пример, сгенерированный maptilerможно найти здесь:

http://gmapsexample.staging1.kunstmaan.be/googlemapsv2.html

Это простой пример в v3, который работает:

http://gmapsexample.staging1.kunstmaan.be/googlemapsv3_simple.html

, но я хочу все, кромекарта должна быть определенного цвета, поэтому вот пример, который я пытаюсь заставить работать:

http://gmapsexample.staging1.kunstmaan.be/googlemapsv3.html

спасибо,

Daan

Ответы [ 3 ]

1 голос
/ 02 июня 2011

Вам не нужно беспокоиться о получении или настройке проекции, если вы используете MapTiler

Эти два видео YouTube проведут вас (среди прочего) с помощью MapTiler с Google Maps API v3, стилизованной под картуопределенный цвет, который (если я правильно понимаю) именно то, о чем вы спрашиваете:

0 голосов
/ 18 ноября 2014

Попробуйте это как функцию Mercator:

function GMercatorProjection() {
  this.pixelOrigin_ = new google.maps.Point(tileSize / 2, tileSize / 2);
  this.pixelsPerLonDegree_ = tileSize / 360;
  this.pixelsPerLonRadian_ = tileSize / (2 * Math.PI)
}
0 голосов
/ 27 декабря 2010

Проверьте документацию о пользовательских оверлеях в API3 https://code.google.com/apis/maps/documentation/javascript/overlays.html#CustomOverlays

...