gpt4 book ai didi

java - 使用 ESRI android API 打开文件地理数据库

转载 作者:行者123 更新时间:2023-11-29 21:15:40 25 4
gpt4 key购买 nike

一段时间以来,我一直在尝试使用版本 10.2 中的 ESRI api 在 android 上打开文件 godatabase。

我有一个用 Arccatalog 10.1 创建的文件 godatabase。它包含一层。我可以在 Arcmap 中打开它,所以这里的一切看起来都很好。地理数据库位于名为 android.gdb 的文件夹中我将它复制到 microSD 卡并尝试使用以下代码打开它:

new com.esri.core.gdb.Geodatabase("/mnt/sdcard2/android.gdb");

“/mnt/sdcard2/android.gdb”文件存在,是一个文件夹,我有读写权限。

我收到一个 RuntimeException,其中包含无法打开 goedatabase 文件的消息。

有人遇到过类似的问题吗?

最佳答案

Android 的 ESRI 运行时 api 将无法打开那种数据库。它使用内置于 SQLLite 中的地理数据库的专有版本。您需要在 ArcGisOnline 或 ArcServer 10.2 中发布服务并调用 GeodatabaseSyncTask 对象,以便在设备上以正确的格式获取数据库版本。在您发布的要素服务上,您需要确保启用同步。然后您可以使用此代码调用您的要素服务并将其存储在本地。此代码基于此 ESRI 示例 -- https://developers.arcgis.com/android/sample-code/offline-editor/

public void LoadGdb(UserCredentials credentials, Polygon extent, SpatialReference spatRef){

mapExtent = extent;
mapSpatialRef = spatRef;
String replicaUrl = callingActivity.getResources().getString(R.string.feature_service_url);
gdbTask = new GeodatabaseSyncTask(replicaUrl, credentials);

gdbTask.fetchFeatureServiceInfo(new CallbackListener<FeatureServiceInfo>() {

@Override
public void onError(Throwable e) {
Log.e(TAG, "", e);
}

@Override
public void onCallback(FeatureServiceInfo objs) {
if (objs.isSyncEnabled()) {
requestGdbInOneMethod(gdbTask, mapExtent, mapSpatialRef);
}
}
});
}

protected void requestGdbInOneMethod(GeodatabaseSyncTask geodatabaseSyncTask, Polygon extent, SpatialReference spatRef) {

GenerateGeodatabaseParameters params = new GenerateGeodatabaseParameters({0, 1}, extent,
spatRef, true, SyncModel.LAYER, spatRef);

CallbackListener<String> gdbResponseCallback = new CallbackListener<String>() {

@Override
public void onCallback(String obj) {

try {
// This onCallback gets called after the generateGeodatabase
// function on the GeodatabaseSyncTask is called.
// You can store a reference to this database or you can load it
// with your code and point it to the gdbFileName location
Geodatabase myGeodatabase = (Geodatabase)obj;

} catch (FileNotFoundException e) {
e.printStackTrace();
}
}

@Override
public void onError(Throwable e) {
Log.e(TAG, "", e);
}
};

GeodatabaseStatusCallback statusCallback = new GeodatabaseStatusCallback() {

@Override
public void statusUpdated(GeodatabaseStatusInfo status) {
showMessage(callingActivity, status.getStatus().toString());
}
};

// !! THE gdbFileName is a string of the path and filename
// where the geodatabse will be stored.
geodatabaseSyncTask.generateGeodatabase(params, gdbFileName, false, statusCallback, gdbResponseCallback);
}

关于java - 使用 ESRI android API 打开文件地理数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21510103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com