best_lilin
  • 注册日期
  • 发帖数
  • QQ
  • 铜币
  • 威望
  • 贡献值
  • 银元
阅读:1400回复:2

帮忙改一下用AO做地图拼接的代码

楼主#
更多 发布于:2004-05-19 10:47
<P>我找到了地图拼接的代码,我想把控件mapcontrol1和mapcontrol2中的图片拼接后显示在mapcontrol3中,用VB该怎么改呀?帮帮忙,谢谢。</P><PRE><CODE>Public Sub</CODE> Merge()
    <CODE>' Get the first layer in the map</CODE>
    <CODE>Dim</CODE> pMxDoc <CODE>As</CODE> IMxDocument
    <CODE>Set</CODE> pMxDoc = ThisDocument
    <CODE>Dim</CODE> pLayer <CODE>As</CODE> ILayer
    <CODE>Set</CODE> pLayer = pMxDoc.FocusMap.Layer(0)
    <CODE>Dim</CODE> pFeatLayer <CODE>As</CODE> IFeatureLayer
    <CODE>Set</CODE> pFeatLayer = pLayer
    <CODE>Dim</CODE> pFirstFeatClass <CODE>As</CODE> IFeatureClass
    <CODE>Set</CODE> pFirstFeatClass = pFeatLayer.FeatureClass
    
    <CODE>' Get the first layer's table</CODE>
    <CODE>' Use the Itable interface from the Layer (not from the FeatureClass)</CODE>
    <CODE>' This table defines which fields are to be used in the output</CODE>
    <CODE>Dim</CODE> pFirstTable <CODE>As</CODE> ITable
    <CODE>Set</CODE> pFirstTable = pLayer
    
    <CODE>' Get the second layer and its table</CODE>
    <CODE>' Use the Itable interface from the Layer (not from the FeatureClass)</CODE>
    <CODE>Set</CODE> pLayer = pMxDoc.FocusMap.Layer(1)
    <CODE>Dim</CODE> pSecondTable <CODE>As</CODE> ITable
    <CODE>Set</CODE> pSecondTable = pLayer
    
    <CODE>' Error checking</CODE>
    <CODE>If</CODE> pFirstTable <CODE>Is Nothing Then</CODE>
        MsgBox "Table QI failed"
        <CODE>Exit Sub
    End If
    
    If</CODE> pSecondTable <CODE>Is Nothing Then</CODE>
        MsgBox "Table QI failed"
        <CODE>Exit Sub
    End If</CODE>
    
    <CODE>' Define the output feature class name and shape type</CODE>
    <CODE>Dim</CODE> pFeatClassName <CODE>As</CODE> IFeatureClassName
    <CODE>Set</CODE> pFeatClassName = <CODE>New</CODE> FeatureClassName
    
    <CODE>With</CODE> pFeatClassName
        .FeatureType = esriFTSimple
        .ShapeFieldName = "Shape"
        .ShapeType = pFirstFeatClass.ShapeType
    <CODE>End With</CODE>
        
    <CODE>' Set the output location and feature class name</CODE>
    <CODE>Dim</CODE> pNewWSName <CODE>As</CODE> IWorkspaceName
    <CODE>Set</CODE> pNewWSName = <CODE>New</CODE> WorkspaceName
    
    <CODE>With</CODE> pNewWSName
        .WorkspaceFactoryProgID = "esriCore.ShapefileWorkspaceFactory.1"
        .PathName = "C:\temp"
    <CODE>End With
    
    Dim</CODE> pDatasetName <CODE>As</CODE> IDatasetName
    <CODE>Set</CODE> pDatasetName = pFeatClassName
    pDatasetName.Name = "Merge_result"
    
    <CODE>Set</CODE> pDatasetName.WorkspaceName = pNewWSName
    
    <CODE>' Build the input set/array - these are the layers to be merged</CODE>
    <CODE>Dim</CODE> inputArray <CODE>As</CODE> IArray
    <CODE>Set</CODE> inputArray = <CODE>New</CODE> esriCore.Array
    inputArray.Add pFirstTable
    inputArray.Add pSecondTable
    
    <CODE>' Perform the merge</CODE>
    <CODE>Dim</CODE> pBGP <CODE>As</CODE> IBasicGeoprocessor
    <CODE>Set</CODE> pBGP = <CODE>New</CODE> BasicGeoprocessor
    <CODE>Dim</CODE> pOutputFeatClass <CODE>As</CODE> IFeatureClass
    <CODE>Set</CODE> pOutputFeatClass = pBGP.Merge(inputArray, pFirstTable, pFeatClassName)
    
    <CODE>' Add the output to the map</CODE>
    <CODE>Dim</CODE> pOutputFeatLayer <CODE>As</CODE> IFeatureLayer
    <CODE>Set</CODE> pOutputFeatLayer = <CODE>New</CODE> FeatureLayer
    <CODE>Set</CODE> pOutputFeatLayer.FeatureClass = pOutputFeatClass
    pOutputFeatLayer.Name = pOutputFeatClass.AliasName
    pMxDoc.FocusMap.AddLayer pOutputFeatLayer

<CODE>End Sub</CODE>
</PRE>
喜欢0 评分0
kisssy
卧底
卧底
  • 注册日期2004-04-18
  • 发帖数235
  • QQ
  • 铜币614枚
  • 威望2点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2004-05-19 13:13
<P>改首尾就行了吧</P><P>两次实例化的时候:</P><P>Set pLayer =mapcontrol1.layer(0)</P><P>最后添加的时候</P><P>mapcontrol3.addlayer   yourfeaturelayer</P>
个人专栏: https://zhuanlan.zhihu.com/c_165676639
举报 回复(0) 喜欢(0)     评分
best_lilin
  • 注册日期
  • 发帖数
  • QQ
  • 铜币
  • 威望
  • 贡献值
  • 银元
2楼#
发布于:2004-05-19 14:17
<P><FONT face=宋体>我运行到:</FONT></P><P><CODE>Set</CODE> pOutputFeatClass = pBGP.Merge(inputArray, pFirstTable, pFeatClassName)</P><P>提示:自动化错误。  什么意思呀?</P><P>我是用VB,不是VBA</P>
举报 回复(0) 喜欢(0)     评分
destnity
路人甲
路人甲
  • 注册日期2004-03-25
  • 发帖数341
  • QQ
  • 铜币272枚
  • 威望0点
  • 贡献值0点
  • 银元0个
3楼#
发布于:2004-05-19 14:48
硬盘对应的输出路径是否存在? 路径不存在有时会产生自动化错误。
签 名: 不能超过 250 个字符 文字将出现在您发表的文章的结尾处。
举报 回复(0) 喜欢(0)     评分
best_lilin
  • 注册日期
  • 发帖数
  • QQ
  • 铜币
  • 威望
  • 贡献值
  • 银元
4楼#
发布于:2004-05-19 15:05
<P>太感谢了,成功了</P>
举报 回复(0) 喜欢(0)     评分
游客

返回顶部