---
title: WFSLayer
date: 2020-03-24
author: ac
tags:
- WFSLayer
categories:
- GIS
---
## 1. 简介
`WFSLayer`继承了`GraphicsLayer`,是属于客户端图层,就是请求地图服务器端获取要素集,将要素在客户端(浏览器)进行渲染绘制。在之前的文章中介绍了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,将获取的要素集渲染显示。
使用`WFSLayer`需要配置代理 [ArcGIS for JS 3.x代理配置](https://blog.csdn.net/weixin_38670190/article/details/105039298)
## 2.示例
```html
Simple Map
```

通过`fromJson`的方式创建时,mode的值为0为快照模式,一次性加载服务中的要素(不超过`maxFeatures`);非0为按需,加载地图当前Extent范围中的要素(不超过`maxFeatures`),当地图的范围发生变化时会重新发送`GetFeature`获取要素进行要素渲染。
> 注意:返回的要素没有样式信息,图层都是使用默认的样式。需要在前端定义Style对要素进行渲染。
## 3. Tip
### 问题一: is read-only

原因:
1、服务设置问题, 在全局设置中的 WFS 的 Service Level 的值可能是 Basic
2、用户权限问题,当前用户没有对该服务修改的权限
解决方法:
1、将全局设置中的 WFS 的 Service Level 的值设置为 Transactional 或 Complete
2、点击左侧的“”Security“”中的“”Data“”栏,
点击“Rule path”中的“..w”,勾选“Grant access to any role”下面的单选框,点击保存。



### 问题二:插入日期字段
插入的时候,如果需要插入日期字段,则该字段不能为空。
一、字段为Date类型
格式:YYYY-MM-DD
解析成功示例:
```xml
2020-04-01 ===》 2020-04-01
2020-04-02 18:09:29 ===》 2020-04-02
2020-04-06T17:30:08+08:00 ===》 2020-04-06
```
解析失败:
```xml
20200405
2020/4/1
```
二、字段为Timestamps类型
格式:
YYYY-MM-DDThh:mm:ss
YYYY-MM-DDThh:mm:ss.sss
YYYY-MM-DDThh:mm:ssZ
YYYY-MM-DDThh:mm:ss-01:00
如果字段类型是带时区的则会:
```xml
2020-04-06 17:30:08 ===》2020-04-06 08:00:00+08
2020-04-06T17:30:08+08:00===》2020-04-06 17:30:08+08
```