对于我们的应用程序,我目前正在将映射框与自定义地图瓷砖苏尔斯集成(如下所述)。使用OfflineManager
和OfflineTilePyramidRegionDefinition
,我可以下载图块并在mbgl-offline.db中找到它们,但一切都可以通过工作的Internet连接正常运行,但它们似乎在应用程序中不使用。据报道,离线区域已完成,但只是不出现。据我了解离线文档,下载瓷砖后,其他所有内容都是"动手"。
我已经尝试了几种不同的来源(例如OpenMaptiles.org),因为我们仍在设置自己的地图瓷砖服务器。
我在这里错过了什么吗?我真的很感谢任何线索。
最好,菲尔
更新:这是一些更多信息:
xml-layout
<com.mapbox.mapboxsdk.maps.MapView
android:id="@+id/mapView"
android:layout_width="match_parent"
android:layout_height="match_parent"
mapbox:center_latitude="51"
mapbox:center_longitude="7"
mapbox:style_url="http://demo.tileserver.org/styles/klokantech-basic.json"
mapbox:zoom="1"/>
下载地图数据的代码:
// Set up the OfflineManager
OfflineManager offlineManager = OfflineManager.getInstance(context);
// Create a bounding box for the offline region
LatLngBounds latLngBounds = new LatLngBounds.Builder()
.include(new LatLng(6, 50))
.include(new LatLng(8, 52))
.build();
// Define the offline region
OfflineTilePyramidRegionDefinition definition = new OfflineTilePyramidRegionDefinition(
mapView.getStyleUrl(),
latLngBounds,
0,
9, // also tried other zoom levels
context.getResources().getDisplayMetrics().density);
// Set the metadata
byte[] metadata;
try {
JSONObject jsonObject = new JSONObject();
jsonObject.put(JSON_FIELD_REGION_NAME, "Cologne");
String json = jsonObject.toString();
metadata = json.getBytes(JSON_CHARSET);
} catch (Exception exception) {
Log.e("Failed to encode metadata: " + exception.getMessage());
metadata = null;
}
// Create the region asynchronously
offlineManager.createOfflineRegion(
definition,
metadata,
new OfflineManager.CreateOfflineRegionCallback() {
@Override
public void onCreate(OfflineRegion offlineRegion) {
offlineRegion.setDownloadState(OfflineRegion.STATE_ACTIVE);
// Monitor the download progress using setObserver
offlineRegion.setObserver(new OfflineRegion.OfflineRegionObserver() {
@Override
public void onStatusChanged(OfflineRegionStatus status) {
// Calculate the download percentage and update the progress bar
double percentage = status.getRequiredResourceCount() >= 0
? (100.0 * status.getCompletedResourceCount() / status.getRequiredResourceCount()) :
0.0;
if (status.isComplete()) {
// Download complete
Log.d("Region downloaded successfully.");
ReadOSRMRouteTask readOSRMRouteTask = new ReadOSRMRouteTask();
readOSRMRouteTask.execute();
} else if (status.isRequiredResourceCountPrecise()) {
// Switch to determinate state
Log.d((int) Math.round(percentage) + "% downloaded");
}
}
@Override
public void onError(OfflineRegionError error) {
// If an error occurs, print to logcat
Log.e("onError reason: " + error.getReason());
Log.e("onError message: " + error.getMessage());
}
@Override
public void mapboxTileCountLimitExceeded(long limit) {
// Notify if offline region exceeds maximum tile count
Log.e("Mapbox tile count limit exceeded: " + limit);
}
});
}
@Override
public void onError(String error) {
Log.e("Error: " + error);
}
});
在下载地图数据时,日志基本上只是用HTTP 200s垃圾邮件,因此在此目的似乎一切都很好。此外,据报道,离线软件包已完成,SQLite-DB也似乎还不错。
在离线模式下启动应用时,这基本上是日志:
d/mbgl:[jni]:nativecreate
/com.mapbox.mapboxsdk.maps.mapview:mapview start teartery ...
/mapboxeventmanager:telemetry Initialize()nate ...
/mapboxeventmanager:Mapbox遥测已经初始化。
d/mbgl:[jni]:本地initializedisplay
d/mbgl:[jni]:本机Initializecontext
i/mapboxeventmanager:flusheventsqueimed()
d/mapboxeventmanager:推动旋转栅事件。
w/mapboxeventmanager:未连接到网络,所以空的事件缓存 并返回而无需尝试发送事件
i/com.mapbox.mapboxsdk.http.httprequest:由于一个 连接错误:没有可用的互联网连接。
d/mbgl:[jni]:本机视图
d/mbgl:[jni]:nativecreateSurface
d/mbgl:[jni]:nativeframebufferresize
i/telemetryservice:onstartcommand()nate
d/mbgl:[jni]:本机视图
d/mbgl:[jni]:nativeframebufferresize
i/时间表:时间表:Activity_idle ID: android.os.binderproxy@41bd28b8时间:609768
w/mapboxeventmanager:未连接到网络,所以空的事件缓存 并返回而无需尝试发送事件
您能否提供有关该问题的更多信息,例如任何日志输出以及发生的行为与您期望的情况?确保您在离线下载和MapViews样式中都使用相同的Mapbox样式URL。