1.一種基于Lucene的林地圖斑矢量數(shù)據(jù)查詢方法,所述方法包括如下步驟:
1)、確定網(wǎng)格大小:根據(jù)輸入的數(shù)據(jù)范圍及網(wǎng)格階數(shù),計算網(wǎng)格大小,具體為:
1.1)、獲取輸入的數(shù)據(jù)范圍:
經(jīng)度范圍:[lng起,lng終],緯度范圍:[lat起,lat終],其中,lng起表示經(jīng)度的起點,lng終表示經(jīng)度的終點,lat起表示緯度的起點,lat終表示緯度的終點;
1.2)、獲取輸入的網(wǎng)格階數(shù)z;
1.3)、計算網(wǎng)格的長度ding與寬度dlat:
2)、對林地圖斑矢量數(shù)據(jù)進行格式轉換:對于輸入的林地圖斑矢量文件,采用OGR接口注冊相應矢量驅(qū)動,讀取矢量文件的每一圖層,并記錄圖層中每一圖斑要素的屬性信息,以及將所述圖斑要素的空間信息以眾所周知的文件WKT格式記錄,具體為:
2.1)、使用OGR接口,注冊矢量格式驅(qū)動;
2.2)、打開林地專題圖數(shù)據(jù)源;
2.3)、對于每一個矢量文件,遍歷所述矢量文件的每一個圖層的信息;
2.4)、對于每一個圖層,遍歷所述每一個圖層的每一個圖斑要素的信息;
2.5)、獲取圖斑要素的多個屬性信息及空間信息;
2.6)、以“圖斑ID_屬性1的信息_…_屬性n的信息_WKT格式空間信息”的格式記錄每一圖斑要素信息,其中n表示屬性的數(shù)量;
3)、對格式轉換后的數(shù)據(jù)進行網(wǎng)格劃分:對于獲得的WKT格式的圖斑數(shù)據(jù)t,計算所述數(shù)據(jù)t的空間范圍,從而確定所述數(shù)據(jù)t的網(wǎng)格范圍,對于網(wǎng)格范圍內(nèi)的每一個網(wǎng)格,將所述網(wǎng)格與所述圖斑數(shù)據(jù)t求交,獲得相交多邊形i,將圖斑數(shù)據(jù)t的多個屬性賦給相交多邊形i,并為相交多邊形i新建字段以保存所在網(wǎng)格號及原圖斑數(shù)據(jù)t的WKT格式的空間信息,具體為:
3.1)、對于記錄的圖斑數(shù)據(jù)t,獲取其空間范圍:
經(jīng)度范圍:[lngmin,lngmax],緯度范圍:[latmin,latmax],
其中,lngmin表示經(jīng)度范圍的最小值,lngmax表示經(jīng)度范圍的最大值,latmin表示緯度范圍的最小值,latmax表示緯度范圍的最大值;
3.2)、確定圖斑數(shù)據(jù)t的網(wǎng)格行列號范圍:
其中,colmin表示列號的最小值,colmax表示列號的最大值,rowmin表示行號的最小值,rowmax表示行號的最大值;
3.3)、對于行列號(col,row)所確定的網(wǎng)格,計算該網(wǎng)格邊界為:
gminlng=lng起+col×dlng;
gmaxlng=lng起+(col+1)×dlng;
gminlat=lat起+row×dlat;
gmaxlat=lat起+(row+1)×dlat;
其中,col表示列號,row表示行號,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,并與圖斑數(shù)據(jù)t求交,得到相交多邊形i;
3.5)、以“圖斑數(shù)據(jù)t的ID_圖斑數(shù)據(jù)t屬性1的信息_…_圖斑數(shù)據(jù)t屬性m的信息_圖斑數(shù)據(jù)t的WKT格式空間信息_相交多邊形i的網(wǎng)格號_相交多邊形i的WKT格式空間信息”的格式記錄相交多邊形i的信息,其中m表示圖斑數(shù)據(jù)t的屬性的數(shù)量;
4)、對于網(wǎng)格劃分后的數(shù)據(jù)建立全文索引:對于網(wǎng)格劃分所得的相交多邊形i,計算該相交多邊形i的最小外包矩形mbr;采用Lucene類庫對相交多邊形i的多個屬性信息及最小外包矩形建立索引,并將索引保存至對應的網(wǎng)格所確定的目錄中,具體為:
4.1)、對于相交多邊形i,獲取其最小外包矩形mbr;
4.2)、采用Lucene類庫,創(chuàng)建IndexWriter對象,并將該IndexWriter對象指向由格網(wǎng)號(col,row)確定的目錄;
4.3)、采用Lucene類庫,創(chuàng)建文檔Document對象,并將相交多邊形i的多個屬性信息建立索引后加入該文檔Document對象,并采用Lucene中的Spatial類對最小外包矩形mbr的空間信息建立索引后加入該文檔Document對象;
4.4)、采用Lucene類庫,將該文檔Document對象加入IndexWriter,執(zhí)行IndexWriter后將其關閉;
5)、按查詢條件返回相應數(shù)據(jù):對于輸入的查詢條件,根據(jù)其中的空間信息條件先判斷其搜索網(wǎng)格范圍,獲取相應目錄下的索引,進而采用Lucene類庫根據(jù)輸入條件查詢相應索引,過濾重復數(shù)據(jù)后返回符合結果,具體為:
5.1)、獲取輸入的查詢條件中的空間范圍:
經(jīng)度范圍:[slngmin,slngmax],緯度范圍:[slatmin,slatmax],
其中,slngmin表示查詢條件中的空間范圍的最小經(jīng)度值,slngmax表示查詢條件中的空間范圍的最大經(jīng)度值,slatmin表示查詢條件中的空間范圍的最小緯度值,slatmax表示查詢條件中的空間范圍的最大緯度值;
5.2)、計算其對應的網(wǎng)格號范圍:
列號范圍:[scolmin,scolmax],行號范圍:[srowmin,srowmax],
其中,scolmin表示列號的最小值,scolmax表示列號的最大值,srowmin表示行號的最小值,srowmax表示行號的最大值;
5.3)、根據(jù)行列號(scol,srow)獲取相應目錄下的索引;
5.4)、根據(jù)查詢條件中的空間信息,采用Lucene中的Spatial類對于所獲索引進行過濾;
5.5)、根據(jù)查詢條件中的非空間信息,采用Lucene類庫對于過濾后的索引進行查詢;
5.6)、根據(jù)所得查詢結果中的圖斑ID信息進行去除重復,返回去重后的記錄。