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求绝对值。

原文地址:https://www.cnblogs.com/w-wanglei/p/6538054.html