2009-11-04 11 views
6

Dies ist mein erstes Mal auf Stackoverflow und arbeiten mit Openlayers & Google Maps.OpenLayers Google Maps Projection Problem w/KML

Ich habe verschiedene Foren & Websites einschließlich OpenLayers.org durchsucht, um mein Problem zu lösen. Ich habe Suchen auf einer Kombination der folgenden durchgeführt: openlayers, google Kartenprojektionen und sphärischer Mercator ... aber ich habe keine Lösung gefunden.

Problem: Die KML-Daten von einem Web-Service-Aufruf (func setDataSource) verschiebt, wie ich in der Karte ein- und auszoomen. Meine Vermutung ist, dass die Projektionen in meinem Code falsch oder vielleicht falsch platziert sind. Ich habe keinen Hintergrund auf der Karte Projektionen, so dass es schwierig ist ein Online-:-(Mapping Terminologie zu verdauen. Kann mich jemand helfen?

//start here 
    var options = { 
    projection: new OpenLayers.Projection("EPSG:900913"), 
    displayProjection: new OpenLayers.Projection("EPSG:4326"), 
    units: "m", 
    numZoomLevels: 18, 
       maxResolution: 156543.0339, 
       maxExtent: new OpenLayers.Bounds(-20037508, -20037508, 
               20037508, 20037508)}; 

    //*map = new OpenLayers.Map('map'); 

    map = new OpenLayers.Map('map', options); 

    var gphy = new OpenLayers.Layer.Google(
      "Google Street", 
    {'sphericalMercator':true}); 

    // Add the background images via WMS 
    var bglayer = new OpenLayers.Layer.WMS("OpenLayers WMS", 
       "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'}, {'reproject': true}); 

    //map.addLayer(bglayer); 
    map.addLayers([gphy, bglayer]); 
    map.addControl(new OpenLayers.Control.LayerSwitcher()); 

    map.zoomToMaxExtent(); //* Zoom all the way out, this command also initalizes the map 
    OpenLayers.Console.log("initialized"); 
    } 

function setDataSource() { 
OpenLayers.Console.log("Setting data source to " + OpenLayers.Util.getElement('loc').value); 
if (layer != undefined) {map.removeLayer(layer)}; 
if (selectControl != undefined) {map.removeControl(selectControl)}; 

// Encode the destination url as a parameter string. 
var params = OpenLayers.Util.getParameterString({url:OpenLayers.Util.getElement('loc').value}) 

// Make the http request to the transformer, with the destination url as a parameter. 
layer = new OpenLayers.Layer.GML("KML", transformerURL + params, 
      { 
      format: OpenLayers.Format.KML, 
      formatOptions: { 
      extractStyles: true, 
      extractAttributes: true, 
    maxDepth: 2, 

    //projection: new OpenLayers.Projection("EPSG:4326"), 
      } 
      }); 
    map.addLayer(layer); 

Thank you !!!

+3

Die Jungs und Mädchen über [GIS.stackexchange.com] (http://gis.stackexchange.com/) würde es wahrscheinlich einfacher finden, Ihnen beim nächsten Mal zu helfen .. – DefenestrationDay

+0

vielleicht können Sie mir mit diesem Problem helfen [Openlayers Google Map Borders] [1] [1]: http://stackoverflow.com/questions/29120583/how-to-remove-countries-borders-from-a-google- map-integrated-in-opnelayers –

Antwort

7

mir das Problem gelöst. Stattdessen von GML, habe ich versucht, Vektor stattdessen wie folgt aus:

layer = new OpenLayers.Layer.Vector("KML", { 
      projection: map.displayProjection, 
      strategies: [new OpenLayers.Strategy.Fixed()], 
      protocol: new OpenLayers.Protocol.HTTP({ 
       url: transformerURL + params, 
       format: new OpenLayers.Format.KML({ 
        extractStyles: true, 
        extractAttributes: true 
       }) 
      }) 
     });  

ich die Lösung in diesem Sonnenuhren Beispiel gefunden: http://openlayers.org/dev/examples/sundials-spherical-mercator.html :-) Hoffe, das jemand w/das gleiche Problem hilft.

+1

Ich hatte ein ähnliches Problem. Nachdem ich auf die neueste Version von OpenLayers umgestiegen war, wusste ich nicht, wo ich 'projection' platzieren sollte und ohne sie waren meine KML-Dateien alle auf die (0,0) Koordinate reduziert. Diese Antwort hat es für mich gelöst, danke. –