2011-02-28 175 views
0
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    <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>Drag Feature Example</title> 

     <link rel="stylesheet" href="../theme/default/style.css" type="text/css" /> 
     <link rel="stylesheet" href="style.css" type="text/css" /> 
     <style type="text/css"> 
      #controls { 
       width: 512px; 
      } 
      #controlToggle { 
       padding-left: 1em; 
      } 
      #controlToggle li { 
       list-style: none; 
      } 
     </style> 

     <script src="../OpenLayers.js"></script> 
     <script type="text/javascript"> 
      var map, vectors, controls; 
      function init(){ 
       map = new OpenLayers.Map('map'); 
       var wms = new OpenLayers.Layer.WMS("OpenLayers WMS", 
        "http://vmap0.tiles.osgeo.org/wms/vmap0?", {layers: 'basic'}); 

       vectors = new OpenLayers.Layer.Vector("Vector Layer"); 

       map.addLayers([wms, vectors]); 
       map.addControl(new OpenLayers.Control.LayerSwitcher()); 
       map.addControl(new OpenLayers.Control.MousePosition()); 
     //map.addControl(new OpenLayers.Control.Click()); 

       controls = { 
        point: new OpenLayers.Control.DrawFeature(vectors, 
           OpenLayers.Handler.Point), 

        line: new OpenLayers.Control.DrawFeature(vectors, 
           OpenLayers.Handler.Path), 
        polygon: new OpenLayers.Control.DrawFeature(vectors, 
           OpenLayers.Handler.Polygon), 
        drag: new OpenLayers.Control.DragFeature(vectors) 
       }; 

       for(var key in controls) { 
        map.addControl(controls[key]); 
      // map.addControl(click); 
      } 

       map.setCenter(new OpenLayers.LonLat(0, 0), 3); 
       document.getElementById('noneToggle').checked = true; 
      } 

      function toggleControl(element) { 
       for(key in controls) { 
        var control = controls[key]; 
        if(element.value == key && element.checked) { 
         control.activate(); 
        } else { 
         control.deactivate(); 
        } 
       } 
      } 
     </script> 
    </head> 
    <body onload="init()"> 
     <h1 id="title">Drag Feature Example</h1> 

     <div id="tags"> 
      point, line, linestring, polygon, digitizing, geometry, draw, drag 
     </div> 

     <p id="shortdesc"> 
      Demonstrates point, line and polygon creation and editing. 
     </p> 

     <div id="map" class="smallmap"></div> 

     <div id="controls"> 
      <ul id="controlToggle"> 
       <li> 
        <input type="radio" name="type" value="none" id="noneToggle" 
          onclick="toggleControl(this);" checked="checked" /> 

        <label for="noneToggle">navigate</label> 
       </li> 
       <li> 
        <input type="radio" name="type" value="point" id="pointToggle" onclick="toggleControl(this);" /> 
        <label for="pointToggle">draw point</label> 
       </li> 
       <li> 
        <input type="radio" name="type" value="line" id="lineToggle" onclick="toggleControl(this);" /> 

        <label for="lineToggle">draw line</label> 
       </li> 
       <li> 
        <input type="radio" name="type" value="polygon" id="polygonToggle" onclick="toggleControl(this);" /> 
        <label for="polygonToggle">draw polygon</label> 
       </li> 
       <li> 
        <input type="radio" name="type" value="drag" id="dragToggle" 
          onclick="toggleControl(this);" /> 

        <label for="dragToggle">drag feature</label> 
       </li> 
      </ul> 
     </div> 

     <div id="docs"></div> 
    </body> 
</html> 

我想在文本框中顯示每次單擊鼠標的緯度和長度。我無法理解我應該從哪裏得出經緯度?如何使用Openlayers從此代碼顯示經度和緯度?

+0

你見過這個例如:http ://openlayers.org/dev/examples/click.html? (他們有很多例子http://openlayers.org/dev/examples/ – 2011-02-28 09:41:57

+0

我有,我想弄清楚這個代碼,LATLONG到底在哪裏,我想了解這個代碼 – Hick 2011-02-28 09:43:31

回答

6

這是你所需要的:

map.events.register("click", map, function(e) { 
    var position = map.getLonLatFromPixel(e.xy); 

    OpenLayers.Util.getElement("mydiv").innerHTML = 
     position.lon.toFixed(3) + ', ' + position.lat.toFixed(3); 

}); 

你可以在這裏看到代碼工作:http://jsbin.com/uyuka6

所以,你的代碼看起來:

function init(){ 

     var map, vectors, controls; 
     map = new OpenLayers.Map('map'); 
     var wms = new OpenLayers.Layer.WMS("OpenLayers WMS", 
     "http://vmap0.tiles.osgeo.org/wms/vmap0?", {layers: 'basic'}); 

     vectors = new OpenLayers.Layer.Vector("Vector Layer"); 

     map.addLayers([wms, vectors]); 
     map.addControl(new OpenLayers.Control.LayerSwitcher()); 
     map.addControl(new OpenLayers.Control.MousePosition()); 
     //map.addControl(new OpenLayers.Control.Click()); 

     map.events.register("click", map, function(e) { 
     var position = map.getLonLatFromPixel(e.xy); 

     OpenLayers.Util.getElement("shortdesc").innerHTML = 
      position.lon.toFixed(3) + ', ' + position.lat.toFixed(3); 

     }); 

     controls = { 
      point: new OpenLayers.Control.DrawFeature(vectors, 
      OpenLayers.Handler.Point), 

      line: new OpenLayers.Control.DrawFeature(vectors, 
      OpenLayers.Handler.Path), 
      polygon: new OpenLayers.Control.DrawFeature(vectors, 
      OpenLayers.Handler.Polygon), 
      drag: new OpenLayers.Control.DragFeature(vectors) 
     }; 

     var poly = controls['polygon'].handler; 
     poly.callbacks.point = function(point){ 
      OpenLayers.Util.getElement("docs").innerHTML = point.toString(); 
     }; 

     var line = controls['line'].handler; 
     line.callbacks.point = function(point){ 
      OpenLayers.Util.getElement("docs").innerHTML = point.toString(); 
     }; 

     for(var key in controls) { 
      map.addControl(controls[key]); 
      // map.addControl(click); 
     } 

     map.setCenter(new OpenLayers.LonLat(0, 0), 3); 
     document.getElementById('noneToggle').checked = true; 
} 
+0

它的不工作 – Hick 2011-02-28 09:58:20

+0

@mekasperasky什麼是不工作?你應該將以前的代碼添加到你的init()函數中(在'control'初始化變量之後) – 2011-02-28 10:06:08

+0

你可以用你的編輯來重新發布代碼嗎?問,它是關閉其他鼠標事件像點或線 – Hick 2011-02-28 10:11:22