C++ Boost Geometry多边形面积结果转平方米方法
Boost.Geometry 面积返回值转平方米的换算方法
问题相关信息
- 定义的Boost.Geometry多边形对象:
boost::geometry::model::polygon<Point> Algorithm::poly
- 面积计算调用代码:
area = bg::area(poly);
- 接口直接返回结果:
1.10434e+08 - 第三方工具测得实际面积:11043㎡
- 文档表述疑问:不理解“面积单位为定义曲面的点所使用单位的平方”的具体含义,需要找到换算方法得到正确的平方米结果。
文档表述解释
bg::area 不会自动做任何单位、坐标系的隐式转换,返回值的单位完全由多边形顶点Point的坐标单位决定,这就是文档表述的实际含义:
- 若点坐标单位为米,返回值单位就是平方米
- 若点坐标单位为厘米,返回值单位就是平方厘米
- 若点坐标为经纬度(角度单位:度),直接返回值单位是平方度,不对应实际物理面积,必须先做投影转换才能得到有物理意义的面积结果。
换算逻辑
当前返回值1.10434e+08和实际值11043㎡的比值约为10000,恰好是100的平方,说明你的Point坐标使用的单位是厘米:
- 长度换算关系:1厘米 = 0.01米
- 面积是长度的二次方,因此面积换算系数为
0.01 * 0.01 = 0.0001
直接给接口返回值乘该系数即可得到平方米结果:
// 坐标单位为厘米时,转平方米的计算代码 double area_square_meter = bg::area(poly) * 0.0001;
代入数值验证:1.10434e+08 * 0.0001 = 11043.4,和第三方工具测得的11043㎡的微小差异来自浮点计算的精度截断,属于正常误差范围。
注意事项
- 后续调用
bg::area前,先确认顶点坐标的实际单位,不要默认接口返回值就是平方米 - 如果顶点存储的是WGS84等地理坐标系的经纬度值,不要直接调用
bg::area计算物理面积,需要先将多边形投影到以米为单位的平面坐标系(比如对应区域的UTM投影、高斯-克吕格投影)后再计算,否则得到的平方度结果无法通过固定线性系数换算为平方米。
内容的提问来源于stack exchange,提问作者Konat Undoshy
相关产品推荐
相关产品推荐

