ArcGIS Pro SDK (八)地理数据库 2 界说

打印 上一主题 下一主题

主题 927|帖子 927|积分 2783

ArcGIS Pro SDK (八)地理数据库 2 界说


  
   环境:Visual Studio 2022 + .NET6 + ArcGIS Pro SDK 3.0
  1 从地理数据库获取界说

  1. public async Task ObtainingDefinitionFromGeodatabase()
  2. {
  3.     await ArcGIS.Desktop.Framework.Threading.Tasks.QueuedTask.Run(
  4.         () =>
  5.         {
  6.             using (Geodatabase geodatabase = new Geodatabase(new DatabaseConnectionFile(new Uri("path\\to\\sde\\file\\sdefile.sde"))))
  7.             {
  8.                 // 对于企业级数据库,必须使用数据库名和用户名限定数据集名称。
  9.                 TableDefinition enterpriseTableDefinition = geodatabase.GetDefinition<TableDefinition>("LocalGovernment.GDB.CitizenContactInfo");
  10.                 // 无论数据集是否在 FeatureDataset 中,都没有关系。
  11.                 FeatureClassDefinition featureClassDefinition = geodatabase.GetDefinition<FeatureClassDefinition>("LocalGovernment.GDB.FireStation");
  12.                 // 获取 RelationshipClass 的定义。
  13.                 RelationshipClassDefinition relationshipClassDefinition = geodatabase.GetDefinition<RelationshipClassDefinition>("LocalGovernment.GDB.AddressPointHasSiteAddresses");
  14.                 // 获取 FeatureDataset 的定义。
  15.                 FeatureDatasetDefinition featureDatasetDefinition = geodatabase.GetDefinition<FeatureDatasetDefinition>("LocalGovernment.GDB.Address");
  16.             }
  17.         });
  18. }
复制代码
2 从地理数据库获取界说列表

  1. public async Task ObtainingDefinitionsFromGeodatabase()
  2. {
  3.     await ArcGIS.Desktop.Framework.Threading.Tasks.QueuedTask.Run(
  4.         () =>
  5.         {
  6.             using (Geodatabase geodatabase = new Geodatabase(
  7.                 new DatabaseConnectionFile(new Uri("path\\to\\sde\\file\\sdefile.sde"))))
  8.             {
  9.                 var enterpriseDefinitions =
  10.                     geodatabase.GetDefinitions<FeatureClassDefinition>();
  11.                 IEnumerable<Definition> featureClassesHavingGlobalID =
  12.                     enterpriseDefinitions.Where(definition => definition.HasGlobalID());
  13.                 var featureDatasetDefinitions =
  14.                     geodatabase.GetDefinitions<FeatureDatasetDefinition>();
  15.                 bool electionRelatedFeatureDatasets =
  16.                     featureDatasetDefinitions.Any(
  17.                     definition => definition.GetName().Contains("Election"));
  18.                 var attributedRelationshipClassDefinitions =
  19.                     geodatabase.GetDefinitions<AttributedRelationshipClassDefinition>();
  20.                 var relationshipClassDefinitions =
  21.                     geodatabase.GetDefinitions<RelationshipClassDefinition>();
  22.             }
  23.         });
  24. }
复制代码
3 从地理数据库获取相干界说

  1. public async Task ObtainingRelatedDefinitionsFromGeodatabase()
  2. {
  3.     await ArcGIS.Desktop.Framework.Threading.Tasks.QueuedTask.Run(
  4.         () =>
  5.         {
  6.             using (Geodatabase geodatabase = new Geodatabase(new DatabaseConnectionFile(new Uri("path\\to\\sde\\file\\sdefile.sde"))))
  7.             {
  8.                 // 对于 RelationshipClass,必须使用数据库名限定名称。
  9.                 RelationshipClassDefinition enterpriseDefinition =
  10.                     geodatabase.GetDefinition<RelationshipClassDefinition>("LocalGovernment.GDB.AddressPointHasSiteAddresses");
  11.                 IReadOnlyList<Definition> enterpriseDefinitions =
  12.                     geodatabase.GetRelatedDefinitions(enterpriseDefinition, DefinitionRelationshipType.DatasetsRelatedThrough);
  13.                 FeatureClassDefinition enterpriseAddressPointDefinition =
  14.                     enterpriseDefinitions.First(
  15.                     defn => defn.GetName().Equals("LocalGovernment.GDB.AddressPoint")) as FeatureClassDefinition;
  16.                 FeatureDatasetDefinition featureDatasetDefinition =
  17.                     geodatabase.GetDefinition<FeatureDatasetDefinition>("LocalGovernment.GDB.Address");
  18.                 IReadOnlyList<Definition> datasetsInAddressDataset =
  19.                     geodatabase.GetRelatedDefinitions(featureDatasetDefinition, DefinitionRelationshipType.DatasetInFeatureDataset);
  20.                 FeatureClassDefinition addressPointInAddressDataset =
  21.                     datasetsInAddressDataset.First(
  22.                     defn => defn.GetName().Equals("LocalGovernment.GDB.AddressPoint")) as FeatureClassDefinition;
  23.                 RelationshipClassDefinition addressPointHasSiteAddressInAddressDataset = datasetsInAddressDataset.First(
  24.                     defn => defn.GetName().Equals("LocalGovernment.GDB.AddressPointHasSiteAddresses")) as RelationshipClassDefinition;
  25.             }
  26.         });
  27. }
复制代码
4 从层获取表界说

  1. // GetDefinitionFromLayer - 这段代码即使在图层连接了另一个表的情况下也能正常工作
  2. private TableDefinition GetDefinitionFromLayer(FeatureLayer featureLayer)
  3. {
  4.     // 从图层获取要素类
  5.     FeatureClass featureClass = featureLayer.GetFeatureClass();
  6.     // 确定要素类是否连接了另一个表
  7.     if (featureClass.IsJoinedTable())
  8.     {
  9.         // 从要素类获取连接
  10.         Join join = featureClass.GetJoin();
  11.         // 从连接中获取源表
  12.         Table originTable = join.GetOriginTable();
  13.         // 从连接的源表返回要素类定义
  14.         return originTable.GetDefinition();
  15.     }
  16.     else
  17.     {
  18.         return featureClass.GetDefinition();
  19.     }
  20. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

拉不拉稀肚拉稀

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表