前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >作品分享-FME作品集

作品分享-FME作品集

作者头像
数据处理与分析
发布于 2022-11-18 07:07:31
发布于 2022-11-18 07:07:31
1.6K0
举报

内容简介

今天分享的内容,是收到的FME作品集。相对上一篇推送的用R实现的方式,用FME实现的更多。 下面我将按照:整体思路、关键转换器的方式对各个作品进行逐一解读。 根据作者的意愿与我之前被白嫖的经历,本篇推送只分享思路,不分享具体的实现模板。

点是空间中只有位置,没有大小的图形 线是由点形成的图形,只具有位置和长度,没有宽度 面是由线围合而成的图形

作品集

总的来说,使用三角网思路来查找缝隙的作品比较多,有四个(加油_💯琦、傻狗、鹦鹉拔牙、以及我);使用缓冲区思路实现的有一个(凡尘);调用QGIS实现的有一个(悟空)。 下面对各个作品进行详细解读。

加油_💯琦

整体思路

1、作者首先将待检查的面进行编号,赋予每个面一个唯一的ID,然后将面转成三角形; 2、然后通过空间分析的方式将三角形的边分成两部分:原面边线一致的,位于原来面内部的; 3、通过设置的值域(宽度小于60米),找出符合条件的内部边; 4、使用步骤三中的内部边,筛选出与之相邻的边(为后续的构面使用); 5、构面,并将相邻的小面融合在一起; 6、用空间裁切的方式,区分出狭长面和大面部分。

重点转换器

作者使用了三个SpatialFilter转换器,这几个转换器的参数设置有两种,一种是如下图所示的包含:

作者的第2步,使用如上图所示的参数将三角形的边分成了两部分。

上图的红色和水蓝色,是分别从转换器的两个端口输出的数据。需要知道,当线与面的边线重合的时候,那不叫包含,只能叫相交。

作者的另一种设置是相交

作者的第3步,使用空间相交的方式,过滤出了构成小面所需要的边。 这几个SpatialFilter转换器的使用,筛选出了狭长面相关的边,通过后续的构面处理,形成了狭长面,思路非常清晰,作品也很精彩,值得学习、借鉴。

运行时间

在我的笔记本上,运行时间0.5s

运行结果

努力的悟空

整体思路

从整体上来看,悟空这个思路复杂了不少,用的转换器也比较多。他将寻找分割线的计算,放到了Qgis中来计算。不过 1、计算面积、编号; 2、使用Qgis计算分割线; 3、过滤计算后的分割线,保留需要的部分; 4、把所有线放在一起打断、构面; 5、计算小面面积,并计算占比进行过滤; 6、使用面进行裁剪,分出大小面。

重点转换器

这位作者的重点转换器,是在QGIS里的这些计算,通过QGIS的计算,取出了分割线,后续通过构面、计算、裁切实现了狭长面的寻找

运行时间

在我的笔记本上,运行时间1.1s

运行结果

凡尘

首先,凡尘这个排版就很清爽,一看就是个精致的人,非常棒!

整体思路

1、将面打断为线段; 2、使用两次缓冲,提取出面主体部分; 3、使用空间计算,筛选出狭长部分的边线; 4、将边线碎线连接成长线段; 5、构面; 6、裁切并输出。

重点转换器

两个缓冲转换器的使用,非常精妙地去除了面的狭长部分。又用三个空间筛选,找出了狭长部分的边线。后续的捕捉,将开口的边线封闭起来,以便后续裁切。

运行时间

在我的笔记本上,耗时0.7秒

运行结果

傻狗

整体思路

作者也是使用三角网的方式来完成狭长面查找的,整体也比较清爽,大致思路如下: 1、分别将面拆分为三角面和线段; 2、将三角边拆分为线段,并按照线段的长度过滤出符合条件的边; 3、将边连接起来; 4、构面,并按照面积大小进行过滤; 5、融合小面,并对原始面进行裁切,输出大小面。

重点转换器

作者这里生成三角网用的是chopper,节点个数设置为4(鹦鹉拔牙也用的这种方式)

按照这样的方式打断之后,面就变成了三角面。

这跟Triangulator转换器的结果是一致的,都可以完成对大面的三角剖分。

运行时间

在我的机器上,运行时间0.5秒

运行结果

鹦鹉拔牙

酒神不愧为神,除了三角网,基本就没用啥空间分析类的转换器,跟其他作品思路完全不一致,真棒!

整体思路

1、分别按照打断面为线段和三角形; 2、计算三角形边长,并根据边长进行过滤; 3、构面; 4、计算面积,并统计面的平均数; 5、通过面积平均数,进行过滤; 6、将碎面融合输出,融合后的面,即为狭长面。

重点转换器

酒神这里统计了每个小面的面积,并计算了平均数,后面又根据平均数,区分出了狭长面,非常精彩!

运行时间
运行结果

我自己的

整体思路

1、将面剖分为三角形; 2、过滤出短边和内部边,和外边线; 3、根据长度过滤内部边; 4、将外部边、内部边连成长边; 5、计算边长度,并构面; 6、根据构面的每个边的边长,区分出大小面; 7、融合小面,并输出,输出的面,即为狭长面。

重点转换器

在这个转换器,保留了构面的每个边的边长,在后续通过计算面的最长部分边,来区分大小面。

运行时间

在我的机器上,运行时间0.5秒

运行结果

总结

通过这次作品征集,我认识了一些新朋友。也从这些作者的思路中,学到了新知识。希望上面作者分享的思路,也能给各位读者一些启发。需要注意的是,这次征集的作品,都是针对样例数据(如图所示的几个面)的解决方案。在更换数据源的时候,上述方案可能会找得到狭长面,也可能找不到。

我希望以后的作品征集,能有更多的作者参与进来,我们一起来交流学习。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-10-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据处理与分析 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Linux应用开发【第一章】Framebuffer应用开发
​ LCD Framebuffer 就是一块显存,在嵌入式系统中,显存是被包含在内存中。LCD Framebuffer里的若干字节(根据驱动程序对LCD控制器的配置而定)表示LCD屏幕中的一个像素点,一一对应整个LCD屏幕。举个例子,LCD屏幕是800*600的分辨率,即LCD屏幕存在480000个像素点,若每个像素点4个字节表示,那么LCD Framebuffer显存大小为480000 *4=960000字节,即1.92MB。因此我们的内存将会分割至少1.92MB的空间用作显存。具体地址在哪里,这个就是又驱动程序去定,应用程序只需直接使用即可,硬件相关操作已由驱动程序封装好。
韦东山
2021/12/15
1.9K0
Linux应用开发【第一章】Framebuffer应用开发
Linux小项目-数码相册设计
这是基于Linux系统开发板设计一个小项目-数码相册,在LCD屏上可以显示完成常见的图片显示,翻页、旋转、缩放等功能。
DS小龙哥
2022/05/11
1.5K0
Linux小项目-数码相册设计
Linux应用开发:嵌入式Linux下矢量字体运用
FreeType库是一个完全免费(开源)的、高质量的且可移植的字体引擎,它提供统一的接口来访问多种字体格式文件,可以非常方便我们开发字体显示相关的程序功能。它支持单色位图、反走样位图的渲染。FreeType库是高度模块化的程序库,虽然它是使用ANSI C开发,但是采用面向对象的思想,因此,FreeType的用户可以灵活地对它进行裁剪。关于freetype的详细信息可以参考freetype的官方网站:https://www.freetype.org/来获取更多相关的信息。
DS小龙哥
2022/01/12
4.7K0
Linux应用开发:嵌入式Linux下矢量字体运用
嵌入式Linux下LCD应用编程: 读取摄像头画面完成本地视频监控画面显示
完整项目代码下载地址(包含矢量字库源码和编译安装方法): https://download.csdn.net/download/xiaolong1126626497/16680219
DS小龙哥
2022/01/12
2.3K0
嵌入式Linux下LCD应用编程: 读取摄像头画面完成本地视频监控画面显示
百问LCD Framebuffer应用开发 - freetype搭建与使用
​ 由于100ask开发板已经有freetype相关的库和头文件,因此不需要移植,如果开发板没有freetype库和头文件就需要按以下方法移植
阿志小管家
2024/11/26
1310
百问LCD Framebuffer应用开发 - freetype搭建与使用
ucgui在嵌入式linux下的移植
前几天在研究minigui,照着官方的步骤编译,竟然一堆错,不是缺这库,就是缺那库。好不容易快到了最后一步,竟然再链接时告诉我用的64位系统不兼容32位的minigui。
杨永贞
2020/08/04
2.1K0
Linux应用开发-LCD显示BMP图片
BMP是一种与硬件设备无关的图像文件格式,是Windows环境中交换与图有关的数据的一种标准,在Windows环境中运行的图形图像软件都支持BMP图像格式。BMP格式的图片存放的就是原始的RGB数据,一般没有做压缩,也就是图片的画质是最原始的,也导致BMP图片占用的内存非常大。现在常用的jpg、jpeg格式都是压缩格式,保存的时候通过算法编码压缩,显示的时候再解压成RGB数据渲染显示。
DS小龙哥
2022/05/11
4.3K0
Linux应用开发-LCD显示BMP图片
推荐一款不错的嵌入式GUI(玲珑GUI)及在嵌入式linux上的移植
玲珑GUI(LLGUI)是一套使用简单、低价的单片机GUI解决方案。可以用来代替串口屏、组态,降低产品成本,产品软硬件自主可控。 配套界面开发软件,图形化编辑界面,生成C代码。
杨永贞
2022/01/07
2.2K0
推荐一款不错的嵌入式GUI(玲珑GUI)及在嵌入式linux上的移植
LCD Framebuffer应用开发 - 操作原理
​ LCD Framebuffer 就是一块显存,在嵌入式系统中,显存是被包含在内存中。LCD Framebuffer里的若干字节(根据驱动程序对LCD控制器的配置而定)表示LCD屏幕中的一个像素点,一一对应整个LCD屏幕。举个例子,LCD屏幕是800* 600的分辨率,即LCD屏幕存在480000个像素点,若每个像素点4个字节表示,那么LCD Framebuffer显存大小为480000 * 4=960000字节,即1.92MB。因此我们的内存将会分割至少1.92MB的空间用作显存。具体地址在哪里,这个就是又驱动程序去定,应用程序只需直接使用即可,硬件相关操作已由驱动程序封装好。
阿志小管家
2024/11/23
1700
LCD Framebuffer应用开发 - 操作原理
嵌入式Linux下LCD应用编程: 调用giflib库解码显示GIF动态图
生活中常用图片格式有BMP、PNG、JPG、GIF等。BMP图片的显示很简单,可以直接从图片文件里读取RGB数据进行显示.。PNG格式图片显示,直接调用libpng库里的接口函数解码显示;JPG格式图片也一样,调用libjpeg库的接口函数完成解码即可得到原始RGB数据完成显示;如果要在LCD屏上显示GIF图片,那么也是调用giflib库的接口函数完成解码显示。
DS小龙哥
2022/01/12
3.2K0
嵌入式Linux下LCD应用编程: 调用giflib库解码显示GIF动态图
littlevgl(Lvgl)最新版V7.4移植
LittleVGL最新已经更新到V7,网上大多数移植教程的版本比较老,很多特性没有,界面也不够酷炫。
杨永贞
2020/09/02
3.5K0
Linux驱动开发: FrameBuffe(LCD)驱动开发
帧缓冲(framebuffer)是Linux 系统为显示设备提供的一个接口,它将显示缓冲区抽象,屏蔽图像硬件的底层差异,允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作。用户不必关心物理显示缓冲区的具体位置及存放方式,这些都由帧缓冲设备驱动本身来完成。
DS小龙哥
2022/01/12
49.8K0
Linux驱动开发: FrameBuffe(LCD)驱动开发
Linux应用开发-libjpeg库交叉编译与使用
在开发板上如果想要显示jpeg格式的图片,必须用到libjpeg库,不可能自己去编写jpg的解码代码。
DS小龙哥
2022/05/09
4K0
Linux应用开发-libjpeg库交叉编译与使用
【硬核】韦东山:使用freetype显示一行文字
6.6 使用freetype显示一行文字 使用GIT下载所有源码后,本节源码位于如下目录: 01_all_series_quickstart 04_嵌入式Linux应用开发基础知识\source\10_freetype 04_show_line\show_line.c
韦东山
2020/09/30
2.1K0
38.opengl-字体渲染
早期的文本渲染,是将需要的字符集放到一个大纹理中,这个纹理称为“位图字体”,渲染某个字符时,通过查找坐标,找到该字符对应的区域并渲染出来,再启动混合,让字符纹理的背景保持透明,非常容易理解。
公号sumsmile
2020/10/10
1.8K0
38.opengl-字体渲染
将jpeg图片显示在framebuffer上
点击(此处)折叠或打开 /************************************************** * example5.c * Author: T-bagwell * * Compile:gcc -Wall example5.c -o example5 *************************************************/ #include <stdio.h> #inclu
用户3765803
2019/03/05
1.5K0
Ubuntu Linux下通过c++获取屏幕大小
操作1,从驱动读取屏幕大小 #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <linux/fb.h> #include <sys/mman.h> #include <math.h> int w,h ,bpp; int *fbmem; int main(int argc , char *argv[]){ int fd; struct fb_var_screeninfo fb_
Pulsar-V
2018/04/18
3.7K0
OpenGL ES 文字渲染进阶--渲染中文字体
旧文 OpenGL ES 文字渲染方式有几种? 一文中分别介绍了 OpenGL 利用 Canvas 和 FreeType 绘制文字的方法。 无论采用哪种方式进行渲染,本质上原理都是纹理贴图:将带有文字的图像上传到纹理,然后进行贴图。
字节流动
2021/07/05
1.5K0
OpenGL ES 文字渲染进阶--渲染中文字体
OpenGL ES 文字渲染
在音视频或 OpenGL 开发中,文字渲染是一个高频使用的功能,比如制作一些酷炫的字幕、为视频添加水印、设置特殊字体等等。
字节流动
2021/06/24
1.9K0
OpenGL ES 文字渲染
16.Linux-LCD驱动(详解)
在上一节LCD层次分析中,得出写个LCD驱动入口函数,需要以下4步: 1) 分配一个fb_info结构体: framebuffer_alloc(); 2) 设置fb_info 3) 设置硬件相关的操作
诺谦
2018/01/03
3.5K0
16.Linux-LCD驱动(详解)
推荐阅读
相关推荐
Linux应用开发【第一章】Framebuffer应用开发
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档