> 作者:MR
之前一篇博客(SuperMap iServer JAVA API介绍)介绍了SuperMap iServer Java API(以下简称Java API)用处、用法,本篇介绍JAVA API访问iServer空间分析服务进行叠加分析的具体应用,并提供工程源码下载。作为示例,这里使用eclipse创建一个控制台应用。
###一、创建JAVA工程&主类
创建一个Java工程,工程下新建lib文件夹,复制%iServerROOT%WEB-INFlibiserver-all-8.1.1-14511.jar到lib文件夹里,并将lib文件夹下的iserver-all-8.1.1-14511.jar右键添加到Build
Path里。
本文新建一个包,命名spatialAnalystSample,其下创建一个类,命名SpatialAnalystSample,添加main方法。工程结构如图(JDK1.8):
###二、获取空间服务提供者
本文访问的空间分析服务REST资源根目录如下:
http://support.supermap.com.cn:8090/iserver/services/spatialanalyst-changchun/restjsr
创建/释放RestSpatialAnalystProvider方法如下:
/**
* @param
RootURL
*
空间分许服务REST资源根目录
*
@return
RestSpatialAnalystProvider
*/
privatestatic
RestSpatialAnalystProvider getAnalystProvider(
String
rootURL )
{
//
服务提供者设置
RestSpatialAnalystProviderSetting
setting =newRestSpatialAnalystProviderSetting(
);
setting.restServiceRootURL
=
rootURL;
//
创建服务提供者
returnnewRestSpatialAnalystProvider(
setting );
}
/**
* @param
provider
*
待释放资源的服务提供者对象
*/
privatestatic
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方法如下:
privatestatic
final
String
SPASURL =
"http://support.supermap.com.cn:8090/iserver/services/spatialanalyst-changchun/restjsr";
/**
* @param
args
*/
publicstatic
void
main(
String[
]
args )
{
long
start =
System.currentTimeMillis(
);
RestSpatialAnalystProvider
spatialProvider =
getAnalystProvider(
SPASURL );
//
设置分析的结果
DataReturnOption
option =newDataReturnOption(
);
option.dataReturnMode
=
DataReturnMode.DATASET_AND_RECORDSET;//
设置数据返回模式:l另存数据集和返回记录集对象
option.dataset
=
"analystTemp";
//
结果保存到的数据集名称
option.deleteExistResultDataset
=true;//
如果analystTemp与已有的数据集重名,删除已有的数据集
option.expectCount
=
0;
//
返回所有记录
DatasetOverlayResultSetting
setting =newDatasetOverlayResultSetting(
);
//
数据集叠加分析结果设置类
setting.dataReturnOption
=
option;
//
指定返回结果的保留字段
setting.sourceDatasetFields
=newString[
]
{
"name",
"x",
"y"
};
setting.operateDatasetFields
=newString[
]
{
"ClassID"
};
//
查询条件
QueryParameter
sourceQueryParameter =newQueryParameter(
);//
数据集的查询参数
sourceQueryParameter.name
=
"Park";
//
指定要查询的数据集
sourceQueryParameter.attributeFilter
=
"SmID>0";
//
指定数据集的查询条件
QueryParameter
operateQueryParameter =newQueryParameter(
);//
数据集的查询参数
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-INFlib目录下,把这些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/9833942
网友评论