OpenLayers5在EPSG:4326投影坐标系下测量长度和面积
ol/sphere里有getLength()和getArea()可以用来测量距离和区域面积,默认的投影坐标系是EPSG:3857, 其中有个options的参数,可以设置投影坐标系。使用时, 可以先把几何图形转换成‘EPSG:3857 ’的投影方式,然后再使用getLength和getArea。也可以设置options参数,下面是代码:
//地图使用的是EPSG:4326投影坐标系
/**
* 格式化长度输出
* @param {module:ol/geom/LineString~LineString} line The line.
* return {string} The formatted length.
*/
var formatLength = function (line) {
var sourceProj = map.getView().getProjection();//获取投影坐标系
//方法1
// var geom = (line.clone().transform(sourceProj, 'EPSG:3857'));
// var length = getLength(geom);
//方法2
var length = getLength(line, {projection: sourceProj/*, radius: 6371008.8*/});
var output;
if (length > 100) {
output = (Math.round(length / 1000 * 100) / 100) +
' ' + '千米';
} else {
output = (Math.round(length * 100) / 100) +
' ' + '米';
}
return output;
};
/**
* 格式化面积输出
* @param {module:ol/geom/Polygon~Polygon}polygon The Polygon.
* @return {string} Formatted area;
*/
var formatArea = function(polygon){
var sourceProj = map.getView().getProjection();//获取投影坐标系
//方法1
// var geom = (polygon.clone().transform(sourceProj, 'EPSG:3857'));
// var area = getArea(geom);
//方法2
var area = getArea(polygon, {projection: sourceProj/*, radius: 6371008.8*/})
var output;
if(area > 10000){
output = (Math.round(area / 1000000 * 100) / 100) + ' ' + 'km<sup>2<sup>';
}else{
output = (Math.round(area * 100) / 100) + ' ' + 'm<sup>2<sup>';
}
return output;
};
转载自:https://blog.csdn.net/guimaxingtian/article/details/85243396