前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >作品分享-用三十八行代码找到狭长面

作品分享-用三十八行代码找到狭长面

作者头像
数据处理与分析
发布于 2022-11-18 07:07:04
发布于 2022-11-18 07:07:04
79400
代码可运行
举报
运行总次数:0
代码可运行

内容简介

今天分享的这份作品,是作品征集发出后收到的第一份作品。这份作品,来自网名xiaofei的网友,现将作品整理后分享给大家。

作品介绍

我收到的作品,有处理后的文件,有源码,也有作者解答问题的思路。从形式上来说,非常的清晰,让人一看就能明白作者是怎么解答这个问题的。

以下为作品详细内容:

作品内容

要解答的问题

问题:如何找到并去除图斑的狭长面?

作者代码
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(rgeos)
library(rgdal)
library(magrittr)
library(spdep)
library(raster)

#自定义函数
splitTB<- function(x,width=60){
  coord<-x@polygons[[1]]@Polygons[[1]]@coords
  nb<-dnearneigh(coord,d1=1,d2=width,longlat = FALSE)
  al_line<-nb2lines(nb,coords = coordinates(coord))
  just<-gWithin(al_line,x,byid=T)
  fg_line<-al_line[c(just),]
  #线做buffer并于原始面做差,得到碎面
  line_buff<-gBuffer(fg_line,width = 0.000001)
  tb_sm<-gDifference(x,line_buff,byid=T) %>% disaggregate()
  tb_sm_id<-SpatialPolygonsDataFrame(tb_sm,data.frame(id=1:length(tb_sm)))
  #碎面质心做buff
  pts<-coordinates(tb_sm_id) %>% SpatialPoints()%>% SpatialPointsDataFrame(data.frame(ID=1:length(tb_sm_id)))
  pts_buff<-gBuffer(pts,width=width,byid=T)
  tb_ys<-spPolygons(coord) 
  pts_buff_dif<-(pts_buff - tb_ys)
  tc_id<- pts_buff_dif$ID 
  #结果输出
  tb_blpart<- tb_sm_id[-tc_id,] 
  tb_blpart$category <- 'BL'
  tb_tcpart<- (x-tb_blpart) 
  tb_tcpart$category <- 'TC'
  result<- rbind(tb_blpart,tb_tcpart)
}
#执行函数输出结果

shp<- readOGR("E:/Rdata/827/testnew.shp")
result<-lapply(1:nrow(shp), function(x){
  ls<- splitTB(shp[x,])
  }) %>% Reduce(rbind,.)
#写出结果
writeOGR(result,"E:/Rdata/827",layer='result827',driver = 'ESRI Shapefile')
解决思路:

通过R语言实现,采用大问题逐步拆解为小问题的思路;

1、如何找到宽度小于60m的部分?

宽度小于60m的部分,转化为找到相邻两点(空间位置上相邻)的间隔小于60m的部分,用R语言dnearneight找到相邻的两点,并用nb2lines输出两点连线。 作者在这里,将宽度小于60米的问题转换为点之间距离的计算问题,并且符合设置条件的点对连成了线。

2、从图斑中分割狭长部分?

第一想法是直接用线进行分割,但知识储备有限在R中没能实现,转而求其次,用线生成面宽度设置成0.000001,此容差对于arcgis来说几乎没有影响;然后再用原始图斑与线生成的缓冲面做差会将狭长部分与保留部分分开,狭长部分会被分割为多个碎面。 这一步中,作者采用了用线缓冲成面来切分另一个面的方式,来实现线分割面的功能。在主流的平台中,都没有直接用线分割面的功能,但这并不意味着不能用线来分割面,我们可以将面转成线,然后再重构面的方式来完成线分割面的功能,这样就不会有任何微小的缝隙。

3、如何将狭长部分生成的碎面识别出来?

通过buff面来识别:因为设置的规则是小于60m的狭长部分,所以就以第二步生成的图斑的质心为中心,做60m的缓冲面,如果60m的缓冲面超过图斑边界了那就说明宽度小于60m。 作者的这种方式很巧妙,通过缓冲面的分析,来找出狭长面,很棒!

以下内容就是在R语言中具体的实现方式了,我就不再评论了(主要我也不懂R)

3.1、第3步问题再细化:

① 如何知道缓冲面超过图斑边界了? 问题转化为,用缓冲面跟图斑做差,如果缓冲面有剩余那就是超过边界了。 ② 如何根据缓冲面把碎图斑识别出来? 通过赋id值的方式找出:先给第二步生成的图斑赋id,然后生成质心再赋id,然后对质心做缓冲面,这样缓冲面就带id了而且跟图斑id是对应关系,这样就知道哪些id的缓冲面是超边界了,然后根据id将碎图斑识别出来; ③ 对于有空洞的大图斑,生成的质心的缓冲面跟大图斑做差后也可能有剩余。 解决:用最外围的坐标点生成的图斑,这样就不会有空洞,做差后就不会有剩余。

4、输出狭长部分

用第二步生成的图斑将保留部分提取出来,然后再用原始图斑跟保留部分做差即可。对保留图斑和狭长部分分别赋上属性这样就可以在分别开来。 这里为什么不用碎图斑直接生成狭长面呢? 因为在第二步的时候本想用线分割面,但是没实现,所以产生了0.00001的缝隙,无法直接融合为一块;

有待改进:

1、 后期有时间了研究一下怎么在R中用线直接分割面,用线分割面比做0.000001m的缓冲区更严谨。 2、 由于R容差的原因,导致生成狭长部分不够完美,有特别细的细缝,经实验比如s2在s1图斑内,s2边界正常,然后我用s1-(s1-s2)得到的图斑按常理说应该跟s2保持一致,但是现实确实多了细缝,我想这可能就是容差的问题,后期有时间了研究一下容差的设置;

最后输出结果图:

总结

总体来说,是一份很棒的作品不过作者可能再处理数据方面的经验稍微有点欠缺,导致做出的结果不是特别的完美。不过瑕不掩瑜,稍加改进,这份作品就会变得很完美。

由于篇幅限制,剩下的几份作品,我下次再分享。

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
作品分享-FME作品集
今天分享的内容,是收到的FME作品集。相对上一篇推送的用R实现的方式,用FME实现的更多。 下面我将按照:整体思路、关键转换器的方式对各个作品进行逐一解读。 根据作者的意愿与我之前被白嫖的经历,本篇推送只分享思路,不分享具体的实现模板。
数据处理与分析
2022/11/18
1.6K0
Python | GDAL处理矢量数据
GDAL矢量数据处理 为什么要学GDAL? GDAL是什么? (Geospatial Data Abstraction Library) 地理空间数据抽象库 用C/C++编写,支持多种矢量/栅格数据,支持python、.NET、Ruby等语言绑定,开放源码。 传统上GDAL指的是栅格支持库 from osgeo import gdal 矢量支持使用OGR简单要素库 (OpenGIS Simple Features Reference Implementation) 但由于OGR与OpenGIS的规范并不完全
GIS与遥感开发平台
2022/04/29
10.2K0
Python | GDAL处理矢量数据
Python 无监督学习实用指南:1~5
在本章中,我们将介绍基本的机器学习概念,即 ,前提是您具有一些统计学习和概率论的基本知识 。 您将了解机器学习技术的使用以及逻辑过程,这些逻辑过程将增进我们对数据集的性质和属性的了解。 整个过程的目的是建立可支持业务决策的描述性和预测性模型。
ApacheCN_飞龙
2023/04/24
1.3K0
Python 无监督学习实用指南:1~5
2013年 阿拉斯加巴罗活动层厚度和土壤含水量
Pre-ABoVE: Active Layer Thickness and Soil Water Content, Barrow, Alaska, 2013
此星光明
2024/06/11
1040
2013年 阿拉斯加巴罗活动层厚度和土壤含水量
arcpy怎么用_python arcpy
arcgis地理处理包括了查找工具、工具箱、地理处理环境、模型、python脚本、arcpy等一系列自动执行地理任务的框架。
全栈程序员站长
2022/11/17
2.6K0
arcpy怎么用_python arcpy
Python | 绘制影像地图(Basemap)
文中代码与数据请点击https://pan.bnu.edu.cn/v/link/view/0cd746194a1e42858583e84ac7fc4e40直接下载,不需要转存。
GIS与遥感开发平台
2022/04/29
7.2K0
Python | 绘制影像地图(Basemap)
基于STM32设计的车库监控报警系统
随着社会的发展,人们的生活水平不断提高对安防问题的关注度越来越高,因而各类防盗设备也层出不穷,本文采用红外测距传感器、摄像头、STM32单片机以及ESP8266无线通信模块设计一种车库防盗报警器,其可安装在车库的里,通过红外线测距检测是否有人入侵,产生报警信号,提醒相关人员采取应急防御措施。该防盗报警器成本低,功能优,防盗效果好,是家居防盗的优良选择。
DS小龙哥
2022/09/08
1.1K0
基于STM32设计的车库监控报警系统
Python OpenCV 蓝图:1~5
本章的目的是开发许多图像处理过滤器,并将其实时应用于网络摄像头的视频流。 这些过滤器将依靠各种 OpenCV 函数来通过拆分,合并,算术运算以及为复杂函数应用查找表来操纵矩阵。
ApacheCN_飞龙
2023/04/27
1.9K0
Python OpenCV 蓝图:1~5
学徒带你7步3251行代码+300行注释完成TCGA数据库挖掘实战全文复现
作者从TCGA数据库下载乳腺癌(以下简称BRCA)样本的miRNA相关数据(104个Normal,1103个Tumr)。 进行了如下分析: 1.下载数据 2.筛选差异表达的miRNA(DEM):使用EdgeR包 得到370个DEM,108 Down DEM, 262 Up DEM 对筛选出的370个DEM绘制了热图,文章使用的gplots 包中的heatmap.2()绘图
生信技能树
2020/03/26
4.1K0
使用 TensorFlow 构建机器学习项目:1~5
TensorFlow 是用于使用数据流图进行数值计算的开源软件库。 图中的节点表示数学运算,而图的边缘表示在它们之间传递的多维数据数组(张量)。
ApacheCN_飞龙
2023/04/23
1.3K0
超级强大的vim配置(vimplus)
最近在重新配置Vim,也在GitHub上找了三个star和fork数目很高的方案,在这里分享给大家: https://github.com/amix/vimrc - star 3,482 ; Fork
_gongluck
2018/03/13
30.1K2
超级强大的vim配置(vimplus)
Python OpenCV3 计算机视觉秘籍:1~5
计算机视觉算法消耗并产生数据-它们通常将图像作为输入并生成输入的特征,例如轮廓,感兴趣的点或区域,对象的边界框或其他图像。 因此,处理图形信息的输入和输出是任何计算机视觉算法的重要组成部分。 这不仅意味着要读取和保存图像,还要显示有关其功能的其他信息。
ApacheCN_飞龙
2023/04/27
2K0
BootStrap应用开发学习入门
[TOC] 0x00 前言简介 什么是BootStrap? 答:Bootstrap是Twitter 的 Mark Otto 和 Jacob Thornton 开发的推出的一个用于前端开发的开源工具包产
全栈工程师修炼指南
2020/10/23
18.6K0
BootStrap应用开发学习入门
HLS与RTL语言使用情况调查
数十年来,寄存器传输级别(RTL)一直是描述超大规模集成(VLSI)系统及其组成知识产权块的主要方法。尽管RTL工具只是逐步发展的,但VLSI系统的复杂性却呈指数级增长,这使设计和验证过程成为生产力的瓶颈[1]。
网络交换FPGA
2020/04/21
2.6K0
HLS与RTL语言使用情况调查
CV2模块使用(详细教程)
参考文章:https://www.cnblogs.com/shizhengwen/p/8719062.html
全栈程序员站长
2021/04/07
4.2K0
【Linux】《how linux work》第八章 流程和资源利用的近距离观察
This chapter takes you deeper into the relationships between processes, the kernel, and system resources. There are three basic kinds of hardware resources: CPU, memory, and I/O. Processes vie for these resources, and the kernel’s job is to allocate resources fairly. The kernel itself is also a resource—a software resource that processes use to perform tasks such as creating new processes and communicating with other processes. Many of the tools that you see in this chapter are often thought of as performance-monitoring tools. They’re particularly helpful if your system is slowing to a crawl and you’re trying to figure out why. However, you shouldn’t get too distracted by performance; trying to optimize a system that’s already working correctly is often a waste of time. Instead, concentrate on understanding what the tools actually measure, and you’ll gain great insight into how the kernel works.
阿东
2024/04/22
1290
【Linux】《how linux work》第八章 流程和资源利用的近距离观察
Linux 命令 | 每日一学,Audit 安全审计相关工具
描述: Linux 审计系统提供了一种方式来跟踪系统上与安全相关的信息。根据预配置的规则,审计会生成日志条目,来尽可能多地记录系统上所发生的事件的相关信息。对于关键任务环境而言至关重要,可用来确定安全策略的违反者及其所执行的操作。审计不会为您的系统提供额外的安全,而是用于发现系统上使用的安全策略的违规。可以通过其他安全措施(如 SELinux)进一步防止这些违规。
全栈工程师修炼指南
2024/04/10
2.1K0
Linux 命令 | 每日一学,Audit 安全审计相关工具
使用 OpenCV4 和 C++ 构建计算机视觉项目:1~5
计算机视觉应用是有趣和有用的,但是底层算法是计算密集型的。 随着云计算的到来,我们可以使用更多的处理能力。
ApacheCN_飞龙
2023/04/27
3K0
MySQL数据库精选(从入门使用到底层结构)
查询所有数据库: SHOW DATABASES; 查询当前数据库: SELECT DATABASE(); 创建数据库: CREATE DATABASE [ IF NOT EXISTS ] 数据库名 [ DEFAULT CHARSET 字符集] [COLLATE 排序规则 ]; 删除数据库: DROP DATABASE [ IF EXISTS ] 数据库名; 使用数据库: USE 数据库名;
不吃紫菜
2024/01/27
4650
MySQL数据库精选(从入门使用到底层结构)
protel相关资料
其实,在一块主板上采用蛇行线的原因有两个:一是为了保证走线线路的等长。因为像CPU到北桥芯片的时钟线,它不同于普通家电的电路板线路,在这些线路上以100MHz左右的频率高速运行的信号,对线路的长度十分敏感。不等长的时钟线路会引起信号的不同步,继而造成系统不稳定。故此,某些线路必须以弯曲的方式走线来调节长度。另一个使用蛇行线的常见原因为了尽可能减少电磁辐射(EMI)对主板其余部件和人体的影响。因为高速而单调的数字信号会干扰主板中各种零件的正常工作。通常,主板厂商抑制 EMI的一种简便方法就是设计蛇形线,尽可能多地消化吸收辐射。但是,我们也应该看到,虽然采用蛇行线有上面这些好处,也并不是说在设计主板走线时使用的蛇行线越多越好。因为过多过密的主板走线会造成主板布局的疏密不均,会对主板的质量有一定的影响。好的走线应使主板上各部分线路密度差别不大,并且要尽可能均匀分布,否则很容易造成主板的不稳定。 3、忌用“飞线”主板  判断一块主板走线的好坏,还可以从走线的转弯角度看出来。好的主板布线应该比较均匀整齐,走线转弯角度不应小于135度。因为转弯角度过小的走线在高频电路中相当于电感元件,会对其它设备产生干扰。    而某些设计水平很差的主板厂商在设计走线时,由于技术实力原因往往会导致最后的成品有缺陷。此时,便采取人工修补的方法来解决问题,这种因设计不合理而出现的导线,称之为“飞线”(图2)。如果一块主板上有飞线,就证明该主板的走线设计有一些问题。
全栈程序员站长
2022/06/26
1.7K0
protel相关资料
相关推荐
作品分享-FME作品集
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验