2012-03-19 25 views
0

私はOpenLayersの新機能で、しばらくの間はGoogle Mapsを使用していましたが、よりオープンなものに切り替えることを望みます。私がここで見た他の質問にオンラインで見てきた例から、私はこの基本的な地図にポイントをつけました:http://pastie.org/3625219OpenLayers - ポイント移動の緯度/経度を取得する

私は移動後のポイントの緯度/経度を取得したいと思いますそれ。私が抱えている問題は、投影を900913から4326に変換することです。変換のために試したすべてが空白に戻ります。

私は何か基本的なものが欠けていると確信しています... Javascriptは私の母国語ではありません。任意のポインタが評価されるだろう。

答えて

3

x座標とy座標を別々に変換する必要はありません。フィーチャまたはフィーチャのジオメトリのクローンを作成し、ジオメトリを変換する必要があります。例:

point_transformed = feature.clone().geometry.transform(epsg900913, epsg4326); 

コードhereを参照してください。

+0

それでした!ありがとうございました! –

0

@scottBこのコードは、各レイヤーの正しい変換を識別する方法を示しています。 openlayersで動作する投影法は、openstreetmaps(これはmercator球面投影法)で自動的には機能しないかもしれません。

私は2つのことを達成することができるように私はthis example from openlayersを適応:マーカ位置の緯度と経度保存

  1. をOpenLayersをクリックすることにより、マーカーが

    <!DOCTYPE html> 
    <html xmlns="http://www.w3.org/1999/xhtml" debug="true"> 
        <head> 
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"> 
        <meta name="apple-mobile-web-app-capable" content="yes"> 
        <title>MousePosition Control</title> 
        <link rel="stylesheet" href="http://openlayers.org/dev/theme/default/style.css" type="text/css"> 
        <link rel="stylesheet" href="http://openlayers.org/dev/examples/style.css" type="text/css"> 
        <script src="../OpenLayers.js"></script> 
        <script type="text/javascript"> 
         var map; 
         function init(){ 
          var map = new OpenLayers.Map('map'); 
          var proj4326 = new OpenLayers.Projection("EPSG:4326"); 
          var projmerc = new OpenLayers.Projection("EPSG:900913"); 
          var layerOSM = new OpenLayers.Layer.OSM("Street Map"); 
          map.addLayers([layerOSM]); 
          if (!map.getCenter()) map.zoomToMaxExtent(); 
          map.events.register("mousemove", map, function(e) { 
           var position = this.events.getMousePosition(e); 
           OpenLayers.Util.getElement("coords").innerHTML = 'MOUSE POSITION '+position; 
           var lonlat = map.getLonLatFromPixel(this.events.getMousePosition(e)); 
           OpenLayers.Util.getElement("lonlatTG").innerHTML = 'lonlat => '+lonlat; 
           var lonlatTransf = lonlat.transform(map.getProjectionObject(), proj4326); 
           OpenLayers.Util.getElement("lonlatTrans").innerHTML = 'lonlatTransf => '+lonlatTransf; 
           OpenLayers.Util.getElement("lonlatDouble").innerHTML = 'lonlat => '+lonlat; 
          }); 
    
          map.events.register("click", map, function(e) { 
           var position = this.events.getMousePosition(e); 
           var icon = new OpenLayers.Icon('http://maps.google.com/mapfiles/ms/icons/red-pushpin.png'); 
           var lonlat = map.getLonLatFromPixel(position); 
           var lonlatTransf = lonlat.transform(map.getProjectionObject(), proj4326); 
           alert ('lonlatTrans=> lat='+lonlatTransf.lat+' lon='+lonlatTransf.lon+'\nlonlat=>'+lonlat+'\nposition=>'+position); 
           var lonlat = lonlatTransf.transform(proj4326, map.getProjectionObject()); 
           var markerslayer = new OpenLayers.Layer.Markers("Markers"); 
           markerslayer.addMarker(new OpenLayers.Marker(lonlat, icon)); 
           map.addLayer(markerslayer); 
          }); 
          map.addControl(new OpenLayers.Control.LayerSwitcher()); 
         } 
        </script> 
        </head> 
    
        <body onload="init()"> 
        <h1 id="title">MousePosition Control</h1> 
        <div id="tags">coordinate</div> 
        <p>Click on map and create marker</p> 
        <div id="map" class="smallmap"></div> 
        <div id="coords"></div> 
        <div id="lonlatTG"></div> 
        <div id="lonlatTrans"></div><br/> 
        <p> 
        see how, even though we did NOT transform [lonlat], 
        <br/>it was nevertheless transformed 
        </p> 
        <div id="lonlatDouble"></div> 
    
        </body> 
    </html> 
    
をマップ
  • 場所を

    このsimpで使用されているようなLonLatのTRANSFORMメソッドについて知っておく必要があるものがあります例:[.transform(projection1、projection2)]をLonLatに適用すると、すべてのLonLatオブジェクトが変換されます。

    特定のコマンドの順番で遊んでみると、私の言いたいことが分かります。

  • 関連する問題