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;
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章