如何用NetTopologySuite 2.5.0计算平方米单位的多边形面积?
问题原因及解决方案
核心问题
你直接计算的是WGS84(EPSG:4326)地理坐标系下的度数平方面积,并非平面平方米。WGS84是经纬度坐标系,单位为度,Area方法返回的是球面坐标的度数平方值,因此数值极小,完全不符合实际面积。
两种解决方法
方法1:转换到投影坐标系计算
地理坐标系的经纬度需要转换为平面投影坐标系(如UTM、当地国家坐标系),这类坐标系的单位是米,计算出的面积即为平方米。
以你的坐标(墨尔本附近)为例,对应的UTM分区是55S,EPSG代码为32755,步骤如下:
- 引入必要的NuGet包:
NetTopologySuite.CoordinateSystems和NetTopologySuite.CoordinateSystems.Transformations - 实现坐标转换并计算面积:
using NetTopologySuite.CoordinateSystems; using NetTopologySuite.CoordinateSystems.Transformations; using NetTopologySuite.Geometries; // 创建WGS84地理坐标系 var wgs84 = GeographicCoordinateSystem.WGS84; // 创建UTM 55S投影坐标系(EPSG:32755) var utm55S = ProjectedCoordinateSystem.WGS84_UTM(55, true); // 创建坐标转换器 var transformFactory = new CoordinateTransformationFactory(); var transformation = transformFactory.CreateFromCoordinateSystems(wgs84, utm55S); // 转换多边形到投影坐标系 var ply1Projected = (Polygon)GeometryTransform.Transform(ply1, transformation.MathTransform); // 计算平方米面积 double areaInSquareMeters = ply1Projected.Area;
方法2:直接计算球面面积
如果不想转换坐标系,可以用NetTopologySuite内置的GeodesicCalculator直接计算WGS84几何的球面面积,结果单位为平方米:
using NetTopologySuite.Geometries; // 计算球面面积(平方米) double areaInSquareMeters = GeodesicCalculator.CalculateArea(ply1);
结果验证
用方法2计算你的多边形,结果大概在750平方米左右,符合郊区房产的面积范围。
内容的提问来源于stack exchange,提问作者Petras
相关产品推荐
相关产品推荐

