阅读:1086回复:0
[求助]VB实现栅格数据导入SDE数据库问题
<P>我网上找到的一个栅格导入SDE的程序,我导入的是tif数据,总是报操作失败的错误(operation failed),我研究了几天也不知道错误出在什么地方,我觉得不是liecense的问题,会不会是函数参数不对,希望大家帮忙看看</P>
<P>另外想问下sCatalogName 是不是指空间数据库的连接名字,就像这样:"C:\Documents and Settings\zh\Application Data\ESRI\ArcCatalog\Connection to ser.sde"</P> <P>还有就是函数中的keywords是什么有什么用一直都没有弄清楚,谢谢各位了 </P> <P>Public Sub LoadDirectoryToSDE(sServer As String, sInstance As String, sUser As String, sPassword As String, sCatalogName As String, sKeyword As String, sDir As String)</P> <P>On Error GoTo eh</P> <P>'*** ArcSDE-connection<BR>Dim pPropSet As IPropertySet<BR>Set pPropSet = New PropertySet</P> <P>With pPropSet<BR> .SetProperty "server", "ser"<BR> .SetProperty "instance", "5151"<BR> .SetProperty "user", "sde"<BR> .SetProperty "password", "sde"<BR> .SetProperty "version", "SDE.DEFAULT"<BR>End With</P> <P>Dim pWsName As IWorkspaceName<BR>Set pWsName = New WorkspaceName</P> <P>pWsName.WorkspaceFactoryProgID = "esricore.sdeworkspacefactory.1"<BR>pWsName.ConnectionProperties = pPropSet</P> <P>'*************************************************************************<BR>'Dim pSDEConn As IRasterSdeConnection2</P> <P>Dim pSDEConn As IRasterSdeConnection<BR>Set pSDEConn = New RasterSdeLoader<BR>pSDEConn.SdeWorkspaceName = pWsName</P> <P>Dim pSDECatalog As IRasterSdeCatalog<BR>Set pSDECatalog = pSDEConn<BR>pSDECatalog.CatalogName = sCatalogName</P> <P>Dim pSDEStorage As IRasterSdeStorage2<BR>Dim pSDEOp As IRasterSdeServerOperation2<BR>'Dim pSDEStorage As IRasterSdeStorage<BR>'Dim pSDEOp As IRasterSdeServerOperation<BR>'*************************************************************************<BR>Dim sRasterDir As String<BR>Dim iCount As Integer<BR>Dim sString As String<BR>Dim sName As String<BR>Dim sNewName As String<BR>Dim i As Integer<BR>Dim iSlash As Integer</P> <P>Dim pWSF As IWorkspaceFactory<BR>Set pWSF = New RasterWorkspaceFactory</P> <P>'*** Directory with rasters<BR>'*** RasterWorkspace<BR>Dim pRasWS As IRasterWorkspace<BR>If Not pWSF.IsWorkspace(sDir) Then Exit Sub '我这里sDir为f:\tfw<BR>Set pRasWS = pWSF.OpenFromFile(sDir, 0)</P> <P>Dim pWS As IWorkspace<BR>Set pWS = pRasWS</P> <P>Dim pEnumDS As IEnumDataset<BR>Set pEnumDS = pWS.Datasets(esriDTRasterDataset)</P> <P>Dim pDataset As IDataset<BR>Set pDataset = pEnumDS.Next</P> <P>Dim sFileName As String</P> <P>'*** Loop through rasters<BR>Do Until pDataset Is Nothing</P> <P>sFileName = pDataset.Name</P> <P>'*** RasterDataset<BR>Dim pRasDS As IRasterDataset<BR>Set pRasDS = pRasWS.OpenRasterDataset(sFileName)</P> <P>pSDEConn.InputRasterName = sDir ; "\" ; sFileName '我这里sFileName为t1111.tif<BR>'pSDECatalog.RasterName = "SDE.T1111"<BR>pSDEConn.SdeRasterName = "SDE.T1111"</P> <P>Set pSDEStorage = pSDEConn ' Set storage parameters</P> <P>'**********************************************<BR>'*** CRS<BR>Dim pSpatialReferenceFactory As ISpatialReferenceFactory<BR>Dim pProjectedCoordinateSystem As IProjectedCoordinateSystem</P> <P>Set pSpatialReferenceFactory = New SpatialReferenceEnvironment</P> <P>'*** -> Change the CRS!!!<BR>Set pProjectedCoordinateSystem = pSpatialReferenceFactory.CreateProjectedCoordinateSystem(esriSRProjCS_Germany_3)<BR>Set pSDEStorage.SpatialReference = pProjectedCoordinateSystem</P> <P>'Set compression<BR> <BR>pSDEStorage.CompressionType = esriRasterSdeCompressionTypeRunLength</P> <P>' Set tilesize<BR>pSDEStorage.TileHeight = 128<BR>pSDEStorage.TileWidth = 128</P> <P>' Pyramids option<BR>pSDEStorage.PyramidOption = esriRasterSdePyramidBuildWithFirstLevel<BR>pSDEStorage.PyramidResampleType = RSP_BilinearInterpolation<BR> <BR>'pSDEStorage.CompressionType = esriRasterSdeCompressionTypeRunLength</P> <P>Set pSDEOp = pSDEConn</P> <P>If i = 0 Then<BR>'pSDEStorage.Keyword = "sde.default"<BR>pSDEOp.Create<BR>Else<BR>pSDEOp.Insert</P> <P>End If</P> <P>pSDEOp.ComputeStatistics<BR>pSDEOp.BuildPyramids</P> <P>i = 1</P> <P>Set pDataset = pEnumDS.Next</P> <P>Loop</P> <P>'*** cleanup<BR>Set pPropSet = Nothing<BR>Set pWsName = Nothing<BR>Set pSpatialReferenceFactory = Nothing<BR>Set pProjectedCoordinateSystem = Nothing<BR>Set pSDEConn = Nothing<BR>Set pSDECatalog = Nothing<BR>Set pWSF = Nothing<BR>Set pRasWS = Nothing<BR>Set pWS = pRasWS<BR>Set pEnumDS = Nothing<BR>Set pDataset = Nothing<BR>Set pRasDS = Nothing<BR>Set pSDEStorage = Nothing<BR>Set pSDEOp = Nothing</P> <P>Exit Sub</P> <P>eh:<BR>MsgBox Err.Description, vbCritical, "LoadDirectoryToSDE"</P> |
|