1 概述
有時我們需要将業務資料存儲在移動裝置上,以確定在離線狀态下也可以通路。離線存儲的方式有多種,本文就為大家介紹通過JSON檔案存儲業務資料,然後在Android用戶端實作資料的讀取和繪制。
2 準備JSON檔案
首先需要準備JSON檔案,本例中我已經将業務資料釋出在地圖服務中,是以通過ArcGIS REST服務的要素查詢方式獲得JSON格式的資料。
下圖是測試用的服務圖層:
在“Beijing”這個地圖服務中的“教育科研_point_wm”圖層頁面底部找到“Query”按鈕,如下圖:
點選Query按鈕,進入要素查詢頁面,如下圖:
這裡可以根據需要設定查詢過濾條件,本文設定了恒等條件“1=1”,即擷取全部要素,輸出字段設定為全部字段,傳回要素幾何體,此外需要設定傳回結果的格式為json,如下圖:
設定好查詢條件和傳回參數後,點選其中一個Query按鈕,即可獲得滿足條件的JSON格式的要素集,如下圖:
将全部内容複制,建立一個新的文本檔案并黏貼這些内容,将檔案儲存為features.json格式,如下圖:
至此JSON檔案的業務資料就準備好了,将其傳到Android手機或平闆裝置上以供讀取。
3 Android用戶端讀取
由于ArcGIS Android SDK提供了現場的調用接口,用戶端隻需要幾行代碼即可加載JSON檔案,并以Graphic繪制出來。關鍵代碼如下:
JsonFactory factory = new JsonFactory();
URI uri = new URI("file:///mnt/sdcard/Basemap/Beijing/POI/features2.json");
File file = new File(uri);
JsonParser jsonParser = factory.createJsonParser(new FileInputStream(file));
FeatureSet features = FeatureSet.fromJson(jsonParser);
Graphic[] graphics = features.getGraphics();
GraphicsLayer poi = new GraphicsLayer();
SimpleMarkerSymbol sym = new SimpleMarkerSymbol(Color.BLUE, 8, SimpleMarkerSymbol.STYLE.CIRCLE);
SimpleRenderer renderer = new SimpleRenderer(sym);
poi.setRenderer(renderer);
poi.addGraphics(graphics);
map.addLayer(poi);
通過以上代碼,應該就可以加載JSON檔案中的要素集到GraphicsLayer中了,但是實際運作中卻報錯如下:
分析發現,原來是編碼格式問題,需要将JSON檔案儲存為UTF-8格式,是以将features.json另存一下即可,如下圖:
另存後,再傳到手機或平闆電腦上,再測試,效果如下:
圖上的藍色點即是加載的JSON格式的業務資料,可以用來做後續更多的查詢分析等操作。