素材解析源码9.6(素材资源解析源码)
本篇文章给大家谈谈素材解析源码9.6,以及素材资源解析源码对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、(十二)Geospark源码解析(一)
- 2、源码编辑器中的素材如何下载
- 3、素材解析网站接口如何获取
- 4、素材与源码是什么意思
- 5、YTKNetWork源码解析
- 6、iOS 李明杰 MJRefresh源码解析
(十二)Geospark源码解析(一)
本节我们以查询为例,看下GeoSpark如何利用分布式来实现高效查询。首先,对于Spark来说,想要利用Spark,必须要将自己的类型转为RDD,我们就先看下Geospark是如何读取GeoJson,并将 Geometry 转为RDD的。
Geospark自定义了一个RDD, SpatialRDD ,他是一个泛型类,并且泛型要求是 Geometry 的子类,对于 Geometry 来说,他的子类有 Point 、 Line 、 Polygon 等,这个大家可以去看JTS库 。然后我这里列举了 SpatialRDD 一个重要的成员,对于 rawSpatialRDD 来说,他里面存储的就是我们的需要分析的 Geometry 。
GeoSpark提供了 PointRDD , PolygonRDD 等,他们都继承自 SpatialRDD ,我们以 PointRDD 为例,分析一下GeoSpark是如何将geojson转为RDD的。
这是PointRDD常用的一个构造函数,其中第4行 JavaRDD rawTextRDD = partitions != null ? sparkContext.textFile(InputLocation, partitions) : sparkContext.textFile(InputLocation); 则是利用Spark的原生方法将geojson首先转为一个RDD,他的类型可以理解为是String,第7行 if (sourceEpsgCRSCode != null targetEpsgCode != null) { this.CRSTransform(sourceEpsgCRSCode, targetEpsgCode);} 则是做了一个坐标转换,关键是 第5行 this.setRawSpatialRDD(rawTextRDD.mapPartitions(new PointFormatMapper(Offset, splitter, carryInputData))); ,
在第5行中,Geospark首先调用了 mapPartitions 方法来将rawTextRDD中的每一行转为Geometry,其中 pointFormatMapper 中有一个方法
他是一个重载,函数参数 stringIterator 是每个分区的所有string,Geospark遍历这个集合,在每一行调用了一个 addGeometry 方法,将String转为Geometry,这个方法就不细讲,主要是解析GeoJson,感兴趣的可以去看GeoSpark源码。
这样构造完成后,就将GeoJson转为了一个RDD,此时我们还没有构建空间索引,但是对于大数据量的空间数据我们已经可以利用Spark的RDD进行并行计算了。
这里我们看第16行 return spatialRDD.getRawSpatialRDD().filter(new RangeFilter(queryGeometry, considerBoundaryIntersection, true)); 在第9行 if (useIndex == true) 判断不用索引时,就会跳到第16行,本质上还是用了RDD来利用自定义函数进行判断,如果是真,就过滤出来,我们看 RangeFilter 这个类。
注意到 call 这个方法,里面又调用了 match 方法,它在父类 JudgementBase 定义有:
这里面,我们可以看到第4行和第7行均是利用了JTS来判断的,到这里,就一目了然了,实际上还是我们提供了match这个方法,利用Spark来计算。
本文中,我们并没有涉及到索引,GeoSpark也将JTS的索引进行了封装,原理和上面讲的是一样的,我们下一篇文章中在进行分析。
源码编辑器中的素材如何下载
1、首先手机需要打开浏览器,找到源码编辑器中的素材。
2、其次找到素材的下载地址。
3、最后点击下载即可。
素材解析网站接口如何获取
1、进行简单设置,将ViewSource添加到Safari扩展菜单,在Safari打开任意一个网页后,点击底部的分享按钮,第二行的扩展菜单滑动至最右,选择更多,在活动页面,找到ViewSource并将开关打开,这样ViewSource就添加到Safari扩展菜单了。
2、找寻一些可用的在线解析。
3、查看网页源代码,获取解析接口。
素材与源码是什么意思
分别是写作和计算机的专业术语。
素材,指的是作者从现实生活中搜集到的、未经整理加工的、感性的、分散的原始材料。源码是指编写的最原始程序的代码,是未编译的按照一定的程序设计语言规范书写的文本文件,是一系列人类可读的计算机语言指令。
源码主要功用,1、生成目标代码,即计算机可以识别的代码。2、对软件进行说明,即对软件的编写进行说明。为数不少的初学者,甚至少数有经验的程序员都忽视软件说明的编写,因为这部分虽然不会在生成的程序中直接显示,也不参与编译。
YTKNetWork源码解析
YTKNetWork是一个开源的第三方网络请求框架,具有比较好的网络请求缓存机制的控制。近期项目中想要采取HTTP Cache来优化网络请求,需要实现以下两点:
经过简单的调研发现,YTKNetWork虽然底层是使用的AFNetWorking的框架,但是使用AFNetWorking能够通过设置缓存空间和缓存协议就能快速简单实现的方式在YTKNetWork中并没有生效。YTKNetWork已经很少维护了,所以,只能自己动手来分析YTKNetWork的实现。
废话不多说,下面就开始吧。
先上两张图
首先,我们从目录中找到YTKNetWork.h的头文件,从中可以看到作者想对我们开放的基础功能模块,根据字面意思可以分为几种,一种是Request类型的,一种是Config,还一种是Agent。很容易理解,request类型的是用来发送网络请求的,config是用来配置请求信息的,agent暂时不清楚,用到时我们再来具体分析。那么项目结构就很清晰了,我们就一步一步来分析就好了。
我们从这个最简单的单体类来入手。
m文件中没什么可以分析的,就是对两个过滤池数组的增删操作,唯一注意的就是AFSecurityPolicy初始化的时候使用了defaultPolicy类方法实例化
总结下来,YTKNetworkConfig这个类的作用就是设置base URL、安全策略、url的过滤、缓存路径的过滤。
但是现在对于两个协议的具体使用方式还有疑问,我们带着这个疑问继续往下看。
iOS 李明杰 MJRefresh源码解析
MJRefresh 是著名开发者及培训讲师李明杰老师的作品,到现在在github已经有10000多颗star,真真是极好用的iOS下拉刷新(也支持上拉加载更)控件。本文主要素材来源有 正在学hybrid开发的iOS开发者 J_Knight 的文章和 github 上李明杰老师的用法介绍(主要是本文下部分)。
该框架的结构设计得很清晰,使用一个基类MJRefreshComponent来做一些基本的设定,然后通过继承的方式,让MJRefreshHeader和MJRefreshFooter分别具备下拉刷新和上拉加载的功能。从继承机构来看可以分为三层,具体可以从下面的图里看出来:
其中一条继承链是这样的
开发者一般使用场景是这样的:
作者 在类目 UIScrollView+MJRefresh 中运用运行时关联属性函数 objc_setAssociatedObject 和 objc_getAssociatedObject 对 UIScrollView 视图控件添加了 mj_header 、 mj_footer 等属性.
MJRefreshNormalHeader 是最下层的子类, headerWithRefreshingTarget 和 headerWithRefreshingBlock 是最上层基类 MJRefreshComponent 暴露出的静态快捷构造方法。把对象的创建下放到子类,此处明显用到了工厂方法。编译时类型 mj_header is classof MJRefreshHeader ,运行时类型 MJRefreshNormalHeader 是其子类,此处是典型的多态特性的应用。
即面向接口编码,而非面向实现编码。作者从最上层基类 MJRefreshComponent 即暴露接口
具体实现:
具体实现,首先来看一下该控件的基类:MJRefreshComponent:
这个类作为该控件基类,涵盖了基类所具备的成份:状态,回调block等,大致分成下面这5种职能:
监听的声明:offset、size、state
对于监听的处理:
从上面等结构图可以看出,紧接着这个基类,下面分为codeMJRefreshHeader/code和codeMJRefreshFooter/code,这里顺着codeMJRefreshHeader/code这个分支向下展开:
codeMJRefreshHeader/code继承于codeMJRefreshComponent/code,它做了这几件事:
初始化有两种方法:动作-目标/block块函数 做回调
通过重写codeprepare/code方法来设置header的高度:
通过重写placeSubviews方法来重新调整y值:
这里提供一张图来体现三个状态的不同:
这个类是codeMJRefreshHeader/code类的子类,它做了两件事:
给一张图,让大家直观感受一下这两个控件:
这个类通过覆盖父类三个方法来实现上述两个实现:
在这里,将每一个状态对应的提示文字放入一个字典里面,codekey/code是状态的codeNSNumber/code形式
这里主要是对codelastUpdatedTimeLabel/code和codestateLabel/code进行布局。要注意codelastUpdatedTimeLabel/code隐藏的情况。
在这里,根据传入的codestate/code不同,在codestateLabel/code和codelastUpdatedTimeLabel/code里切换相应的文字。
codeMJRefreshNormalHeader /code继承于 codeMJRefreshStateHeader/code,它主要做了两件事:
给一张图来直观感受一下这两个view:
同codeMJRefreshStateHeader/code一样,也是重写了父类的三个方法:
到此为止,我们已经从codeMJRefreshComponent/code到codeMJRefreshNormalHeader/code的实现过程看了一遍。可以看出,作者将codeprepare/code,codeplaceSubviews/code以及 setState: 方法作为基类的方法,让下面的子类去一层一层实现。
而每一层的子类,根据自身的职责,分别按照自己的方式来实现这三个方法:
这样做的好处是,如果想要增加某种类型的 header ,只要在某一层上做文章即可。例如该框架里的 MJRefreshGifHeader ,它和 MJRefreshNormalHeader 属于同一级,都是继承于 MJRefreshStateHeader 。因为二者都具有相同形式的 stateLabel 和 lastUpdatedTimeLabel ,唯一不同的就是左侧的部分:
还是提供一张图来直观感受一下:
下面我们来看实现:
它提供了两个接口,是用来设置不同状态下使用的图片数组的:
和MJRefreshNormalHeader一样,它也重写了基类提供的三个方法来实现显示gif图片的职能。
关于素材解析源码9.6和素材资源解析源码的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。