2009年5月4日星期一
展点
在ArcView、CAD、ArcGIS环境中展点方法探讨
前言:
在地理空间数据处理中,时常需要自动展点,包含数量庞大的点位数据获取、预处理、载入、画点、载出。本文以GIS常用的三款软件为例,分析了一下获取点数据以及展点方法,以飨读者。
1ArcView
问题背景:设计一个包含30个点三维坐标的数据文件,导入到ARCVIEW,根据这些数据生成内插网格,并分析得到坡度图和坡向图。
1.1获取X、Y坐标数据
1.2载入生成的XY坐标
步骤其实很简单:打开ESRI=ARCVIEW3.3=点Tables=Add(勾选DelimitedText)浏览到刚才新建的xy坐标.txt,点击OK。完成载入
1.3展点
展点:新建一个View,依次点击view=addEventTheme=table中出现xy_coordinate.txt,对应的XFILEDX;YFILEDY,确定。这一步就是说把刚才新建的30个点数据,x行赋为X,y赋为Y。然后在view中的xy_coordinate.txt打钩就可以显示。这样就已经完成展点。对于展出的点数据可以进行操作,比如空间分析(spatialanalyst)
1.4空间分析
2ArcGIS
实例背景:就是我生成地类图版,不是要画地类图版属性点嘛?这个属性点能不能自动生成呢?
分析:属性点自动生成,如果有方法能够取得图斑的属性点坐标的话,就可以通过展点展上去。分析一下,第一步是获取属性点坐标数据,紧接着就是想办法导到ArcGIS中,然后展点展出来就大功告成。
2.1获取属性点坐标数据
所谓的图斑属性点,我理解为polygon的Centroid。然而ArcMap中,对字段记录提供了CalculateGeometry方法,里面有XCoordinateofCentroid、YCoordinateofCentroid这两项。
所以,首先在polygon的属性表中新建字段X(Double)、Y(Double)精度还有小数位数自己设置=右击该Field,选择CalculateGeometry,确定,就可以得到图斑中心点的XY坐标数据,然后导出。导出(其实也就是拷贝出来就行)可以选EXCEL也可以是ACCESS,同样也可以像ArcView一样的txt文件格式。
2.2载入获取的XY坐标
打开Arcmap,点选AddData的加号()浏览上一步获取的数据文件,载入。然后右击,点选DisplayXYData项。
2.3展点并导出
同样地,选择需要做XY的列,点击OK,就可以展点了。展好的点,可以通过export到GDB中或者SHP文件。
3CAD
CAD中展点,不想多讲,就帖一份展点的LSP吧。
;;;===============
(defunc:xyzDATA()
(setqptn0);记录点输量
(setvarcmdecho0);设置命令信息回显关闭
(setvarosmode0);关闭ObjectSnap模式,也就是关闭对象捕捉
(setqdatafile(getfiled请选择高程数据点文件:4));获得读取文件名
(setqfp(opendatafiler));读模式打开文件,DATAFILE是上一句获取的文件名.存放在fp文件中
;(commandlayerm高程数据)这一句一直报错..错误理由也很诡异,注释掉之后就可以运行了
(setq:ss:(ssgetX(list(cons8高程数据))));选取图层[高程数据]中的所有实体
(if:ss:(commandErase:ss:));如果已经存在了数据集则Erase掉
(princ\n);输入换行符
(while(setqaline(read-linefp));一行一行读取数据,aline
(setqptn(+1ptn));递增点数,ptn=ptn+1
(setqalist(read(strcat(aline))));把一行数据转换成list(xyz)形式
;strcat将几个字符连接在一起;Read是将
(setqpt(list(cadralist)(caralist)));构成二维点,(caralist)(cadralist)
(setqptl(list(+(cadraList)1)(+(caraList)1)));;构成二维点,作为标记。car取第一数,cadr第二数
(setqtxt(rtos(caddralist)21));取高程数据,赋值到txt中.caddr取第三个数
(commandtextptl20txt);以text格式输出高程数据
(commandpointpt);输出高程的同时增加输出该点,这个是我自己加上去的
(princ(strcat\r(rtosptn20)=txt));在文本窗口输出点位绘制进展
)
(setqfp(closefp));关闭文件存放数据的文件fp
(commandddptype);设置点样式,便于查看输出的点
(commandzoome);缩放视图窗口到绘制范围
(setvarcmdecho1);打开命令信息回显,和上面第一个关闭对应
(princ)
)
;===========
;一个辅助函数,获取实体列表中的指定组码值:
(defunEV(:x::ent:)
(setqretVnil);设置返回值为空
(if(equal(type:ent:)'ENAME);如果给定的第二个参数是实体名称
(setqretv(cdr(assoc:x::ent:)))
(if(equal(type:ent:)'list);如果给定的第二个参数是实体列表
(setqretv(cdr(assoc:x::ent:)))
)
)
retv
)
订阅:
博文评论 (Atom)
没有评论:
发表评论