黎曦 黃海虹 張新耐 曾良
【摘 要】本文介紹了為鞏固管護(hù)好造林綠化成果,利用GPS、全站儀采集野外定位信息、樹木坐標(biāo)、胸徑,測(cè)定小班面積及區(qū)域,而建立針對(duì)性的造林綠化工程的林業(yè)信息平臺(tái)系統(tǒng),以實(shí)現(xiàn)綠化工程信息的采集工作在業(yè)務(wù)上達(dá)到系統(tǒng)、規(guī)范、先進(jìn)、科學(xué)與實(shí)用的統(tǒng)一。
【關(guān)鍵詞】綠化;開發(fā);數(shù)據(jù)庫;界面
1 開發(fā)環(huán)境
本系統(tǒng)以Eclipse為開發(fā)平臺(tái),安裝了JDK、ADT、Android SDK等等工具包,以ArcGIS Runtime SDK for Android 10.2為二次開發(fā)工具,集成一系列功能模塊。
1.1 Eclipse
Eclipse是一個(gè)開放源代碼的、基于Java的、可擴(kuò)展的開發(fā)平臺(tái),是框架與服務(wù)的集合, 基于擴(kuò)展點(diǎn)的插件體系結(jié)構(gòu)。 支持多重平臺(tái)特性,多種語言,是系統(tǒng)開發(fā)領(lǐng)域中應(yīng)用最為廣泛的平臺(tái)之一。
Eclipse的特點(diǎn):一實(shí)現(xiàn)了真正的可拓展、可配置 ,二支持多重平臺(tái)特性,多種語言 ,三文檔生成器javadoc(從源碼注釋中提取文檔)。
1.2 JDK工具包
Java Development Kit是太陽微系統(tǒng)針對(duì)Java開發(fā)人員發(fā)布的免費(fèi)軟件開發(fā)工具包。
JDK的組成: 編譯器javac(由將源程序轉(zhuǎn)成字節(jié)碼)、打包工具jar(將相關(guān)的類文件打包成一個(gè)文件)、 文檔生成器javadoc(從源碼注釋中提取文檔)、 查錯(cuò)工具jdb 、 系統(tǒng)調(diào)試組件、 檢測(cè)工具Jconsole等。
1.3 Android SDK
Android software development kit 是 Android專屬的軟件開發(fā)工具包。
1.4 ADT工具包
Android Development Tools,在Eclipse編譯IDE環(huán)境中為 Android開發(fā)提供開發(fā)工具的升級(jí)或者變更。
1.5 ArcGIS Runtime SDK for Android工具包
該工具包為Esri公司為二次系統(tǒng)開發(fā)者提供的移動(dòng)應(yīng)用開發(fā)包,支持iOS、Android、Windows Phone三大主流移動(dòng)操作系統(tǒng)。 最主要的控件MapView提供了基本的在線離線切片數(shù)據(jù)的顯示功能,可以直接加載ArcGIS制作的離線切片數(shù)據(jù),切片數(shù)據(jù)中含有基本的投影、空間參考、地理坐標(biāo)等地理信息,在此基礎(chǔ)上可以實(shí)現(xiàn)顯示和導(dǎo)航地圖、查找地址和位置、識(shí)別定位GIS特征、測(cè)量線和區(qū)域、ArcGIS在線、搜尋并共享地圖資源、采集GIS數(shù)據(jù)等功能。
2 數(shù)據(jù)庫簡(jiǎn)介
2.1 SQLite
SQLite是一款基于文本的輕型關(guān)系型數(shù)據(jù)庫,占用資源非常低,但是存儲(chǔ)容量足夠大,支持?jǐn)?shù)據(jù)庫大小達(dá)到2T,處理速度快,支持跨平臺(tái),輸入存儲(chǔ)讀入簡(jiǎn)單,能夠使用C、 PHP、Java、C#、Python等很多語言,支持的SQL語句不遜色于其他開源數(shù)據(jù)庫,最重要的是Android手機(jī)中內(nèi)置SQLite數(shù)據(jù)庫,為開發(fā)提供了很大便利。
2.2 字段介紹
(1)小班區(qū)域 (_id INTEGER PRIMARY KEY AUTOINCREMENT, Geometry WKT TEXT,QYMC TEXT, OtherInfo TEXT, Area TEXT)
(2)樹木點(diǎn) (_id INTEGER PRIMARY KEY AUTOINCREMENT, GeometryWKTTEXT, TreeTypeTEXT, TreeHeightText, TreeDBH, OtherInfo TEXT)
(3)攝影點(diǎn)(_id INTEGER PRIMARY KEY AUTOINCREMENT, dataBLOB, longitude TEXT, latitude TEXT, altitudeTEXT, otherinfo TEXT)
(4)用戶(_id INTEGER PRIMARY KEY AUTOINCREMENT, NameTEXT, Password TEXT)。
3 系統(tǒng)功能實(shí)現(xiàn)
3.1 界面實(shí)現(xiàn)
考慮用戶在不同階段的操作,盡量將所有所需控件展現(xiàn)在界面上的原則進(jìn)行界面設(shè)計(jì),主要分以下三個(gè)步驟: 利用Linear Layout對(duì)整個(gè)手機(jī)屏幕進(jìn)行分割 ;TobHost對(duì)所有控件按功能模塊劃分;Fragment按照不同的操作模式顯示結(jié)果或顯示控制按鈕 。運(yùn)用規(guī)范的圖片Button搭建起最終整體的界面框架 。
3.2 功能實(shí)現(xiàn)
3.2.1 圖層控制
在圖層控制Fragment中通過getActivity獲取父界面,再通過findViewById方法獲取mapview控件,由mapview的getLayer方法得到對(duì)應(yīng)的切片數(shù)據(jù)圖層與Graphiclayer圖層,通過圖層的setVisible方法即可實(shí)現(xiàn)圖層能見控制功能。
3.2.2 GPS相關(guān)功能
(1)定位
通過getSystemService方法可以得到LocationManager,通過LocationManager的requestLocationUpdates方法可以設(shè)相應(yīng)位置變化監(jiān)聽的最小時(shí)間間隔和最小距離間隔。在onLocationChanged函數(shù)中可獲得當(dāng)前位置的GPS經(jīng)緯度信息。
(2)GPS開關(guān)控制
通過Locationmanager的removeUpdates方法停止位置變化監(jiān)聽。
3.2.3 采集圖像
(1)拍照
通過getCameraInstance方法得到Camera,通過Camera的autoFocus和takePicture方法可得到自動(dòng)對(duì)焦的影像數(shù)據(jù)。
通過LocationListener的onLocationChanged方法可得到攝影瞬間的經(jīng)緯度信息及高程信息。綜合利用平板電腦中各類硬件設(shè)備與傳感器即可實(shí)現(xiàn)影像及附屬信息的采集。
(2)入庫
通過SQLiteDatabase的getWritableDatabase方法得到可寫數(shù)據(jù)庫,將相片存成BLOB格式,最終攝影空間位置信息、影像數(shù)據(jù)以及其他備注信息全部封裝在ContentValues中,調(diào)用WriteableDatabase的insert方法即可完成入庫操作。
(3)列表查看
通過SQLiteDatabase的getReadableDatabase方法得到只讀數(shù)據(jù)庫,通過只讀數(shù)據(jù)庫的query方法可所有攝影數(shù)據(jù)的Cursor對(duì)象,讀出其中所有的經(jīng)緯度信息,通過坐標(biāo)系轉(zhuǎn)換得到攝影點(diǎn)在mapview中的位置,給予攝影點(diǎn)位PictureMarkerSymbol后生成Graphic,通過GraphicLayer的addGraphic方法即可完成攝影點(diǎn)位的地圖顯示。
(4)還原展示
通過SQLiteDatabase的getReadableDatabase方法得到只讀數(shù)據(jù)庫,通過攝影點(diǎn)數(shù)據(jù)記錄的id得到對(duì)應(yīng)數(shù)據(jù)記錄,將屬性與圖像綁定到對(duì)應(yīng)控件完成顯示。通過SQLiteDatabase的getWritableDatabase方法得到可寫數(shù)據(jù)庫,通過關(guān)鍵字id找到對(duì)應(yīng)數(shù)據(jù)記錄通過delete語句可完成數(shù)據(jù)刪除。
3.2.4 切換底圖
運(yùn)用startActivityForResult方法打開選擇底圖窗體,窗體加載時(shí)讀取默認(rèn)文件下的底圖,將每一個(gè)底圖名稱生成一個(gè)RadioButton,選擇對(duì)應(yīng)地圖名稱,信息通過setArguments方法傳到地圖窗口生成localTiledLayer并且添加到MapView,完成底圖的切換。
3.2.5 小班區(qū)域與樹木點(diǎn)繪制
GraphicLayer是ArcGIS Runtime SDK for Android中提供給用戶編繪圖形的專用圖層,Graphiclayer中可以繪制任何幾何類型,要想繪制幾何圖形就必須先新建Graphiclayer并加載到MapView中。
(1)繪制
為mapview綁定onSingleTap單擊監(jiān)聽器,單擊屏幕時(shí),記錄點(diǎn)擊點(diǎn)屏幕坐標(biāo),通過MapView的tomappoint方法將屏幕坐標(biāo)轉(zhuǎn)換為與底圖坐標(biāo)系投影均相同的地理坐標(biāo)點(diǎn)結(jié)合針對(duì)不同的繪制類型生成不同的Simplesymbol生成Graphic并通過addGraphic方法將新生成的Graphic加載到MapView的Graphiclayer完成繪制。
(2)撤銷操作
撤銷一步就刪除Multipoint中最后一個(gè)點(diǎn),然后使用GraphicLayer的UpdataGraphic方法,用編輯后的Multipoint重新生成的圖形更新GraphicLayer中最后一個(gè)Graphic就可完成撤銷操作。
(3)完善屬性并入庫
通過startActivityForResult方法打開屬性補(bǔ)充窗口,完善屬性信息后回傳到主窗體,通過SQLiteDatabase的getWritableDatabase獲得事前生成的可寫數(shù)據(jù)庫,通過Graphic的getAttributeValue方法獲得對(duì)應(yīng)字段的屬性值,然后將Graphic的getGeometry方法得到對(duì)應(yīng)Geometry,再通過自己編寫的GeometryToWKT方法將幾何信息轉(zhuǎn)化為WKT字符串存儲(chǔ),最后將WKT以及對(duì)應(yīng)的屬性信息封裝到ContentValues中通過getWritableDatabase的insert方法將所有信息存入SQLite數(shù)據(jù)庫,最后將可寫數(shù)據(jù)庫關(guān)閉就可完成數(shù)據(jù)的入庫操作。
(4)屏幕選取
通過GraphicLayer的getGraphicIDs方法獲取當(dāng)前點(diǎn)擊位置所有在一定容差內(nèi)的Graphic對(duì)象。
(5)屬性編輯
通過通過Fragment的setArguments方法傳到對(duì)應(yīng)點(diǎn)編輯Fragment,F(xiàn)ragment內(nèi)可以完成編輯刪除操作。
(6)數(shù)據(jù)瀏覽
利用ListFragment布局用于數(shù)據(jù)顯示,通過getReadableDatabase方法獲得只讀數(shù)據(jù)庫,通過只讀數(shù)據(jù)庫的query方法獲取數(shù)據(jù)集合Cursor,利用SimpleCursorAdapter生成適配器,將適配器利用setListAdapter方法即可實(shí)現(xiàn)數(shù)據(jù)顯示。
4 系統(tǒng)優(yōu)點(diǎn)
4.1 所有數(shù)據(jù)均實(shí)時(shí)存儲(chǔ)到數(shù)據(jù)庫,即使程序出現(xiàn)BUG數(shù)據(jù)不會(huì)丟失
4.2 繪制保存標(biāo)記操作簡(jiǎn)便,將盡量多的操作從按鈕中解放到手勢(shì)操作
4.3 自動(dòng)分類信息統(tǒng)計(jì),自動(dòng)讀取當(dāng)前數(shù)據(jù)庫中數(shù)據(jù),分類并進(jìn)行數(shù)據(jù)統(tǒng)計(jì)
[責(zé)任編輯:朱麗娜]