2016-07-20 6 views
-1

Ich habe mit folgendem Problem herausgefordert. Ich habe eine Google-Karte, ich verwende benutzerdefinierte Überlagerung über alle Kacheln. Karte funktioniert einwandfrei im Browser, aber für jeden Punkt von Interesse muss ich ein Bild mit Marker auf einer anderen Seite präsentieren. Um dies zu erreichen, verwenden die meisten Leute die Google Static Map-API , aber diese wird nicht unterstützt mit benutzerdefinierten Kachel-Overlay (weil es das Overlay im Bild nicht wiedergeben kann). Leider sieht es nach der Suche aus wie statische Karten, die benutzerdefinierte Kartentypen nicht unterstützt.Konvertieren Sie benutzerdefinierte Google Map in ein Bild

Kann mir jemand auf eine richtige Richtung zeigen, wie ich dieses Problem angehen kann? Wie kann ich Google Map als Bild speichern, ohne statische Map API zu verwenden? Mein Overlay sieht so aus:

function service (map, opts) { 
     opts = opts||{}; 
     opts.size = +opts.size || 512; 

     if(!mapType){ mapType = createStyle(opts); } 

     map.mapTypes.set('aaa', mapType); 
     map.setMapTypeId('aaa'); 

     return this; 
    } 

    function createStyle(opts){ 
     return new google.maps.ImageMapType({ 
      getTileUrl: function(coord, zoom) { 
       zoom--; 
       var normalizedCoord = getNormalizedCoord(coord, zoom); 
       if (!normalizedCoord) { return; } 

       var url = [ 
        'http://someUrl.com/api/MapTiles', 
        opts.tileVersion || 10030, 
        opts.size, 
        zoom, 
        normalizedCoord.x, 
        normalizedCoord.y, 
       ].join("/"); 

       return url; 
      }, 
      tileSize: new google.maps.Size(opts.size, opts.size), 
      maxZoom: 19, 
      minZoom: 14, 
      radius: 1738000, 
      name: 'aaa' 
     }); 
    } 

function getNormalizedCoord(coord, zoom) { 
     var y = coord.y; 
     var x = coord.x; 
     var tileRange = 1 << zoom; 

     if (y < 0 || y >= tileRange) { 
      return null; 
     } 

     if (x < 0 || x >= tileRange) { 
      x = (x % tileRange + tileRange) % tileRange; 
     } 
     return {x:x, y:y}; 
    } 

Hoffe, das hilft.

+0

Was funktioniert nicht? –

+0

Wie kann ich Google Map mit benutzerdefinierten Overlay als Bild speichern, ohne statische Map API? – Tatarin

+0

Generiert es kein Canvas-Element? Ich bin mir nicht sicher, aber, wenn es Ihnen helfen könnte http://stackoverflow.com/questions/10673122/how-to-save-canvas-as-an-image-with-canvas-todatururl –

Antwort

0

Wenn Sie den Prozess automatisieren müssen, der das Bild erzeugt, kann Ihnen ein Tool wie PhantomJS helfen, ein Skript zu schreiben, das automatisch einen Screenshot einer Webseite erstellt (die Sie mit der Google Maps JavaScript API erstellt haben).

http://phantomjs.org/screen-capture.html

+0

Ich werde es untersuchen, ich brauche das nicht für die Automatisierung. Das ist mehr, als dass man keine Millionen Screenshots für jeden Marker auf meiner Karte braucht – Tatarin

Verwandte Themen