搜索
开启辅助访问

QQ登录

只需一步,快速开始

立即注册 找回密码
查看: 335|回复: 0

CityMaker SDK 加载FDB 返回目录树

[复制链接]

136

主题

187

帖子

5988

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5988
发表于 2016-9-20 15:08:26 | 显示全部楼层 |阅读模式
大家都知道示例里面有个LOADFDB函数,很多的示例里都有,但是里面只加载了第一个dataset,而且如果你要想自己生成树的话还要调用额外函数,我把2个整合到了一起,返回个TreeNode变量,直接加到TreeView中即可。
0920-1.png

代码如下:
  1.   public static TreeNode FDB_Load(IObjectManager d3domanager,ICamera camera)
  2.         {
  3.             TreeNode node = new TreeNode();
  4.             OpenFileDialog oDlg = new OpenFileDialog();
  5.             oDlg.Filter = "*.FDB|*.FDB";
  6.             if (oDlg.ShowDialog() != DialogResult.OK || oDlg.FileName == "")
  7.             {
  8.                 return null;
  9.             }
  10.             try
  11.             {
  12.                 IConnectionInfo ci = new ConnectionInfo();
  13.                 ci.ConnectionType = gviConnectionType.gviConnectionFireBird2x;
  14.                 string tmpFDBPath = oDlg.FileName;
  15.                 ci.Database = tmpFDBPath;
  16.                 IDataSourceFactory dsFactory = new DataSourceFactory();

  17.                 IDataSource ds = dsFactory.OpenDataSource(ci);
  18.                 node.Text = tmpFDBPath;
  19.                 string[] setnames = (string[])ds.GetFeatureDatasetNames();
  20.                 if (setnames.Length == 0)
  21.                     return null;
  22.                 int ii = 0;
  23.                 foreach (string setname in setnames)
  24.                 {
  25.                     TreeNode setNode = new TreeNode(setname, 1, 1);
  26.                     node.Nodes.Add(setNode);
  27.                     IFeatureDataSet dataset = ds.OpenFeatureDataset(setnames[ii]);
  28.                     ii++;
  29.                     string[] fcnames = (string[])dataset.GetNamesByType(gviDataSetType.gviDataSetFeatureClassTable);
  30.                     if (fcnames.Length == 0)
  31.                         return null;
  32.                     fcMap = new Hashtable(fcnames.Length);
  33.                     foreach (string name in fcnames)
  34.                     {
  35.                         IFeatureClass fc = dataset.OpenFeatureClass(name);
  36.                         // 找到空间列字段
  37.                         List<string> geoNames = new List<string>();
  38.                         IFieldInfoCollection fieldinfos = fc.GetFields();
  39.                         for (int i = 0; i < fieldinfos.Count; i++)
  40.                         {
  41.                             IFieldInfo fieldinfo = fieldinfos.Get(i);
  42.                             if (null == fieldinfo)
  43.                                 continue;
  44.                             IGeometryDef geometryDef = fieldinfo.GeometryDef;
  45.                             if (null == geometryDef)
  46.                                 continue;
  47.                             geoNames.Add(fieldinfo.Name);
  48.                         }
  49.                         fcMap.Add(fc, geoNames);

  50.                         // CreateFeautureLayer
  51.                         bool hasfly = false;
  52.                         foreach (IFeatureClass fcin in fcMap.Keys)
  53.                         {
  54.                             List<string> geoNamesin = (List<string>)fcMap[fc];
  55.                             foreach (string geoName in geoNamesin)
  56.                             {
  57.                                 if (!geoName.Equals("Geometry"))
  58.                                     continue;

  59.                                 IFeatureLayer featureLayer = d3domanager.CreateFeatureLayer(
  60.                                 fcin, geoName, null, null, rootId);

  61.                                 if (!hasfly)
  62.                                 {
  63.                                     IFieldInfoCollection fieldinfosin = fcin.GetFields();
  64.                                     IFieldInfo fieldinfo = fieldinfosin.Get(fieldinfosin.IndexOf(geoName));
  65.                                     IGeometryDef geometryDef = fieldinfo.GeometryDef;
  66.                                     IEnvelope env = geometryDef.Envelope;
  67.                                     if (env == null || (env.MaxX == 0.0 && env.MaxY == 0.0 && env.MaxZ == 0.0 &&
  68.                                         env.MinX == 0.0 && env.MinY == 0.0 && env.MinZ == 0.0))
  69.                                         continue;
  70.                                     IEulerAngle angle = new EulerAngle();
  71.                                     angle.Set(0, -20, 0);
  72.                                     camera.LookAt(env.Center, 1000, angle);
  73.                                 }
  74.                                 hasfly = true;
  75.                             }
  76.                         }
  77.                     }


  78.                 }
  79.               
  80.             }
  81.             catch (COMException ex)
  82.             {
  83.                 System.Diagnostics.Trace.WriteLine(ex.Message);
  84.                 return null;
  85.             }

  86.             return node;
  87.            
  88.          
  89.          
  90.         }
复制代码
引用:
  1.   TreeNode node =  CityMakerHelp.IRenderControl.FDB_Load(axRenderControl1.ObjectManager,axRenderControl1.Camera);
  2.             if (node != null)
  3.                 treeView1.Nodes.Add(node);
复制代码


如有需要,请联系我。

QQ|Archiver|手机版|GIS3D 基地 ( 京ICP备16033688号

GMT+8, 2017-8-24 16:50 , Processed in 0.108206 second(s), 31 queries .

Powered by Discuz! X3.2 Licensed

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表
 
Skyline中文社区-总群
帮主 gis3d 海洪