首页 / 浏览问题 / 云GIS / 问题详情
有关WFS服务查询问题
32EXP 2017年06月09日
1、用JavaScript加载WMS服务图层,用WFS服务查询相关数据。请问这两个能组合在一起使用查询吗?我就是在一起用的,怎么没有效果?

2、

这是我的WMS服务地址

var url = "http://localhost:8090/iserver/services/map-wms/wms111/Layers";

这是我的WFS服务地址
var url2 = "http://localhost:8090/iserver/services/data-wfs/wfs100";

这两个地址有没有问题?

2 个回答

1. 两个服务可以一起用
2.服务地址有没有效,要访问一下才知道,iServer发布的服务,直接访问就是GetCapabilities操作,返回该服务xml表述的服务能力文档

请参照示例或iServer REST API检查参数是否填写正确、WFS服务若是空间查询,请确保用做查询的点线面和WFS服务的坐标系是否一致。
iServer REST API OGC服务在线文档地址:
 OGC 服务

1,780EXP 2017年06月12日
我两个一起用的时候,初始化地图启动iServer时的黑板抛异常,

com.supermap.services.providers.WFSServiceException:调用WFS接口实现类的getFeature方法发生OGCException异常

这是什么原因?
检查下WFS HTTP请求参数先?

我点击iServer中“数据服务”功能中的地址

http://localhost:8090/iserver/services/data-wfs/wfs100

出现一个类似配置文件的东西,其中最上边WFS_Capabilities节点的配置中的一个属性是:xmlns:wenzzhou1="http%3A%2F%2Fwww.supermap.com%2Fwenzhou1"

下边的其中一个配置:

<FeatureType>

<Name>wenzzhou1:wenzzhou1_行政区_社区</Name>

<Title>wenzzhou1_行政区_社区</Title>

<SRS>EPSG:4326</SRS>

<LatLongBoundingBox minx="120.69345675840843" miny="27.968377926768675" maxx="120.73295137050692" maxy="27.9967737401146"/>

</FeatureType>,

但是我点击iServer的“数据服务”功能中的地址

http://localhost:8090/iserver/services/data-wfs/wfs100-->data-->datasources

-->数据源列表(wenzhou1)-->包含的数据集(datasets)-->数据集列表其中有一个是wenzhou1_行政区_社区,这就让我困惑了,

vector_style = new SuperMap.Style({
        fillColor : '#669933',
        fillOpacity : 0.8,
        pointRadius : 8,
        strokeColor : '#aaee77',
        strokeWidth : 3
    });

    vector_style_select = new SuperMap.Style({
        fillColor : '#000',
        fillOpacity : 0.9,
        fontColor : '#232323',
        strokeColor : '#ffffff'
    });

    myFilter = new SuperMap.Filter.Comparison({
        type : SuperMap.Filter.Comparison.EQUAL_TO,
        property : "社区名称",//要查询的字段 
        value : ""
    });
    
    vectorLayer = new SuperMap.Layer.Vector("wenzhou1", {
        strategies : [ new SuperMap.Strategy.BBOX() ],
        protocol : new SuperMap.Protocol.WFS({
            version : "1.0.0",
            url : url2,
            featureType : "wenzhou1_行政区_社区",//要素类型名(必要的),可以理解成数据集
            featureNS : "http://www.supermap.com/wenzhou1",
            featurePrefix : "wenzhou1",
            geometryName : "the_geom"

        }),

        //filter使用方式二:
        filter : myFilter,

        styleMap : new SuperMap.StyleMap({
            'default' : vector_style,
            'select' : vector_style_select
        })
    });

中的featureType参数写什么?

是“wenzhou1_行政区_社区”还是“wenzzhou1_行政区_社区”?

还有帮看一下其他参数有什么问题吗?

抱歉,特别忙哈,暂时没看出有什么问题,你直接检查下http请求,如图:

我这个有什么异常吗?还有上次问的参数写什么?

该问题是iServer的一个缺陷,某些情况下使用and会查询不到,是的,我用你的代码只是改url和查询条件,只会查不到不会报错。
解决办法:
1. 自己发送HTTP请求
2. 等待缺陷解决

另外一种使用方式不会带上and,查询正常,如下:
 

     // 查询条件
     var filter = new SuperMap.Filter.Comparison({
             type:SuperMap.Filter.Comparison.EQUAL_TO,
             property:"CAPITAL",
             value:"北京"
         });
     // WFS协议类
      var  protocolRead = new SuperMap.Protocol.WFS({
            version:"1.0.0",
            url:"http://support.supermap.com.cn:8090/iserver/services/data-world/wfs100",
            featureType:"Capitals",
            featureNS:"http://www.supermap.com/World",
            featurePrefix:"World",
            geometryName:"the_geom"
        });
      // 发送请求
      protocolRead.read({
          readOptions: {output: "object"},
          filter:filter,
          maxFeatures: null,
          callback: queryCompleted
      });
     
      //定义回调函数,处理查询结果
      function queryCompleted(resp) {
        console.log(resp);
        //if (resp.features) {
        //    for (var j=0; j<resp.features.length; j++) {
        //        feature = resp.features[j];
        //        vectorLayer.addFeatures(feature);
        //    }
        //}
      }

您好,WMS服务是地图服务,只出图,WFS服务是数据要素服务,可以进行增删改查的数据服务。查询的话,是使用WFS服务,可以一起用。查询结果可以在控制台输出查看,或者代码调试查看是否有结果返回。可以参考:http://support.supermap.com.cn:8090/iserver/iClient/forJavaScript/examples/examples.html#queryByWFS  WFS服务的范例

251EXP 2017年06月12日
...