openlayers5.3.0实现根据选择的图形来统计图形总面积

<html lang="en">
  <head>
      <meta charset="utf8">
    <link rel="stylesheet" href="./css/ol.css" type="text/css">
    <style>
      .map {
        height: 100%;
        width: 100%;
        position: relative;
      }
      #area{
        top:10px;
        right: 60px;
		    height:30px;
		    width:120px;
		    text-align:center;
		    font-weight: bold;
		    display:none;
        position: fixed; 
        z-index: 999;
        border-style:none;
        background-color:transparent;
        font-family: STZhongsong;
      }
	    #btn{
	      width:150px;
	      top:10px;
        right: 300px;
	      height:30px;
	      background-color: #FFFFF0; 
        position: fixed; 
        z-index: 999;
        font-family: STZhongsong;
	  }
    </style>
    <script src="./build/ol.js"></script>
    <title>OpenLayers example</title>
  </head>
  <body>
    <div id="map" class="map"> 
        <div>
            <input id="area" type="text" value="0万平方公里" /> 
           <button id="btn" type="button" onclick=show()>选择要素统计面积</button>
        </div>
    </div>
   
   
  <script type="text/javascript">
    var vector=new ol.layer.Vector({
       source:new ol.source.Vector({
         url:'./data/geojson/countries.geojson',
           format:new ol.format.GeoJSON()
         })
    });
    var tilelayer= new ol.layer.Tile({
            source: new ol.source.OSM()
          });
         
    var map = new ol.Map({
        target: 'map',
        layers: [
        tilelayer,vector
        ],
        view: new ol.View({
        projection: 'EPSG:4326',
         center:[117,42],
          zoom: 4   
        })
      });
    var select=new ol.interaction.Select({
        condition:ol.events.condition.click,
		    toggleCondition:ol.events.condition.click
    });

	  var oBtn=document.getElementById("btn");
	  var flag=false;
  	var arr=[];
	  var sum=0;
	  function show(){
	    flag=!flag;
	    if(flag){
		    oBtn.style.backgroundColor='#F0F8FF'
	    	document.getElementById("area").style.display="block";
		    map.addInteraction(select);
        sum=0;
        document.getElementById("area").value=parseInt(sum,10)+'万平方公里';	  
	    }
	    else{
	      oBtn.style.backgroundColor='#FFFFF0'
	      document.getElementById("area").style.display="none";
	      map.removeInteraction(select);
		    select.getFeatures().clear();
        arr=[];
        sum=0;
	    }
	  }
	 
   
    select.on('select',function(eve){
      if(eve.deselected.length>0){
        var deselectFeature=eve.deselected;
        for(var i=0;i<deselectFeature.length;i++){
            var deselectArea= deselectFeature[i].getGeometry().getArea();
			      for(var i=0;i<arr.length;i++){
			        if(arr[i]==deselectArea){
				      arr.splice(i,1);
              console.log(arr)
              sum=0;
			        }
			      }
          } 
      }
      else{  
        var selectFeature =eve.selected;
        for(var i=0;i<selectFeature.length;i++){
            var selectArea=selectFeature[i].getGeometry().getArea();
            arr.push(selectArea);
            sum=0;
        }	
      } 
      for(var i=0;i<arr.length;i++){
	      sum=sum+arr[i];
	    }	
      console.log(sum)
	document.getElementById("area").value=parseInt(sum,10)+'万平方公里';	  
     });
    </script>
  </body>
</html>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenLayers是一种用于Web地图应用程序的JavaScript库,它提供了丰富的功能和工具来实现地图的可视化展示和交互。而GeoJSON是一种基于JavaScript对象表示法(JSON)的地理空间数据格式,它可以用来描述地理要素和属性。 要使用OpenLayers根据GeoJSON绘制图形,我们可以按照以下步骤进行: 1. 引入OpenLayers库和相关的样式表文件到我们的HTML页面中。 2. 创建一个包含地图的容器元素。例如,可以在HTML中创建一个div元素,并给它一个唯一的id作为标识。 3. 使用JavaScript代码来初始化地图。首先,我们需要创建一个地图对象,并指定它的目标容器为前面创建的容器元素。然后,我们可以设置地图的视图和图层。 4. 创建一个矢量图层,用于显示我们的GeoJSON数据。我们可以使用OpenLayers提供的ol.layer.Vector类来创建一个矢量图层。 5. 通过Ajax获取或直接赋值一个包含GeoJSON数据的JSON对象。 6. 创建一个数据源对象,用于加载GeoJSON数据。我们可以使用OpenLayers提供的ol.source.Vector类来创建一个数据源对象,并传入我们的GeoJSON数据。 7. 创建一个要素对象,将其添加到数据源对象中,然后将数据源对象添加到矢量图层中。 8. 将矢量图层添加到地图中。 通过以上步骤,我们就可以使用OpenLayers根据GeoJSON数据绘制图形了。这些图形可以是点、线或面等地理要素。在绘制完成后,我们还可以根据需要设置图形的样式、交互操作、弹出窗口等其他功能。 值得注意的是,OpenLayers还提供了许多其他功能和方法,可以帮助我们对地图进行更多的操作和自定义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值