arcgis若干小注意事项

最近刚拿到arcgis9.3,9.3确实比9.2好用多了

使用过程中,发现一些小问题:

(1)shape文件的字段名,不能超过五个汉字或10个字母和数字字符,否则生成shape出错,以下是判断汉字还是英文字的程序

InputStr = "汉"
If Asc(InputStr) < 0 Then
    gbascii = AscB(StrConv(InputStr, vbFromUnicode))
    '区位码在16区之后的为汉字
    If gbascii - 160 > 15 Then
        Print "是汉字"
    Else
        Print "是全角符号"
    End If
Else
    Print "是半角英文或数字"
End If

(2)在arcmap中编辑shape文件时,注意尽量用拷贝而不要用剪切,容易出错并造成混乱

(3)同一数据库的shape文件不能重名,即使它们用数据集(dataset)分开也不行

(4)项目中shape文件编辑完成后,要对shape进行拓扑检查,删除重复和编辑错误的要素

(5) 拷贝数据库下的要素集到母的要素集

 

Private Sub CopyOthers2First_Click()
 
  Dim pOrigFeatWorkspace As IFeatureWorkspace
  Dim pDestFeatWorkspace As IFeatureWorkspace
  Dim pWSF As IWorkspaceFactory
 
  Dim pWS As IWorkspace
  Dim pEnumDataset As IEnumDataset
  Dim pEnumDataset_FD As IEnumDataset
  Dim pDataset_FD As IDataset
  Dim pDataset As IDataset
  Dim pDestFeatureClass As IFeatureClass

  Set pWSF = New AccessWorkspaceFactory
  'Open the origin and destination workspaces. *** Modify the pathnames appropriately.
  Set pOrigFeatWorkspace = pWSF.OpenFromFile(".mdb", 0)
  Set pDestFeatWorkspace = pWSF.OpenFromFile(".mdb", 0)
  Set pDestFeatureClass = pDestFeatWorkspace.OpenFeatureClass("汇总")
 
  Set pWS = pOrigFeatWorkspace
  Set pEnumDataset = pWS.Datasets(esriDTAny)
  pEnumDataset.Reset
   Set pDataset = pEnumDataset.Next
        Do Until pDataset Is Nothing
            Select Case pDataset.Type
            Case esriDTFeatureDataset
                Set pEnumDataset_FD = pDataset.Subsets
                Set pDataset_FD = pEnumDataset_FD.Next
                Do Until pDataset_FD Is Nothing
                    If pDataset_FD.Type = esriDTFeatureClass Then
                        'MsgBox "Updating GUID's for " & pDataset_FD.Name
                        'Call SetGUID(pDataset_FD)
                        '复制要素
                        fw.WriteLine pDataset_FD.BrowseName
                       
                        copyFeature2Dest pDataset_FD, pDestFeatureClass
                        fw.WriteLine " "
                    End If
                    Set pDataset_FD = pEnumDataset_FD.Next
                Loop
            Case esriDTFeatureClass, esriDTTable
                'Call SetGUID(pDataset)
                'MsgBox "Updating GUID's for " & pDataset.Name
                '复制要素
                fw.WriteLine pDataset.BrowseName
                copyFeature2Dest pDataset, pDestFeatureClass
                fw.WriteLine " "
            End Select
            Set pDataset = pEnumDataset.Next
        Loop
  MsgBox "完成."

End Sub

 

''拷贝要素到目的要素集

Private Function copyFeature2Dest(pSrcDataset As IDataset, pDestFeatureClass As IFeatureClass)
    On Error Resume Next      ' 改变错误处理的方式。

  Dim pInputFCls As IFeatureClass
  Set pInputFCls = pSrcDataset
 
  ' get the workspace and start editing
  Dim pDataset As IDataset
  Set pDataset = pDestFeatureClass
 
  Dim pWorkspace As IWorkspace
  Set pWorkspace = pDataset.Workspace
 
  Dim pWorkspaceEdit As IWorkspaceEdit
  Set pWorkspaceEdit = pWorkspace
 
  pWorkspaceEdit.StartEditing True
  pWorkspaceEdit.StartEditOperation
      
  ' open a cursor on the input feature class with the given query filter
  Dim pFeatCursor As IFeatureCursor
  Set pFeatCursor = pInputFCls.Search(Nothing, False)
 
 
  ' loop through the input features in the cursor, and insert
  ' them into the destination feature class. This is slow since we must use
  ' IFeature::Store to mimic an edit session.
  Dim pFeat As IFeature
  Dim pRow As IRow
  Dim pFlds As IFields
  Dim lSFld As Long
  Dim i As Long
 
  Set pRow = pFeatCursor.NextFeature
  Do Until pRow Is Nothing
    Set pFeat = pDestFeatureClass.CreateFeature
    Set pFlds = pFeat.Fields
    For i = 0 To pFlds.FieldCount - 1
   
        lSFld = pRow.Fields.FindField(pFlds.field(i).Name)
        If StrComp(pFlds.field(i).Name, "OBJECTID") <> 0 And StrComp(pFlds.field(i).Name, "Shape_Length") <> 0 _
            And StrComp(pFlds.field(i).Name, "Shape_Area") <> 0 Then
           
           
            If StrComp(pFlds.field(i).Name, "Shape") = 0 Then
                pFeat.Value(i) = pRow.Value(lSFld)
            Else
                If lSFld <> -1 Then
                    pFeat.Value(i) = CStr(pRow.Value(lSFld))
                End If
            End If
        Else
            fw.WriteLine CStr(pRow.Value(lSFld))
        End If
    Next i
    pFeat.Store
    ' get next row
    Set pRow = pFeatCursor.NextFeature
  Loop
 
  pWorkspaceEdit.StopEditOperation
  pWorkspaceEdit.StopEditing True

'out:
'    If Err.Number <> 0 Then
'        msg = "Error # " & str(Err.Number) & " was generated by " _
'                & Err.Source & Chr(13) & Err.Description
'        MsgBox msg, , "Error", Err.HelpFile, Err.HelpContext
 '   End If


End Function

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaokcehui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值