地图查询 |
支持地图查询,如范围、距离、几何和SQL查询以及海图属性查询和海图范围查询。通过地图服务地址构建查询服务对象,调用process接口(两个参数,一个是查询参数对象,一个是查询监听器对象)执行查询,查询完毕将回调查询监听器的onQueryStatusChanged接口返回查询结果和查询结果状态。最后主线程即UI线程获取并展示查询结果。
private void boundsQuery() { QueryByBoundsParameters p = new QueryByBoundsParameters(); // left, bottom, right, top 必设范围 p.bounds = new Rectangle2D(113, 38, 119, 42); p.expectCount = 2;// 期望返回的条数 FilterParameter fp = new FilterParameter(); fp.name = "Capitals@World.1";// 必设参数,图层名称格式:数据集名称@数据源别名 p.filterParameters = new FilterParameter[] { fp }; QueryByBoundsService qs = new QueryByBoundsService(mapUrl); qs.process(p, new MyQueryEventListener()); } public class MyQueryEventListener extends QueryEventListener { @Override public void onQueryStatusChanged(Object sourceObject, EventStatus status) { if (sourceObject instanceof QueryResult && status.equals(EventStatus.PROCESS_COMPLETE)) { QueryResult qr = (QueryResult) sourceObject; } } }
private void distanceQuery() { QueryByDistanceParameters p = new QueryByDistanceParameters(); p.distance = 30;// 必设,查询距离,单位为地理单位 Geometry g = new Geometry(); // 构建点地物,必设 g.type = GeometryType.POINT; g.points = new Point2D[] { new Point2D(121, 31) };// iserver端的Point2D g.parts = new int[] { 1 };// p.geometry = g; FilterParameter fp = new FilterParameter(); fp.name = "Capitals@World.1";// 必设,图层名称(图层名称格式:数据集名称@数据源别名) p.filterParameters = new FilterParameter[] { fp }; QueryByDistanceService qs = new QueryByDistanceService(mapUrl); qs.process(p, new MyQueryEventListener()); }
private void geometryQuery() { QueryByGeometryParameters p = new QueryByGeometryParameters(); p.spatialQueryMode = SpatialQueryMode.INTERSECT;// 必设,空间查询模式,默认相交 // 构建查询几何对象 Geometry g = new Geometry(); g.type = GeometryType.REGION; g.points = new Point2D[] { new Point2D(113, 42), new Point2D(119, 42), new Point2D((119 + 113) / 2, 38), new Point2D(113, 42) }; g.parts = new int[] { 4 }; p.geometry = g; FilterParameter fp = new FilterParameter(); fp.name = "Capitals@World.1";// 必设参数,图层名称格式:数据集名称@数据源别名 p.filterParameters = new FilterParameter[] { fp }; QueryByGeometryService qs = new QueryByGeometryService(mapUrl); qs.process(p, new MyQueryEventListener()); }
private void sqlQuery() { QueryBySQLParameters p = new QueryBySQLParameters(); FilterParameter fp = new FilterParameter(); // 属性过滤条件 fp.attributeFilter = "SMID > 169 AND SMID < 174"; fp.name = "Capitals@World.1";// 必设,图层名称(图层名称格式:数据集名称@数据源别名) p.filterParameters = new FilterParameter[] { fp }; p.expectCount = 20;// 期望返回的条数 // p.queryOption = QueryOption.GEOMETRY;// 设置返回结果类型,默认是返回属性和地物,可以根据需要值返回其一 QueryBySQLService qs = new QueryBySQLService(mapUrl);// totalCount:4,currentCount:4 qs.process(p, new MyQueryEventListener());// 执行查询,必须设置 用户实现的查询监听器对象 }
海图查询需要服务器已经发布了海图地图服务。
public void testChartQuery_bounds() { ChartQueryFilterParameter cpf = new ChartQueryFilterParameter(); cpf.isQueryPoint = true; cpf.isQueryLine = true; cpf.isQueryRegion = true; cpf.chartFeatureInfoSpecCode = 159;// 相应的primitive="A",为点类型,localName = "方位立标" ChartQueryParameters cp = new ChartQueryParameters(); ChartQueryFilterParameter[] cpfs = new ChartQueryFilterParameter[1]; cpfs[0] = cpf; cp.chartQueryFilterParameters = cpfs; cp.queryMode = ChartQueryMode.ChartBoundsQuery;// 海图范围查询必设 cp.bounds = new Rectangle2D(61.032771392902795, -32.541877257420495, 61.05038421736495, -32.52457479109864);// 海图范围查询必设 cp.chartLayerNames = new String[] { "GB4X0000_52000" }; cp.expectCount = 2; ChartQueryService cqs = new ChartQueryService("http://server:8090/iserver/services/map-ChartW/rest/maps/海图"); cqs.process(cp, new MyQueryEventListener()); }
public void testChartQuery_attribute() { ChartQueryFilterParameter cpf = new ChartQueryFilterParameter(); cpf.isQueryPoint = true; cpf.attributeFilter = "SMID < 5"; cpf.chartFeatureInfoSpecCode = 5;// 相应的primitive="A",为点类型,localName = "方位立标" ChartQueryParameters cp = new ChartQueryParameters(); ChartQueryFilterParameter[] cpfs = new ChartQueryFilterParameter[1]; cpfs[0] = cpf; cp.chartQueryFilterParameters = cpfs; cp.queryMode = ChartQueryMode.ChartAttributeQuery;// 海图属性查询必设 cp.chartLayerNames = new String[] { "GB4X0000_52000" }; cp.expectCount = 2; ChartQueryService cqs = new ChartQueryService(CHART_URL); cqs.process(cp, new MyQueryEventListener()); }