使用SuperMap iObjects for Java组件扩展SuperMap iServer领域组件服务

作者:dongyx

       在SuperMap iServer产品中封装了大部分的GIS功能,比如基本的地图功能、二三维空间分析功能等,但是在使用上设置的条件都是固定的,用户没法根据自己的应用场景来自定义分析条件。本文将重点介绍使用SuperMap iServer REST API和SuperMap iObjects for Java(以下简称Java组件)来扩展iServer领域组件服务,本文以通过TIN地形或者模型数据缓存提取三维数据为场景,作为示例编写扩展服务。
       一、REST API和Java组件介绍
       SuperMap iServer 提供了基于 REST 的应用编程接口——SuperMap iServer REST API,这些接口封装了大部分的 GIS 功能,包括基本的地图功能,数据编辑功能,分析功能等。SuperMap iServer 将这些 GIS 功能通过 SuperMap iServer REST API 提供给客户端,客户端使用这些 API,能够获取到相应的 GIS 能力。有关 SuperMap iServer REST Service 的使用请参见帮助文档中 REST API 一节,REST API 着重讲述了 SuperMap iServer 提供的 REST 式服务情况和资源列表。访问资源的时候需要传递的参数,资源的响应结构,在其中都有详细的介绍。
使用SuperMap iObjects for Java组件扩展SuperMap iServer领域组件服务_第1张图片
       SuperMap iObjects Java 是SuperMap Objects 家族中的一员,是基于超图共相式 GIS 内核进行开发的,采用 Java 技术的组件式 GIS 开发平台。SuperMap iObjects Java 9D 具有丰富、强大的GIS功能,Java组件提供了包括地图可视化、数据处理等GIS基础功能,还包括了强大的GIS空间分析、网络分析以及三维数据处理、展示、分析一体化。
使用SuperMap iObjects for Java组件扩展SuperMap iServer领域组件服务_第2张图片
二、功能的开发
1.JSON数据的解析
       在前后端传输时大部分是以JSON格式的数据来进行传输,而且我们提供的REST API中发送GET请求返回的也是JSON数据,这时解析JSON数据就尤为重要了。JSON数据的常用格式如下:

{"LayerNames":[["dixin","ddd"],["djjj"]],
 "URL":"http://192.168.15.69:8090/iserver/services/3D-dixin/rest/realspace", 
 "SceneNames":["dixin","ddd"], 
 "Point2Ds":["114,35,0","115.567808730122,39.9779554893349,0"]}

       JSON最常用的格式是对象的 键值对,如”LayerNames”为JSON的键,冒号后面的数组为这个键的值。那么如何去获取JSON里面的值呢,在Java语言中提供了JSONObject和JSONArray两个类,如果值不是一个数组的形式可以直接通过JSONObject来获取:

JSONObject json = JSONObject.fromObject(json2);
String url = (String) json.get("URL");

       如果值是一个数组,当然也可能是数组中嵌套了一个数组,下面以一个简单的数组来举例:

JSONArray arrayLayer = json.getJSONArray("LayerNames");
JSONArray jsonArray = JSONArray.fromObject(arrayLayer.get(i));
String[] layerNames = new String[jsonArray.size()];
for(int layer=0;layer

       我们在这个示例中所输入的参数就是一个json对象,所以我们在一开始就需要解析这个对象,然后通过REST API发送GET请求。
2.使用REST API发送GET请求,获取模型缓存的绝对路径和TIN地形的绝对路径,比如在iserver上可以进入到图层节点,然后点击右边的rjson,会返回一个json对象,如:
使用SuperMap iObjects for Java组件扩展SuperMap iServer领域组件服务_第3张图片
       在这个json对象中可以看到图层的绝对路径位置、图层类型等等,在iserver中也给我们提供了REST API,然后通过Java的URLConnection和URL实例来发送get请求,请求成功后会返回一个String对象,然后转换为JSON对象。
3.Java功能的开发
       本文所提到的应用场景,通过模型或者地形数据来获取三维数据的功能就需要用Java组件来实现了,实现这个功能使用的接口CacheProcessor3D缓存处理类,实现代码如下:
       地形匹配三维点:

ArrayList resultGeometry = new ArrayList<>();
resultGeometry = CacheProcessor3D.geometryMatchTIN(data, geometryList);
if(!resultGeometry.isEmpty()) {
		pointZ = resultGeometry.get(0).getPosition().z;
		System.out.println("高度为:"+pointZ);
	    pointzs[pointNum] =String.valueOf(pointZ);
       	   }

       模型匹配三维点:

ArrayList resultGeometry = new ArrayList<>();
resultGeometry = CacheProcessor3D.geometryMatch(data, geometryList);
if(!resultGeometry.isEmpty()) {
	 for(int re = 0;re

       如果想用地形匹配三维线,可以在参数中传入二维线几何对象即可。工程源码和json对象地址:Extract
4.环境配置
       完成所有功能开发后,就需要配置环境了,将工程导出为普通的jar包即可,在工程上,“鼠标右键”–“Export”–“选择Java jar file”–“填写存储jar的路径及名称”–“一直next”–“finish”。即可生成Extract.jar包文件。
使用SuperMap iObjects for Java组件扩展SuperMap iServer领域组件服务_第4张图片
       将上面生成的calculate.jar文件拷贝到iServer产品安装目录下…\webapps\iserver\WEB-INF\lib文件夹下。
       添加服务组件,进入iServer产品安装目录下…\webapps\iserver\WEB-INF文件夹下,编辑iServer服务配置文件iserver-services.xml,将下列代码添加到components节点内部。
在这里插入图片描述
       启动iServer服务,进入iServer产品的bin目录,运行startup.bat批处理文件。
       进入服务列表,在领域服务组里找到Extract/rest服务,填写json串,执行即可
使用SuperMap iObjects for Java组件扩展SuperMap iServer领域组件服务_第5张图片
使用SuperMap iObjects for Java组件扩展SuperMap iServer领域组件服务_第6张图片
       执行结果如下:
在这里插入图片描述

你可能感兴趣的:(组件GIS,云GIS)