参考文档:https://www.cnblogs.com/naaoveGIS/p/5508882.html
WMS服务查询:
GeoServer官网上对其WMS规范的描述地址为http://docs.geoserver.org/stable/en/user/services/wms/index.html
提供了GetMap、GetFeatureInfo等接口
这里用到的就是GetFeatureInfo,详细描述请看官网的描述:
GetFeatureInfo描述地址:http://docs.geoserver.org/stable/en/user/services/wms/reference.html#getfeatureinfo
上代码
// 请求wms服务查询要素(点查询)
String wmsUrl= "http://192.168.0.1:8080/gisserver/zg/wms";
HashMap<String,String> paramsMap = new HashMap<>();
// 查询服务的类型
paramsMap.put("SERVICE","WMS");
// 查询服务的版本号
paramsMap.put("VERSION","1.1.0");
// 请求的方法名称 -- 当前为获取要素信息
paramsMap.put("REQUEST","GetFeatureInfo");
// 查询结果显示数量,默认为1
paramsMap.put("FEATURE_COUNT","50");
// 图层的渲染样式,默认为""
paramsMap.put("STYLES","");
// 待查询的图层名称集合 用逗号分隔
paramsMap.put("QUERY_LAYERS","zgyd");
// 地图上的可视图层名称集合 用逗号分隔
paramsMap.put("LAYERS","zgyd");
// 查询结果输出格式 -- 当前指定为json格式
paramsMap.put("INFO_FORMAT","application/json");
// 地图的坐标系参考
paramsMap.put("SRS","EPSG:2383");
// 查询的点坐标 -- 值为点击的屏幕像素值 差异范围 用于生成下面的边界范围
paramsMap.put("X","50");
paramsMap.put("Y","50");
// 地图范围的边界 格式为坐标参考坐标 minx , miny ,maxx ,maxy 用逗号分隔
// 计算屏幕坐标 范围
Point minPoint = new Point(point.getX() - 50, point.getY() + 50);
Point maxPoint = new Point(point.getX() + 50, point.getY() - 50);
Point minEPoint = mMapView.toMapPoint(minPoint);
Point maxEPoint = mMapView.toMapPoint(maxPoint);
paramsMap.put("BBOX", minEPoint.getX() + "," + minEPoint.getY() + "," + maxEPoint.getX() + "," + maxEPoint.getY());
// openlayers中底层代码中的常量 -- 这里模拟-写死了(表示不清楚为啥是101)
paramsMap.put("WIDTH","101");
paramsMap.put("HEIGHT","101");
RequestCall call = OkHttpUtils.get().url(wfsUrl).params(paramsMap).build();
call.execute(new StringCallback() {
@Override
public void onError(Call call, Exception e, int id) {
}
@Override
public void onResponse(String response, int id) {
LogUtil.i(response);
}
});
WFS服务查询:
GeoServer官网上对其WFS规范的描述地址为http://docs.geoserver.org/stable/en/user/services/wfs/index.html
提供了GetCapabilities、GetFeature等接口
这里用到的就是GetFeature,详细描述请看官网的描述:
GetFeature描述地址:http://docs.geoserver.org/stable/en/user/services/wfs/reference.html#getfeature
上代码
// 请求wfs服务按条件查询
String wfsUrl = "http://192.168.0.1:8080/zgisserver/zg/wfs";
HashMap<String, String> paramsMap = new HashMap<>();
// 查询服务的类型
paramsMap.put("SERVICE", "WFS");
// 查询服务的版本号
paramsMap.put("VERSION", "1.0.0");
// 请求的方法名称 -- 当前为获取要素信息
paramsMap.put("REQUEST", "GetFeature");
// 待查询的图层名称集合 用逗号分隔
paramsMap.put("TYPENAME","zgyd");
// 查询结果输入格式
paramsMap.put("OUTPUTFORMAT", "json");
/* 查询条件自行按需求使用 */
// 根据条件查询
String filterStr = "YDXZ = '行政办公用地'";
paramsMap.put("CQL_FILTER",filterStr);
// 根据FEATUREID 查询
paramsMap.put("FEATUREID","zgyd.792");
// 查询结果过滤 -- 查询的字段名称(返回需要的字段属性,没有设置的字段则不显示)...
paramsMap.put("PROPERTYNAME","YDXZ");
// 地图范围的边界 格式为坐标参考坐标 minX , minY ,maxX ,maxY 用逗号分隔
paramsMap.put("BBOX","485745.76724246074,3770802.4821885014,486084.0751155724,3771062.1138120466");
// 返回结果的最大数量
paramsMap.put("MAXFEATURES","10");
注:FEATUREID 、BBOX和 CQL_FILTER使用时互斥,不能同时使用。
网络请求同wms服务查询。
对查询结果的处理下次再写=。=!
参考文档:https://www.cnblogs.com/naaoveGIS/p/5508882.html
感谢大神们的分享!