人们常说,计划赶不上变化。同样的,在项目中,使用的数据也是在不断变化的,尤其是属性信息的改变。就比如说,地图上的地物,它的空间信息在比较长的时间内,都不会发生变化,他的属性信息在初期不完整或者与后来的信息不符合,这时就可以使用SuperMap iClient for JavaScript 的关联查询。 
      那如何进行关联查询呢?不急,我们先在iClient for JavaScript中去找找与关联查询相关的类或接口。 
      首先,JavaScript客户端内,查询从分布的服务类别可区分为两类,一是基于地图服务的查询,一种是基于数据服务的查询;按照查询参数的不同有可分为SQL,几何,范围,距离,缓冲区查询。这里主要给大家分享一下基于地图服务的查询。 
      基于地图服务的查询参数基类为SuperMap.REST.QueryParameters,下图展示了该类的属性接口

 
     通过上面的图表,我们能够直观地了解到每个属性参数所代表的意义,这里就不一一讲解了,主要说一下红框所标示的queryParams所对应的查询过滤条件参数类–SuperMap.REST.FilterParameter。首先,我们同样通过一张图表来看看该类包含了哪些属性接口 
 
      没错,关联查询所要用到的接口,就出现在这里了。那我们就来好好研究研究JoinItemLinkItem吧。

待查询数据集与外部表属于同一数据源

SuperMap.REST.JoinItem,连接信息类。 该类用于定义矢量数据集与外部表的连接信息。 外部表可以为另一个矢量数据集(其中纯属性数据集中没有空间几何信息)所对应的 DBMS(Database Management System,数据库管理系统)表, 也可以是用户自建的业务表。需要注意的是,矢量数据集与外部表必须属于同一数据源。 用于连接两个表的字段的名称不一定相同,但类型必须一致。即同为整型,或同为字符型等。

 
      这样看这张图表,可能会觉得有的繁琐,那我们就直接通过下面的一段代码,直观的感受下JoinItem的用法, 代码所用到的数据是iserver自带的map-world。

 function queryBySQL() {
vectorLayer.removeAllFeatures();
//设置外部表的连接信息
var joinitem=new SuperMap.REST.JoinItem({
//外部表的名称
foreignTableName: "Capitals",
//建立查询数据与外部表之间的连接字段
joinFilter: "Capitals.SmID = Countries.SmID",
//有两种连接类型 一是左连接("LEFTJOIN")二是等值连接("INNERJOIN")
joinType: "LEFTJOIN"
});
var queryParam, queryBySQLParams, queryBySQLService;
queryParam = new SuperMap.REST.FilterParameter({
//待查询图层名
name: "Countries@World.1",
attributeFilter: "Countries.SmID=5",
joinItems:[joinitem]
//可设置返回的字段数组 这里不进行设置 即返回所有属性字段
//fields:[]
});
queryBySQLParams = new SuperMap.REST.QueryBySQLParameters({
queryParams: [queryParam]
});
queryBySQLService = new SuperMap.REST.QueryBySQLService(url, {
eventListeners: {
"processCompleted": processCompleted,
"processFailed": processFailed}});
queryBySQLService.processAsync(queryBySQLParams);
}

这里需要提醒大家一下,当外部表也是数据源内的矢量数据集时,不要混淆foreignTableName这个参数和查询参数queryParam内name这个属性的写法,foreignTableName即是数据集名,而非地图内所对应的图层名,因此上面的代码中,外部表为Capitals,而非Capitals@World.1。 
      查询成功后,返回的结果中的地物不仅有地物本身的属性信息,还包含外部表所包含的属性信息。

待查询数据集与外部表属于不同数据源

SuperMap.REST.LinkItem关联信息类,该类用于定义矢量数据集与外部表之间的关联信息。使用 LinkItem 的约束条件:空间数据和属性数据必须有关联条件,即主空间数据集与外部属性表之间存在关联字段。 主空间数据集:用来与外部表进行关联的数据集。下面两张图表为LinkItem所用到的参数信息。 

同样的,我们直接通过代码来理解LinkItem这个类

 function queryBySQL() {
// 设置关联的外部数据库信息,alias表示数据库别名
var dc = new SuperMap.REST.DatasourceConnectionInfo({
dataBase: "RelQuery",
server: "192.168.168.39",
user: "sa",
password: "map",
driver: "SQL Server",
connect: true,
OpenLinkTable: false,
alias: "RelQuery",
engineType: SuperMap.REST.EngineType.SQLPLUS,
readOnly: false,
exclusive: false
});
// 设置关联信息
var linkItem = new SuperMap.REST.LinkItem({
datasourceConnectionInfo: dc,
foreignKeys: ["name"],
foreignTable: "Pop_2011",
linkFields: ["SmID as Pid","pop"],
name: "link",
primatryKeys: ["name"],
});
// 设置查询参数,在查询参数中添加linkItem关联条件信息
var queryParam, queryBySQLParams, queryBySQLService;
queryParam = new SuperMap.REST.FilterParameter({
name: "Province@RelQuery",
fields: ["SmID","name"],
attributeFilter: "SmID<7",
linkItems: [linkItem]
}),
queryBySQLParams = new SuperMap.REST.QueryBySQLParameters({
queryParams: [queryParam]
}),
queryBySQLService = new SuperMap.REST.QueryBySQLService(url, {
eventListeners: {
"processCompleted": processCompleted,
"processFailed": processFailed
}
});
queryBySQLService.processAsync(queryBySQLParams);
}

这里需要注意server以及driver这两个参数 
 

除了使用linkItem关联查询不同数据源的数据,其实也可使用joinItem,这时,你可能会说,这和前面所介绍的joinItem必须在同一数据源内有冲突。然而并没有,使用joinItem时,是需要在待查询数据集所在的数据源内新建视图,故查询的是视图,而非其他数据源内的表。那么如何创建视图,可能很多朋友都已经知道了,这里以oracle数据库为例,给大家简要介绍一下。在sqlplus窗口,输入以下代码:

 create or replace view link as //创建或替换一个名为link的视图
select * //查找的字段
from //外部表
where //查找条件

建立视图后,就可以直接使用joinItem进行关联查询,请看以下代码

 var joinitem=new SuperMap.REST.JoinItem({
foreignTableName: "LINK", //填写视图名
joinFilter: "LINK.SMID = SamplesP.SmID", //关联字段
joinType: "INNERJOIN"
});

到这里,你就已经学会如何使用SuperMap iClient for JavaScript 的关联查询了。赶快去你的项目中,实践一下吧。

SuperMap iClient for JavaScript 之关联查询的更多相关文章

  1. SuperMap iClient for JavaScript 新手入门

    地理信息系统(英语:Geographic Information System,缩写:GIS)是一门综合性学科,结合地理学与地图学,已经广泛的应用在不同的领域,是用于输入.存储.查询.分析和显示地理数 ...

  2. SuperMap iClient for JavaScript初入

    SuperMap iClient for JavaScript初入 介绍SuperMap for Js的简单使用. 推荐先看下这篇文档:SuperMap iClient for JavaScript ...

  3. SuperMap iClient for JavaScript image出图

    SuperMap iClient for JavaScript 客户端基于openlayers 开发. 目前最高版本为811,9D产品后推荐客户使用leaflet.openlayers客户端开发. 问 ...

  4. 浅谈Supermap iClient for JavaScript 弹窗类

    地图作为信息的载体和呈现方式,是GIS的重要组成部分,它是一个浏览信息的窗口,在信息日益发达的今天 ,各种地图应用如雨后春笋一般出现在大众眼前,而不是像以往一样太过局限于专业的领域.而弹窗,是作为地图 ...

  5. mongodb操作之使用javaScript实现多表关联查询

    一.数据控制 mongodb操作数据量控制,千万控制好,不要因为操作的数据量过多而导致失败. 演示一下发生此类错误的错误提示:

  6. SuperMap iClient 7C——网络客户端GIS开发平台 产品新特性

    SuperMap iClient 7C是空间信息和服务的可视化交互开发平台,是SuperMap服务器系列产品的统一客户端.产品基于统一的架构体系,面向Web端和移动端提供了多种类型的SDK开发包,帮助 ...

  7. RDIFramework.NET 中多表关联查询分页实例

    RDIFramework.NET 中多表关联查询分页实例 RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架,给用户和开发者最佳的.Net框架部署方案.该框架以SOA范式作为 ...

  8. SuperMap iClient

    SuperMap iClient 7C——网络客户端GIS开发平台 产品新特性   SuperMap iClient 7C是空间信息和服务的可视化交互开发平台,是SuperMap服务器系列产品的统一客 ...

  9. Mongoose如何实现统计查询、关联查询

    [问题]Mongoose如何实现统计查询.关联查询  发布于 4 年前  作者 a272121742  13025 次浏览 最近业务上提出一个需求,要求能做统计,我们设计的文档集,统计可能跨越的文档会 ...

随机推荐

  1. Thrift辅助类,用于简化Thrift编程

    CThriftServerHelper用于服务端,CThriftClientHelper用于客户端. IDL定义: service PackageManagerService { } 服务端使用示例: ...

  2. Alpha冲刺 - (9/10)

    Part.1 开篇 队名:彳艮彳亍团队 组长博客:戳我进入 作业博客:班级博客本次作业的链接 Part.2 成员汇报 组员1(组长)柯奇豪 过去两天完成了哪些任务 进一步优化代码,结合自己负责的部分修 ...

  3. WCF 学习笔记

    Windows Communication Foundation (WCF) 是用于构建面向服务的应用程序的框架.借助 WCF,可以将数据作为异步消息从一个服务终结点发送至另一个服务终结点.服务终结点 ...

  4. 在线测试正则表达式工具 jQuery.Validate验证库

    http://www.jb51.net/tools/zhengze.html http://www.cnblogs.com/weiqt/articles/2013800.html  

  5. cenos7切换阿里源

    备份并安装base reop源 cd /etc/yum.repos.d sudo mv CentOS-Base.repo CentOS-Base.repo.bak 下载阿里源并配置 sudo wget ...

  6. xe7 android如何打包SQLITE数据库

    点击 project->deployment 增加你的SQLite 文件  即可.记住 remotepath 选择assets\internal

  7. python,使用百度api实现复制截图中的文字

    百度云文字识别技术文档: 跳转 第三方模块安装: pip install baidu-aip pip install Pillow pip install keyboard pip install p ...

  8. Web Server 在IIS上部署ASP.NET Core项目

    在IIS上部署ASP.NET Core项目 一.配置应用程序池为无托管: 二.安装ASPNETCoreModule:(核心) 下载地址:https://go.microsoft.com/fwlink/ ...

  9. socket-详细分析No buffer space available(转载)

    文章原文出处:http://www.cnblogs.com/hjwublog/p/5114380.html 今天在公司服务器上部署运行的后台程序出现大面积接口无法调用的问题,查看后台控制台打印如下信息 ...

  10. Python进程间通信之共享内存

    前一篇博客说了怎样通过命名管道实现进程间通信,但是要在windows是使用命名管道,需要使用python调研windows api,太麻烦,于是想到是不是可以通过共享内存的方式来实现.查了一下,Pyt ...