登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

永远的绿岩

本期推荐:桂河大桥

 
 
 

日志

 
 
 
 

使用ArcMap选择合适居住地  

2010-06-21 15:47:26|  分类: 3S |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
 

最近在做某一个作业(非GIS专业的作业)

已知:某生态区数据,河流(线)、植被(面),为shapefile格式。

要求:假定某生物只居住在含某树种的植被区,并且在50米范围内要有主要水源,求该生态区适合该生物的植被区,并求相邻植被间距离,并显示出来。

求解过程:

1、  使用Select by Attribute,从植被层筛选该树种的植被,从河流层筛选主要水源

2、  使用Buffer,对筛选出来的河流做50米的缓冲分析

3、  使用Intersect,求适合该生物的居住地

4、  求相邻植被距离: (ArcMap中没有直接求相邻斑块之间的最短距离,也许是我没找到)

      (1) 用Dissolve,把本来贴在一起的很多斑块合成一块

      (2) 用Feature to Point,将斑块转成点,转出来后得到的是斑块的中心点,将该点图层命名为CenterPoint。

      (3) 用Near,求相邻点之间的距离,很可惜,得到的值是放在CenterPoint的表中,且有X, Y, DIST这三个值,因此还得做些工作,才能画出线来体现距离

      (4) 选择需要的属性:在CenterPoint点层的属性中,只勾选FID,X,Y这三个属性值,如图1

      (5) 导出需要的属性:在Attributes Table中,导出这三个属性值,并存为txt格式,如图2。

使用ArcMap选择合适居住地 - 绿岩 - 永远的绿岩           使用ArcMap选择合适居住地 - 绿岩 - 永远的绿岩 

                                                 图1                                                                                      图2

      (6) 用Add XY Data,将txt导入,形成点层,由于该点层还不能形成正规的点层,因此把该点图层导出为shp格式,命名为NearPoint

      (7) 在ArcMap中,没找到把两个点图层的相对应点连成线的工具,有人建议使用ET Geo Wizards,但是我看了看还是没法实现我的要求,于是只能写程序解决问题了。【但想着非GIS专业怎么也需要编程来实现,估计是我没找到好的求解过程】

      (8) 先在ArcCatalog建立一个空的线文件。在ArcMap中,两个点图层放上面,线图层放下面,程序代码如下【注:代码是在参考晓木东博客中ArcGIS VBA点连接成线文章的基础上改编而成】

Private Sub Join()  

Dim pMxdoc As IMxDocument

Set pMxdoc = ThisDocument       '目标文档

Dim pMap As IMap

Set pMap = pMxdoc.FocusMap     '目标地图 

 

Dim pfLayer_pt1 As IFeatureLayer

Set pfLayer_pt1 = pMap.Layer(0)    '点图层一

Dim pfLayer_pt2 As IFeatureLayer

Set pfLayer_pt2 = pMap.Layer(1)    '点图层二 

Dim ptFeature1 As IFeature        '点要素一

Dim ptFeature2 As IFeature        '点要素二 

Dim pPoint1 As IPoint             '点一

Dim pPoint2 As IPoint             '点二 

Dim pMultiPts As IPointCollection   '点集合 

 

Dim pfLayer_line As IFeatureLayer   '线图层

Set pfLayer_line = pMap.Layer(2)

Dim pfclass As IFeatureClass        '线要素类

Set pfclass = pfLayer_line.FeatureClass 

Dim plFeature As IFeature          '线要素

Dim pLine As IPolyline             '线

 

Dim myCursorF1 As IFeatureCursor   '光标要素1

Dim myCursorF2 As IFeatureCursor   '光标要素2 

Dim pQFilter As IQueryFilter

Set pQFilter = New QueryFilter      '创建过滤对象

pQFilter.WhereClause = "FID >= 0"    '过滤语句 

Set myCursorF1 = pfLayer_pt1.FeatureClass.Search(pQFilter, True)  '光标开始查找点图层一

Set myCursorF2 = pfLayer_pt2.FeatureClass.Search(pQFilter, True)  '光标开始查找点图层二 

Set ptFeature1 = myCursorF1.NextFeature

Set ptFeature2 = myCursorF2.NextFeature   '指向要素 

 

Do While Not ptFeature1 Is Nothing

    Set pPoint1 = ptFeature1.Shape       '点的形状为要素的形状

    Set pPoint2 = ptFeature2.Shape   

    Set pMultiPts = New Polyline

    pMultiPts.AddPoint pPoint1          '将点放入点集合中

    pMultiPts.AddPoint pPoint2

    Set pLine = pMultiPts               '点集合形成线   

    Set plFeature = pfclass.CreateFeature      '创建要素

    Set plFeature.Shape = pLine             '要素为刚创建的线

    plFeature.Store                       '保存线要素 

    Set ptFeature1 = myCursorF1.NextFeature

    Set ptFeature2 = myCursorF2.NextFeature  '循环到下一个点要素   

Loop 

pMxdoc.ActiveView.Refresh                 '更新地图窗口 

End Sub

用惯了C#,感觉VB好笨重,网易的编辑功能这么少,行距都不能调整,放个图还得导进来,都不能直接贴。

 

【注:学识浅陋,不足之处在所难免,转载请注明出处】

 

 

 

  评论这张
 
阅读(751)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018