您的位置:首页 > 其它

论坛里关于ArcEngine二次开发的分类统计的问题

2012-07-16 16:05 363 查看
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数据类型,然后再读取,再与区域图层关联,但这种设计不敢恭维。
不知道各位能否找出本人写的代码存在什么问题吗?或许有其它更好的办法
请指教
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: