1.比较粗糙的计算方式

计算长度

var length = lineFeature.getGeometry().getLength();
if (length > 1000) {
length = length / 1000;
unit = 'km';
} else {
unit = 'm';
}

说明:直接使用geom的getLength方法获取长度,openlayers默认的长度单位是m。所有如果长度大于1000,需要转换成km。

计算面积

var area = polygonFeature.getGeometry().getArea();
if (area > 1000000) {
area = area / 1000000;
unit = 'km²';
} else {
unit = 'm²';
}

说明:直接使用geom的getArea方法获取面积,同理如果面积大于1000000,需要转换为km(2)。

2.精准计算

    计算长度

var sphere = new ol.Sphere(6378137);
var lonLatLine = lineFeature.getGeometry().transform(mapProjection, 'EPSG:4326');
var lineCoordinates = lonLatLine.getCoordinates();
var length = 0;
for (var i = 0; i < lineCoordinates.length - 1; i += 1) {
length += sphere.haversineDistance(lineCoordinates[i], lineCoordinates[i + 1]);
}
if (length > 1000) {
length = length / 1000;
unit = 'km';
} else {
unit = 'm';
}

说明:ol.Sphere是一个地形对象,可提供计算精准长度和面积。通过实际地理形状计算,需要把坐标转换为对应坐标系的经纬度,调用geom的transform(projection1, projection2),把投影系1下的坐标转化为投影系2的坐标,例如把墨卡托投影系EPSG:3857(大地坐标)下的坐标转换为EPSG:4236投影系下的坐标(经纬度)。使用Sphere对象的haversineDistance函数计算两个坐标之间的距离。

计算面积

var lonLatPolygon = polygonFeature.getGeometry().transform(mapProjection, 'EPSG:4326');
var area = Math.abs(sphere.geodesicArea(lonLatPolygon.getCoordinates()[0]));
if (area > 1000000) {
area = area / 1000000;
unit = 'km²';
} else {
unit = 'm²';
}

说明:其他不用再多介绍了,主要说下geodesicArea函数,它用来计算多边形的面积,计算出来的面积有正负之分,如果多边形是沿顺时针方向画,面积为正;否则为负。所以需要使用Math.abs求绝对值。

Openlayers 3计算长度和面积的更多相关文章

  1. OpenLayers测量距离和面积

    <!DOCTYPE html> <html> <head> <title>测量距离和面积</title> <meta http-equ ...

  2. Topology and Geometry in OpenCascade-Adapters

    Topology and Geometry in OpenCascade-Adapters eryar@163.com 摘要Abstract:本文简要介绍了适配器模式(adapter pattern) ...

  3. three.js使用gpu选取物体并计算交点位置

    光线投射法 使用three.js自带的光线投射器(Raycaster)选取物体非常简单,代码如下所示: var raycaster = new THREE.Raycaster(); var mouse ...

  4. 聊聊GIS中的坐标系|再版

    本文约6500字,建议阅读时间15分钟. 作者:博客园/B站/知乎/csdn/小专栏 @秋意正寒 版权:转载请告知,并在转载文上附上转载声明与原文链接(https://www.cnblogs.com/ ...

  5. OpenLayers动态测量距离和面积,并可自定义测量的线样式

    全局操作变量 /** * @description 标注弹出框 */ HtmlPopup = null; /** * @description 临时图层类数据源 */ VectorSource = n ...

  6. hdu 1255 覆盖的面积(线段树 面积 交) (待整理)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1255 Description 给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积.   In ...

  7. hdu 1255 覆盖的面积 (线段树处理面积覆盖问题(模板))

    http://acm.hdu.edu.cn/showproblem.php?pid=1255 覆盖的面积 Time Limit: 10000/5000 MS (Java/Others)    Memo ...

  8. Geoserver基本使用、WMS服务发布与OpenLayers测试

    1.Geoserver与OpenLayers的下载 Geoserver:http://geoserver.org/ OpenLayers:http://openlayers.org/ 2.安装部署Ge ...

  9. OpenLayers学习笔记4——使用jQuery UI实现測量对话框

    OpenLayers学习最好的方式就是跟着其自带的演示样例进行学习,另外对web前端的开发设计要了解,慢慢积累,这样在一般的小项目中应该是足够用了. 本篇參照量測demo实现对话框形式的量測,抛砖引玉 ...

随机推荐

  1. C++学习笔记(HelloWorld,类型和值)

    现在有一个从控制台读取输入的小程序: #include "../std_lib_facilities.h" int main() { cout << "Ple ...

  2. pthread_cond_wait和pthread_cond_signal以及互斥变量的使用情况

    #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <pthread.h& ...

  3. 代理ARP

    代理ARP是ARP协议的一个变种. 对于没有配置缺省网关的计算机要和其他网络中的计算机实现通信,网关收到源计算机的 ARP 请求会使用自己的 MAC 地址与目标计算机的 IP地址对源计算机进行应答.代 ...

  4. hive2.3.2安装使用

    hive的安装简单一些,使用也比较简单,基础hadoop搭建好之后,只要初始化一些目录和数据库就好了 安装需要做几件事: 1.设立一个数据源作为元数据存储的地方,默认是derby内嵌数据库,不过不允许 ...

  5. hadoop3.0.0测验

    下载地址: hadoop: http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-3.0.0/ 准备工作: 1.master节点与其他节点需要建 ...

  6. [Python学习]Python学习资料汇总

    Python其实很简单,入门+提高看一些简单的教程就能学会,这里列出一些比较好的资料: 廖雪峰博客 https://www.liaoxuefeng.com/wiki/0014316089557264a ...

  7. Extjs4.x Ext.tree.Panel 过滤Filter以及trigger field的使用

    Extjs4.x中已经取消了组件Ext.Tree.TreeFilter功能,却掉了树形结构的过滤功能,要实现该功能只能自己写了. Tree节点筛选UI很简单,一个Tbar,一个trigger即可解决问 ...

  8. 无法转换json问题 Error: Model.nodeDataArray value is not an instance of Array or NodeList or HTMLCollection

    var jsonobj=eval('('+t+')'); 使用eval 函数,讲后台json字符串转换为前台jsarray数组. 如果使用 ajax不会出现这种情况,因为会自动转换. 但是如果直接从后 ...

  9. librtmp编译for android and ios 不要openssl

    git clone git://git.ffmpeg.org/rtmpdump 不想要openssl 在rtmp.h里面 #undef CRYPTO 编译动态库与静态库只需要修改下面的 #includ ...

  10. 记一次MyEclipse闪退的解决方法

    http://www.th7.cn/Program/java/201408/262487.shtml ———————————————————————————————————————————————— ...