博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SuperMap iClient for JavaScript 之连接查询-JoinItem
阅读量:4163 次
发布时间:2019-05-26

本文共 2974 字,大约阅读时间需要 9 分钟。

#SuperMap iClient for JavaScript 之连接查询-JoinItem

作者:Hyacinth

      人们常说,计划赶不上变化。同样的,在项目中,使用的数据也是在不断变化的,尤其是属性信息的改变。就比如说,地图上的地物,它的空间信息在比较长的时间内,都不会发生变化,他的属性信息在初期不完整或者与后来的信息不符合,这时就可以使用SuperMap iClient for JavaScript 的连接查询。

      那如何进行连接查询呢?不急,我们先在iClient for JavaScript中去找找与连接查询相关的类或接口。
      首先,JavaScript客户端内,查询从分布的服务类别可区分为两类,一是基于地图服务的查询,一种是基于数据服务的查询;按照查询参数的不同有可分为SQL,几何,范围,距离,缓冲区查询。这里主要给大家分享一下基于地图服务的查询。
      基于地图服务的查询参数基类为SuperMap.REST.QueryParameters,下图展示了该类的属性接口

这里写图片描述

     通过上面的图表,我们能够直观地了解到每个属性参数所代表的意义,这里就不一一讲解了,主要说一下红框所标示的queryParams所对应的查询过滤条件参数类–SuperMap.REST.FilterParameter。首先,我们同样通过一张图表来看看该类包含了哪些属性接口
这里写图片描述
      没错,连接查询所要用到的接口,就出现在这里了。那我们就来好好研究研究JoinItem
###待查询数据集与外部表属于同一数据源
      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。

      查询成功后,返回的结果中的地物不仅有地物本身的属性信息,还包含外部表所包含的属性信息。值得注意的是,当你的外部表是自己创建的业务表,而非桌面软件iDesktop新建的表时,这是你需要设置fields参数,设置返回的字段数组,这样才会得到外部表的字段。
###待查询数据集与外部表属于不同数据源
      同样可使用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 的连接查询了。赶快去你的项目中,实践一下吧。

你可能感兴趣的文章
java中的异常机制
查看>>
java SE面向对象思维导图
查看>>
三维分析之视频投放
查看>>
SuperMap iDesktop之栅格值怎么查
查看>>
SuperMap iClient3D for WebGL教程-orientation
查看>>
SuperMap iClient3D for WebGL教程-description描述属性
查看>>
SuperMap iClient3D for WebGL教程-CallbackProperty
查看>>
如何修改leaflet聚合图的层级和样式
查看>>
三维分析之开敞度分析
查看>>
BIM+GIS应用的八大挑战
查看>>
.net实现.aspx页面自动加载.cs程序定义的变量并按照格式输出
查看>>
Spark总结整理(八):Spark Core 性能优化思路、步骤总结
查看>>
实时组件(SparkStreaming VS Flink)容错及语义说明
查看>>
浏览器地址栏输入URL,按下回车后发生了什么
查看>>
linux常用命令
查看>>
网络请求返回HTTP状态码
查看>>
autojs 图片查找比对
查看>>
css 自定义滚动条样式
查看>>
auto js 线程测试
查看>>
ie9走过的坑
查看>>