地图查询

发送反馈


支持地图查询,如范围、距离、几何和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());
}

示例:SQL查询

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());
}