废话和JtsSpatislContext的readShapeFromBytes方法介绍

接上文)

最近几天比较忙,很久没有更新文章了,主要在做一个自动化工具,该工 具的主要功能是通过读取excel,word等配置文件(配置文件中的内容非常简单,之所以要做成自动化,就是为了节省人力,所以内容要尽量简单)并将简 单的内容通过各种业务逻辑解析成系统需要的信息最后将信息自动填充到系统中并保存到数据库。说起自动化,我首先想到的是用python来写,因为 python的语法比较简单灵活,可以减少很多无谓的代码,不像java那么死板,一堆的public,int等修饰符。

python 适合用来写小应用如上面的那个自动化工具,但它也可以用来开发web应用,如国内的豆瓣,又拍,知乎等,国外的 dropbox,quora,openstack等,当然它们也是需要框架来完成的,python使用的较多的web框架有 django,pylons,tornado,说下django吧,最近也在研究它,django比较重,ORM,url映射,template语言,安 全机制,cache等功能通通都有,据我看来,它是java阵营里的struts和hibernate的结合体,struts和hibernate可以提 供的功能在django中几乎都有,这样也造成了很多问题:用django就不会再去用外部的设计的更好的模块了,这样也就成为了一个鸡肋。不过这只是一 个小问题,基本上不会对系统造成很大的影响,对于现在的情况,我更加倾向于使用python来搞搞数据分析方面的工作,比如数据挖掘和数据可视化方面的东 西,之前也说过想搞数据分析首先得有数据和数据模型,所以这两块东西在目前我还是不具备的,大数据也是我一直向往的东西。

废话不说了,说主要内容:

readShapeFromBytes方法从字面上可以看出它是将一个字节数组中的各个字节解析从图形的,我们先不看该方法的具体实现,先来看看writeShapeToBytes(Shape)方法,该方法是将一个图形解析成字节数组。

① 点:因为一个点是由一对坐标值(往往是double类型的)组成的,所以分配给这个点的字节数组的长度为28(double类型为8个字节),另外还需 要分配一个字节来表示该图形的类型,所以总共的字节长度为1+28=17个。这里使用NIO中的ByteBuffer来将坐标值写入字节数组中。
② 矩形:由上面可知分配的字节数组长度为1+4*8=33个。
③ 空间图形:首先需要使用WKBWriter.write方法将图形解析成一个字节数组,然后将该字节数组和图形类型的字节表示写入ByteBuffer 中。WKBWriter.writer方法比较复杂,它先把图形的字节序(big-endian还是little-endian,字节序是在实例化 WKBWriter的时候指定的)写入OutPutStream;接着将具体图形的类型按字节类型写入OutPutStream,在这个步骤中还要考虑是 二维还是三维的;最后将坐标值写入OutPutStream。

writeShapeToBytes方法就是这 样,接下来讲readShapeFromBytes就比较容易了,就是一个反向操作了,首先读取一个字节表示图形类型,再根据类型判断是读取点,矩阵还是 空间图形的坐标值,读取出坐标值以后就可以使用GeometryFactory来构建图形了。



Previous     Next
uohzoaix /
Published under (CC) BY-NC-SA in categories spatial  tagged with