ArcGIS for Android 離線資料編輯原理

來源:互聯網
上載者:User
ArcGIS for Android 離線資料編輯原理0評/11閱 2012-04-19CSDN

ArcGIS for Android離線資料編輯實現原理

實現ArcGIS for Android上的離線資料編輯,具體實現環境及其步驟如下:

一、      環境準備

1.        軟體環境

1)        ArcGIS Server10用於發布地圖服務

2)        ArcGIS Destop10用於切緩衝圖片

3)        Eclipse3.6.2+ 整合式開發環境

4)        JDK1.6

5)        Android SDK

6)        Android Development Tools

7)        ArcGIS API for Android1.1外掛程式

8)        ArcSDE for Oracle11g

9)        Oracle11g

2.        地圖服務準備

1)        在所有軟體環境都已安裝好後,首先我們要通過ArcGIS Server來發布兩個可編輯的地圖服務,也就是發布FeatureServer的地圖服務,兩個服務分別用於線上時的資料下載和資料上傳。(上傳資料時不能直接上傳到實際下載的服務上去,資料編輯後需要有一個審核的過程,所以需求另一個服務進行資料臨時儲存,等審核通過後才可以上傳的我們發布的下載服務上去)

2)        在離線狀況下我們還需要一個緩衝切片地圖,使用ArcCatalog來切一幅緩衝圖片,用於後期裝置端的離線地圖顯示(地圖切片必須是緊湊型的)。

二、      實現步驟

1.        項目建立

使用eclipse建立一個ArcGIS for Android項目,並將上面通過ArcCatalog切的緩衝圖片的檔案夾拷入到你的裝置sd卡中。

2.        添加地圖服務

在項目中的Activity中添加三個地圖服務,一個是用於離線地圖顯示ArcGISLocalTiledLayer服務,另兩個是用於資料下載和上傳的ArcGISFeatureLayer服務;此外還添加一個GraphicsLayer用於查詢出的資料顯示的圖層。

3.        sqlite資料庫

使用sqlite資料庫來儲存離線資料,通過擴充SQLiteOpenHelper來實現資料庫和表的建立;建立表時,表結構應該與我們發布的FeatureServer服務中用到的表結構基本一致(多添加一個mark欄位用於標記操作的狀態)。在此,關鍵在於空間shape欄位的儲存,在sqlite中沒有空間欄位的概念,因此,使用地圖服務查詢出來的資料在入庫到sqlite中時,應該定製插入資料的格式,在入本地庫時我們可以按照空間資料的類型:點、線和面來進行定製拼裝,如點類型我們入庫時可以拼成Point(X ,Y)這樣的形式,下此取出時按照這種格式進行解析拼裝空間對象就可以了,在定製完各種空間資料類型的表示形式後,最好編寫一個工具類專門負責資料格式的解析和拼裝(由於我要做的Demo只涉及點資料所以在資料庫的表中沒有shape欄位,而是添加了X和Y兩個欄位來儲存座標資訊)。

4.        資料編輯

在對資料進行編輯的時候,我們基本分兩方面進行編輯:一個是屬性編輯,另一個是空間編輯。

當我們通過ArcGISFeatureLayer查詢的資料,並通過我們定製的資料格式插入sqlite資料後,我們這時可以進行離線的資料操作了。

1)        屬性編輯

對於屬性修改無非就是對Graphic對象的中的屬性進行修改,Graphic不能添加事件監聽,所以不能像按鈕一樣,添加一個點擊事件彈出該要素的相關資訊,我們可以通過GraphicsLayer的getGraphicIDs(float x, float y,int tolerance)方法來擷取要素及其要素的相關屬性,可悲是Graphic中沒提供修改屬性的介面,只能建立一個Graphic對象並在他的構造方法中來添加更新後的屬性或者是通過GraphicsLayer的updateGraphic(int id, Map<String,Object> attributes)的方法來更新Graphic的屬性,並且將修改的要素屬性更新到本地sqlite資料庫中及其修改表中mark欄位的狀態

2)        空間編輯

對於Graphic對象我們不僅可以改變他的屬性還可以修改它的空間位置資訊,對於點、線、面的修改略有不同。

點修改時,直接更新Graphic的Geometry即可,不過Graphic沒有提供修改Geometry的介面,我們只能通過GraphicsLayer的updateGraphic(int id, Geometry geometry)方法來實現更新它的空間位置。

線和面的空間位置改變主要指的是線或面的節點的位置修改,我們可以點擊線或面上的一個節點進行拖動用GeometryEngine.getNearestVertex()可以得到我們點擊的點,距離幾何體的哪個節點最近,並返回一個Proximity2DResult對象,通過這個對象我們可以得到這個節點Index位置,再通過線或面對象的setPoint(int index, Point point)方法更新節點,這時我們的圖形就可以改變了,將更新後的Graphic的空間對象重新解析成定義的格式入庫及其修改表中mark欄位的狀態

5.  資料提交

到上面的步驟,離線資料編輯功能基本完成,最後,當我們線上時,只需通過ArcGISFeatureLayer把資料提交到暫存資料表中進行審核即可。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.