MapBox GL Android:来自自定义图块源的离线地图已下载但未使用
Posted
技术标签:
【中文标题】MapBox GL Android:来自自定义图块源的离线地图已下载但未使用【英文标题】:MapBox GL Android: Offline Maps from custom tile source downloaded but not used 【发布时间】:2017-07-31 20:16:05 【问题描述】:对于我们的应用程序,我目前正在将地图框与自定义地图图块源集成(如 here 所述)。使用OfflineManager
和OfflineTilePyramidRegionDefinition
的互联网连接正常运行,我可以下载磁贴并在 mbgl-offline.db 中找到它们,但它们似乎没有在应用程序中使用。离线区域被报告为完整,但只是不显示。据我了解offline documentation,下载瓷砖后,其他一切都“放手”。
我尝试了几种不同的来源(例如,OpenMapTiles.org),因为我们仍在建立自己的地图图块服务器。
我在这里遗漏了什么吗?我真的很感激任何线索。
最好, 菲尔
更新: 以下是更多信息:
XML 布局
<com.mapbox.mapboxsdk.maps.MapView
android:id="@+id/mapView"
android:layout_
android:layout_
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 200 的垃圾邮件,因此这方面的一切似乎都很好。此外,离线包报告完整,sqlite-db 似乎也很好。
在离线模式下启动应用程序时,这基本上是日志:
D/mbgl: [JNI]: nativeCreate
/com.mapbox.mapboxsdk.maps.MapView: MapView 开始遥测...
/MapboxEventManager: Telemetry initialize() 调用...
/MapboxEventManager: Mapbox Telemetry 已经初始化。
D/mbgl: [JNI]: nativeInitializeDisplay
D/mbgl: [JNI]: nativeInitializeContext
I/MapboxEventManager:flushEventsQueueImmediately() 调用...
D/MapboxEventManager:已推送闸机事件。
W/MapboxEventManager:未连接到网络,因此事件缓存为空 并返回而不尝试发送事件
I/com.mapbox.mapboxsdk.http.HTTPRequest:请求失败,原因是 连接错误:没有可用的 Internet 连接。
D/mbgl: [JNI]: nativeViewResize
D/mbgl: [JNI]: nativeCreateSurface
D/mbgl: [JNI]: nativeFramebufferResize
I/TelemetryService: onStartCommand() 调用
D/mbgl: [JNI]: nativeViewResize
D/mbgl: [JNI]: nativeFramebufferResize
I/时间线:时间线:Activity_idle id: android.os.BinderProxy@41bd28b8 时间:609768
W/MapboxEventManager:未连接到网络,因此事件缓存为空 并返回而不尝试发送事件
【问题讨论】:
我想我也遇到了这个问题,并且会回顾整个项目,但我认为您需要确保在离线区域下载相同的样式。 感谢您的检查! 'mapView.getStyleUrl()' 不应该已经确保下载相同的样式,因为它已经被使用了吗?在布局 XML 中设置后,我没有更改地图样式。 【参考方案1】:您能否提供有关此问题的更多信息,例如任何日志输出以及正在发生的行为与您的预期相比?确保离线下载和 mapviews 样式使用相同的 mapbox 样式 URL。
【讨论】:
感谢您的评论 - 我用更多信息更新了答案。这些附加信息有用吗? 只是为了再次与您联系:我用更多信息更新了答案。这些附加信息有用吗?以上是关于MapBox GL Android:来自自定义图块源的离线地图已下载但未使用的主要内容,如果未能解决你的问题,请参考以下文章