创建电子围栏坐标模板
- 此模板为了将电子围栏信息写入到总表中存储。
- 主表中需要3个数据项:电子围栏名称、电子围栏形状、车辆最大进入数量。
- 明细表中需要3个数据项:经度、纬度、圆形半径。

- 创建完成后,命名为:电子围栏坐标,并保存模板。
创建管理电子围栏模板
- 此模板用来新建电子围栏,并显示电子围栏在地图上的位置。
- 新建一个模板,选中表格1,然后添加浏览器,添加成功后,再删除表格1。


- 填表公式:
- 在新建打开表单后事件和修改打开表单后事件中,添加公式:设置控件属性。
- 在设置空间属性中,添加浏览器,属性选择URL,值为:../map/ElectronicFence.html
- 创建完成后,命名为:管理电子围栏,并保存模板。


电子围栏的使用
电子围栏的创建
- 双击打开管理电子围栏模板。

- 点击新增按钮。

- 选择“圆形”按钮,框选需要的区域。

框选区域后,输入电子围栏名称和电子围栏区域内允许进入的最大数量。

电子围栏的使用
- 电子围栏要配合APP车辆定位来使用,可以设置为,当电子围栏内进入的车辆超过限定允许车辆最大进入数量后,进行短信提醒或推送。
创建模板
- 可以创建一个模板通过车辆坐标、电子围栏坐标、电子围栏半径计算当前电子围栏内的车辆数量。
- 如新建一个模板:电子围栏车辆数量监控
- 主表中需包含:电子围栏名称、电子围栏半径、电子围栏中心经度、电子围栏中心纬度、电子围栏最大车辆数等数据项。
- 明细表中需包含:车牌号、经度、纬度距离电子围栏中心距离、是否在电子围栏区域、是否推送、车主姓名等数据项。

创建数据接口
- 在刚刚新建的模板中(电子围栏车辆数量监控模板)创建数据接口
- 第一个数据接口,用来合计有多少辆车在电子围栏中。
- 如命名为:计数在电子围栏内车辆数量
- 表达式为:合计( 本模板.明细.是否在电子围栏区域 )

- 过滤条件中创建一个自定义参数:电子围栏名称
- 过滤条件为:自定义参数.电子围栏名称 = 本模板.电子围栏名称 并且 本模板.明细.是否在电子围栏区域 = 常量.是

- 第二个数据接口,用来找出超出电子围栏最大数量的车辆。
- 如命名为:查找电子围栏内车辆车牌号
- 距离电子围栏中心距离的数据类型选择小数,排序方式为降序。

- 过滤条件中添加一个参数:电子围栏名称
- 过滤条件为:自定义参数.电子围栏名称 = 本模板.电子围栏名称 并且 本模板.明细.是否在电子围栏区域 = 常量.是 并且 (本模板.明细.是否推送 = 常量.否 或者 本模板.明细.是否推送 = 常量.空 或者 本模板.明细.是否推送 = "" )
- 并设置为只查找一条数据。

- 第三个数据接口,找出需要推送的车牌号对应的车主姓名。
- 过滤条件中创建一个参数:电子围栏名称
- 过滤条件为:自定义参数.电子围栏名称 = 本模板.电子围栏名称 并且 本模板.明细.是否推送 = 常量.是


- 在车辆坐标中新建一个数据接口:查询车辆坐标,用来查询所有车辆的经纬度信息。不用写过滤条件。

创建业务公式
- 创建第一个业务公式:对电子围栏车辆数量监控表单进行更新,用来更新数据、计算距离。

- 更新时操作同样如此。

- 对明细进行操作。
- 先删除明细信息,然后再重新插入。


- 计算距离公式为:
- 求次冥( 求次冥(( 电子围栏车辆数量监控.明细.经度 - 电子围栏车辆数量监控.电子围栏中心经度 ), 2) + 求次冥(( 电子围栏车辆数量监控.明细.纬度 - 电子围栏车辆数量监控.电子围栏中心纬度 ), 2), 0.5 ) * 105539.1756
- 更新操作时同样如此。可直接将新建时的情况直接复制到更新时中。


- 创建第二个业务公式:对电子围栏车辆数量监控表单进行更新,用来判断车辆是否在电子围栏区域。


- 对明细进行操作。


- 更新的记录时,操作同样如此,可直接复制。
- 创建第三条业务公式:对电子围栏车辆数量监控表单进行更新,用来判断是否需要推送。

- 更新时同样如此。

- 对明细进行操作。
- 注意:需要用到3个数据源,首先第一个数据源用来判断,电子围栏内的车辆数量是否超出了限制,第二个用来判断有几个超出了限制,第三个用来判断哪几个车辆距离最远,然后用来推送。

- 更新时操作同样如此。

- 匹配条件为:计数在电子围栏内车辆数量.是否在电子围栏区域 > 电子围栏车辆数量监控.电子围栏最大车辆数 并且 查找电子围栏内车辆车牌号.车牌号 = 电子围栏车辆数量监控.明细.车牌号
- 创建第四个业务公式,对APP待发送消息进行操作,要来给超过限制车辆的车主发送推送消息(若发送短信,则对待发送消息进行操作)。

- 更新时操作同样如此。

操作
- 在电子围栏车辆数量监控模板中新建一张表单,输入电子围栏名称,在保存时即可生效,对输入名称的电子围栏内车辆进行判断。
- 但真正使用时,不能让某个用户一直新建表单,这样不现实,所以需要用计划任务来操作,但计划任务不能赋值初始值,所以要在模板中写死一个电子围栏名称,如:

- 但这样,这个模板就只能判断这一个电子围栏内的车辆情况,想判断其他电子围栏时,还需要创建其他模板。
- 大家可以参考此案例自己进行发挥,打造一个更合理的系统。
附录
- 经纬度计算距离公式为(X为经度,Y为纬度)):
- 求次冥( 求次冥(( 本表单.x1 - 本表单.x2 ), 2) + 求次冥(( 本表单.y1 - 本表单.y2 ), 2) , 0.5) * 105539.1756