zoukankan      html  css  js  c++  java
  • 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 = '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求绝对值。

  • 相关阅读:
    LDAP 总结
    关于OpenLDAPAdmin管理页面提示“This base cannot be created with PLA“问题. Strong Authentication Required问题
    PHP 7.0 5.6 下安裝 phpLDAPadmin 发生错误的修正方法
    ldap、additional info: no global superior knowledge
    ldap安装配置过程中遇到的错误,以及解决方法
    转: LDAP有啥子用? 用户认证
    Mac 安装 brew
    go test 单元函数测试
    haproxy httpcheck with basic auth
    architecture and business process modelling
  • 原文地址:https://www.cnblogs.com/w-wanglei/p/6538054.html
Copyright © 2011-2022 走看看