cl991036
管理员
管理员
  • 注册日期2003-07-25
  • 发帖数5913
  • QQ14265545
  • 铜币29655枚
  • 威望213点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • GIS帝国铁杆
阅读:1858回复:4

在arcgis中用vba生成带z值的shapefile文件

楼主#
更多 发布于:2007-12-28 10:36
<br>很多三维软件支持shapefile的直接导入,有些软件可以根据shape文件的某个高程字段自动拔起,有些软件是根据带z值的shape自动拔其,前者没什么好说的,后者值得写点东西</p>
<p>    在arcgis中用vba写,首先作一个带z值的空shapefiel,加载原始shape和新作的shape,原始shape要含高程字段(如果
统一赋值就没必要了,但这种情况不多),0层为原始shapefile,1层为新做的shapefile,代码如下:</p>
<p>Option Explicit</p>
<p>Private Sub addZ()<br>    Dim pMxDoc As IMxDocument<br>    Set pMxDoc = ThisDocument<br>    Dim pMap As IMap<br>    Set pMap = pMxDoc.FocusMap<br>    Dim player As IFeatureLayer<br>    Set player = pMap.Layer(0)<br>    Dim pFC As IFeatureClass<br>    Set pFC = player.FeatureClass<br>    <br>    Dim pCur As IFeatureCursor<br>    Set pCur = pFC.Search(Nothing, False)<br>    Dim pF As IFeature<br>    <br>    Dim player1 As IFeatureLayer<br>    Set player1 = pMap.Layer(1)<br>    Dim pFC1 As IFeatureClass<br>    Set pFC1 = player1.FeatureClass<br>    <br>    Dim pFeatBuffer As IFeatureBuffer<br>    Dim pF2 As IFeature<br>    Dim pFeatCursor As IFeatureCursor<br>    <br>'    Set pFeatBuffer = pFC1.CreateFeatureBuffer<br>'    Set pFeatCursor = pFC.Insert(True)<br>'    Set pF2 = pFeatBuffer<br>    <br>    Dim pPolygon1 As IPolygon<br>    Dim pGeometry As IGeometry<br>    Set pF = pCur.NextFeature<br>    Dim i As Long<br>    Do Until pF Is Nothing<br>'        i = i + 1<br>        Set pF2 = pFC1.CreateFeature<br>        Set pPolygon1 = pF.Shape<br>        Set pGeometry = pPolygon1<br>        SetShapeZConstant pGeometry, CDbl(pF.Value(7))<br>        Set pF2.Shape = pGeometry<br>        pF2.Value(2) = pF.Value(8)<br>        pF2.Store<br>        <br>'        pFeatCursor.InsertFeature pFeatBuffer<br>'        If i Mod 100 = 0 Then<br>'            pFeatCursor.Flush<br>'        End If</p>
<p>        Set pF = pCur.NextFeature<br>    Loop<br>    pFeatCursor.Flush<br>    MsgBox "OVER"<br>    <br>End Sub</p>
<p>Public Sub SetShapeZConstant(pGeom As IGeometry, z As Double)<br>  Dim pZAware As IZAware<br>  Set pZAware = pGeom<br>  pZAware.ZAware = True<br>  <br>  If (pGeom.GeometryType = esriGeometryPoint) Then<br>    Dim pT As IPoint<br>    Set pT = pGeom<br>    pT.z = z<br>  Else<br>    Dim pZ As IZ<br>    Set pZ = pGeom<br>    pZ.SetConstantZ z<br>  End If<br>End Sub</p>
喜欢0 评分0
没钱又丑,农村户口。头可断,发型一定不能乱。 邮箱:gisempire@qq.com
xiaomao
路人甲
路人甲
  • 注册日期2006-11-13
  • 发帖数8
  • QQ
  • 铜币121枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2008-01-02 11:18
正需要!!!燃眉之急阿<img src="images/post/smile/dvbbs/em03.gif" />
举报 回复(0) 喜欢(0)     评分
happyking
路人甲
路人甲
  • 注册日期2008-02-27
  • 发帖数3
  • QQ
  • 铜币132枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2008-03-01 15:49
<img src="images/post/smile/dvbbs/em01.gif" />
举报 回复(0) 喜欢(0)     评分
laoxie_1983
路人甲
路人甲
  • 注册日期2006-04-20
  • 发帖数11
  • QQ
  • 铜币151枚
  • 威望0点
  • 贡献值0点
  • 银元0个
3楼#
发布于:2008-08-01 13:11
非常感谢
举报 回复(0) 喜欢(0)     评分
kmzh34
路人甲
路人甲
  • 注册日期2005-03-02
  • 发帖数70
  • QQ
  • 铜币102枚
  • 威望0点
  • 贡献值0点
  • 银元0个
4楼#
发布于:2008-08-04 20:19
DING
举报 回复(0) 喜欢(0)     评分
游客

返回顶部