2 y8qwer y8qwer 于 2015.05.09 17:11 提问

arcgis利用经纬度计算多边形面积

你好 请问一直多个点的经纬度怎么计算这些点围成的面积,我用的是WGS84坐标系。
我计算出来的面积是0.00012,但是没有单位,不知道如何让他显示成平方米
数据如下:
30.5948166666666 122.1237166666660
30.5943666666666 122.1201500000000
30.5942833333333 122.1199666666660
30.5940833333333 122.1181833333330
30.5938666666666 122.1174166666660
30.5937333333333 122.1172833333330
30.5921833333333 122.1183333333330
30.5913833333333 122.1200333333330
30.5910333333333 122.1210000000000
30.5910666666666 122.1213166666660
30.5914500000000 122.1219166666660
30.5917500000000 122.1226833333330
30.5918166666666 122.1232666666660
30.5925000000000 122.1221000000000
30.5929333333333 122.1216666666660
30.5933500000000 122.1213500000000
30.5939000000000 122.1215333333330
30.5942333333333 122.1218333333330
30.5947333333333 122.1236333333330

2个回答

hanhan__666
hanhan__666   2015.05.15 21:59

计算方法比较简单,主要是求出多边形外接矩形已米为单位面积和已经纬度为单位面积比值,然后用这个比值乘以多边形经纬度为单位面积,即可得出这个多边形以米为单位面积。

double GetArea(const vector& ls)
{
if (ls.size() < 4)
return 0;

double sum = 0;

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

return sum/2;

}

double GetPrjArea(const vector &ls)
{
if (ls.size() < 4)
return 0;

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

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

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

Coordinate p1, 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;
return dArea;

}

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

hanhan__666
hanhan__666   2015.05.15 22:00

计算方法比较简单,主要是求出多边形外接矩形已米为单位面积和已经纬度为单位面积比值,然后用这个比值乘以多边形经纬度为单位面积,即可得出这个多边形以米为单位面积。

double GetArea(const vector& ls)
{
if (ls.size() < 4)
return 0;

double sum = 0;

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

return sum/2;

}

double GetPrjArea(const vector &ls)
{
if (ls.size() < 4)
return 0;

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

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

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

Coordinate p1, 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;
return dArea;

}

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!