免费视频|新人指南|投诉删帖|广告合作|地信网APP下载

查看: 2211|回复: 9
收起左侧

[经验共享] 根据经纬度计算多边形面积

[复制链接]

88

主题

3345

铜板

3

好友

高级工程师

Rank: 9Rank: 9Rank: 9

积分
735
发表于 2017-7-27 16:54 | 显示全部楼层 |阅读模式
计算方法比较简单,主要是求出多边形外接矩形已米为单位面积和已经纬度为单位面积比值,然后用这个比值乘以多边形经纬度为单位面积,即可得出这个多边形以米为单位面积。

double GetArea(constvector<Coordinate>&ls)
{
    if(ls.size() < 4)
       return0;

    double sum =0;

    for (size_ti=0; i<ls.size()-1; ++i)
    {
       const Coordinate& p = ls[i];
       constCoordinate& q = ls[i+1];
       sum += (p.x + q.x) * (q.y - p.y);
    }

    returnsum/2;
}

double GetPrjArea(constvector<Coordinate>&ls)
{
    if(ls.size() < 4)
       return0;

    double dArea= GetArea(ls);
    dArea =abs(dArea);
    if (dArea ==0)
       return0;

    double xmin,ymin, xmax, ymax;
    xmin = xmax= ls[0].x;
    ymax = ymin= ls[0].y;

    for (size_ti=1; i<ls.size(); ++i)
    {
       constCoordinate& p = ls[i];
       xmin =min(xmin, p.x);
       ymin =min(ymin, p.y);
       xmax =max(xmax, p.x);
       ymax =max(ymax, p.y);
    }

    Coordinatep1, p2;
    p1.x =xmin;
    p1.y =(ymin+ymax)/2;
    p2.x =xmax;
    p2.y =(ymin+ymax)/2;
    double dx =GetPrjDistance(p1, p2);

    p1.x = p2.x= xmin;
    p1.y =ymin;
    p2.y =ymax;
    double dy =GetPrjDistance(p1, p2);
    dy *=dx;

    dx =(xmax-xmin)*(ymax-ymin);
    dy /=dx;
    dArea *=dy;
    returndArea;
}

做了简单的测试,用此方法计算出来的面积和投影变换后计算的面积误差大约为1/1000,基本上满足一些要求精度不是很高的应用。


评分

参与人数 2威望 +20 铜板 +95 收起 理由
jimi21 + 20 + 80 感谢分享!
dean0218 + 15 好贴好报!

查看全部评分

141

主题

982万

铜板

3万

好友

管理员

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

积分
621916
发表于 2017-7-27 16:56 | 显示全部楼层
回复

使用道具 举报

21

主题

7878

铜板

12

好友

地信名人堂

Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19

积分
748

爱心勋章组织勋章地信元老灌水勋章荣誉会员勋章活跃勋章地信专家组VIP勋章贡献勋章名人堂勋章成就学员勋章

发表于 2017-7-27 19:56 | 显示全部楼层
:zt
回复

使用道具 举报

21

主题

7878

铜板

12

好友

地信名人堂

Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19

积分
748

爱心勋章组织勋章地信元老灌水勋章荣誉会员勋章活跃勋章地信专家组VIP勋章贡献勋章名人堂勋章成就学员勋章

发表于 2017-7-27 19:56 | 显示全部楼层
这用的C#写的吧
回复 支持 反对

使用道具 举报

5

主题

8454

铜板

13

好友

高级工程师

Rank: 9Rank: 9Rank: 9

积分
705
发表于 2017-7-28 07:11 | 显示全部楼层
谢谢分享                                          
回复 支持 反对

使用道具 举报

0

主题

1005

铜板

4

好友

工程师

Rank: 7Rank: 7Rank: 7

积分
421
发表于 2017-7-28 08:00 | 显示全部楼层
这个程序的后缀名是什么?
回复 支持 反对

使用道具 举报

0

主题

2万

铜板

3

好友

地信院士

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

积分
2086
发表于 2017-7-28 09:54 | 显示全部楼层
高手高手高高手
回复 支持 反对

使用道具 举报

104

主题

7425

铜板

105

好友

版主

一往无前

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

积分
3549

官方团队名人堂勋章

QQ
发表于 2017-7-28 17:04 | 显示全部楼层

{:soso__3669389859068460655_4:}
回复 支持 反对

使用道具 举报

10

主题

1万

铜板

19

好友

资深会员

Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

积分
3722
发表于 2021-11-13 21:39 | 显示全部楼层
感谢分享!
回复

使用道具 举报

30

主题

2万

铜板

59

好友

钻石会员

Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26

积分
6290
QQ
发表于 2022-1-14 19:54 | 显示全部楼层
谢谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

在线客服
快速回复 返回顶部 返回列表