前言
本文為大家分享arcgis android 中shapefile的加載,默認你有java環境,懂一定的android基礎知識,默認你已經安裝android studio。如缺乏以上環境和知識,請自行補充。
開發環境配置
參考這篇文章
http://www.cnblogs.com/wangcan/p/4538022.html
當然你願意使用eclipse開發也行,arcgis android對shapefile的支持是從10.2.4版本開始的(http://www.cnblogs.com/wangcan/p/4010629.html)
ShapeFile的加載
Shapefile准備
Shapefile的准備可以有2種方法來實現,一種是直接拷貝到android調試設備,一種是走網絡下載的方式。此處我們采用第一種,拷貝shapefile到平板上。
這里我們選取一個全國的行政區划的shapefile作為測試數據。
測試的shapefile數據下載地址:
http://download.csdn.net/detail/a1c2n3g4w5/8750769
獲取文件路徑
這里注意不要寫成絕對路徑,類似下面這種
private String folder = "/sdcard/DCIM/Camera/";
因為每種手機上的路徑都會有所不同的,我們可以使用下面這段代碼來獲取SD卡路徑
public String getSDPath(){ File sdDir = null; boolean sdCardExist = Environment.getExternalStorageState() .equals(android.os.Environment.MEDIA_MOUNTED); //判斷sd卡是否存在 if (sdCardExist) { sdDir = Environment.getExternalStorageDirectory();//獲取跟目錄 } return sdDir.toString(); }
然后我們的shapefile放在download文件夾下
String shpPath=getSDPath()+ "/download/bou2_4p.shp"; try { ShapefileFeatureTable shapefileFeatureTable=new ShapefileFeatureTable(shpPath); featureLayer=new FeatureLayer(shapefileFeatureTable); mMapView.addLayer(featureLayer); } catch (FileNotFoundException e) { e.printStackTrace(); }
然而我運行代碼,發現報錯“無法找到shapefile文件”,發現我只拷貝了一個*.shp文件到手機里。
這里注意,shapefile的4個文件都要復制到手機sd卡里,如果只是復制一個bou2_4p.shp文件,會報錯,無法找到shapefile文件。
好吧,4個文件都復制過去吧,再次運行。
這是還是不顯示shapfile,為什么呢?
來來來,我們把bou2_4p.prj文件用文本編輯器打開看看,
GEOGCS["GCS_China_Geodetic_Coordinate_System_2000",DATUM["D_China_2000",SPHEROID["CGCS2000",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]]
這里面顯示了它的坐標系為國家2000坐標系。
然后再看看我們mapview的坐標系,直接直觀的show出來吧
Toast.makeText(this,mMapView.getSpatialReference().getID(),Toast.LENGTH_LONG).show();
或者我們可以思路更簡單一點,我們的mapview用了arcgisonline的底圖,ok,我們把底圖的服務地址在瀏覽器打開看看
http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer
最下面顯示了它的坐標系,可以發現它與我們要加載的shapefile的坐標系是不一樣的,自然無發添加了撒。
這個也簡單,我們來添加下國家天地圖好了。
添加天地圖
怎么加載天地圖,在另外一片博客里再寫吧。
添加完天地圖之后,再跑一下,發現還是無法顯示shapefile啊,這是為什么呢?
仔細一想,我們是獲取到了shapefile,但是shapefile是矢量數據啊,arcgis android怎么知道它改如何渲染出來呢,我們只是把featurelayer加上去了,但是沒有設置featurelayer的渲染方式啊。
找到問題就好辦了,我們寫一個渲染吧,寫個簡單的renderer好了
Symbol symbol=new SimpleFillSymbol(Color.BLUE); Renderer renderer=new SimpleRenderer(symbol); featureLayer.setRenderer(renderer);
然后設置給featurelayer
再運行一下,大功告成了。
這里我只是采取了簡單的渲染方式,你大可以根據自己的需求來渲染shapefile,具體的可以參考api。下面放一張圖
里面有幾個不同renderer,大家有興趣可以去試試,renderer是可以根據屬性來渲染的,這樣就可以讓shapefile的顯示效果提升一個層次了。
代碼打包下載地址:
http://download.csdn.net/detail/a1c2n3g4w5/8750761
測試的shapefile數據下載地址:
http://download.csdn.net/detail/a1c2n3g4w5/8750769
寫了半天累死了,如果你感覺本文對你有幫助,或者本文有什么錯誤不當之處,歡迎留言指出。
原創博文免費分享,走過路過,好歹支持下咯,留個言,點個贊咯。
ps:說下載的壓縮包無法解壓的,自己用新版本的rar解壓,因為csdn上傳大小有限制,采取了新的壓縮方式,舊版本可能會打不開。
pps:shapefile的支持需要arcgis android 10.2.4或更高版本的支持。原因猛擊此處。下載鏈接:10.2.4分卷1,1.0.2.4分卷2
10.2.5分卷1,10.2.5分卷2采用了分卷壓縮,2個都下載后再解壓。
ppps:10.2.5及更高版本不再支持eclipse插件安裝,官方改推薦android studio了,使用方法猛擊此處。如果還是要用eclipse開發,需要手工搭建環境,具體方法猛擊此處(暫無)
出處:http://www.cnblogs.com/wangcan/p/4538104.html
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接。