美文网首页
android请求WMS、WFS服务查询

android请求WMS、WFS服务查询

作者: 曾经的追风少年 | 来源:发表于2018-07-21 14:56 被阅读0次
    参考文档: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

    感谢大神们的分享!

    相关文章

      网友评论

          本文标题:android请求WMS、WFS服务查询

          本文链接:https://www.haomeiwen.com/subject/kirwpftx.html