如何从 OpenLayers.Control.DrawFeature 获取积分返回

2023-11-30

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" debug="true">
  <head>


<title>Mapping project</title>
<link rel="stylesheet" href="default/style.css" type="text/css">
<link rel="stylesheet" href="example/style.css" type="text/css">
<script src="js/jquery-1.8.2.js"></script>
<script src="OpenLayers/OpenLayers.js"></script>
<script type="text/javascript">

  var fromProjection = new OpenLayers.Projection("EPSG:4326");   // Transform from WGS 1984
  var toProjection   = new OpenLayers.Projection("EPSG:900913"); // to Spherical Mercator Projection
  var extent = new OpenLayers.Bounds(85.27004687475169, 27.65583205563965, 85.37218539403848,27.74656781293908).transform(fromProjection,toProjection);

  var position       = new OpenLayers.LonLat(85.322136566277, 27.698144266444).transform( fromProjection, toProjection);
  var zoom           = 13; 
  var map, vectors, drawControls, wkt;
  var c=0; 

    function init(){
       var newLayer = new OpenLayers.Layer.OSM();
       var opt = {restrictedExtent : extent};
        vectors = new OpenLayers.Layer.Vector("Overlayers");

        map = new OpenLayers.Map("map", opt);
        map.addLayer(newLayer, vectors);
        map.addControl(new OpenLayers.Control.LayerSwitcher());
        map.addControl(new OpenLayers.Control.MousePosition());

        // var options = {
        //     hover: true,
        //     onSelect: displayWKT
        // };

        //Defining type of draw controls
        drawControls = {
            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)
        };

        //Controls are add to the map
        for(var key in drawControls) {
            map.addControl(drawControls[key]);
        }
        wkt = new OpenLayers.Format.WKT();

        //Center positiona and height of zoom of the map is set here
        map.setCenter(position, zoom);  


        /*************************This is event register for mouse*******************************/

        map.events.register("click", map, function(e) {



            if(c==1){
              var lonlat = map.getLonLatFromPixel(e.xy).transform(map.getProjectionObject(), fromProjection);
              var lon = lonlat.lon;
              var lat = lonlat.lat;

               $('.form-block').css('display','block');  
               $('#lngval').attr('value',lon);              
               $('#latval').attr('value',lat); 

              var position= new OpenLayers.LonLat(lon,lat).transform( fromProjection, toProjection);
              var markers = new OpenLayers.Layer.Markers( "Markers" );
              map.addLayer(markers);
              markers.addMarker(new OpenLayers.Marker(position));
            }else{
              alert("please select any one control");
            }



      });

      /******************Mouse click events ends here******************************************/

    }

     function toggleControl(element) {
        for(key in drawControls) {
            var control = drawControls[key];
            if(element.value == key) {
                control.activate();
                c=1;
            } else {
                control.deactivate();
            }
        }
    }

    // function displayWKT(feature) {
    //     var str = wkt.write(feature);
    //     // not a good idea in general, just for this demo
    //    // str = str.replace(/,/g, ', ');
    //    // document.getElementById('wkt').innerHTML = str;
    //    $('#wkt').attr('value',"abc");
    // }

    function parseWKT() {
        var element = document.getElementById('wkt');
        var features = wkt.read(element.value);
        var bounds;
        if(features) {
            if(features.constructor != Array) {
                features = [features];
            }
            for(var i=0; i<features.length; ++i) {
                if (!bounds) {
                    bounds = features[i].geometry.getBounds();
                } else {
                    bounds.extend(features[i].geometry.getBounds());
                }

            }
            vectors.addFeatures(features);
            var plural = (features.length > 1) ? 's' : '';
            element.value = 'Feature' + plural + ' added'
        } else {
            element.value = 'Bad WKT';
        }
    }

  </script>


</head>  

  <body onload="init()">
  <?php
    if(isset($_POST['submit']))
    {
      $con = dbConnect();
        $type = $_POST['type'];
        $lng = $_POST['lng'];
        $lat = $_POST['lat'];
        $des = $_POST['des'];

    $sql = "Insert into pointdetails values('null', '$type','$lng,$lat','$des')";
    mysql_query($sql) or die(mysql_error());

  dbClose($con);

}
function dbConnect()
{
      $con = mysql_connect("localhost","root","");
      if (!$con)
      {
        die('Could not connect: ' . mysql_error());
      }
      else
      {
        mysql_select_db("mapping", $con);
        return $con;
      }
}

function dbClose($con)
{
  mysql_close($con);
}



 ?>

  <?php 

        $con = dbConnect();
          $sql = "select * from place";
          $result = mysql_query($sql);

          while($row=mysql_fetch_array($result))
          {
           $options[$row['id']]=$row['name']; 
          }
      //var_dump($options);
    dbClose($con);

     ?>

     <input type="button" value="point" id="pointToggle" name="Draw point" onclick="toggleControl(this);"/>
     <input type="button" value="line" id="lineToggle" name="Draw line" onclick="toggleControl(this);"/>
     <input type="button" value="polygon" id="polygonToggle" name="Draw polygon" onclick="toggleControl(this);"/>
     <p>
   <div class="wrapper">
    <div id="map" class="smallmap"></div>

    <div class="form-block">
      <form action="index.php" method="post"><p>
      <label>Type: </label>

        <select name="type">
            <?php foreach($options as $key=>$value): ?>
            <option value="<?php echo $key; ?>"><?php echo $value; ?></option>
            <?php endforeach; ?>
            </select>
            </p>
            <p>
            <label>Long</label>
            <input type="text" value="" id="lngval" name="lng"></p>
        <p><label>Lat</label>
        <input type="text" value="" id="latval" name="lat"></p>
        <p><label>Describe</label>
        <textarea rows="4" cols="16" name="des"></textarea></p>
        <input type="submit" value="Submit" name="submit">
      </form>

    </div>
    <div>  <textarea rows="4" cols="16" name="wkt" id="wkt"></textarea>
      <p><input type="submit" value="feature" name="feature" onclick="parseWKT();"></p></div>
</div>
  </body>
</html>

上面的程序是获取标记点、多边形等的坐标,并将其以 WKT 格式保存在数据库中。我对这件事完全是初学者。请我需要你的帮助。目前我陷入了获取坐标的困境。当我选择任何控件(例如多边形)时,我将能够在地图中绘制它,但我需要获取所有坐标..我不知道继续..请帮助我......

提前致谢


您只需为每个上的“featureadded”事件添加一个事件处理程序绘图功能控制,然后使用写出特征的几何形状OpenLayers.Format.WKT, 像这样:

for(var key in drawControls) {
  map.addControl(drawControls[key]);

  // register a listener on each control
  drawControls[key].events.register('featureadded', drawControls[key], function(f) {

    // create a WKT reader/parser/writer          
    var wkt = new OpenLayers.Format.WKT();

     // write out the feature's geometry in WKT format
     var out = wkt.write(f.feature);
     console.log(out);
   });
}

示例输出:
多边形((17.71874986589 9.6328123658895,20.53124986589 -10.05468763411,37.93359361589 9.2812498658895,17.71874986589 9.6328123 658895))

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 OpenLayers.Control.DrawFeature 获取积分返回 的相关文章

  • 我们在哪里/什么时候使用 JSON?

    你能告诉我 JSON 有什么用 在 Javascript 和 PHP 中 当我们需要 JSON 方法时 我从以下链接中阅读 但是 我没有获得有关任何项目的 JSON 实现的任何信息 http www json org js html htt
  • 始终滚动 div 元素而不是页面本身

    我有一个带有内部的页面布局 div 包含页面上重要内容的元素 设计的重要部分是 content height 300px width 500px overflow scroll 现在 当包含的文本大于 300px 时 我需要能够滚动它 是否
  • 在 Node.js 中实现服务器发送事件的简单方法?

    我环顾四周 似乎在 Node js 中实现 SSE 的所有方法都是通过更复杂的代码 但似乎应该有一种更简单的方法来发送和接收 SSE 是否有任何 API 或模块可以让这件事变得更简单 这是一个每秒发送一个服务器发送事件 SSE 的 Expr
  • Firebase 模拟器无法促进/运行新功能

    我有三个云功能 其中两个已部署到我的 firebase 项目中 其中一个是我刚刚添加的 我希望在部署之前在本地测试新的功能 但是当我尝试使用它时却无法使用 并且只有两个已部署的功能可用 Firebase 模拟器在端口上运行良好5001 像往
  • JavaScript 中的可选参数

    如果缺少剩余参数 为什么该函数不会抛出错误 showStatistics Mark Teixeira New York Yankees 1st Base 这是定义的函数 function showStatistics name team p
  • 传单圆圈绘制/编辑问题

    我第一次制作传单 并面临绘制圆圈和编辑 更改圆圈位置 的问题 我面临的问题是 编辑 移动 圆从一个位置到另一位置会改变其半径 Note 请尝试在给定的小提琴中在地图顶部创建圆圈 然后通过单击编辑按钮将其移动到底部 如果我在地图的顶部创建圆圈
  • JSSOR - 无法读取未定义的类型属性“currentStyle”

    我正在尝试将 Jssor 滑块实现到我的页面中 但我不断在标题中出现该错误 我的内容是通过 Javascript 动态创建的 如下所示 var slide app createHTML div id inventorySlides null
  • 角度引导手风琴数据绑定问题

    我有 2 个相同型号的下拉菜单 一个位于手风琴内部 另一个位于外部 外部下拉菜单在 2 路数据绑定方面工作良好 但手风琴内部的下拉菜单似乎只有 1 路绑定 换句话说 在 UI 中选择并不会设置模型值 我找到了一个建议here https s
  • 如何在 Angular2 中为表单分配和验证数组

    我的模型 this profile 在 javascript 中有一个属性叫做emails 这是一个数组 email isDefault status 然后我将其定义如下 this profileForm this formBuilder
  • 如何使用 Selenium webdriver 测试对 SVG 对象的点击?

    我正在尝试编写代码来检查单击 SVG 对象的功能 例如此 URL 上的美国州 http www amcharts com svg maps map usa 这可行 但是有更好的方法吗 不需要物理移动鼠标的东西 robert new Robo
  • 如何在正则表达式中区分数字和ip地址?

    例如 如果我们查看 5 56 和 183 55 0 144 基本上 当你做这样的事情时 d d 它匹配 5 56 189 55 和 0 144 有没有办法通过正则表达式仅匹配数字而不匹配 ip 地址的部分 我尝试使用前瞻 但我不知道它应该是
  • Puppeteer 无法在 VPS (DigitalOcean) 上工作

    我在水滴中数字海洋 https www digitalocean com 我收到这个错误 node 5549 UnhandledPromiseRejectionWarning TimeoutError Navigation Timeout
  • AngularJS:ng-show 与 display:none

    我有一个用例 我必须使用 CSS 默认隐藏 HTML 元素 如下所示 HTML div class item div CSS item display none 但是 我需要在页面加载后使用 ng show 切换元素的可见性 如下所示 di
  • 有效地获取下拉列表中的选定选项(XHTML Select 元素)

    背景 使用 XHTML Select 元素的下拉列表中有大量选项 数十个 我需要使用 JavaScript 检索所选选项 Problem 目前我正在使用 jQuery selectedCSS 选择器并且它按预期工作 但这种方法效率不高 因为
  • 从数据库中给定时间起经过的时间

    我有一个 HTML 表 其中包含从数据库中提取的记录 我正在使用 PHP MySQL 我的表中名为 Timer 的列未从数据库中检索 我需要在此处显示经过的时间 从数据库中的特定时间开始 例如 假设现在的时间是2013年2月21日下午6点2
  • Array.indexOf 如何比 Array.some 更高效

    这个问题的灵感来自于这个问题的竞争答案 具有多个参数的indexOf https stackoverflow com questions 39000151 indexof with multiple arguments 用户想知道一种有效的
  • 使用 sockjs 和 stomp 进行 /info 请求期间没有 cookie

    我正在尝试将 Spring Security 与 websockets 一起使用 作为一个例子 我正在使用 spring websocket chat https github com salmar spring websocket cha
  • 关于 Node.js Promise then 和 return?

    我对承诺感到困惑 I use 那么就答应没有返回像这样 new Promise resolve reject gt resolve 1 then v1 gt console log v1 new Promise resolve reject
  • 用于检查字符串是否至少包含 3 个字母数字字符的最有效的正则表达式

    我有这个正则表达式 a zA Z0 9 3 我用它来查看字符串中是否至少包含 3 个字母数字字符 似乎有效 它应该匹配的字符串示例 a3c 0 c 8 9 9d 但是 我需要它更快地工作 有没有更好的方法使用正则表达式来匹配相同的模式 编辑
  • 如何连接/组合两个数组以连接成一个数组?

    我正在尝试将 JavaScript 中的 2 个数组合并为一个 var lines new Array a b c lines new Array d e f 这是一个简单的例子 我希望能够将它们组合起来 这样当读取第二行时 数组中的第四个

随机推荐