本文共 3103 字,大约阅读时间需要 10 分钟。
作者:皇皇
一、 业务表和视图跟数据集表的不同
SuperMap中Oracl数据是通过Oracl数据源(Datasource:是存储空间数据的场所)统一管理的,所以客户直接在数据库里面创建的业务表和视图就无法在打开的Oracl数据源里面查看到。 用SuperMap iDesktop 7C打开Oracl数据源,可以查看到点数据集Capital,但无法找到业务表,如图一。 图一 在PL/SQL工具中,用Oracl数据源相同的用户打开数据库,可以查询到业务表BUSINESSTABLE1和BUSINESSTABLE1, 如图二。 图二二、 关联业务表或者视图做专题图
虽然数据源里面找不到业务表,但是我们依然可以在SuperMap中使用。 下面我们用业务表BUSINESSTABLE1的COUNTRY_CH字段值给点数据集Capital制作标签专题图为例,给大家演示如何在SuperMap中使用业务表。 1. 关联业务表制作标签专题图 通过SQL语句”select * from BUSINESSTABLE1”查询可以看见业务表BUSINESSTABLE1的内容: COUNTRY_CH字段的值; Capital表和业务表BUSINESSTABLE1的关联字段是smid。如图三。 图三 以下代码示范如何用关联字段smid构造一个连接信息类,用业务表的COUNTRY_CH字段值制作标签专题图。结果如图四。public void JoinItemSample() { // 从数据源里得到名为 “Capital”的数据集 Dataset dataset = workspace.Datasources[0].Datasets["Capital"]; // 构造连接信息类对象,获得用于连接的表名 JoinItem joinitem = new JoinItem(); // 设置连接信息类的属性 String foreignTableName = "BUSINESSTABLE1"; joinitem.ForeignTable = foreignTableName; joinitem.JoinFilter = "Capital.smid =" + foreignTableName + ".smid"; joinitem.JoinType = JoinType.LeftJoin; joinitem.Name = "连接"; // 设置连接信息集合类,将连接信息加入到连接信息集合中 JoinItems joinitems = new JoinItems(); joinitems.Add(joinitem); QueryParameter queryParameter = new QueryParameter(); queryParameter.JoinItems = joinitems; //生成默认的标签专题图 ThemeLabel themeLabel = new ThemeLabel(); //设置表达式 themeLabel.LabelExpression = foreignTableName +".COUNTRY_CH"; //添加标签图层 Layer layerThemeLable = this.mapControl.Map.Layers.Add(dataset, themeLabel, true); layerThemeLable.DisplayFilter = queryParameter; mapControl.Map.Refresh(); }图四 2. 关联视图做专题图 如果我们用到的数据不在同一张业务表,就需要先把业务表按照要求创建视图再用上面的方法在SuperMap中使用。 以下示范如何把两张业务表用SQL语句创建视图,然后用视图制作标签专题图。 要求:是把业务表BUSINESSTABLE1的COUNTRY_CH字段值和业务表BUSINESSTABLE2的CAPITAL_CH字段值组成一个字段值VWNAME,用以创建标签专题图。 创建视图的SQL语句: create view vw_CAPITAL as select BUSINESSTABLE1.SMID, (BUSINESSTABLE1.COUNTRY_CH || BUSINESSTABLE2.CAPITAL_CH) as vwname from BUSINESSTABLE1 join BUSINESSTABLE2 on BUSINESSTABLE1.Smid=BUSINESSTABLE2.SMID; 业务表BUSINESSTABLE1 业务表BUSINESSTABLE2 创建的视图vw_CAPITAL 创建的视图vw_CAPITAL使用方法和业务表一样。结果如图五
三、 关联业务表或者视图进行SQL查询
除了制作专题图之外,我们还可以关联外部表和视图进行查询 以下代码示范如何构造一个连接信息类,关联视图进行SQL查询。JoinItem joinitem = new JoinItem();String foreignTableName = "vw_CAPITAL";// 设置连接信息类的属性joinitem.ForeignTable = foreignTableName;joinitem.JoinFilter = "Capital.smid=" + foreignTableName + ".smid";joinitem.JoinType = JoinType.LeftJoin;joinitem.Name = "连接";// 设置连接信息集合类,将连接信息加入到连接信息集合中JoinItems joinitems = new JoinItems();joinitems.Add(joinitem);// 设置查询参数QueryParameter parameter = new QueryParameter();parameter.JoinItems = joinitems;//连接外部表parameter.CursorType = CursorType.Static;parameter.HasGeometry = false;parameter.ResultFields = new String[] { "Capital.*",foreignTableName + ".vwname" };Recordset rec = dtv_C.Query(parameter);
查询结果保存在Recordset里面,再用于其他操作,业务表查询方法相同。我们把查询结果用表格展示出来。未关联视图时SQL查询结果如图六,关联视图时SQL查询结果如图七。
图六 图七注意:做以上操作首先保证这些表格都在同一个用户下,再者需要有关联字段。