OpenLayers3 学习心得(五)——测量

测量是GIS系统中一个比较实用的小工具,使我们可以粗略的观察两个目标点的距离,粗略的测量一个面的面积。例如我们要从地铁口到附近的公交站通过直线测距就能方便的知道我们步行的距离(太远就打车哈哈),对于规划地块审批人员通过面积测量就能很快的知道规划的面积与提交审批的面积是否相同等。

1核心方法

Ol3的几何类提供了相应的方法,LineString.getLenth()和Polygon.get getArea() 返回的结果单位默认为m。

2实现方法

a)        启动绘图

通过ol提供的绘图方法,实现用户的交互,动态显示测量的轨迹。

b)        绘图开始

开始后创建一个记录<li/>用于保存测量的结果,并通过变量sketch保存绘制图形的Feature(要素):

draw.on('drawstart',function(evt){
        sketch=evt.feature;
        sketchElement=document.createElement('li');
        var outputList=document.getElementById('measureOutput');

        if(outputList.childNodes){
            outputList.insertBefore(sketchElement,outputList.firstChild)
        }
        else{
            outputList.appendChild(sketchElement);
        }
    });

c)        绘图结束

结束清除本次测量的缓存:

draw.on('drawend',function(evt){
        sketch=null;
        sketchElement=null;
    });

d)        计算测量大小

通过鼠标移动事件,实时获取用户绘制图形的长度或面积大小:

var mouseMoveHandler=function(evt){
    if(sketch){
        var output;
        var geom=(sketch.getGeometry());
        if(geom instanceof ol.geom.Polygon){
            output=formateArea(geom);
        }
        else if(geom instanceof  ol.geom.LineString){
            output=formateLength(geom);
        }
        sketchElement.innerHTML=output;
    }
}

格式化为长度和面积的函数:

var formateLength=function(line){
    var length=Math.round(line.getLength()*100)/100;
    var output;
    if(length>100){
        output=(Math.round(length/1000*100)/100)+' '+'km';
    }
    else{
        output=(Math.round(length*100)/100)+' '+'m';
    }
    return output;
};
var formateArea=function(polygon){
    var area=polygon.getArea();
    var output;
    if(area>10000){
        output=(Math.round(area/100000*100)/100)+' '+ 'km<sup>2</sup>';
    }
    else{
        output=(Math.round(area*100)/100)+' '+'m<sup>2</sup>';
    }
    return output;
};

运行结果


写在最后,系列的源码下载地址:

http://download.csdn.net/detail/xiaohou66/8179759

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值