发明名称 一种基于Lucene的林地图斑矢量数据查询方法
摘要 本发明公开了一种基于Lucene的林地图斑矢量数据查询方法。该方法包括以下步骤:确定网格大小,对林地图斑矢量数据进行格式转换,对于转换后的数据进行网格划分;对于网格划分后的数据建立全文索引,按查询条件返回相应数据。本方法通过将二维林地图斑矢量数据进行网格划分并映射到一维字符串索引,使之能够使用Lucene全文检索引擎库进行检索,从而提供了高效的林地图斑矢量数据全文检索方法。
申请公布号 CN106294575A 申请公布日期 2017.01.04
申请号 CN201610604450.0 申请日期 2016.07.21
申请人 国家林业局调查规划设计院 发明人 张煜星;黄国胜;许等平;王雪军;任怡;党永峰;蒲莹;杜震洪;罗鹏
分类号 G06F17/30(2006.01)I 主分类号 G06F17/30(2006.01)I
代理机构 代理人
主权项 一种基于Lucene的林地图斑矢量数据查询方法,所述方法包括如下步骤:1)、确定网格大小:根据输入的数据范围及网格阶数,计算网格大小,具体为:1.1)、获取输入的数据范围:经度范围:[lng<sub>起</sub>,lng<sub>终</sub>],纬度范围:[lat<sub>起</sub>,lat<sub>终</sub>],其中,lng<sub>起</sub>表示经度的起点,lng<sub>终</sub>表示经度的终点,lat<sub>起</sub>表示纬度的起点,lat<sub>终</sub>表示纬度的终点;1.2)、获取输入的网格阶数z;1.3)、计算网格的长度d<sub>ing</sub>与宽度d<sub>lat</sub>:<img file="FSA0000132856270000011.GIF" wi="1149" he="174" />2)、对林地图斑矢量数据进行格式转换:对于输入的林地图斑矢量文件,采用OGR接口注册相应矢量驱动,读取矢量文件的每一图层,并记录图层中每一图斑要素的属性信息,以及将所述图斑要素的空间信息以众所周知的文件WKT格式记录,具体为:2.1)、使用OGR接口,注册矢量格式驱动;2.2)、打开林地专题图数据源;2.3)、对于每一个矢量文件,遍历所述矢量文件的每一个图层的信息;2.4)、对于每一个图层,遍历所述每一个图层的每一个图斑要素的信息;2.5)、获取图斑要素的多个属性信息及空间信息;2.6)、以“图斑ID_属性1的信息_…_属性n的信息_WKT格式空间信息”的格式记录每一图斑要素信息,其中n表示属性的数量;3)、对格式转换后的数据进行网格划分:对于获得的WKT格式的图斑数据t,计算所述数据t的空间范围,从而确定所述数据t的网格范围,对于网格范围内的每一个网格,将所述网格与所述图斑数据t求交,获得相交多边形i,将图斑数据t的多个属性赋给相交多边形i,并为相交多边形i新建字段以保存所在网格号及原图斑数据t的WKT格式的空间信息,具体为:3.1)、对于记录的图斑数据t,获取其空间范围:经度范围:[lng<sub>min</sub>,lng<sub>max</sub>],纬度范围:[lat<sub>min</sub>,lat<sub>max</sub>],其中,lng<sub>min</sub>表示经度范围的最小值,lng<sub>max</sub>表示经度范围的最大值,lat<sub>min</sub>表示纬度范围的最小值,lat<sub>max</sub>表示纬度范围的最大值;3.2)、确定图斑数据t的网格行列号范围:<img file="FSA0000132856270000021.GIF" wi="1035" he="343" />其中,col<sub>min</sub>表示列号的最小值,col<sub>max</sub>表示列号的最大值,row<sub>min</sub>表示行号的最小值,row<sub>max</sub>表示行号的最大值;3.3)、对于行列号(col,row)所确定的网格,计算该网格边界为:g<sub>minlng</sub>=lng<sub>起</sub>+col×d<sub>lng</sub>;g<sub>maxlng</sub>=lng<sub>起</sub>+(col+1)×d<sub>lng</sub>;g<sub>minlat</sub>=lat<sub>起</sub>+row×d<sub>lat</sub>;g<sub>maxlat</sub>=lat<sub>起</sub>+(row+1)×d<sub>lat</sub>;其中,col表示列号,row表示行号,g<sub>minlng</sub>表示网格的最小经度值,g<sub>maxlng</sub>表示网格的最大经度值,g<sub>minlat</sub>表示网格的最小纬度值,g<sub>maxlat</sub>表示网格的最大纬度值;3.4)、根据g<sub>minlng</sub>、g<sub>maxlng</sub>、g<sub>minlat</sub>、g<sub>maxlat</sub>建立网格多边形grid,并与图斑数据t求交,得到相交多边形i;3.5)、以“图斑数据t的ID_图斑数据t属性1的信息_…_图斑数据t属性m的信息_图斑数据t的WKT格式空间信息_相交多边形i的网格号_相交多边形i的WKT格式空间信息”的格式记录相交多边形i的信息,其中m表示图斑数据t的属性的数量;4)、对于网格划分后的数据建立全文索引:对于网格划分所得的相交多边形i,计算该相交多边形i的最小外包矩形mbr;采用Lucene类库对相交多边形i的多个属性信息及最小外包矩形建立索引,并将索引保存至对应的网格所确定的目录中,具体为:4.1)、对于相交多边形i,获取其最小外包矩形mbr;4.2)、采用Lucene类库,创建IndexWriter对象,并将该IndexWriter对象指向由格网号(col,row)确定的目录;4.3)、采用Lucene类库,创建文档Document对象,并将相交多边形i的多个属性信息建立索引后加入该文档Document对象,并采用Lucene中的Spatial类对最小外包矩形mbr的空间信息建立索引后加入该文档Document对象;4.4)、采用Lucene类库,将该文档Document对象加入IndexWriter,执行IndexWriter后将其关闭;5)、按查询条件返回相应数据:对于输入的查询条件,根据其中的空间信息条件先判断其搜索网格范围,获取相应目录下的索引,进而采用Lucene类库根据输入条件查询相应索引,过滤重复数据后返回符合结果,具体为:5.1)、获取输入的查询条件中的空间范围:经度范围:[slng<sub>min</sub>,slng<sub>max</sub>],纬度范围:[slat<sub>min</sub>,slat<sub>max</sub>],其中,slng<sub>min</sub>表示查询条件中的空间范围的最小经度值,slng<sub>max</sub>表示查询条件中的空间范围的最大经度值,slat<sub>min</sub>表示查询条件中的空间范围的最小纬度值,slat<sub>max</sub>表示查询条件中的空间范围的最大纬度值;5.2)、计算其对应的网格号范围:列号范围:[scol<sub>min</sub>,scol<sub>max</sub>],行号范围:[srow<sub>min</sub>,srow<sub>max</sub>],其中,scol<sub>min</sub>表示列号的最小值,scol<sub>max</sub>表示列号的最大值,srow<sub>min</sub>表示行号的最小值,srow<sub>max</sub>表示行号的最大值;5.3)、根据行列号(scol,srow)获取相应目录下的索引;5.4)、根据查询条件中的空间信息,采用Lucene中的Spatial类对于所获索引进行过滤;5.5)、根据查询条件中的非空间信息,采用Lucene类库对于过滤后的索引进行查询;5.6)、根据所得查询结果中的图斑ID信息进行去除重复,返回去重后的记录。
地址 100714 北京市东城区和平里东街18号