本文主要是介绍openlayer的测量面积公式的改进,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
问题来源:
首先要注意到Polygon内可能含有内部线性环,所以在计算时需要减去环的面积,同时也会有MultiPolygon的存在。所以对之前的公式进行修改。
公式代码:
formatArea: function(polygon) {var wgs84Sphere = new ol.Sphere(6362790); //6378137,取该值为了跟sql对应6362789.8747if(polygon instanceof ol.geom.Polygon){ //单var coordinates = polygon.getLinearRing(0).getCoordinates();var area = Math.abs(wgs84Sphere.geodesicArea(coordinates));var len = polygon.getLinearRingCount();if(len>1){ //有内部环for(var i =1;i<len;i++){var temp = Math.abs(wgs84Sphere.geodesicArea(polygon.getLinearRing(i).getCoordinates()));area -= temp;}}return (area * 0.0015).toFixed(6) + ' ' + '亩(mu)';}else{ //多var polygons =polygon.getPolygons();var area = 0;for(var i=0,len=polygons.length;i<len;i++){var coordinates = polygons[i].getLinearRing(0).getCoordinates(); area+= Math.abs(wgs84Sphere.geodesicArea(coordinates));var temp = polygons[i].getLinearRingCount();if(temp>1){ //有内部环for(var j =1;j<temp;j++){area -= Math.abs(wgs84Sphere.geodesicArea(polygons[i].getLinearRing(j).getCoordinates()));}}}return (area * 0.0015).toFixed(6) + ' ' + '亩(mu)';}},
补充:
要注意的误区是,有人可能贪方便,直接用getArea来处理,但由于单位为°,所以几何实体的的面积单位也会变成度的平方,这时或许有人想借助每度平均对应的米来生成真实面积,但大家要注意一个问题,每个纬度都不一样,对于精细测量,这个做法由于误差太大而偏差过多,所以只能通过球体解决。
这篇关于openlayer的测量面积公式的改进的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!