--- 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
``` ![在这里插入图片描述](./images/20200324114118265.png) 通过`fromJson`的方式创建时,mode的值为0为快照模式,一次性加载服务中的要素(不超过`maxFeatures`);非0为按需,加载地图当前Extent范围中的要素(不超过`maxFeatures`),当地图的范围发生变化时会重新发送`GetFeature`获取要素进行要素渲染。 > 注意:返回的要素没有样式信息,图层都是使用默认的样式。需要在前端定义Style对要素进行渲染。 ## 3. Tip ### 问题一: is read-only ![image-20210429154235689](./images/image-20210429154689.png) 原因: 1、服务设置问题, 在全局设置中的 WFS 的 Service Level 的值可能是 Basic 2、用户权限问题,当前用户没有对该服务修改的权限 解决方法: 1、将全局设置中的 WFS 的 Service Level 的值设置为 Transactional 或 Complete 2、点击左侧的“”Security“”中的“”Data“”栏, 点击“Rule path”中的“..w”,勾选“Grant access to any role”下面的单选框,点击保存。 ![image-20210429154310919](./images/image-202104310919.png) ![image-20210429154411735](./images/image-20210454411735.png) ![image-20210429154447593](./images/image-20210429154447593.png) ### 问题二:插入日期字段 插入的时候,如果需要插入日期字段,则该字段不能为空。 一、字段为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 ```