如何进行SuperMap iServer服务端开发
2017-01-09 15:58
204 查看
有时候在进行地图应用开发时,可能单纯的客户端无法满足要求(如功能和性能等因素),这时就需要进行iServer的服务端开发。SuperMap iServer 6R/7c的服务端开发步骤如下:
一、在Eclipse中新建一个Dynamic Web Project
此过程截图略去
二、引用iServer所需的各类jar包
经测试后发现,必须引用iServer/WEB-INF/lib下的所有jar包,否则运行时会出现一些奇怪的错误。这些jar包所在的位置为[iServer安装目录]\webapps\iserver\WEB-INF\lib。
三、将objectsjava/bin目录添加到环境变量path中
如:
C:\Program Files (x86)\Common Files\NetSarang;D:\ProgramFiles\SuperMap\7_1_1\supermap_iserver_711_12128_147_win64_zip\support\objectsjava\bin;D:\oracle\product\10.2.0\client_1\bin;D:\app\Administrator\product\11.2.0\client_1;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program
Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\;C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files (x86)\Microsoft SQL Server\100\DTS\Binn\;%JAVA_HOME%\bin;%JRE_HOME%\bin;C:\Program Files (x86)\Cesoft\Excel Server
2013;C:\Program Files\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\DTS\Binn\;%MVN_HOME%\bin;C:\Program Files\TortoiseSVN\bin;C:\Program Files (x86)\Intel\OpenCL SDK\2.0\bin\x86;C:\Program Files (x86)\Intel\OpenCL SDK\2.0\bin\x64;%M2_HOME%\bin;%ANT_HOME%\bin;D:\ProgramFiles\SuperMap\SMO_DotNET_711_12129_48123_64_x64_CHS_Zip\Bin;C:\Program
Files\Microsoft\Web Platform Installer\;C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\;C:\Program Files (x86)\Windows Kits\8.0\Windows Performance Toolkit\;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;
这时还要注意path中不能有两个不同版本的ObjectsJava/bin目录,否则无法正确识别许可。
四、新建一个Java类CBufferQuery,代码如下:
[java] view
plain copy
package com.demo;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import com.supermap.services.components.MapContext;
import com.supermap.services.components.MapException;
import com.supermap.services.components.commontypes.Geometry;
import com.supermap.services.components.commontypes.GeometryType;
import com.supermap.services.components.commontypes.Point2D;
import com.supermap.services.components.commontypes.QueryOption;
import com.supermap.services.components.commontypes.QueryParameter;
import com.supermap.services.components.commontypes.QueryParameterSet;
import com.supermap.services.components.commontypes.QueryResult;
import com.supermap.services.components.impl.MapImpl;
import com.supermap.services.components.spi.MapProviderSetting;
import com.supermap.services.providers.UGCMapProviderSetting;
public class CBufferQuery {
UGCMapProviderSetting ugcPSetting = null;
MapContext mapContext = null;
MapImpl mapc = null;
public CBufferQuery(){
// 初始化 SuperMap 地图服务提供者设置。
ugcPSetting = new UGCMapProviderSetting();
// SuperMap 工作空间路径,运行时需按指定路径设置。
String workspacePath = "../../../data/China400/China400.smwu";
workspacePath = "D:/ProgramFiles/SuperMap/7_1_1/supermap_iserver_711_12128_147_win64_zip/samples/data/China400/China400.smwu";
if (!new File(workspacePath).exists()) {
System.out.println(workspacePath + "位置的工作空间不存在,请更换工作空间地址");
System.exit(0);
}
ugcPSetting.setWorkspacePath(workspacePath);
// 地图服务提供者的地图图片的输出路径。
ugcPSetting.setOutputPath(".\\output");
// 地图服务提供者的地图图片发布站点。
ugcPSetting.setOutputSite("http://localhost");
ugcPSetting.setName("default");
// 地图服务提供者集合,用于初始化地图服务组件上下文。
List<MapProviderSetting> ugcPSettings = new ArrayList<MapProviderSetting>();
ugcPSettings.add(ugcPSetting);
// 初始化地图服务组件上下文。
mapContext = new MapContext();
mapContext.setMapProviderSettings(ugcPSettings);
// 创建地图服务组件。
mapc = new MapImpl(mapContext);
}
public QueryResult queryByDistance() throws MapException{
// 属性查询参数集合。
QueryParameterSet queryParameters = new QueryParameterSet();
QueryParameter[] queryLayerParams = new QueryParameter[1];
queryLayerParams[0] = new QueryParameter();
queryLayerParams[0].name = "China_Capital_P@China400";
// 属性过滤条件,这里设为空。
queryLayerParams[0].attributeFilter = "adminname like '%州%'";
// 返回的属性字段名称(不区分大小写)。
queryLayerParams[0].fields = new String[] { "AdminName", "AdminCode" };
queryParameters.queryParams = queryLayerParams;
// 设置查询结果只包含属性信息。
queryParameters.queryOption = QueryOption.ATTRIBUTE;
// 创建缓冲区查询的参照几何对象,这里为一个三角形的面状对象。
Point2D p1 = new Point2D(12128888.89, 4628888.89);
Point2D p2 = new Point2D(11000000.0, 3500000.0);
Point2D p3 = new Point2D(12128888.89, 3500000.0);
Point2D[] point2ds = { p1, p2, p3 };
Geometry geometry = Geometry.fromPoint2Ds(point2ds, GeometryType.REGION);
// 查询在“China”地图的“China_Capital_P@China400”图层中,距离指定几何对象为100范围内所有的要素。
QueryResult queryResult = mapc.queryByDistance("China", geometry, 100, queryParameters);
mapc.dispose();
return queryResult;
}
/**
* @param args
*/
public static void main(String[] args) throws MapException {
// TODO Auto-generated method stub
CBufferQuery cbq = new CBufferQuery();
QueryResult result = cbq.queryByDistance();
System.out.println(result.recordsets[0].features[0].fieldValues[0]);
}
}
五、在代码中单击邮件,选择“通过“Run As/Java Application”运行代码,运行结果如下:
杭州
六、说明
参考iServer帮助文档中的步骤编写完代码后,运行时可能会遇到无法找到UGCMapProviderSetting类等问题,也就是无法识别任何SuperMap的类,这是因为引用的jar包不够的问题,为了避免此类问题发生,没有特殊要求的话最好把iServer/WEB-INF/lib下所有的jar包全部引用到工程里,这样就不会有很多奇怪的问题了。
一、在Eclipse中新建一个Dynamic Web Project
此过程截图略去
二、引用iServer所需的各类jar包
经测试后发现,必须引用iServer/WEB-INF/lib下的所有jar包,否则运行时会出现一些奇怪的错误。这些jar包所在的位置为[iServer安装目录]\webapps\iserver\WEB-INF\lib。
三、将objectsjava/bin目录添加到环境变量path中
如:
C:\Program Files (x86)\Common Files\NetSarang;D:\ProgramFiles\SuperMap\7_1_1\supermap_iserver_711_12128_147_win64_zip\support\objectsjava\bin;D:\oracle\product\10.2.0\client_1\bin;D:\app\Administrator\product\11.2.0\client_1;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program
Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\;C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files (x86)\Microsoft SQL Server\100\DTS\Binn\;%JAVA_HOME%\bin;%JRE_HOME%\bin;C:\Program Files (x86)\Cesoft\Excel Server
2013;C:\Program Files\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\DTS\Binn\;%MVN_HOME%\bin;C:\Program Files\TortoiseSVN\bin;C:\Program Files (x86)\Intel\OpenCL SDK\2.0\bin\x86;C:\Program Files (x86)\Intel\OpenCL SDK\2.0\bin\x64;%M2_HOME%\bin;%ANT_HOME%\bin;D:\ProgramFiles\SuperMap\SMO_DotNET_711_12129_48123_64_x64_CHS_Zip\Bin;C:\Program
Files\Microsoft\Web Platform Installer\;C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\;C:\Program Files (x86)\Windows Kits\8.0\Windows Performance Toolkit\;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;
这时还要注意path中不能有两个不同版本的ObjectsJava/bin目录,否则无法正确识别许可。
四、新建一个Java类CBufferQuery,代码如下:
[java] view
plain copy
package com.demo;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import com.supermap.services.components.MapContext;
import com.supermap.services.components.MapException;
import com.supermap.services.components.commontypes.Geometry;
import com.supermap.services.components.commontypes.GeometryType;
import com.supermap.services.components.commontypes.Point2D;
import com.supermap.services.components.commontypes.QueryOption;
import com.supermap.services.components.commontypes.QueryParameter;
import com.supermap.services.components.commontypes.QueryParameterSet;
import com.supermap.services.components.commontypes.QueryResult;
import com.supermap.services.components.impl.MapImpl;
import com.supermap.services.components.spi.MapProviderSetting;
import com.supermap.services.providers.UGCMapProviderSetting;
public class CBufferQuery {
UGCMapProviderSetting ugcPSetting = null;
MapContext mapContext = null;
MapImpl mapc = null;
public CBufferQuery(){
// 初始化 SuperMap 地图服务提供者设置。
ugcPSetting = new UGCMapProviderSetting();
// SuperMap 工作空间路径,运行时需按指定路径设置。
String workspacePath = "../../../data/China400/China400.smwu";
workspacePath = "D:/ProgramFiles/SuperMap/7_1_1/supermap_iserver_711_12128_147_win64_zip/samples/data/China400/China400.smwu";
if (!new File(workspacePath).exists()) {
System.out.println(workspacePath + "位置的工作空间不存在,请更换工作空间地址");
System.exit(0);
}
ugcPSetting.setWorkspacePath(workspacePath);
// 地图服务提供者的地图图片的输出路径。
ugcPSetting.setOutputPath(".\\output");
// 地图服务提供者的地图图片发布站点。
ugcPSetting.setOutputSite("http://localhost");
ugcPSetting.setName("default");
// 地图服务提供者集合,用于初始化地图服务组件上下文。
List<MapProviderSetting> ugcPSettings = new ArrayList<MapProviderSetting>();
ugcPSettings.add(ugcPSetting);
// 初始化地图服务组件上下文。
mapContext = new MapContext();
mapContext.setMapProviderSettings(ugcPSettings);
// 创建地图服务组件。
mapc = new MapImpl(mapContext);
}
public QueryResult queryByDistance() throws MapException{
// 属性查询参数集合。
QueryParameterSet queryParameters = new QueryParameterSet();
QueryParameter[] queryLayerParams = new QueryParameter[1];
queryLayerParams[0] = new QueryParameter();
queryLayerParams[0].name = "China_Capital_P@China400";
// 属性过滤条件,这里设为空。
queryLayerParams[0].attributeFilter = "adminname like '%州%'";
// 返回的属性字段名称(不区分大小写)。
queryLayerParams[0].fields = new String[] { "AdminName", "AdminCode" };
queryParameters.queryParams = queryLayerParams;
// 设置查询结果只包含属性信息。
queryParameters.queryOption = QueryOption.ATTRIBUTE;
// 创建缓冲区查询的参照几何对象,这里为一个三角形的面状对象。
Point2D p1 = new Point2D(12128888.89, 4628888.89);
Point2D p2 = new Point2D(11000000.0, 3500000.0);
Point2D p3 = new Point2D(12128888.89, 3500000.0);
Point2D[] point2ds = { p1, p2, p3 };
Geometry geometry = Geometry.fromPoint2Ds(point2ds, GeometryType.REGION);
// 查询在“China”地图的“China_Capital_P@China400”图层中,距离指定几何对象为100范围内所有的要素。
QueryResult queryResult = mapc.queryByDistance("China", geometry, 100, queryParameters);
mapc.dispose();
return queryResult;
}
/**
* @param args
*/
public static void main(String[] args) throws MapException {
// TODO Auto-generated method stub
CBufferQuery cbq = new CBufferQuery();
QueryResult result = cbq.queryByDistance();
System.out.println(result.recordsets[0].features[0].fieldValues[0]);
}
}
五、在代码中单击邮件,选择“通过“Run As/Java Application”运行代码,运行结果如下:
杭州
六、说明
参考iServer帮助文档中的步骤编写完代码后,运行时可能会遇到无法找到UGCMapProviderSetting类等问题,也就是无法识别任何SuperMap的类,这是因为引用的jar包不够的问题,为了避免此类问题发生,没有特殊要求的话最好把iServer/WEB-INF/lib下所有的jar包全部引用到工程里,这样就不会有很多奇怪的问题了。
相关文章推荐
- 如何使用SuperMap iServer进行服务端GIS开发
- [How To]如何使用Wildfish进行ISeries开发---单表操作篇
- [How To]如何使用Wildfish进行ISeries开发---多操作篇
- 如何使用“月蚀”进行J2ME开发
- 如何进行界面和业务逻辑分开的原型化开发
- 如何在VS2005下完全按照VS2003的开发模式进行项目开发
- ABAP--如何限制自己开发的耗时报表在sap系统中运行的个数,以保证正常业务的进行
- 如何实现Custom Control?如何进行可视化开发?
- Eclipse上如何通过安装插件来进行对C/C++的开发
- 如何使用“月蚀”进行J2ME开发
- [How To]如何使用Wildfish进行ISeries开发---代码生成篇
- [转]如何进行.NET高效开发
- 在ASP.NET中如何根据客户端调用的情况进行服务端调用
- 如何实现Custom Control?如何进行可视化开发?
- 如何进行.NET高效开发?
- 如何Dev-Cpp 环境下进行C++开发的介绍
- [How To]如何使用Wildfish进行ISeries项目开发--数据库建立部分
- 从开发到销售:如何对来公司参观的客户进行介绍
- 从开发到销售:如何对来公司参观的客户进行介绍
- 使用mmit进行移动开发,如何在一行同时显示图片和文字.