使用 ArcGIS api 为 android 加载本地 KML 文件
Load local KML file using ArcGIS api for android
我正在为 android 使用 ArcGIS api,我想加载本地 KML file.I 使用以下代码示例
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 但我已经复制了它
你能帮我找到一个好的解决办法吗?非常感谢
进行这些更改:
- 使用
KmlLayer
instead of KMLLayer
。 KMLLayer
仅支持 public Internet 上的 KML URL,并且已弃用。它不适用于本地 KML 文件。 KmlLayer
同时支持本地 KML 文件和 KML 网址。
确保您已授予您的应用访问本地文件的权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
或
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
使用正斜杠,而不是反斜杠。除 Windows.
外,反斜杠不用作路径分隔符
- 使用
File
class 构建您的文件路径,以防万一 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,我想加载本地 KML file.I 使用以下代码示例
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 但我已经复制了它 你能帮我找到一个好的解决办法吗?非常感谢
进行这些更改:
- 使用
KmlLayer
instead ofKMLLayer
。KMLLayer
仅支持 public Internet 上的 KML URL,并且已弃用。它不适用于本地 KML 文件。KmlLayer
同时支持本地 KML 文件和 KML 网址。 确保您已授予您的应用访问本地文件的权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
或
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
使用正斜杠,而不是反斜杠。除 Windows.
外,反斜杠不用作路径分隔符
- 使用
File
class 构建您的文件路径,以防万一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);