首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用DotSpatial计算具有WGS坐标的多边形的面积?

使用DotSpatial计算具有WGS坐标的多边形的面积?
EN

Stack Overflow用户
提问于 2017-09-11 23:42:27
回答 2查看 919关注 0票数 1

计算面积:

代码语言:javascript
复制
var coordinates = new List<Coordinate> {
    new Coordinate(55, 35),
    new Coordinate(55, 35.1),
    new Coordinate(55.1, 35.1),
    new Coordinate(55.1, 35),
};
Console.WriteLine(new Polygon(coordinates).Area); // ~0.01

计算是正确的,因为它发生在正交坐标系中。

但是如何标记坐标在WGS中呢?

EN

回答 2

Stack Overflow用户

发布于 2017-09-12 22:19:41

这项任务似乎比我预想的要复杂得多。我在google groups上发现了这个有用的讨论

首先我们需要建立投影系统,这是最适合我们的区域,我们需要计算面积。例如,您可以使用UTM zones

代码语言:javascript
复制
using DotSpatial.Projections;
using DotSpatial.Topology;
public static double CalculateArea(IEnumerable<double> latLonPoints)
{
    // source projection is WGS1984
    var projFrom = KnownCoordinateSystems.Geographic.World.WGS1984;
    // most complicated problem - you have to find most suitable projection
    var projTo = KnownCoordinateSystems.Projected.UtmWgs1984.WGS1984UTMZone37N;

    // prepare for ReprojectPoints (it's mutate array)
    var z = new double[latLonPoints.Count() / 2];
    var pointsArray = latLonPoints.ToArray();

    Reproject.ReprojectPoints(pointsArray, z, projFrom, projTo, 0, pointsArray.Length / 2);

    // assemblying new points array to create polygon
    var points = new List<Coordinate>(pointsArray.Length / 2);
    for (int i = 0; i < pointsArray.Length / 2; i++)
        points.Add(new Coordinate(pointsArray[i * 2], pointsArray[i * 2 + 1]));

    var poly = new Polygon(points);
    return poly.Area;
}
票数 2
EN

Stack Overflow用户

发布于 2018-07-24 10:03:57

您可以直接从IGeometry或从Feature.Geometry获取区域。此外,您还需要重复第一个坐标来闭合多边形。

代码语言:javascript
复制
FeatureSet fs = new FeatureSet(FeatureType.Polygon);

Coordinate[] coord = new Coordinate[]
{
    new Coordinate(55, 35),
    new Coordinate(55, 35.1),
    new Coordinate(55.1, 35.1),
    new Coordinate(55.1, 35),
    new Coordinate(55, 35)
};

fs.AddFeature(new Polygon(new LinearRing(coord)));

var area = fs.Features.First().Geometry.Area;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46159499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档