2015-06-10 72 views
1

我使用的Android的ArcGIS API和我想要加載本地KML file.I使用下面的代碼示例加載本地KML文件通過ArcGIS API爲Android

String url = Environment.getExternalStorageDirectory() + "\\Android\\data\\com.tehranuni.hazard.hazard\\us_states.kml"; 

    SpatialReference sr = SpatialReference.create(102100); 
    System.out.println("kmlurl: " + url); 

    KMLLayer kmlLayer = new KMLLayer(url, sr); 
    mMapView.addLayer(kmlLayer); 

此代碼給我下面的錯誤

KML layer fails to initializecom.esri.core.io.EsriServiceException: File not found. Wrong url or out of memory. 

但是,當我用同樣的KML的在線版本,它的工作原理fine.I意味着當我改變的URL到URL它的偉大工程

我知道這個錯誤表示KML不存在的位置但是我 已經複製它 你能幫我找到一個很好的解決它感謝你這麼多

回答

2

進行這些更改:

  • 使用KmlLayer而不是KMLLayerKMLLayer僅支持公共Internet上的KML URL,並且已棄用。它不適用於本地KML文件。 KmlLayer支持本地KML文件和KML URL。
  • 要確保你已經給你的應用程序權限訪問本地文件:

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

  • 使用正斜槓,而不是反斜槓。除Windows以外,反斜槓不能用作路徑分隔符。

  • 使用File類來構造文件路徑,以防getExternalStorageDirectory()在某些設備上包含末尾的斜線。

這是你的新代碼:

File kmlFile = new File(
    Environment.getExternalStorageDirectory(), 
    "Android/data/com.tehranuni.hazard.hazard/us_states.kml"); 
//Here you could check kmlFile.exists() to see if the app can actually see the file. 
//If it's false, maybe you didn't grant permissions, or maybe the file path is wrong. 

KmlLayer kmlLayer = new KmlLayer(kmlFile.getAbsolutePath()); 
mMapView.addLayer(kmlLayer); 
+0

Woww..Thank你這麼多,我改KmlLayer,它works..Thank你這麼多 –

+0

您好,能否請您看看這個問題?http://stackoverflow.com/questions/30784397/how-to-makeidentify-task-in-arcgis-api-for-android-work-with-a-standard-wms –

+0

它完美的作品;謝謝=) –

相關問題