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

5个回答

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

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,基本上满足一些要求精度不是很高的应用

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

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,基本上满足一些要求精度不是很高的应用

在arcgis中导入上述点,生成point类型的shp文件,之后使用arctoolbox中的 点 转 面 工具,转化为面文件,选择一种投影方式对面文件进行投影(经纬度是球面坐标,需要先转换为平面投影坐标),之后在arcgis中就可以直接量测面积,或者将面积直接存储到属性表中了。

思想就是将地理坐标系转为投影坐标系,地理坐标系的单位是【度】,投影坐标系一般是【米】。方法看到楼上已经给出了,没有做验证,可以去尝试下。

很简单 用arcgis导入进去后,设置图层数据框 单位为米 然后添加字段计算面积就可以实现 记得选平方米

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐