本發(fā)明涉及林地圖斑矢量數(shù)據(jù)查詢方法,尤其涉及一種基于Lucene的林地圖斑矢量數(shù)據(jù)查詢方法。
背景技術(shù):
林地?cái)?shù)據(jù)反映了森林資源現(xiàn)狀和變化情況,是制定我國(guó)生態(tài)建設(shè)管理決策的重要依據(jù)。自上世紀(jì)70年代我國(guó)建立了三級(jí)森林資源監(jiān)測(cè)管理調(diào)查體系以來(lái),獲得了大量森林資源的可靠數(shù)據(jù),為我國(guó)林地資源監(jiān)管做出了重要貢獻(xiàn)。而隨著國(guó)家林業(yè)局全國(guó)林地“一張圖”系統(tǒng)的推進(jìn),林地落界數(shù)據(jù)匯總工作的完成,其中僅林地落界專題圖數(shù)據(jù)就達(dá)6738.88萬(wàn)條。
而目前對(duì)于林地圖斑數(shù)據(jù)的查詢大多是基于關(guān)系型數(shù)據(jù)庫(kù)進(jìn)行檢索,但關(guān)系型數(shù)據(jù)庫(kù)在對(duì)大量林地?cái)?shù)據(jù)建立全字段索引與空間索引時(shí)效率比較低,且應(yīng)考慮到不同時(shí)期、不同地域所獲得的林地?cái)?shù)據(jù)其結(jié)構(gòu)往往不同,這時(shí)傳統(tǒng)的基于關(guān)系型數(shù)據(jù)庫(kù)的查詢方法往往不能勝任。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是克服現(xiàn)有技術(shù)的不足,提供了一種基于Lucene的林地圖斑矢量數(shù)據(jù)查詢方法。
所述方法包括如下步驟:
1)、確定網(wǎng)格大?。焊鶕?jù)輸入的數(shù)據(jù)范圍及網(wǎng)格階數(shù),計(jì)算網(wǎng)格大?。?/p>
2)、對(duì)林地圖斑矢量數(shù)據(jù)進(jìn)行格式轉(zhuǎn)換:對(duì)于輸入的林地圖斑矢量文件,采用OGR接口注冊(cè)相應(yīng)矢量驅(qū)動(dòng),讀取矢量文件的每一圖層,并記錄圖層中每一圖斑要素的屬性信息,以及將所述圖斑要素的空間信息以眾所周知的文件WKT格式記錄;
3)、對(duì)格式轉(zhuǎn)換后的數(shù)據(jù)進(jìn)行網(wǎng)格劃分:對(duì)于獲得的WKT格式的圖斑數(shù)據(jù)t,計(jì)算所述數(shù)據(jù)t的空間范圍,從而確定所述數(shù)據(jù)t的網(wǎng)格范圍,對(duì)于網(wǎng)格范圍內(nèi)的每一個(gè)網(wǎng)格,將所述網(wǎng)格與所述圖斑數(shù)據(jù)t求交,獲得相交多邊形i,將圖斑數(shù)據(jù)t的多個(gè)屬性賦給相交多邊形i, 并為相交多邊形i新建字段以保存所在網(wǎng)格號(hào)及原圖斑數(shù)據(jù)t的WKT格式的空間信息;
4)、對(duì)于網(wǎng)格劃分后的數(shù)據(jù)建立全文索引:對(duì)于網(wǎng)格劃分所得的相交多邊形i,計(jì)算
該相交多邊形i的最小外包矩形mbr;采用Lucene類庫(kù)對(duì)相交多邊形i的多個(gè)屬性信息及最小外包矩形建立索引,并將索引保存至對(duì)應(yīng)的網(wǎng)格所確定的目錄中;
5)、按查詢條件返回相應(yīng)數(shù)據(jù):對(duì)于輸入的查詢條件,根據(jù)其中的空間信息條件先判斷其搜索網(wǎng)格范圍,獲取相應(yīng)目錄下的索引,進(jìn)而采用Lucene類庫(kù)根據(jù)輸入條件查詢相應(yīng)索引,過(guò)濾重復(fù)數(shù)據(jù)后返回符合結(jié)果。
所述的步驟1)具體為:
1.1)、獲取輸入的數(shù)據(jù)范圍:
經(jīng)度范圍:[lng起,lng終],緯度范圍:[lat起,lat終],
其中,lng起表示經(jīng)度的起點(diǎn),lng終表示經(jīng)度的終點(diǎn),lat起表示緯度的起點(diǎn),lat終表示緯度的終點(diǎn);
1.2)、獲取輸入的網(wǎng)格階數(shù)z;
1.3)、計(jì)算網(wǎng)格的長(zhǎng)度dlng與寬度dlat:
所述的步驟2)具體為:
2.1)、使用OGR接口,注冊(cè)矢量格式驅(qū)動(dòng);
2.2)、打開(kāi)林地專題圖數(shù)據(jù)源;
2.3)、對(duì)于每一個(gè)矢量文件,遍歷所述矢量文件的每一個(gè)圖層的信息;
2.4)、對(duì)于每一個(gè)圖層,遍歷所述每一個(gè)圖層的每一個(gè)圖斑要素的信息;
2.5)、獲取圖斑要素的多個(gè)屬性信息及空間信息;
2.6)、以“圖斑ID_屬性1的信息_…_屬性n的信息_WKT格式空間信息”的格式記錄每一圖斑要素信息,其中n表示屬性的數(shù)量。
所述的步驟3)具體為:
3.1)、對(duì)于記錄的圖斑數(shù)據(jù)t,獲取其空間范圍:
經(jīng)度范圍:[lngmin,lngmax];緯度范圍:[latmin,latmax];
其中,lngmin表示經(jīng)度范圍的最小值,lngmax表示經(jīng)度范圍的最大值,latmin表示緯度范圍的最小值,latmax表示緯度范圍的最大值;
3.2)、確定圖斑數(shù)據(jù)t的網(wǎng)格行列號(hào)范圍:
其中,colmin表示列號(hào)的最小值,colmax表示列號(hào)的最大值,rowmin表示行號(hào)的最小值,rowmax表示行號(hào)的最大值;
3.3)、對(duì)于行列號(hào)(col,row)所確定的網(wǎng)格,計(jì)算該網(wǎng)格邊界為:
gminlng=lng起+col×dlng;
gmaxlng=lng起+(col+1)×dlng;
gminlat=lat起+row×dlat;
gmaxlat=lat起+(row+1)×dlat;
其中,col表示列號(hào),row表示行號(hào),gminlng表示網(wǎng)格的最小經(jīng)度值,gmaxlng表示網(wǎng)格的最大經(jīng)度值,gminlat表示網(wǎng)格的最小緯度值,gmaxlat表示網(wǎng)格的最大緯度值;
3.4)、根據(jù)gminlng、gmaxlng、gminlat、gmaxlat建立網(wǎng)格多邊形grid,并與圖斑t求交,得到相交多邊形i;
3.5)、以“圖斑數(shù)據(jù)t的ID_圖斑數(shù)據(jù)t屬性1的信息_…_圖斑數(shù)據(jù)t屬性m的信息_圖斑數(shù)據(jù)t的WKT格式空間信息_相交多邊形i的網(wǎng)格號(hào)_相交多邊形i的WKT格式空間信息”的 格式記錄相交多邊形i的信息,其中m表示圖斑數(shù)據(jù)t的屬性的數(shù)量。
所述的步驟4)具體為:
4.1)、對(duì)于相交多邊形i,獲取其最小外包矩形mbr;
4.2)、采用Lucene類庫(kù),創(chuàng)建IndexWriter對(duì)象,并將該IndexWriter對(duì)象指向由格網(wǎng)號(hào)(col,row)確定的目錄;
4.3)、采用Lucene類庫(kù),創(chuàng)建文檔Document對(duì)象,并將相交多邊形i的多個(gè)屬性信息建立索引后加入該文檔Document對(duì)象,并采用Lucene中的Spatial類對(duì)最小外包矩形mbr的空間信息建立索引后加入該文檔Document對(duì)象;
4.4)、采用Lucene類庫(kù),將該文檔Document對(duì)象加入IndexWriter,執(zhí)行IndexWriter后將其關(guān)閉。
所述的步驟5)具體為:
5.1)、獲取輸入的查詢條件中的空間范圍:
經(jīng)度范圍:[slngmin,slngmax],緯度范圍:[slatmin,slatmax],
其中,slngmin表示查詢條件中的空間范圍的最小經(jīng)度值,slngmax表示查詢條件中的空間范圍的最大經(jīng)度值,slatmin表示查詢條件中的空間范圍的最小緯度值,slatmax表示查詢條件中的空間范圍的最大緯度值;
5.2)、計(jì)算其對(duì)應(yīng)的網(wǎng)格號(hào)范圍:
列號(hào)范圍:[scolmin,scolmax],行號(hào)范圍:[srowmin,srowmax],
其中,scolmin表示列號(hào)的最小值,scolmax表示列號(hào)的最大值,srowmin表示行號(hào)的最小值,srowmax表示行號(hào)的最大值;
5.3)、根據(jù)行列號(hào)(scol,srow)獲取相應(yīng)目錄下的索引;
5.4)、根據(jù)查詢條件中的空間信息,采用Lucene中的Spatial類對(duì)于所獲索引進(jìn)行過(guò)濾;
5.5)、根據(jù)查詢條件中的非空間信息,采用Lucene類庫(kù)對(duì)于過(guò)濾后的索引進(jìn)行查詢;
5.6)、根據(jù)所得查詢結(jié)果中的圖斑ID信息進(jìn)行去除重復(fù),返回去重后的記錄。
本發(fā)明與現(xiàn)有技術(shù)相比具有的有益效果:
(1)、利用Lucene對(duì)于林地圖斑矢量數(shù)據(jù)的屬性信息及空間信息建立索引,實(shí)現(xiàn)了對(duì)于林地圖斑數(shù)據(jù)的全文檢索;
(2)、在采用Lucene建立索引之前對(duì)數(shù)據(jù)進(jìn)行網(wǎng)格劃分,相當(dāng)于在Lucene索引之前建立了網(wǎng)格索引,提高了查詢效率。
附圖說(shuō)明
圖1是本發(fā)明中基于Lucene的林地圖斑矢量數(shù)據(jù)查詢方法的流程圖。
圖2是本發(fā)明中確定網(wǎng)格大小的流程圖。
圖3是本發(fā)明中林地圖斑矢量數(shù)據(jù)格式轉(zhuǎn)換的流程圖。
圖4是本發(fā)明中對(duì)格式轉(zhuǎn)換后的數(shù)據(jù)進(jìn)行網(wǎng)格劃分的流程圖。
圖5是本發(fā)明中對(duì)網(wǎng)格劃分后的數(shù)據(jù)建立全文索引的流程圖。
圖6是本發(fā)明中按查詢條件返回相應(yīng)數(shù)據(jù)的流程。
具體實(shí)施方式
以下通過(guò)具體實(shí)施方式,并結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步說(shuō)明。
圖1示例性是本發(fā)明中基于Lucene的林地圖斑矢量數(shù)據(jù)查詢方法的流程圖,該方法具體包括如下步驟:
1)、確定網(wǎng)格大?。焊鶕?jù)輸入的數(shù)據(jù)范圍及網(wǎng)格階數(shù),計(jì)算網(wǎng)格大小;
2)、對(duì)林地圖斑矢量數(shù)據(jù)進(jìn)行格式轉(zhuǎn)換:對(duì)于輸入的林地圖斑矢量文件,采用OGR接口注冊(cè)相應(yīng)矢量驅(qū)動(dòng),讀取矢量文件的每一圖層,并記錄圖層中每一圖斑要素的屬性信息,以及將所述圖斑要素的空間信息以眾所周知的文件WKT格式記錄;
3)、對(duì)格式轉(zhuǎn)換后的數(shù)據(jù)進(jìn)行網(wǎng)格劃分:對(duì)于獲得的WKT格式的圖斑數(shù)據(jù)t,計(jì)算所述數(shù)據(jù)t的空間范圍,從而確定所述數(shù)據(jù)t的網(wǎng)格范圍,對(duì)于網(wǎng)格范圍內(nèi)的每一個(gè)網(wǎng)格,將所述網(wǎng)格與所述圖斑數(shù)據(jù)t求交,獲得相交多邊形i,將圖斑數(shù)據(jù)t的多個(gè)屬性賦給相交多邊形i,并為相交多邊形i新建字段以保存所在網(wǎng)格號(hào)及原圖斑數(shù)據(jù)t的WKT格式的空間信息;
4)、對(duì)于網(wǎng)格劃分后的數(shù)據(jù)建立全文索引:對(duì)于網(wǎng)格劃分所得的相交多邊形i,計(jì)算該相 交多邊形i的最小外包矩形mbr;采用Lucene類庫(kù)對(duì)相交多邊形i的多個(gè)屬性信息及最小外包矩形建立索引,并將索引保存至對(duì)應(yīng)的網(wǎng)格所確定的目錄中;
5)、按查詢條件返回相應(yīng)數(shù)據(jù):對(duì)于輸入的查詢條件,根據(jù)其中的空間信息條件先判斷其搜索網(wǎng)格范圍,獲取相應(yīng)目錄下的索引,進(jìn)而采用Lucene類庫(kù)根據(jù)輸入條件查詢相應(yīng)索引,過(guò)濾重復(fù)數(shù)據(jù)后返回符合結(jié)果。
圖2示例性示出了本發(fā)明中確定網(wǎng)格大小的流程圖,具體為:
獲取輸入的數(shù)據(jù)范圍:
經(jīng)度范圍:[lng起,lng終],緯度范圍:[lat起,lat終],
其中,lng起表示經(jīng)度的起點(diǎn),lng終表示經(jīng)度的終點(diǎn),lat起表示緯度的起點(diǎn),lat終表示緯度的終點(diǎn);
獲取輸入的網(wǎng)格階數(shù)z;
計(jì)算網(wǎng)格的長(zhǎng)度dlng與寬度dlat:
圖3示例性示出了本發(fā)明中林地圖斑矢量數(shù)據(jù)格式轉(zhuǎn)換的流程圖。具體為:
使用OGR接口,注冊(cè)矢量格式驅(qū)動(dòng);
打開(kāi)林地專題圖數(shù)據(jù)源;
對(duì)于每一個(gè)矢量文件,遍歷所述矢量文件的每一個(gè)圖層的信息;
對(duì)于每一個(gè)圖層,遍歷所述每一個(gè)圖層的每一個(gè)圖斑要素的信息;
獲取圖斑要素的多個(gè)屬性信息及空間信息;
以“圖斑ID_屬性1的信息_…_屬性n的信息_WKT格式空間信息”的格式記錄每一圖斑要素信息,其中n表示屬性的數(shù)量。
圖4示例性示出了本發(fā)明中對(duì)格式轉(zhuǎn)換后的數(shù)據(jù)進(jìn)行網(wǎng)格劃分的流程圖。具體為:對(duì)于記錄的圖斑數(shù)據(jù)t,獲取其空間范圍:
經(jīng)度范圍:[lngmin,lngmax];緯度范圍:[latmin,latmax];其中,lngmin表示經(jīng)度范圍的最小值,lngmax表示經(jīng)度范圍的最大值,latmin表示緯度范圍的最小值,latmax表示緯度范圍的最大值;
確定圖斑數(shù)據(jù)t的網(wǎng)格行列號(hào)范圍:
其中,colmin表示列號(hào)的最小值,colmax表示列號(hào)的最大值,rowmin表示行號(hào)的最小值,rowmax表示行號(hào)的最大值;
對(duì)于行列號(hào)(col,row)所確定的網(wǎng)格,計(jì)算該網(wǎng)格邊界為:
gminlng=lng起+col×dlng;
gmaxlng=lng起+(col+1)×dlng;
gminlat=lat起+row×dlat;
gmaxlat=lat起+(row+1)×dlat;
其中,col表示列號(hào),row表示行號(hào),gminlng表示網(wǎng)格的最小經(jīng)度值,gmaxlng表示網(wǎng)格的最大經(jīng)度值,gminlat表示網(wǎng)格的最小緯度值,gmaxlat表示網(wǎng)格的最大緯度值;根據(jù)gminlng、gmaxlng、gminlat、gmaxlat建立網(wǎng)格多邊形grid,并與圖斑t求交,得到相交多邊形i;以“圖斑數(shù)據(jù)t的ID_圖斑數(shù)據(jù)t屬性1的信息_…_圖斑數(shù)據(jù)t屬性m的信息_圖斑數(shù)據(jù)t的WKT格式空間信息_相交多邊形i的網(wǎng)格號(hào)_相交多邊形i的WKT格式空間信息”的格式記錄相交多邊形i的信息,其中m表示圖斑數(shù)據(jù)t的屬性的數(shù)量。
圖5示例性示出了本發(fā)明中對(duì)網(wǎng)格劃分后的數(shù)據(jù)建立全文索引的流程圖。具體為:
對(duì)于相交多邊形i,獲取其最小外包矩形mbr;
采用Lucene類庫(kù),創(chuàng)建IndexWriter對(duì)象,并將該IndexWriter對(duì)象指向由格網(wǎng)號(hào)(col,row) 確定的目錄;
采用Lucene類庫(kù),創(chuàng)建文檔Document對(duì)象,并將相交多邊形i的多個(gè)屬性信息建立索引后加入該文檔Document對(duì)象,并采用Lucene中的Spatial類對(duì)最小外包矩形mbr的空間信息建立索引后加入該文檔Document對(duì)象;
采用Lucene類庫(kù),將該文檔Document對(duì)象加入IndexWriter,執(zhí)行IndexWriter后將其關(guān)閉。
圖6示出了本發(fā)明中按查詢條件返回相應(yīng)數(shù)據(jù)的流程。具體為:
獲取輸入的查詢條件中的空間范圍:
經(jīng)度范圍:[slngmin,slngmax],緯度范圍:[slatmin,slatmax],
其中,slngmin表示查詢條件中的空間范圍的最小經(jīng)度值,slngmax表示查詢條件中的空間范圍的最大經(jīng)度值,slatmin表示查詢條件中的空間范圍的最小緯度值,slatmax表示查詢條件中的空間范圍的最大緯度值;
計(jì)算其對(duì)應(yīng)的網(wǎng)格號(hào)范圍:
列號(hào)范圍:[scolmin,scolmax],行號(hào)范圍:[srowmin,srowmax],
其中,scolmin表示列號(hào)的最小值,scolmax表示列號(hào)的最大值,srowmin表示行號(hào)的最小值,srowmax表示行號(hào)的最大值;
根據(jù)行列號(hào)(scol,srow)獲取相應(yīng)目錄下的索引;
根據(jù)查詢條件中的空間信息,采用Lucene中的Spatial類對(duì)于所獲索引進(jìn)行過(guò)濾;
根據(jù)查詢條件中的非空間信息,采用Lucene類庫(kù)對(duì)于過(guò)濾后的索引進(jìn)行查詢;
根據(jù)所得查詢結(jié)果中的圖斑ID信息進(jìn)行去除重復(fù),返回去重后的記錄。
在此給出根據(jù)本發(fā)明的基于Lucene的林地圖斑矢量數(shù)據(jù)查詢方法的具體實(shí)施例,具體如下:
1、確定網(wǎng)格大?。?/p>
根據(jù)輸入的數(shù)據(jù)范圍:
lng起=117.798,lng終=118.665,lat起=25.828,lat終=26.442,
及網(wǎng)格階數(shù):z=10,計(jì)算網(wǎng)格大?。篸lng=0.0867;dlat=0.0614。
2、對(duì)林地圖斑矢量數(shù)據(jù)進(jìn)行格式轉(zhuǎn)換:
對(duì)于輸入的林地圖斑矢量文件yx.shp,采用OGR接口注冊(cè)相應(yīng)矢量驅(qū)動(dòng),讀取矢量文件的每一圖層,并記錄圖層中每一圖斑要素的屬性信息,輸出的部分要素信息如表1所示:
表1
3、對(duì)于輸出的每一行要素,做如下操作進(jìn)行網(wǎng)格劃分:
對(duì)于獲得的每一行圖斑數(shù)據(jù)t,計(jì)算t的空間范圍,從而確定其網(wǎng)格范圍,對(duì)于范圍內(nèi)的每一個(gè)網(wǎng)格,將其與該林地圖斑數(shù)據(jù)t求交,獲得相交多邊形i,將圖斑數(shù)據(jù)t的各屬性賦給相交多邊形i,并為相交的多邊形i新建字段以保存所在網(wǎng)格號(hào)及原圖斑數(shù)據(jù)t的WKT格式的空間信息,輸出部分信息表2所示:
表2
4、對(duì)于網(wǎng)格劃分后的每一行數(shù)據(jù)建立全文索引:
對(duì)于網(wǎng)格劃分所得的多邊形i,計(jì)算其最小外包矩形mbr;采用Lucene類庫(kù)對(duì)于多邊形i的各屬性信息及最小外包矩形建立索引,并將索引保存至對(duì)應(yīng)的網(wǎng)格所確定的目錄中;
5、對(duì)于輸入的查詢條件中的空間范圍:
slngmin=117.963,slngmax=118.083,slatmin=25.852,slatmax=25.908;
計(jì)算其對(duì)應(yīng)的網(wǎng)格號(hào)范圍:
scolmin=1,scolmax=3,srowmin=0,srowmax=1;
獲取1-0、1-1、2-0、2-1、3-0、3-1目錄下的索引,使用Lucene查詢索引,返回結(jié)果如表3所示。
表3
以上列舉的僅是本發(fā)明的最佳具體實(shí)施例。顯然,本發(fā)明不限于以上實(shí)施例,還可以有許多變形。本領(lǐng)域的普通技術(shù)人員能從本發(fā)明公開(kāi)的內(nèi)容直接導(dǎo)出或聯(lián)想到的所有變形,均應(yīng)認(rèn)為是本發(fā)明的保護(hù)范圍。