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