• 使用FeatureLayer加载WFS服务


     

    ArcGIS JS API 在当前(4.15版本)提供有WebTileLayer、WMSLayer、WMTSLayer等图层类,但并没有提供加载WFS服务的图层类。所以使用FeatureLayer来实现加载。

    WFS,Web Feature Service,网络要素服务

    思路

    手动构造FeatureLayer的source 属性。

    1
    2
    3
    4
    5
    6
    st=>start: Start
    req=>operation: WFS请求
    xml=>operation: 解析XML
    feature=>operation: 实例化FeatureLayer
    e=>end
    st->req->xml->feature->e

    WFS请求

    GetCapabilities

    参数说明:

    参数是否必须默认值
    SERVICE Y WFS
    REQUEST=GetCapabilities Y  

    请求示例:

    1
    2
    3
    4
    5
    http://www.someserver.com/wfs?

    SERVICE=WFS&

    REQUEST=GetCapabilities

    GetFeature

    参数说明:

    参数是否必须默认值
    VERSION Y 1.1.0
    SERVICE Y WFS
    REQUEST=GetFeature Y  
    TYPENAME Y  
    OUTPUTFORMAT   text/xml; subtype=gml/3.1.1
    BBOX    
    FILTER    
    SORTBY    
    MAXFEATURES    
    PROPERTYNAME    
    SRSNAME    
    FEATUREID    
    EXPIRY    
    RESULTTYPE   results
    FEATUREVERSION    

    请求示例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    http://www.someserver.com/wfs?

    SERVICE=WFS&

    VERSION=1.1.0&

    REQUEST=GetFeature&

    PROPERTYNAME=InWaterA_1M/wkbGeom,InWaterA_1M/tileId&

    TYPENAME=InWaterA_1M&

    FILTER=InWaterA_1M/wkbGeom

    解析XML

    从返回的XML中解析数据,构造Features数组。

    解析过程示例代码:

    1
    2
    3
    4
    5
    6
    const parser = new DOMParser();
    const xml = parser.parseFromString(response, 'text/xml');
    const htmlCollection = xml.getElementsByTagName('wfs:FeatureCollection');
    for (let i = 0, len = htmlCollection.length; i < len; i++) {
    console.log(htmlCollection[i].innerHTML);
    }

    Features数组:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    const features = [
    {
    geometry: {
    type: "point",
    x: -100,
    y: 38
    },
    attributes: {
    ObjectID: 1,
    DepArpt: "KATL",
    MsgTime: Date.now(),
    FltId: "UAL1"
    }
    },
    ...
    ];

    实例化FeatureLayer

    1
    2
    3
    4
    const layer = new FeatureLayer({
    source: features, // autocast as a Collection of new Graphic()
    objectIdField: "ObjectID"
    });
  • 相关阅读:
    Socket 之 同步以及异步通信
    Socket 之 c#实现Socket网络编程
    Socket 之 API函数介绍
    Socket 之 原理与编程基础
    C# 之 user32函数库
    WinServer 之 访问同网段服务器 或 同一服务器多虚拟机间的访问
    annex-b格式
    FLV文件格式解析
    PHP5中的stdClass
    web服务器【apache/nginx] 关闭目录的浏览权限
  • 原文地址:https://www.cnblogs.com/lihaijia/p/14555839.html
Copyright © 2020-2023  润新知