|
阅读:1400回复:2
帮忙改一下用AO做地图拼接的代码
<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> |
|
|
1楼#
发布于:2004-05-19 13:13
<P>改首尾就行了吧</P><P>两次实例化的时候:</P><P>Set pLayer =mapcontrol1.layer(0)</P><P>最后添加的时候</P><P>mapcontrol3.addlayer yourfeaturelayer</P>
|
|
|
|
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>
|
|
|
3楼#
发布于:2004-05-19 14:48
硬盘对应的输出路径是否存在? 路径不存在有时会产生自动化错误。
|
|
|