官方API文档:https://developers.arcgis.com/javascript/3/jsapi/wfslayer-amd.html
WFSLayer继承了GraphicsLayer,是属于客户端图层,就是请求地图服务器端获取要素集,将要素在客户端(浏览器)进行渲染绘制。在之前的博客(服务标准WFS)中介绍了WFS服务的请求流程:
当一个客户端想要访问WFS服务时,一般会涉及到以下的流程:
- 通过操作获取WFS服务支持的操作和要素类(FeatureTypeList,可以理解为服务器中所有的WFS服务列表) 。
- 通过操作获取WFS服务支持的要素类的定义。
- 客户端发送某个操作的请求。
- WFS服务处理请求。
- WFS服务返回处理的结果和状态。
上面几个步骤中所提到的“操作”包括:
- GetCapabilities(获取服务中的要素类及支持的操作)
- DescribeFeatureType(描述要素类的信息,包含的字段等信息)
- 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>
通过fromJson的方式创建时,mode的值为0为快照模式,一次性加载服务中的要素(不超过maxFeatures);非0为按需,加载地图当前Extent范围中的要素(不超过maxFeatures),当地图的范围发生变化时会重新发送GetFeature获取要素进行要素渲染。
返回的要素没有样式信息,图层都是使用默认的样式。