我正在使用ArcGIS api for android,我想加载本地KML文件。我使用以下代码示例

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的在线版本时,效果很好。我的意思是,当我将url更改为url时,效果很好

我知道该错误意味着该位置不存在kml,但是我已经复制了它
您能帮我找到一个好的解决方案吗?非常感谢

最佳答案

进行以下更改:


使用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);

关于android - 使用ArcGIS API for Android加载本地KML文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30753799/

10-12 14:04