使用iServer JAVA API访问iServer数据服务进行数据操作示例

本文主要是介绍使用iServer JAVA API访问iServer数据服务进行数据操作示例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作者:MR

    之前一篇博客(SuperMap iServer JAVA API介绍)介绍了SuperMap iServer JAVA API(以下简称JAVA API)用处、用法,本篇介绍JAVA API访问iServer数据服务的具体应用,并提供工程源码下载。作为示例,这里使用eclipse创建一个控制台应用。
###一、创建JAVA工程&主类
    创建一个Java工程,工程下新建lib文件夹,复制%iServerROOT%\WEB-INF\lib\iserver-all-8.1.1-14511.jarlib文件夹里,并将iserver-all-8.1.1-14511.jar右键添加到Build Path里。
    本文新建一个包,命名dataSample,其下创建一个类,命名DataSample,添加main方法。工程结构如图(JDK1.8):

目录

###二、获取数据服务提供者
    本文访问的数据服务REST资源根目录如下:

http://support.supermap.com.cn:8090/iserver/services/data-world/rest

    创建/释放RestDataProvider方法如下:

	/*** @param RootURL*            数据服务REST资源根目录* @return*/private static RestDataProvider getDataProvider( String rootURL ){// 服务提供者设置RestDataProviderSetting ProviderSetting = new RestDataProviderSetting( );ProviderSetting.restServiceRootURL = rootURL;// 创建服务提供者return new RestDataProvider( ProviderSetting );}/*** @param provider*            待释放资源的服务提供者对象*/private static void dispose( RestDataProvider provider ){if ( provider != null ){provider.clearCache( );provider.dispose( );}}

    RestDataProvider类参考最新在线地址如下(建议使用CHM格式):

http://support.supermap.com.cn:8090/iserver/help/html/mergedProjects/iServerJavadoc/com/supermap/services/providers/RestDataProvider.html

###三、业务逻辑实现

    接下来就可以使用服务提供者对象提供的方法实现各种业务逻辑了,本文实现创建一个点数据集并添加点。main方法如下:

private static final String DATAURL = "http://support.supermap.com.cn:8090/iserver/services/data-world/rest";/*** @param args*/public static void main( String[ ] args ){long start = System.currentTimeMillis( );RestDataProvider dataProvider = getDataProvider( DATAURL );final String datasourceName = "World";final String copyDSName = "Capitals";final String newDSName = "TESTPoints";// 新建数据集(这里就不new完挨着赋值了,复制一个,目前通过REST API创建数据集不支持设置字段)Boolean flag = true;try{if ( dataProvider.copyDataset( datasourceName, copyDSName, datasourceName, newDSName ) ){System.out.println( copyDSName + " 数据集已复制,新数据集为 " + newDSName );} else{flag = false;}} catch ( Exception e ){System.out.println( newDSName + " 数据集已存在" );}if ( flag && dataProvider.clearFeatures( datasourceName, newDSName ) ){System.out.println( newDSName + "数据集已清空" );int[ ] ids = new int[ ] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };List< Feature > targetFeatures = dataProvider.getFeature( datasourceName, copyDSName, ids, null );// 未指定全部字段及对应字段值Feature pt1 = new Feature( );pt1.fieldNames = new String[ ] { "CAPITAL" };pt1.fieldValues = new String[ ] { "零零" };pt1.geometry = new Geometry( );pt1.geometry.parts = new int[ ] { 1 };pt1.geometry.points = new Point2D[ ] { new Point2D( 0.0, 0.0 ) };targetFeatures.add( pt1 );EditResult result = dataProvider.addFeatures( datasourceName, newDSName, targetFeatures );System.out.println( newDSName + "数据集增加要素是否成功:" + result.succeed );System.out.println( newDSName + "数据集增加要素数量:" + result.ids.length );}// // 数据集信息// DatasetInfo tempif = dataProvider.getDatasetInfo( datasourceName,// copyDSName );// DatasetVectorInfo dsvctif = new DatasetVectorInfo(// (DatasetVectorInfo) tempif );// dsvctif.name = newDSName;//// // 创建点数据集// if ( dataProvider.createDataset( datasourceName, dsvctif ) )// {// System.out.println( "创建数据集 " + newDSName + "成功!所有数据集如下:" );// List< String > dtnms = dataProvider.getDatasetNames( datasourceName// );// for ( String s : dtnms )// {// System.out.println( s );// }// System.out.println( "-------------------" );// // 创建成功添加点// int[ ] ids = new int[ ] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };// List< Feature > targetFeatures = dataProvider.getFeature(// datasourceName, copyDSName, ids, null );// EditResult result = dataProvider.addFeatures( datasourceName,// newDSName, targetFeatures );// System.out.println( newDSName + "数据集添加要素是否成功?" + result.succeed );// System.out.println( newDSName + "数据集添加要素数量" + result.ids.length );// System.out.println( newDSName + "数据集删除结果: " +// dataProvider.deleteDataset( datasourceName, newDSName ) );// }dispose( dataProvider );System.out.println( "done,cost:" + ( System.currentTimeMillis( ) - start ) );}

    运行时会有报错**java.lang.NoClassdeFoundError,这是因为我们虽然都只使用了iserver-all-8.1.1-14511.jar包里的方法,但是该包还会import别的包,所以编译没错,运行时就会报错了,目前暂无便捷的依赖管理工具去自动列出需要的依赖项,只能手动和根据报错添加依赖的包;反编译查看import也不是很好用,需要反编译你使用的类,找到它的依赖、依赖的依赖…,所以本文建议排除法,JAVA API所有的依赖都在%iServerROOT%\WEB-INF\lib目录下,把这些jar包都加到Build Path就行了,并且,已知本文使用的方法不涉及SuperMap iObjects Java**,所以可以去掉com.supermap开头的(即Java组件的)的jar包,也不需要配置Java组件环境,剩下的jar先通过文件名排除一部分,然后一个一个去掉看运行结果来排除剩下的。

###结果

结果

###其他&下载
    可以输出工程为jar,使用java命令运行(可以写成批处理脚本或shell脚本)即可,本文不再介绍。
    排除无用jar包后的工程如下,使用eclipse打开工程即可运行查看结果。

使用iServer JAVA API访问iServer数据服务进行数据操作示例工程
http://download.csdn.net/detail/supermapsupport/9833944

这篇关于使用iServer JAVA API访问iServer数据服务进行数据操作示例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/745216

相关文章

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

SpringBoot实现不同接口指定上传文件大小的具体步骤

《SpringBoot实现不同接口指定上传文件大小的具体步骤》:本文主要介绍在SpringBoot中通过自定义注解、AOP拦截和配置文件实现不同接口上传文件大小限制的方法,强调需设置全局阈值远大于... 目录一  springboot实现不同接口指定文件大小1.1 思路说明1.2 工程启动说明二 具体实施2

Python中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

SpringBoot日志级别与日志分组详解

《SpringBoot日志级别与日志分组详解》文章介绍了日志级别(ALL至OFF)及其作用,说明SpringBoot默认日志级别为INFO,可通过application.properties调整全局或... 目录日志级别1、级别内容2、调整日志级别调整默认日志级别调整指定类的日志级别项目开发过程中,利用日志

Java中的抽象类与abstract 关键字使用详解

《Java中的抽象类与abstract关键字使用详解》:本文主要介绍Java中的抽象类与abstract关键字使用详解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、抽象类的概念二、使用 abstract2.1 修饰类 => 抽象类2.2 修饰方法 => 抽象方法,没有

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版