Map 组件示例 - 使用 RestMapProvider

发送反馈


SuperMap iServer 的 Map 组件可以使用多种服务提供者来构建,Map 组件的使用中介绍了使用工作空间的 Map 组件(即基于 UGCMapProvider)初始化方法,本节将介绍基于 RestMapProvider 的 Map 组件的构建和使用方法。包括:

  1. Map 组件的初始化

  2. SQL_查询

  3. 根据范围出图

完整的示例代码参见:%SuperMap iServer_HOME%/samples/code/UseJavaAPI/MapComponentSampleUseRMP。

Map 组件的初始化

如前所述,Map 组件(地图组件)可以由地图组件上下文(MapContext)创建,一个完整的地图组件上下文需要设置地图服务组件配置信息和地图服务提供者,其中关于服务提供者的设置,MapContext 提供了设置服务提供者对象和服务提供者配置信息两种方式,本示例使用的是前者。

上图为使用 SuperMap 数据构建一个 Map 组件的过程(MapImpl),其中箭头表示初始化的流程,虚线箭头表示Map 组件的使用中设置服务提供者的方式,本文示例的流程跟实线箭头表示的流程一致。即:通过 SuperMap REST 地图服务提供者配置(UGCMapProviderSetting)设置服务提供者对象,然后与地图配置(MapConfig)共同构建地图组件上下文(MapContext),最后由地图组件上下文初始化地图组件(MapImpl 对象)。示例代码如下(REST 服务地址要根据实际情况修改):

// 初始化一个 REST 地图服务提供者。
RestMapProviderSetting providerSetting = new RestMapProviderSetting();
//指定 REST 地图服务提供者所使用的 REST 服务地址。
providerSetting.restServiceRootURL = "http://localhost:8090/iserver/services/map-china400/rest";
// 构建 RestMapProvider 对象
RestMapProvider restMapProvider = new RestMapProvider(providerSetting);
List<MapProvider>  providers = new ArrayList<MapProvider>();
providers.add(restMapProvider);
// 初始化地图服务组件上下文对象。
MapContext mapContext = new MapContext();
mapContext.setProviders(providers);
// 创建地图服务组件。
MapImpl mapComponent = new MapImpl();
//指定地图服务组件使用的服务提供者
mapComponent.setComponentContext(mapContext);

SQL 查询

SQL 查询是通过 SQL 语句对指定地图的指定图层进行查询,对指定字段设置过滤条件从而查找满足条件的对象。

语法如下:

public QueryResult queryBySQL(java.lang.String mapName, QueryParameterSet queryParameters)

参数说明:

查询结果为一个 QueryResult 对象,包含多个查询记录集。

查询的示例代码如下:

QueryParameterSet queryParameters = new QueryParameterSet();
QueryParameter[] queryLayerParams = new QueryParameter[1];
queryLayerParams[0] = new QueryParameter();
queryLayerParams[0].name = "China_Capital_pt@China";
// 属性过滤条件
queryLayerParams[0].attributeFilter = "SmID<6";
// 返回的属性字段名称(不区分大小写)。
queryLayerParams[0].fields = new String[] { "NAME", "CLASS" };
queryParameters.queryParams = queryLayerParams;
// 设置查询结果包含属性信息及空间信息。
queryParameters.queryOption = QueryOption.ATTRIBUTEANDGEOMETRY;
// 查询在“China”地图的“China_Capital_pt@China”图层中 SmID 小于6 所有的要素
QueryResult queryResult = mapComponent.queryBySQL("China", queryParameters);
OutputQueryResult(queryResult);

根据范围出图

根据指定地理范围出图,即在指定的地图中,指定出图的地理范围,获取指定大小的地图图片。默认生成的地图图片大小是256*256像素。

语法如下:

public MapImage viewByBounds(Rectangle2D bounds, MapParameter mapParameter, ImageOutputOption outputOption)

参数说明:

获取的结果是一个 MapImage 对象,指定的图片输出格式是二进制流,格式是 PNG;如果指定的图片输出格式是图片格式,结果(MapImage)中包含指向图片地址的 URI,此时,实际图片位于缓存中,存储在作为数据源的 REST 服务的缓存目录下。

根据范围出图的示例代码如下:

// 显示范围。
Rectangle2D viewBounds = new Rectangle2D(9871111.11 ,2371111.11 , 12128888.89 , 4628888.89);
// 获取“China”默认的地图参数。
MapParameter mapParameter = mapComponent.getDefaultMapParameter("China");
// 图片输出设置,指定了图片输出格式、返回图片地址、出图范围,以及使用默认图片大小(256*256)出图。
ImageOutputOption outputOption = new ImageOutputOption();
mapParameter.returnType = ReturnType.URL;
outputOption.format = OutputFormat.PNG;
mapParameter.viewBounds = viewBounds;
MapImage mapImage = mapComponent.getMapImage(mapParameter, outputOption);
System.out.println("图片路径为:" + mapImage.imageUrl);

完整的示例代码参见:%SuperMap iServer_HOME%/samples/code/UseJavaAPI/MapComponentSampleUseRMP。示例运行使用方法请参考使用 Java API 入门