注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

快乐小屋

 
 
 

日志

 
 

ArcGIS Engine获得Mosaic Dataset的影像物理路径  

2013-08-26 22:55:04|  分类: ArcGIS Engine开 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

从ArcGIS10版本之后就推出了mosaic dataset,而且mosaic dataset以其非常优秀的性能以及强大的功能深受广大用户喜欢,而且越来越多的ArcGIS10用户都已经使用了它来存储和管理影像数据。

相关Mosaic dataset的参考:http://help.arcgis.com/zh-cn/arcgisdesktop/10.0/help/index.html#/na/009t00000037000000/

那 么Mosaic Dataset最大的特点或者说对比ArcGIS9提供的影像存储方式,RasterDataset或者RasterCatalog来说,Mosaic Dataset是不用讲实际的影像入库,而在数据库里面保留相关的路径信息,这样无疑大大增强了入库的效率。

那么有了上面的说明,可能大家就希望得到存储在ArcSDE里面的影像实际路径的信息,也就是本文的标题。

那么大家只需要参考如下代码即可获得相关信息。

  1.   IMosaicWorkspaceExtensionHelper MosaicWsHelper = new MosaicWorkspaceExtensionHelperClass()  
  2. //获得ArcSDE的IWorkspace对象  
  3.                 IWorkspace ws = pNode.Parent.Parent.Tag as IWorkspace;  
  4.                 IMosaicWorkspaceExtension mosaicWsExtension = MosaicWsHelper.FindExtension(ws);  
  5. //打开一个名字叫“mdd”的镶嵌数据集名称  
  6.                 IMosaicDataset mosaicDataset = mosaicWsExtension.OpenMosaicDataset("mdd");  
  7. //打开目录表,也就是下面的Footprint表  
  8.                 ITable pTable = mosaicDataset.Catalog as ITable;  
  9.                 ICursor pCursor = pTable.Search(null, false);  
  10.                 IRow pRow = pCursor.NextRow();  
  11. //循环存储在镶嵌数据集里面的影像信息  
  12.                 while (pRow != null)  
  13.                 {  
  14.                     IRasterCatalogItem pRasterCatalogItem = (IRasterCatalogItem)pRow;  
  15.                     IRasterDataset pRasterdataset = pRasterCatalogItem.RasterDataset;  
  16.                     //用这个接口,镶嵌数据集中的每一条记录是  
  17.                     IFunctionRasterDataset pFunctionRD = pRasterdataset as IFunctionRasterDataset;  
  18.                     IArray pArray = pFunctionRD.MemberRasterDatasets;  
  19.                     for (int n = 0; n < pArray.Count; n++)  
  20.                     {  
  21.                         IRasterDataset pFunRst = pArray.get_Element(n) as IRasterDataset;  
  22. //获得存储在镶嵌数据集里面每一个影像的物理路径  
  23.                         string aName = pFunRst.CompleteName;  
  24.                     }  
  25.                     pRow = pCursor.NextRow();  
  26.                 }  

或许有些用户之间使用了上面的代码,还是会出现问题,那么我就把我测试这段代码所碰到的问题给大家描述一下,也方便大家来更好的理解和使用MosaicDataset。

问题一:

执行IMosaicDataset mosaicDataset = mosaicWsExtension.OpenMosaicDataset("mdd");报错,死活打不开。

原因:这个错误以及犯了两次了,因为我测试的ArcGIS Engine环境是ArcGIS10版本,但是我是使用的ArcGIS Desktop10.1创建的Mosaic Dataset并且导入的数据。其实我们在讲到ArcGIS10.1的新特性也会提及到

http://resources.arcgis.com/zh-CN/help/main/10.1/#/na/016w00000032000000/

客户端

10.0 镶嵌数据集

10.1 镶嵌数据集

10.0

完整(读取/修改/创建)

不支持

10.1

只读

完整(读取/修改/创建)

那么也就是说使用ArcGIS10.1创建的Mosaic Dataset有许多新特性,但是ArcGIS Engine10是没有办法处理的。以上是关于桌面的限制,那么针对ArcGIS Engine来说,就会报错,所以针对这块大家记住尽可能的版本保持一致即可。

问题二:

如 果我的机器上既有ArcGIS Desktop10、ArcGIS Engine10、ArcSDE10,并且使用Desktop将本地的影像数据导入到ArcSDE10,运行这段代码完全没有问题,那么如果是我使用其他 机器的ArcGIS  Desktop 10将那台机器上的影像导入到ArcSDE,我们使用本机的ArcGIS Engine10来执行就得不到影像的物理路径。如下图:


这 个其实也证明了Mosaic Dataset的一个特点,也就是说我们在使用过过程中会出现这中情形,A机器和B机器同时连接同一个ArcSDE数据库,A机器可以加载同一个名字的 MosaicDataset并能看到相关的影像,但是B机器虽然也可以加载同一个名字的mosaic Dataset却看不到影像。

这 就是因为数据是在A机器里面存储着,前面已经说过了,虽然说入库,但是只是导入了相关的物理引用路径,实际的影像并没有导入到数据库中,这样就是为什么B 机器只能加载数据(其实就是加载的mosaic dataset对象)但是看不到影像。为什呢呢?A机器并没有设置共享权限给B机器可读。

经过上面的分析,我们需要将B机器的相关影像文件夹进行共享,然后使用UNC路径进行加载影像,那么这样A机器才能获得相关的实际物理路径。

总结起来一句话,加载影像到ArcSDE库里面

1:共享你的文件夹(里面存储要加载的影像)

2:使用UNC路径进行加载比如\\192.168.1.1\raster\1.tiff

经 过上面的分析其实在使用ArcGIS Engine来开发相关功能,我们一定要对开发的对象以及相关的功能有深入的了解,我们不妨现在桌面上将相关的帮助和功能做操作,将对象的特点多分析,这 样我们在进行二次开发不会出现相关问题,即使出现问题也会很容易的去分析问题和解决问题。

特此感谢@ArcGIS_本地开发同学的热心帮助!

-------------------------------------------------------------------------------------------------------
版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!
------------------------------------------------------------------------------------------------------
  评论这张
 
阅读(788)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018