2009-11-04 12 views
6

これは初めてのstackoverflowで、Openlayers & Google Mapsで作業しています。OpenLayers Googleマップ投影問題(KML付き)

私は、問題を解決するために、OpenLayers.orgを含む異なるフォーラム&サイトを参照しています。私は、次の組み合わせの検索を行った:openlayers、Googleマップの投影法、球形のmercator ...しかし、私は解決策を見つけていない。

問題:Webサービスコール(func setDataSource)のKMLデータが、マップをズームイン/ズームアウトするときにシフトしています。私の推測では、私のコードの予測が間違っているか、間違っていると思われます。 :-(オンラインマッピングの用語を消化することは困難であるので、私は地図投影上の任意のバックグラウンドを持っていない。誰かが助けることはできますか?

//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); 

ありがとう!!!

+3

[GIS.stackexchange.com](http://gis.stackexchange.com/)での男の子と女の子は、おそらく次回にお手伝いする方が簡単でしょう。 – DefenestrationDay

+0

多分あなたはこのポブレムで私を助けることができます [OpenLayersをGoogleマップフチ] [1] [1]:http://stackoverflow.com/questions/29120583/how-to-remove-countries-borders-from-a-google- map-integrated-in-opnelayers –

答えて

7

を、私はこの問題を考え出した。代わりに、 GMLの、私はこのような代わりのベクターを使用してみました:

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 
       }) 
      }) 
     });  

私はこの日時計の例では、解決策を見つけた:http://openlayers.org/dev/examples/sundials-spherical-mercator.htmlを希望:-)これは同じ問題/ wの誰にも役立ちます。

+1

私は同様の問題がありました。最新のOpenLayersバージョンに切り替えると、「投影」をどこに置くべきか分からず、KMLファイルがすべて(0,0)座標に崩壊した。この答えは私のためにそれを解決しました、ありがとう。 –

関連する問題