GeoServer学习笔记-4、图层加载(WFSLayer)

官方API文档:https://developers.arcgis.com/javascript/3/jsapi/wfslayer-amd.html

WFSLayer继承了GraphicsLayer,是属于客户端图层,就是请求地图服务器端获取要素集,将要素在客户端(浏览器)进行渲染绘制。在之前的博客(服务标准WFS)中介绍了WFS服务的请求流程:
当一个客户端想要访问WFS服务时,一般会涉及到以下的流程:

  1. 通过操作获取WFS服务支持的操作和要素类(FeatureTypeList,可以理解为服务器中所有的WFS服务列表) 。
  2. 通过操作获取WFS服务支持的要素类的定义。
  3. 客户端发送某个操作的请求。
  4. WFS服务处理请求。
  5. WFS服务返回处理的结果和状态。

上面几个步骤中所提到的“操作”包括:

  1. GetCapabilities(获取服务中的要素类及支持的操作)
  2. DescribeFeatureType(描述要素类的信息,包含的字段等信息)
  3. GetFeature(获取要素)
    GetGmlObject(通过XLink获取GML对象)
    Transaction(创建、更新、删除数据的事务操作)
    LockFeature(在事务过程中锁定要素)
    GetFeatureWithLock(获取要素并返回锁lockId)

对于普通的图层加载显示会发送GetCapabilities、DescribeFeatureType、GetFeature,将获取的要素集渲染显示。
需要配置代理 ArcGIS for JS 3.x代理配置

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no"/>
    <title>Simple Map</title>
    <link rel="stylesheet" href="lib/arcgis_js_api/esri/css/esri.css">
    <style>
        html, body, #map {
            height: 100%;
            width: 100%;
            margin: 0;
            padding: 0;
        }
        body {
            background-color: #FFF;
            overflow: hidden;
            font-family: "Trebuchet MS";
        }
    </style>
    <script>var HOSTNAME_AND_PATH_TO_JSAPI = window.location.origin.replace("http:","")+"/demo/lib/arcgis_js_api/"</script>
    <script src="lib/arcgis_js_api/init.js"></script>
<body>
<div id="map"></div>
</body>

<script>
    var map = new esri.Map('map');
    var tiledMapServiceLayer = new esri.layers.ArcGISTiledMapServiceLayer("http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_StreetMap_World_2D/MapServer");
    var initExtent = new esri.geometry.Extent(-74.02722,40.684221,-73.907005,40.878178, new esri.SpatialReference({ wkid:4326 }));
    map.addLayer(tiledMapServiceLayer);
    map.setExtent(initExtent);
    addWFSLayer();
    
    function addWFSLayer(){
        require(["esri/layers/WFSLayer", "esri/config"], function(WFSLayer, esriConfig) {
            esriConfig.defaults.io.proxyUrl = "/demo/proxy.jsp";
            esriConfig.defaults.io.alwaysUseProxy = false;
            var wfsUrl = "http://localhost:8080/geoserver/wfs";
            var opts = {
                "id":"tiger_roads",		//map中的layerId
                "url": wfsUrl,
                "version":"1.0.0",
                "name": "tiger_roads",  //地图服务里面的图层名称,不需要工作空间
                "wkid": 4326,           //发布的地图服务的坐标系
                "maxFeatures": 10000,	//默认100
                "mode":1				//加载模式(0:快照、非0:按需)
            };
            var layer = new WFSLayer();
            layer.fromJson(opts);
            map.addLayer(layer);
        })
    }
</script>
</head>
</html>

GeoServer学习笔记-4、图层加载(WFSLayer)_第1张图片
       通过fromJson的方式创建时,mode的值为0为快照模式,一次性加载服务中的要素(不超过maxFeatures);非0为按需,加载地图当前Extent范围中的要素(不超过maxFeatures),当地图的范围发生变化时会重新发送GetFeature获取要素进行要素渲染。
       返回的要素没有样式信息,图层都是使用默认的样式。

你可能感兴趣的:(ArcGIS,for,JS,3.x,GeoServer)