arcgis android 中shapefile的加載


前言

本文為大家分享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分卷110.2.5分卷2采用了分卷壓縮,2個都下載后再解壓。

ppps:10.2.5及更高版本不再支持eclipse插件安裝,官方改推薦android studio了,使用方法猛擊此處。如果還是要用eclipse開發,需要手工搭建環境,具體方法猛擊此處(暫無)

出處:http://www.cnblogs.com/wangcan/p/4538104.html
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM