袁春東,王雷,劉占林
(南通市測繪院有限公司,江蘇 南通 226006)
近年來,各地為加強城市園林建設的管理,紛紛開展城市園林綠化調查,承接和實施此類項目的多為測繪單位。通過多個調查項目的實施,我們發現一般的地級市城區園林樹木種類能達到300多種,縣級城區園林樹木種類也近200種[1]。而測繪人員是園林樹木識別的“門外漢”,如何讓項目外業調查人員迅速掌握園林樹木識別方法和準確辨別樹木名稱成為保障項目實施質量的關鍵。
外業調查是園林綠化調查的主體,而樹種是重要的調查因子和外業調查的基礎。能夠在調查現場實時、準確、快速地查詢到樹木學名,是外業調查中亟待解決的問題。調查人員在野外樹種識別過程中,特別希望利用一個便攜的樹種識別工具,幫助他們以盡量少的樹木形態特征輸入來快速準確地檢索樹種。為此我們設計并開發了基于安卓手機和平板電腦等移動平臺的園林樹木輔助查詢識別系統,輔助外業調查人員進行現場樹木名稱查詢和種類識別,并作為他們學習園林樹木識別的輔助工具。
通過歸納總結園林樹木的生物學特征[2],建立樹木形態特征屬性集和各樹種形態特征的屬性數據集,收集整理園林樹木的圖片和文字信息,建立園林樹木的信息庫;基于安卓手機和平板電腦等移動平臺開發系統,在系統內選擇輸入樹木的形態特征屬性,與信息庫內各樹種形態特征的屬性數據集進行匹配檢索,查找出符合條件的樹木名稱,通過調閱樹木的圖片或文字介紹,現場與調查樹木進行比對,輔助準確識別樹木種類。系統開發流程如圖1所示。

圖1 系統開發流程圖
Android操作系統因其功能強大、使用方便、價格便宜且是開源性操作系統,已經成為世界上最受歡迎的智能手機平臺,因此本系統采用Android平臺開發。Android軟件平臺主要由五部分構成,如圖2所示,它們分別是:關鍵應用程序、應用程序框架和組件、C/C++函數庫、Java程序運行環境、優化了的Linux內核,為移動端打造真正開放和完整的移動軟件,主要使用于智能手機和平板電腦等移動設備。Android平臺具有良好的開發性,易于實現數據存儲、數據查詢和數據展現等功能。數據庫采用Android內置的輕量級關系型數據庫SQLite。它占用的資源非常少,所以很多嵌入式設備都是用它來存儲數據。
Android平臺為開發者提供了源碼開放的軟件開發包(SDK),它包含了使用Java語言開發Android平臺應用的必要工具和組件(API)。進行開發前先要建立合適的開發環境,其中基于Java的整合型可擴展平臺Eclipse是我們開發工具的首選。

圖2 Android系統架構圖
如圖3所示,主要包括按樹木名稱查詢、按樹木形態查詢和按樹木科屬查詢以及按樹木名稱、樹木形態組合查詢等,可以查看樹木的各部位圖片信息、文字信息以及有哪些相似樹種和同屬樹種。

圖3 系統功能圖
作為園林樹木輔助查詢識別系統的基礎數據,需先整理園林樹木識別圖庫,圖庫采用分級文件夾的方式對園林樹木圖片進行存放。在名為“園林樹木識別圖庫”的一級目錄下,按照樹木的“科名+屬名”方法建立二級子目錄,如“薔薇科桃屬”;在二級子目錄下按照樹木中文學名建立三級目錄,如“榆葉梅”。在三級目錄下按照樹木的“株態、樹干、枝、葉、花、果”命名并順序存放相應圖片,要求圖片清晰并能準確反映樹木形態和特征,如可能的情況下再存放一些四季形態的圖片。
為系統查詢和識別需要,還需編制園林樹木識別特征表,采用Excel表格式,分Sheet1表和Sheet2表。Shee1表里存放的是樹木的形態特征術語,在綜合考慮各查詢要素全面性和系統內查詢條件的下級展開需要后,我們將樹木部位分為形態、樹形、樹皮、樹皮色、枝干、小枝、葉序、葉脈、葉形、葉先端、葉緣、葉片、復葉、花、花期、果16類,與每一類配套的形態術語為描述樹木形態的術語,考慮到外業調查人員多為非園藝專業人員,術語為專業叫法和通俗叫法的組合。如“葉序”的形態術語包括對生、互生、近對生、交互對生、輪生、螺旋狀生、簇生、輪狀簇生、復葉對生、復葉互生、2針一束、3針一束、5針一束、多針一束,“果”的形態術語包括干果、莢果、翅果、球形果、開口果、刺球果、念珠果、絨毛果、壇狀果、燈籠果、小黑果、小綠果、小紅果、小黃果、小灰果、小白果。如表1所示。

形態術語表 表1

續表1
Sheet2表里存放的是樹木的名稱、代碼、主要識別特征、科、屬、別稱、相似樹種、詳細介紹,“主要識別特征”欄內放置Sheet1表內規定的形態術語。如表2所示:

樹木基本信息表 表2
系統采用Android內置的輕量級關系型數據庫SQLite作為數據庫,系統運行需要基礎數據的支持,即園林樹木識別圖庫和園林樹木識別特征表,需要將它們放在系統內置存儲卡上,通過編寫的程序將園林樹木識別特征表導入到對應的數據庫表中,這樣就實現了系統與數據庫的連接。通過用戶輸入的樹木名稱(代碼)、樹木形態及科屬,去后臺通過模糊查詢的方式獲取對應的樹木名稱,再去園林樹木識別圖庫中找到該樹木名稱的圖片。因為考慮到圖庫文件占用的內存存儲空間比較大,Android平臺中應用程序對圖片的大小也有限制,所以我們對圖庫文件進行了等比例等質量壓縮,確保圖片清晰,不模糊,外觀不變形。算法如下。
public static Bitmap getimage(String srcPath,int width,int height) {
BitmapFactory.Options newOpts=new BitmapFactory.Options();
newOpts.inJustDecodeBounds=true;
Bitmap bitmap=BitmapFactory.decodeFile(srcPath,newOpts);newOpts.inJustDecodeBounds=false;
int w=newOpts.outWidth;
int h=newOpts.outHeight;
float hh=height;
float ww=width;
int be=1;
if (w > h && w > ww) {
be=(int) (newOpts.outWidth / ww);
} else if (w < h && h > hh) {
be=(int) (newOpts.outHeight / hh);
為了有效的防御和減輕氣象災害,保障人民生命財產安全,國家各級部門不斷制定各類防范措施,取得了一定的效果,對于社會發展起到一定的推動作用。但由于影響預警機制建立和有效運行的因素眾多,因而在實際的工作中,仍存在一定的問題,制約了農業氣象預警的發展。
}
if (be <= 0)
be=1;
newOpts.inSampleSize=be;
bitmap=BitmapFactory.decodeFile(srcPath,newOpts);
return compressImage(bitmap);
}
ByteArrayOutputStream baos=new ByteArrayOutputStream();
image.compress(Bitmap.CompressFormat.JPEG,100,baos);
int options=100;
while (baos.toByteArray().length / 1024>100) {
baos.reset();
options -= 10;
image.compress(Bitmap.CompressFormat.JPEG,options,baos);
}
ByteArrayInputStream isBm=new ByteArrayInputStream(baos.toByteArray());
Bitmap bitmap=BitmapFactory.decodeStream(isBm,null,null);
return bitmap;
}
其中樹木圖片展示用到了ViewPager,它是Android擴展包v4包中的類,可以用來實現屏幕間的自由切換,通過反復瀏覽樹木各部位圖片信息大大加深了用戶對該樹木品種的記憶,也為日后識別該樹木品種打下了基礎。
為了讓系統界面簡潔和易于操作,我們對系統界面進行了精心設計。系統的三種查詢方式為按樹木名稱、按樹木形態、按樹木科屬,其中按樹木名稱和樹木形態可組合查詢,點擊【全部】則將圖庫中全部樹木名稱均顯示出來。如圖4所示。

圖4 系統主界面
勾選“按樹木名稱查詢”后,通過輸入樹木名稱、別稱或代碼進行模糊查詢。系統先檢索園林樹木識別特征表,檢索到相關信息并讀取樹木名稱,再根據樹木名稱檢索圖庫中的三級目錄名稱來調取圖片,并將檢索到的信息按樹木名稱依次顯示在系統界面下方列表,同時顯示代碼、類型(灌木、喬木還是水生植物等)、科屬。如圖5所示。

圖5 樹木名稱查詢
點擊列表某一行,可以查看相關樹種信息,默認選擇是圖庫,可自己選擇其他查看項,如詳細介紹、相似樹種、同屬樹種。查看圖庫時,可滑動循環及放大縮小查看圖片信息,標題欄顯示的是圖片名稱。按移動平臺自帶的返回鍵返回系統主界面,可以繼續查看列表其他樹種的各項信息。
勾選“按樹木形態查詢”后,系統讀取園林樹木識別特征表中sheet1表的樹木部位名稱展開二級查詢菜單,顯示可供選擇的樹木部位。選擇要查詢的樹木部位(可單選或組合),下方會顯示對應文本框,點擊文本框后,系統讀取園林樹木識別特征表中形態術語供用戶選擇特征。如圖6、圖7所示。

圖6 樹木形態查詢

圖7 選擇樹木特征
點擊【查詢】,系統根據園林樹木識別特征表中Sheet2表的主要識別特征進行檢索,將檢索到的完全符合特征條件的樹木名稱以列表形式顯示。此時將“按樹木形態查詢”前的勾選框取消,可收回二級查詢菜單,讓界面下方列表多顯示幾行信息,以方便用戶瀏覽。
勾選“按樹木科屬查詢”后,系統檢索園林樹木識別特征表中sheet1表的科、屬信息,將檢索到的符合條件的樹木名稱以列表形式顯示。點擊【清空】,清空列表內容,如圖8所示。圖9為點擊列表某一行查看該樹木的圖片信息。

圖8 樹木科屬查詢

圖9 樹木圖片展示
通過南通市園林綠化調查項目的生產實踐,技術人員先后掌握了200多種樹木的特征,在對各類樹種歸納總結的基礎上,研發了園林樹木輔助查詢識別系統。該系統操作方便、識別率高,有效解決了外業調查人員不認識樹、忘記樹名或代碼、對相似樹種判斷不準等問題,大大提高了園林樹木調查工作效率,保障了園林綠化調查項目的項目進度和成果質量。同時系統也存在一些不足之處,主要是資料收集方面還需要擴充更多的植物種類,可增加每種植物的基本信息和圖片信息等,還有系統的研發主要面向于單機的使用,單機系統具有局限性,數據及程序的共享性不高,還有待通過生產實踐進一步完善[6]。