通过SDE将栅格图像导入到数据为中

本文介绍了一个用于将本地栅格数据集加载到ArcSDE数据库中的Visual Basic过程。该过程通过设置ArcSDE连接信息,指定输入栅格文件路径及名称,定义输出栅格数据集名称来实现。此外,还设置了空间参考、压缩类型、金字塔选项等参数。
Public Sub LoadToSDE(sDir As String, sInput As String, sServer As String, sInstance As String, _
sDB As String, sUser As String, sPasswd As String, sSDERaster As String)

' sDir: the directory where the input raster resides
' sInput: the name of input raster
' sServer,sInstance,sDB,sUser,sPasswd: ArcSDE connection info
' sSDERaster: the output ArcSDE raster dataset name
On Error GoTo eh
Dim pSDEConn As IRasterSdeConnection
Dim pSDEStorage As IRasterSdeStorage
Dim pSDEOp As IRasterSdeServerOperation
Dim pRasterWsFact As IWorkspaceFactory
Dim pRasterWS As IRasterWorkspace
Dim pGeoDs As IGeoDataset

' Initialize RasterSDELoader
Set pSDEConn = New RasterSdeLoader
' Make connection
pSDEConn.ServerName = sServer
pSDEConn.Instance = sInstance
pSDEConn.Database = sDB
pSDEConn.UserName = sUser
pSDEConn.Password = sPasswd
pSDEConn.InputRasterName = sDir & "\" & sInput
pSDEConn.SdeRasterName = sSDERaster

' Set storage parameters
Set pSDEStorage = pSDEConn
' Get spatialreference
Set pRasterWsFact = New RasterWorkspaceFactory
Set pRasterWS = pRasterWsFact.OpenFromFile(sDir, 0)
Set pGeoDs = pRasterWS.OpenRasterDataset(sInput)
' Set spatialreference
Set pSDEStorage.SpatialReference = pGeoDs.SpatialReference
' Set compression
pSDEStorage.CompressionType = esriRasterSdeCompressionTypeUncompressed
' Set tilesize
pSDEStorage.TileHeight = 128
pSDEStorage.TileWidth = 128
' Pyramids option
pSDEStorage.PyramidOption = esriRasterSdePyramidBuildWithFirstLevel
pSDEStorage.PyramidResampleType = RSP_BilinearInterpolation
pSDEStorage.CompressionType = esriRasterSdeCompressionTypeJPEG2000

' Start loading
Set pSDEOp = pSDEConn

pSDEOp.Create
pSDEOp.Update
' Calculate stats
pSDEOp.ComputeStatistics

' Cleanup
Set pSDEConn = Nothing
Set pSDEStorage = Nothing
Set pSDEOp = Nothing
Set pRasterWsFact = Nothing
Set pRasterWS = Nothing
Set pGeoDs = Nothing

Exit Sub
eh:
MsgBox Err.Description, vbInformation, "LoadToSDE" '错误处理

End Sub
连接数据导入NDVI的代码: private void button1_Click(object sender, EventArgs e) { string conn_file = @"C:\Users\11372\AppData\Roaming\ESRI\Desktop10.2\ArcCatalog\连接到 MOLINGYOU (2).sde"; IWorkspaceFactory pWorkspaceFactory = new SdeWorkspaceFactory(); IWorkspace pWorkspace = null; try { pWorkspace = pWorkspaceFactory.OpenFromFile(conn_file, pMapControl.hWnd); } catch (Exception ex) { MessageBox.Show("打开工作空间时出错: " + ex.Message); return; } if (pWorkspace == null) { MessageBox.Show("连接不成功"); return; } MessageBox.Show("连接成功"); // 检查工作空间类型 - 添加了异常处理和空值检查 IDataset dataset = pWorkspace as IDataset; /*if (dataset != null) { try { if (dataset.Workspace != null) { MessageBox.Show("工作空间类型: " + dataset.Workspace.Type); } else { MessageBox.Show("工作空间对象存在,但无法获取其类型信息"); } } catch (Exception ex) { MessageBox.Show("获取工作空间类型时出错: " + ex.Message); } } else { MessageBox.Show("无法将工作空间转换为数据集对象"); }*/ // 尝试使用更通用的方式打开栅格数据集 IRasterDataset rasterDataset = null; try { // 方法1: 尝试直接从工作空间打开栅格数据集 IRasterWorkspace rasterWorkspace = pWorkspace as IRasterWorkspace; if (rasterWorkspace != null) { rasterDataset = rasterWorkspace.OpenRasterDataset("SDE.DBO.HENAN_1"); } else { // 方法2: 使用IEnumDataset枚举器查找栅格数据集 - 兼容ArcGIS 10.2 IEnumDataset enumDataset = pWorkspace.get_Datasets(esriDatasetType.esriDTRasterDataset); IDataset rasterDatasetObj = enumDataset.Next(); while (rasterDatasetObj != null) { if (rasterDatasetObj.Name.Equals("SDE.DBO.henan_1", StringComparison.OrdinalIgnoreCase)) { rasterDataset = rasterDatasetObj as IRasterDataset; break; } rasterDatasetObj = enumDataset.Next(); } } } catch (Exception ex) { MessageBox.Show("打开栅格数据集时出错: " + ex.Message); return; } if (rasterDataset == null) { MessageBox.Show("无法打开栅格数据集"); // 列出工作空间中的所有数据集,帮助调试 List<string> datasetNames = new List<string>(); IEnumDataset enumDataset = pWorkspace.get_Datasets(esriDatasetType.esriDTAny); IDataset ds = enumDataset.Next(); while (ds != null) { datasetNames.Add(ds.Name); ds = enumDataset.Next(); } if (datasetNames.Count > 0) { MessageBox.Show("工作空间中的数据集:\n" + string.Join("\n", datasetNames)); } else { MessageBox.Show("工作空间中没有找到任何数据集"); } return; } IRasterLayer rasterLayer = new RasterLayer(); rasterLayer.CreateFromDataset(rasterDataset); dataset = rasterDataset as IDataset; if (dataset != null) { rasterLayer.Name = dataset.Name; } pMapControl.Map.AddLayer(rasterLayer); pMapControl.ActiveView.Refresh(); } 现在要在private void button2_Click(object sender, EventArgs e){}中实现:设定阈值重分类为矢量面输出,要求点击后跳出弹窗选择矢量面储存的位置和名称,根据阈值分类成三个类型,转换成面后储存。代码不要太麻烦冗余。已知输入数据为归一化的NDVI,分类阈值已定:森林NDVI > 0.6,农田 0.3 ≤ NDVI ≤ 0.6,建成区NDVI < 0.3
最新发布
06-06
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值