Openlayers 3计算长度和面积

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 = ‘km2‘;
                        } else {
                            unit = ‘m2‘;
                        }

说明:直接使用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 = ‘km2‘;
                        } else {
                            unit = ‘m2‘;
                        }

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

时间: 2024-10-11 20:49:52

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

OpenLayers测量距离和面积

<!DOCTYPE html> <html> <head> <title>测量距离和面积</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta name="viewport" content="width=device-width, initial-s

HDU 1255 覆盖的面积 (求矩形面积的交)

覆盖的面积 Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Description 给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积. Input 输入数据的第一行是一个正整数T(1<=T<=100),代表测试数据的数量.每个测试数据的第一行是一个正整数N(1<=N<=1000),代表矩形的数量,然后是N行数据,每一行包含四个浮点数,代表平面上的一个

OpenLayers 之 视图(View) 详解

初始化一幅地图,必备的三要素之一就是视图(view),这个对象主要是控制地图与人的交互,如进行缩放,调节分辨率.地图的旋转等控制.也就是说每个 map对象包含一个 view对象部分,用于控制与用户的交互. 主要介绍 view 的作用和用法,并分析商用的地图应用中的相关的功能.功能的具体的实现与如何进行定制和优化,就超过了这篇文章的范围了. view 类的定义可以在 GitHub 的 OpenLayers 项目中的 这里 看到,我就不贴大篇幅的代码了,只是针对特定的点贴一下核心代码,需要看完整源码

OpenLayers中长度测量和面积测量等功能的实现

功能要求如下:要求能在给定地图上测量长度和面积.此处实现主要是调用Openlayers接口实现. 一.界面设置 在HTML界面中设置好测量按钮的布局,代码如下图所示: <divclass="measureoptions"> <input type="button"id="measureButton" onClick="measureClick()" checked="false" valu

popup随鼠标移动,OpenLayers.Control.Measure测量距离

之前需要做一个测量距离的工具,于是查了OpenLayers.Control.Measure,量算过程通过调用事件处理器 Handler 实现在 vector 图层上的距离或面积的量算. 这里做的是距离量算,点击之后会弹出popup(OpenLayers.Popup),效果是点击之后出现增加popup计算出之前几个点之间的距离,并删掉前面的popup(并没有做出向百度那样随鼠标移动变化距离的效果). 调用方法MeasurePath();就可以查看效果啦 1 var measurePopup = n

HUD 1255——覆盖的面积(线段树+面积并多次+离散化)

覆盖的面积 Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 3756    Accepted Submission(s): 1846 Problem Description 给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积. Input 输入数据的第一行是一个正整数T(1<=T<=100),代表测试数据的数量.每个测试数

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

1.Geoserver与OpenLayers的下载 Geoserver:http://geoserver.org/ OpenLayers:http://openlayers.org/ 2.安装部署Geoserver 环境:jdk 1.7,geoserver-2.5 配置:修改geoserver-2.5/ect/jetty.xml 的端口为8089,避免端口冲突. <Call name="addConnector"> <Arg> <New class=&qu

OpenLayers 3 入门教程

OpenLayers 3 入门教程摘要OpenLayers 3对OpenLayers网络地图库进行了根本的重新设计.版本2虽然被广泛使用,但从JavaScript开发的早期发展阶段开始,已日益现实出它的落后. OL3已运用现代的设计模式从底层重写. 最初的版本旨在支持第2版提供的功能,提供大量商业或免费的瓦片资源以及最流行的开源矢量数据格式.与版本2一样,数据可以被任意投影.最初的版本还增加了一些额外的功能,如能够方便地旋转地图以及显示地图动画. OpenLayers 3同时设计了一些主要的新功

要求用户输入宽和高,显示出长方形的面积。

import java.util.Scanner; /** * @author 蓝色以太 * 要求用户输入宽和高,显示出长方形的面积. */ public class Area { public static void main(String[] args) { Scanner sc=new Scanner(System.in); System.out.println("请输入长度:"); double length=sc.nextDouble(); System.out.printl