zoukankan      html  css  js  c++  java
  • 论坛里关于ArcEngine二次开发的分类统计的问题

    http://bbs.esrichina-bj.cn/ESRI/thread-58345-1-1.html 看了论坛里几乎所有 的ArcEngine的统计问题和解答,似乎都是只点了一下,根本没有人深入去解释,本人也遇到这样的问题,统计Oracle数据库的某表的数据,然后与 地图图层关联起来,再做渲染,但是用ArcEngine里的接口却得不到Oracle数据库的某表的统计数据,不知何解。 本人思路: 1、统计数据与图层关联:将统计数据与地图图层进行关联之前,要先获取地图图层和统计结果,而且统计结果得可用于进行关联,因此要进行第二步转换工作; 2、使用ArcEngine接口将统计结果转换为可关联数据类型,那如何获取统计结果,这就需要进行第三步; 3、使用ArcEngine接口去对Oracle数据表进行分类统计,得到统计结果; 但问题出在第三步,总是ArcEngine接口怎么都得不到统计结果,可以对Oracle数据表进行分类,但每一类的数量都是0,查了帮助和网上的资料,都不得其解。 表:element id type_id distric_id name update_time 1 1 84b3d2de-0cca-4abe-88f6-496a043b36b0 A 2009-11-11 2 2 84b3d2de-0cca-4abe-88f6-496a043b36b0 B 2009-11-11 3 1 e6e51df3-b17b-4072-9ac1-b926a67b2f1b C 2009-11-11 4 4 3bb4046a-42f6-462b-bcf2-f5cd4923b70d D 2009-11-11 5 3 84b3d2de-0cca-4abe-88f6-496a043b36b0 E 2009-11-11 6 4 039d3379-a409-4a25-aa2e-9ae139f3961b F 2009-11-11 7 3 fde526f6-c57b-4dd5-8603-1f89659ed102 G 2009-11-11 8 5 3bb4046a-42f6-462b-bcf2-f5cd4923b70d H 2009-11-11 9 7 fde526f6-c57b-4dd5-8603-1f89659ed102 I 2009-11-11 id:ID type_id:类型ID distric_id:区域ID name:名称 udate_time:更新时间 代码如下: 第三步,连接Oracle数据库: IPropertySet propertySet = new PropertySetClass(); propertySet.SetProperty("CONNECTSTRING", "Provider=oraoledb.oracle;Data Source=test;User Id=test;Password=test"); IWorkspaceFactory workspaceFactory = new OLEDBWorkspaceFactoryClass(); IFeatureWorkspace featureWorkspace = workspaceFactory.Open(propertySet, 0) as IFeatureWorkspace; //写法一可以分类,但得不到统计结果 IQueryDef queryDef = featureWorkspace.CreateQueryDef(); queryDef.SubFields = "count(id),distric_id"; queryDef.Tables = "(select * from element where type_id<>1 and type_id<>2) group by distric_id"; //写法二直接报错,说SQL语句未完成之类 //IQueryDef queryDef = featureWorkspace.CreateQueryDef(); //queryDef.SubFields = "count(id),distric_id"; //queryDef.WhereClause = "type_id<>1 and type_id<>2"; //queryDef.Tables = “element group by distric_id"; 第二步,转换: IQueryName2 queryName = new TableQueryNameClass(); queryName.QueryDef = queryDef; IDataset dataset = featureWorkspace as IDataset; IWorkspaceName workspaceName = dataset.FullName as IWorkspaceName; IDatasetName datasetName = queryName as IDatasetName; datasetName.WorkspaceName = workspaceName; datasetName.Name = "ReleTable"; IName name = queryName as IName; ITable releTable = name.Open() as ITable; 目前代码测试到这里,releTable 里可以按distric_id进行分组排序,但是count(id)不起作用,直接变成releTable的字段count(id),值为null 此时使用ICursor cursor = queryDef.Evaluate();测试过,cursor里的count(id)确实是没用进行聚合统计。 或许此时有人会说,怎么不用统计接口呢? IDataStatistics dataStatistics = new DataStatisticsClass(); …… IStatisticsResults statisticsResults = dataStatistics.Statistics; 但这些统计接口也达不到目标,不能按distric_id区域ID进行数量统计,统计的字段只能为数值类型,而我的distric_id区域ID为Guid类型,使用便出错。 还有本人的最终目标是将表格的数据按区域进行分类统计,得到各个区域的元素总数,然后和区域图层关联,在区域图层里以柱状图显示各区域的元素数量。 这个元素表是一个独立的Oracle数据表,不是空间数据表,除了区域ID能与区域图层的区域ID字段关联,没有其它关系。 图层与外部普通表格数据关联,本人查到的资料是需将外部普通表转换为ITable类型然后才能进行关联,还有一些其它办法,就是以SQL查询出统计结果,然后保存为各种GIS数据类型,然后再读取,再与区域图层关联,但这种设计不敢恭维。 不知道各位能否找出本人写的代码存在什么问题吗?或许有其它更好的办法 请指教
  • 相关阅读:
    android_firewall or Droidwall http://code.google.com/p/droidwall/
    CMDProcessorLibrary
    Pimp_my_Z1
    HoloGraphLibrary
    程序猿正本清源式进化的意义
    UnsatisfiedLinkError: No implementation found for , AndroidStudio使用*.so
    HUNNU-10307-最优分解问题
    Spring声明式事务
    【献给CWNU的师弟】Web篇
    迪科斯彻算法总结
  • 原文地址:https://www.cnblogs.com/adodo1/p/4327230.html
Copyright © 2011-2022 走看看