2016-05-31 11 views
0

Ich versuche, eine Google Maps Map mit Hilfe der Google Maps API eine WMS-Ebene hinzuzufügen. Ich konnte es erfolgreich den folgenden Code mit einem Fliesen WMS-Ebene tun mit:Einzelkachel WMS-Layer auf Google Maps api v3

var tileSize = new google.maps.Size(256, 256); 

var options = { 
    'getTileUrl': googleGetTileUrlFunction, 
    'tileSize': tileSize, 
    'isPng': true 
}; 

var googleWMSLayer = new google.maps.ImageMapType(options); 

Wo googleGetTileUrlFunction eine Funktion, die die Koordinaten und Zoom in Parametern nimmt und gibt eine URL an die WMS Anfrage.

Ich muss jedoch eine weitere Ebene zu der gleichen Karte hinzufügen, in der die Ebene ein einzelnes Bild ist, anstelle von Kacheln. Da ich in Google Maps API kein Objekt für eine WMS-Ebene mit nur einer Kachel finden konnte, habe ich versucht, eine gekachelte Karte zu erstellen, deren Kacheln die Größe des Darstellungsbereichs hatten. Ich am Ende mit diesem Ergebnis:

enter image description here

Es ist offensichtlich immer noch gefliest, und es ist nicht richtig zentriert. Gibt es eine Möglichkeit, das Google Maps-API zu zwingen, eine einzelne Kachel an einer bestimmten Position aus einer WMS-Anforderung zu ziehen?

EDIT: Hier ist ein Vergleich der Schicht WMS gemacht von Google Maps im Vergleich zu dem Bild, das durch die WMS Anfrage zurückgegeben: enter image description here Das WMS Bild perfekt mit der Karte ausgerichtet ist, Sie an der Ostküste zu sehen ist deutlich zu sehen, . Ich suche nach einer Möglichkeit, das Bild im Ansichtsfenster mit der Google Maps API anzuzeigen.

Antwort

0

Ground overlays löste mein Problem. Soweit ich weiß, zeigen sie ein Bild an bestimmten Koordinaten auf der Karte an.

Statt eine google.maps.ImageMapType schaffen, erstelle ich eine neue Boden-Overlay:

var overlay = new google.maps.GroundOverlay(
    url, 
    imageBounds 
); 

overlay.setMap(gmap); 

url die URL meiner WMS Anfrage und imageBounds ist eine Aufgabe, die Koordinaten für jede Seite des Bildes beschreibt.

Jedes Mal, wenn ich die Karte schwenken oder vergrößern, entferne ich die vorherige Überlagerung und ersetze sie durch eine neue Anforderungs-URL, wobei der Begrenzungsrahmenparameter (BBOX) das Darstellungsfenster der Karte ist.

Damit dies funktioniert, musste ich sowohl das Overlay als auch die Funktion, die meine WMS-URL generiert, in Variablen speichern, auf die in der Funktion zugegriffen werden kann, die Map-Panning-Ereignisse verarbeitet.

Ich habe immer noch ein paar kleinere Projektionsprobleme zu beheben, aber das sieht nach einem gültigen Weg aus.

EDIT: Ich habe tatsächlich ein benutzerdefiniertes Overlay gemacht, um mein Projektionsproblem zu beheben. Es gibt ein Tutorial hier: https://developers.google.com/maps/documentation/javascript/customoverlays