FME对调查云平台完成变更调查照片的批量迁移

news/2024/11/8 6:36:23/

目录

前言

二、实际步骤

1.准备基础数据

2.模拟登录

3.获取图斑标识码

 4.获取图形信息

 5.通过空间位置关系过滤不合格照片

5.通过深度学习模型过滤照片特征错误图斑

6.照片迁移

总结


前言

        又到了一年一度国土变更调查的苦日子,因为项目规则原因,会出现变更调查图斑已经在日常变更模块,或增减挂钩模块已经完成过举证。为了不重复举证,平台开发了照片迁移功能。可以将同一图斑的照片云共享,迁移到新图斑,减少了外业的工作量。功能开发的出发点可以说是非常之好的,但是平台速度较慢,项目时间紧迫,我们的工作人员需要手动一个一个的点击照片迁移,还要人工筛选照片是否满足举证要求,无疑,一个区县的照片迁移,需要耗费大量的人力物力。

        技术的出现就是为了解放生产力,FME自带Httpcaller转换器便能胜任这个工作。爬虫虽然是一门饱受争议的技术,但是我认为只要在合理合法,不以破坏计算机系统或盗取数据为目的,且取得了甲方的同意的情况下,批量完成数据处理,既节约了大量人力物力,又保证了数据的准确性,何乐而不为呢。


一、整体思路

二、实际步骤

1.准备基础数据

基础数据准备非常简单,只需要我们的内业人员制作一个简单的表格,需要迁移哪些图斑,需要从哪部分模块迁移照片即可

2.模拟登录

因为平台登录有验证码这个东西的存在,一般的爬虫模块就无法应对了。我们这儿稍微复杂一点,用深度学习卷积神经网络模型训练了一个验证码识别的小模型加在我们工作流中。


 逻辑也非常简单,将验证码图片保存为二进制流,并通过我们的卷积神经网络,获取预测的验证码,将该验证码和账号密码请求一并发送,完成登录。

            session=requests.session()rc = random.random()yzm_url = "http://www.sclandcloud.org.cn/landCloudWork/login/verifyLoginCode.do?w=100&h=38&rc={}".format(rc)yzm_img = session.get(yzm_url)print(yzm_img)yam = model.predict(yzm_img.content)print(yam)

3.获取图斑标识码

因为在平台后端中,并未使用图斑编号作为数据库的主键,而是拟定了一个随机uuid,我们需要用http请求来获取验证码。

 4.获取图形信息

因为调查云平台的照片共享是通过发送图形的边界wkt数据格式,以及buff的范围 等信息进入数据库进行照片空间检索来获得共享照片信息

但是前端图形可视化是实用的geojson数据格式,那么我们这儿可以使用GeometryReplacer和GeometryExtractor来进行矢量数据格式转换,来获取wkt格式数据,最后发送请求即可完成查询

 5.通过空间位置关系过滤不合格照片

如下图所示,如果我们不进行数据过滤,暴力的将图斑buff范围内的照片全部迁移下来

就会产生大量的不合格照片。 

但是如果用简单的SpatialFilter来进行空间谓词过滤,又会丢失很多合格照片,所以我们应该通过照片的方位角和坐标来生成一个类似于视野的三角形,再通过模拟的视野三角形来进行空间过滤,这样可以直接去掉大量的不合格照片。

5.通过深度学习模型过滤照片特征错误图斑

        主要的矛盾是因为耕地占补平衡以来,国家对耕地尤为重视,许多耕地不足的区县,采用了破土开荒耕种,在短时间内恢复了不少耕地,所以国家对图斑实际是否为合格耕地尤为重视。不做特征过滤,就会出现图片拍摄时间虽然只差距几个月,但是有些照片表现特征并不是耕地的情况。

        所以我们继续使用卷积神经网络来做一个耕地照片识别,通过解析平台DB,获取耕地照片样本。

import fme
import fmeobjects
import requests
import os
from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutordef download(road,url,x):dd=os.path.exists(road)if dd!=True:with open(road,mode='wb') as f:f.write(requests.get(url).content)print(x)class FeatureProcessor(object):"""Template Class Interface:When using this class, make sure its name is set as the value of the 'Classto Process Features' transformer parameter."""def __init__(self):self.aa=[]self.bb=[]"""Base constructor for class members."""passdef input(self, feature):try:path = os.makedirs(feature.getAttribute('os1'))except:        passtry:ff=os.path.getsize(feature.getAttribute('os'))if ff==0:os.remove(feature.getAttribute('os'))except:pass        self.aa.append(feature.getAttribute('URL'))self.bb.append(feature.getAttribute('os'))self.pyoutput(feature)def close(self):with ThreadPoolExecutor(50) as t:for i in range(0,len(self.aa)):t.submit(download,road=self.bb[i],url=self.aa[i],x=self.aa[i])print('图片下载完毕')pass

 并将样本分为耕地和非耕地两种类型进行训练,这里直接使用以前搭建好的训练模板。

训练完成后,在主工作流中加入识别模块,并过滤非耕地照片

6.照片迁移

到这一步其实就非常简单了,将前面获取的图斑id,和照片的fjlist作为请求提交到接口即可。

 到此为止就完成了整套流程,通过实际测试,在晚上平台使用人较少的情况下,完成6万张照片迁移花费20分钟。可以说是非常成功,主要原因也是因为FME2021版本以后的httpcaller引入了多线程请求模式,相比以前版本,速度提升了N倍。 

总结

        技术就好似一把刀,坏人用来伤害人,厨师用来做菜,全看人如何使用。爬虫虽然是一门敏感的技术,但是合理使用,在提高了生产力的同时,也保证了数据的准确性,同时因为是走的后端http直接请求接口,节约了平台的开销,对比以前的人海战术,该方法还能减少平台的资源占用,对软件平台方的日常维护也产生了巨大的价值。


http://www.ppmy.cn/news/9943.html

相关文章

【web安全】——web渗透的前缀知识

作者名:Demo不是emo 主页面链接:主页传送门 创作初心:舞台再大,你不上台,永远是观众,没人会关心你努不努力,摔的痛不痛,他们只会看你最后站在什么位置,然后羡慕或鄙夷座…

OPC Expert v8.1.2211 Crack

像专业人士一样解决您的 OPC 和 DCOM 连接问题 [无需经验] 快速修复 OPC 和 DCOM 错误 使用 OPC Expert,您无需任何经验即可解决和修复 OPC 连接问题。OPC Expert 为您完成繁重的工作,以快速自动诊断 OPC 和 DCOM 问题……Ω578867473而且还不止于此。OP…

阳康后的第一篇博客,先来几道恶心二进制编程题

目录 一、统计二进制中1的个数 二、打印整数二进制的奇数位和偶数位 三、两个整数二进制位不同个数 一、统计二进制中1的个数 这是一道牛客网OJ题,感兴趣的话可以先做一遍再看解析哦 -> 牛客网的OJ链接 注意:上面的牛客网是接口型,不需…

JDBC连接数据库

JDBC(Java DataBase Connectivity),简单来讲JDBC是利用Java语言或程序连接并且访问数据库的一门技术,是Java语言中用来规范客户端程序如何访问数据库的应用程序接口,提供了查询和更新数据库操作方法,通常是…

万字讲解!进阶指针!

今天我们来看进阶指针,还没有看过初阶指针的话建议先看看初阶 (3条消息) 初阶指针---从入门到入坟_KLZUQ的博客-CSDN博客 目录 1. 字符指针 2. 指针数组 3. 数组指针 3.1 数组指针的定义 3.2 &数组名VS数组名 3.3 数组指针的使用 4. 数组参数、指针参数 …

php学习笔记-phpday1

php代码基本语法 PHP(PHP: Hypertext Preprocessor)即“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法学习了C语言,吸纳Java和Perl多个语言的特色发展出自己的特色语法&…

在有限和无限图上计算simulations

摘要 我们展示了用于计算带有标签的图的相似性的算法。相似关系适用于不同的激活系统模式。对于有限图,我们提出了一种用于计算n个点m条边的图(假设m≥nm\ge nm≥n)的相似关系的O(mn)算法。为了高效地表示无限图,我们提出了一个标…

在centos7安装KubeSphere

节点准备 设置hostname hostnamectl set-hostname ks-m4 关闭防火墙 启动: systemctl start firewalld 关闭: systemctl stop firewalld 查看状态: systemctl status firewalld 开机禁用 : systemctl disable firewalld 开机…