编程统计各类土地利用类型的面积和实现点最临近分析+黄岸峰+09343065.docx
- 文档编号:22890665
- 上传时间:2023-04-28
- 格式:DOCX
- 页数:14
- 大小:566.16KB
编程统计各类土地利用类型的面积和实现点最临近分析+黄岸峰+09343065.docx
《编程统计各类土地利用类型的面积和实现点最临近分析+黄岸峰+09343065.docx》由会员分享,可在线阅读,更多相关《编程统计各类土地利用类型的面积和实现点最临近分析+黄岸峰+09343065.docx(14页珍藏版)》请在冰豆网上搜索。
编程统计各类土地利用类型的面积和实现点最临近分析+黄岸峰+09343065
编程统计各类土地利用类型的面积和实现点最临近分析
地理科学与规划学院
09测绘黄岸峰09343065
前言:
众所周知,ARCGIS软件是我们地理信息系统专业学生经常使用的一款软件,其功能强大,不仅是一个制图工具,还可以实现对地理现象的分析、统计、预测、模拟等多方面的要求。
要熟练的操作该款软件,不仅要有一定的理论知识,更要了解软件内部实现各部分功能的代码。
学期刚开学,老师就强化我们对ARCGIS的操作,还经常要求同学上去演示。
这学期我一共做了三个操作:
聚类分析、海岸线分维数的研究、点最临近分析。
这次我打算将最后一个操作再结合一些自己平时编程模拟ARCGIS软件部分功能的程序作为作业上交。
程序简介:
当我们需要统计一幅土地利用类型图上所有类型的总面积以及各类型的面积时,我们可以在ARCGIS软件里面对该图像的属性表进行统计,从而得出所要的答案。
在这里我将编程实现ARCGIS的这个功能。
虽然速度比不上使用ARCGIS,但是毕竟属于自己努力的结果。
程序第一部分将实现对一幅ARCGIS导出的raster图像的再现。
首先是在ARCGIS里面打开该图像,读取该文件的TXT文件,然后重采样后显示出来,再统计各类型的面积以及所有类型总面积,并将结果写入文件中。
在ARCGIS里面打开原图,如下:
上图是东莞2009年土地利用类型图,源文件里面并没有统计各类型用地的面积,因此我们可以用编程来试试。
使用ARCTOOLBOX里面的CONVERSION里面的FROMRASTERTOASCII工具条就可以导出该RASTER图像的TXT文件:
设置如下:
经过上面步骤就可以得到这次编程要使用的数据,为方便起见,将其命名为1.txt。
这次使用的数据包括:
东莞2009年土地利用类型图
东莞各城镇分布图
以及它们导出的TXT文件
我们跳过代码,运行程序得到原图缩小九倍后重采样的图像:
颜色有点不一致是因为编程的时候随机给每类分配了颜色。
接着查看我们对以上各种土地利用类型面积以及总面积的统计结果:
通过上网查询,我们可以知道东莞面积就在2475.72km2左右,说明此结果的可信性。
下面我们实现点最临近分析:
首先查看一下我们的数据:
上面的数据是东莞32各镇包括另外几个地方的坐标数据。
我们将其显示在图上,为了更加明显,这里把上次加载的土地利用类型的图去掉,显示如下:
然后计算出这么多点两两之间的最临近的一个点,并画线标注出来:
上面是计算后的结果。
连线之间的两点是相比其他点距离是最近的。
为了检验计算结果的正确性,我们可以做如下处理:
通过画圆,我们通过观察圆内是否只有一个点来进行判断。
图中圆分为几种类型,一种是彼此互为最近点画的对称圆,一种是彼此距离不是最近的不对称的圆。
由此可知结果的正确性。
总结:
通过上面实验,我们可以知道通过编程也可以处理一定的问题。
当然使用封装好的软件进行处理是最好的选择,但是为了更了解其原理,我们可以自己进行编程处理。
这样子,可以增强编程能力,也能提高对该类问题的理解。
附件:
编程环境:
vc++6.0(附带图形库)
代码如下:
#include"graphics.h"
#include"conio.h"
#include"stdio.h"
#include"time.h"
#include"math.h"
#include"stdlib.h"
#include"fstream"
#include"iostream"
usingnamespacestd;
intcol,row;
inti,j;
floatsize;
doublexl,yl;
int**array;
intmain()
{
chars[12][40];
doublep[70];
ofstreamofile;
ofile.open("result.txt");
ifstreaminfile("C:
\\Users\\GIS\\Desktop\\新建文件夹\\1.txt",ios:
:
in);
//////////////////////////////////////////读取文件头等信息//////////////////////////////////////////////////
for(i=0;i<12;i++)
{
infile>>s[i];
}
col=atoi(s[1]);
row=atoi(s[3]);
size=atof(s[9]);
xl=atof(s[5]);
yl=atof(s[7]);
/////////////////////////////////////////使用二维数组存储图像信息///////////////////////////////////////////
int**array=newint*[row];
for(i=0;i { array[i]=newint[col]; for(j=0;j { infile>>array[i][j]; if(array[i][j]==-9999) array[i][j]=10; } } //读取图像文件 initgraph(col/3,row/3); //初始化画图窗口 ////////////////////////////////////////////重采样并画图,缩小九倍显示/////////////////////////////////// for(i=0;i { for(j=0;j { if(array[i][j]==0) { putpixel(j/3,i/3,LIGHTBLUE); } elseif(array[i][j]==1) { putpixel(j/3,i/3,LIGHTGREEN); } elseif(array[i][j]==2) { putpixel(j/3,i/3,LIGHTRED); } elseif(array[i][j]==3) { putpixel(j/3,i/3,YELLOW); } elseif(array[i][j]==4) { putpixel(j/3,i/3,MAGENTA); } elseif(array[i][j]==5) { putpixel(j/3,i/3,BLUE); } elseif(array[i][j]==6) { putpixel(j/3,i/3,CYAN); } elseif(array[i][j]==7) { putpixel(j/3,i/3,LIGHTGRAY); } elseif(array[i][j]==8) { putpixel(j/3,i/3,GREEN); } elseif(array[i][j]==9) { putpixel(j/3,i/3,LIGHTBLUE); } else { putpixel(j/3,i/3,WHITE); } } } //抽样画图 /////////////////////////////////////////统计各地类面积/////////////////////////////////////// doublearea[10]; for(i=0;i<10;i++)area[i]=0.0; for(i=0;i { for(j=0;j { switch(array[i][j]) { case0: area[0]+=size*size;break; case1: area[1]+=size*size;break; case2: area[2]+=size*size;break; case3: area[3]+=size*size;break; case4: area[4]+=size*size;break; case5: area[5]+=size*size;break; case6: area[6]+=size*size;break; case7: area[7]+=size*size;break; case8: area[8]+=size*size;break; case9: area[9]+=size*size;break; } } } /////////////////////////////////////////读取点文件//////////////////////////////////////////// ifstreamifile("C: \\Users\\GIS\\Desktop\\新建文件夹\\3.txt",ios: : in); for(i=0;i<70;i++) { ifile>>p[i]; } cleardevice(); setcolor(RED); for(i=0;i<70;i++) { circle((p[i]-xl)/size/3,row/3-(p[i+1]-yl)/size/3,2); } //////////////////////////////////计算所有点两两之间最短距离并画线///////////////////////////////// doublemin,temp; intflag; for(i=0;i<=68;i=i+2) { min=sqrt((p[i]-p[i+2])*(p[i]-p[i+2])+(p[i+1]-p[i+3])*(p[i+1]-p[i+3])); for(j=0;j<=68;j=j+2) { if(i! =j) { temp=sqrt((p[i]-p[j])*(p[i]-p[j])+(p[i+1]-p[j+1])*(p[i+1]-p[j+1])); if(temp<=min) { min=temp; flag=j; } } } line((p[i]-xl)/size/3,row/3-(p[i+1]-yl)/size/3,(p[flag]-xl)/size/3,row/3-(p[flag+1]-yl)/size/3); //circle((p[i]-xl)/size/3,row/3-(p[i+1]-yl)/size/3,min/size/3);//加上此句可检验正确性 } Sleep(5000); ///////////////////////////////////将结果写入文件/////////////////////////////////////////////////// ofile<<"landusetypearea"< doublesum=0.0; for(i=0;i<10;i++) { sum=sum+area[i]; ofile<<""< } ofile<<"totalarea"<<""< //统计面积 ofile.close;//关闭文件 getchar(); closegraph(); return0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编程 统计 各类 土地利用类型 面积 实现 临近 分析 黄岸峰 09343065