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

news2025/1/16 16:07:50

目录

前言

二、实际步骤

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,ProcessPoolExecutor

def 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 'Class
    to Process Features' transformer parameter.
    """
    def __init__(self):

        self.aa=[]
        self.bb=[]
        """Base constructor for class members."""
        pass

    def input(self, feature):
        try:
            
            path = os.makedirs(feature.getAttribute('os1'))
        except:        
            pass
        try:
            
            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.coloradmin.cn/o/145140.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【架构设计】你的应用该如何分层呢?

前言 最近review公司的代码,发现现在整个代码层级十分混乱,一个service类的长度甚至达到了5000多行。而且各种分层模型DTO、VO乱用, 最终出现逻辑不清晰、各模块相互依赖、代码扩展性差、改动一处就牵一发而动全身等问题。 我们在吸取了阿里…

spring之aop底层实现

1.aop之ajc增强 什么是ajc增强? ajc是aop的另外一种实现, 通过aspectj编码器来改动class源文件实现aop 2.aop之agent增强 什么是agent增强? agent是aop的另外一种实现,是通过类加载时改动class类 3.aop之proxy增强-jdk代理 …

Mac系统入门之电脑卡死怎么办

当你兴冲冲的从菜鸡驿站提回来一台新的电脑,你欣喜若狂,迫不及待的拆开快递箱,里面是一台苹果电脑,这时,你不禁抓耳挠腮:Mac系统怎么用啊? 下面,这篇专栏教你如何入门Mac系统 https://blog.csdn.net/cyyyyds857/category_12163999.html –––––前言 你正兴致勃勃的写着…

mysql中字符串拼接、填充和切片

一、本文主要结构 在编程过程往往会遇到,多个字符串需要进行拼接或者填充固定值或者截取部分数据,本文主要实战下面四个函数 concat(str1, str2,…):字符串进行拼接 lpap():左边填充 rpad(&…

【C语言】指针经典题分析

🏖️作者:malloc不出对象 ⛺专栏:《初识C语言》 👦个人简介:一名双非本科院校大二在读的科班编程菜鸟,努力编程只为赶上各位大佬的步伐🙈🙈 目录前言一、指针与数组经典题解析二、经…

创新的概念、设计和生产鞋类和鞋类软件丨Jevero及Botcha 3D功能简介

Jevero功能简介 重新定义鞋类发展 Jevero是图案工程师、鞋类开发人员和设计师的优秀支持。从设计到生产都在一个工具中完成。 产品功能及优势 01、更快的开发,缩短上市时间 Jevero使您的图案工程师、鞋类开发人员、工业设计师之间能够进行协作。利用Rhino平台产…

两数相加 java语言

leetcode地址:两数相加描述:给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除…

DevData Talks | 张乐、茹炳晟、应阔浩、任晶磊:研发效能实践的2022年复盘和展望

跌宕起伏的 2022 年已经成为过去时。在这一年,我们既看到外部环境变幻莫测,也看到研发效能行业沉下心来稳步发展,从宏大的概念和价值,转向具体的问题,和务实、可行动的解决方案。 在新一年的开端上回望,20…

靶机测试CyNix笔记

靶机测试CyNix笔记 靶机描述 Level: Intermediate-HardUser flag: user.txtRoot flag: root.txtDescription: It’s a Boot2Root machine. The machine is VirtualBox compatible but can be used in VMWare as well (not tested but it should work). The DHCP will assign …

webpack中模块加载器Loader、插件plugins、optimization属性

目录 模块加载器(Loader) 导入css文件 加载图片 方法一 方法二 转换es6(向下兼容es5) html代码组件导入导出 导入less文件 自定义loader(Markdown文件加载器) markdown-loader.js文件 webpack.c…

【Linux】程序的翻译过程(图示详解)

因为淋过雨,所以懂的为别人撑伞;因为迷茫过,所以懂得为别人指路。 我们都知道写好代码后,编译器会帮助我们把代码生成可执行程序,细加了解又会知道程序的生成又分为四步:预处理、编译、汇编、链接。那么这四…

STM32MP157驱动开发——Linux IIO驱动(上)

STM32MP157驱动开发——Linux IIO驱动(上 )0.前言一、IIO 子系统简介1.iio_dev 结构体2.iio_dev 申请与释放3.iio_dev 注册与注销4.iio_info5.iio_chan_spec二、驱动开发1. ICM20608 的 IIO 驱动框架搭建2.IIO 设备申请与初始化3.基于以上驱动框架开发 I…

[JavaEE初阶] 线程安全问题的原因和解决方案

努力努力,月薪过亿!!! 格局打开~~~ 文章目录前言1. 线程安全问题的概念2. 线程安全问题的原因3. 线程安全问题解决--加锁3. synchronized4. 死锁4.1 产生死锁的情况4.3 产生死锁的必要条件4.4 避免死锁的方法前言 线程安全这里可能会出道面试题,在日常工作中也是很重要的内容.…

MathType公式对齐不正确

MathType公式对齐不正确1.软件环境⚙️2.问题描述🔍3.解决方法🐡4.1.通过标尺对齐4.2.通过输入具体的制表符位置对齐1.软件环境⚙️ Windows10 教育版64位 Word 2021 MathType 7 2.问题描述🔍 在使用Word写论文的时候,总是避免不…

JavaScript 模块:理解模块系统

前言 现代JavaScript开发毋庸置疑会遇到代码量大和广泛使用第三方库的问题。解决这个问题的方案通常需要把代码拆分成很多部分,然后再通过某种方式将它们连接起来。 在ECMAScript 6模块规范出现之前,虽然浏览器原生不支持模块的行为, 但也迫…

ssh连接ubuntu报错

记录问题:1我在本机windows用ssh rootubuntu连接失败 显示端口21啥的2 打开Ubuntu系统,输入ps -e|grep ssh,发现只有agent,没有server3 安装ssh server,输入sudo apt-get install openssh-server,发现报错信…

仅需一个注解,实现 SpringBoot 项目中的隐私数据脱敏!

这两天在整改等保测出的问题,里面有一个“用户信息泄露”的风险项(就是后台系统里用户的一些隐私数据直接明文显示了),其实指的就是要做数据脱敏。数据脱敏:把系统里的一些敏感数据进行加密处理后再返回,达…

一键自动化 | Salesforce发布Automation Anywhere自动化组合!

2022年12月1日,Salesforce推出了一个新的Automation Everywhere Bundle,以加速端到端的工作流编排(Workflow Orchestration)、跨系统自动化,以及在任何地方嵌入数据和AI驱动的工作流。 该捆绑包完全集成到Salesforce F…

acwing第84场周赛(4788,4789,4890)题解

4788. 最大数量 某商场在一天中一共来了 nn 个客人。 每个客人进入商场的具体时刻(精确到分钟)已知。 请你计算并输出在同一时刻(精确到分钟)进入商场的最大客人数量。 输入格式 第一行包含整数 nn。 接下来 nn 行&#xff…

二叉搜索树比起二叉树又有什么不一样呢?

二叉搜索树比起二叉树又有什么不一样呢?🏐什么是二叉搜索树🏐二叉搜索树的实现🏀节点类:🏀构造函数🏀析构函数🏀插入insert⚽非递归版本⚽递归版本🏀查找find⚽非递归版本⚽递归版本…