使用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.jar到lib文件夹里,并将lib文件夹下的iserver-all-8.1.1-14511.jar右键添加到Build Path里。
    本文新建一个包,命名spatialAnalystSample,其下创建一个类,命名SpatialAnalystSample,添加main方法。工程结构如图(JDK1.8):

使用iServer JAVA API访问iServer空间分析服务进行叠加分析示例_第1张图片

###二、获取空间服务提供者

    本文访问的空间分析服务REST资源根目录如下:

http://support.supermap.com.cn:8090/iserver/services/spatialanalyst-changchun/restjsr

    创建/释放RestSpatialAnalystProvider方法如下:

	/**
	 * @param RootURL
	 *            空间分许服务REST资源根目录
	 * @return RestSpatialAnalystProvider
	 */
	private static RestSpatialAnalystProvider getAnalystProvider( String rootURL )
	{
		// 服务提供者设置
		RestSpatialAnalystProviderSetting setting = new RestSpatialAnalystProviderSetting( );
		setting.restServiceRootURL = rootURL;
		// 创建服务提供者
		return new RestSpatialAnalystProvider( setting );
	}

	/**
	 * @param provider
	 *            待释放资源的服务提供者对象
	 */
	private static void dispose( RestSpatialAnalystProvider provider )
	{
		if ( provider != null )
		{
			provider.clearCache( );
			provider.dispose( );
		}
	}

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

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

###三、业务逻辑实现

    接下来就可以使用服务提供者对象提供的方法实现各种业务逻辑了,本文实现对两个数据集里满足指定条件的要素求交集main方法如下:

	private static final String SPASURL = "http://support.supermap.com.cn:8090/iserver/services/spatialanalyst-changchun/restjsr";

	/**
	 * @param args
	 */
	public static void main( String[ ] args )
	{
		long start = System.currentTimeMillis( );
		RestSpatialAnalystProvider spatialProvider = getAnalystProvider( SPASURL );
		// 设置分析的结果
		DataReturnOption option = new DataReturnOption( );
		option.dataReturnMode = DataReturnMode.DATASET_AND_RECORDSET;// 设置数据返回模式:l另存数据集和返回记录集对象
		option.dataset = "analystTemp"; // 结果保存到的数据集名称
		option.deleteExistResultDataset = true;// 如果analystTemp与已有的数据集重名,删除已有的数据集
		option.expectCount = 0; // 返回所有记录

		DatasetOverlayResultSetting setting = new DatasetOverlayResultSetting( ); // 数据集叠加分析结果设置类
		setting.dataReturnOption = option;
		// 指定返回结果的保留字段
		setting.sourceDatasetFields = new String[ ] { "name", "x", "y" };
		setting.operateDatasetFields = new String[ ] { "ClassID" };

		// 查询条件
		QueryParameter sourceQueryParameter = new QueryParameter( );// 数据集的查询参数
		sourceQueryParameter.name = "Park"; // 指定要查询的数据集
		sourceQueryParameter.attributeFilter = "SmID>0"; // 指定数据集的查询条件

		QueryParameter operateQueryParameter = new QueryParameter( );// 数据集的查询参数
		operateQueryParameter.name = "Frame_R";// 指定要叠加的数据集
		operateQueryParameter.attributeFilter = "SmID>0"; // 指定数据集的查询条件

		// 获取和处理结果
		// 数据集空间分析结果类 取得2数据集相交的结果
		DatasetSpatialAnalystResult intersectResult = spatialProvider.intersect( "Park@Changchun", sourceQueryParameter,
				"Frame_R@Changchun", operateQueryParameter, setting );// 获取叠加分析结果
		if ( intersectResult.succeed )
		{
			System.out.println( "叠加分析成功,返回结果数为:" + intersectResult.recordset.features.length );

			System.out.println( "返回的结果数据集字段如下:" );
			for ( String field : intersectResult.recordset.fields )
			{
				System.out.println( field );
			}
		} else
		{
			System.out.println( "叠加分析失败!" );
		}

		System.out.println( "done,cost:" + ( System.currentTimeMillis( ) - start ) );
		dispose( spatialProvider );
	}

    运行时会有报错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先通过文件名排除一部分,然后一个一个去掉看运行结果来排除剩下的。

###结果

使用iServer JAVA API访问iServer空间分析服务进行叠加分析示例_第2张图片

使用iServer JAVA API访问iServer空间分析服务进行叠加分析示例_第3张图片

使用iServer JAVA API访问iServer空间分析服务进行叠加分析示例_第4张图片

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

使用iServer JAVA API访问iServer空间分析服务进行叠加分析示例工程
http://download.csdn.net/detail/supermapsupport/9833942

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