2017-03-10 1 views
3

pour notre application, j'intègre actuellement la carte avec une surce de carte personnalisée (comme décrit here). Tout fonctionne bien avec une connexion Internet active, en utilisant le OfflineManager et OfflineTilePyramidRegionDefinition Je peux télécharger des tuiles et les trouver dans le mbgl-offline.db mais ils ne semblent pas être utilisés dans l'application. Les régions hors connexion sont signalées comme complètes, mais n'apparaissent pas. Comme je comprends le offline documentation, après avoir téléchargé les tuiles, tout le reste est "mains".MapBox GL Android: Cartes hors ligne de la source de tuiles personnalisées téléchargées mais non utilisées

J'ai essayé plusieurs sources différentes (par exemple, OpenMapTiles.org), car nous sommes encore en train de configurer notre propre serveur de tuiles de cartes.

Ai-je oublié quelque chose ici? J'apprécie vraiment les pistes.

Best, Phil

Mise à jour: Voici quelques plus d'informations:

Le XML Mise en page

<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"/> 

Le code pour télécharger les données cartographiques:

// 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); 
      } 
     }); 

Lors du téléchargement des données de la carte, le journal spammed essentiellement beaucoup de HTTP 200, donc tout semble bien à cette fin. De plus, les paquets hors ligne sont rapportés complets et le sqlite-db semble bien aussi.

Lors du démarrage de l'application en mode hors-ligne, cela est essentiellement le journal:

D/mbgl: [JNI]: nativeCreate

/com.mapbox.mapboxsdk.maps.MapView: MapView start Telemetry...

/MapboxEventManager: Telemetry initialize() called...

/MapboxEventManager: Mapbox Telemetry has already been initialized.

D/mbgl: [JNI]: nativeInitializeDisplay

D/mbgl: [JNI]: nativeInitializeContext

I/MapboxEventManager: flushEventsQueueImmediately() called...

D/MapboxEventManager: turnstile event pushed.

W/MapboxEventManager: Not connected to network, so empty events cache and return without attempting to send events

I/com.mapbox.mapboxsdk.http.HTTPRequest: Request failed due to a connection error: No Internet connection available.

D/mbgl: [JNI]: nativeViewResize

D/mbgl: [JNI]: nativeCreateSurface

D/mbgl: [JNI]: nativeFramebufferResize

I/TelemetryService: onStartCommand() called

D/mbgl: [JNI]: nativeViewResize

D/mbgl: [JNI]: nativeFramebufferResize

I/Timeline: Timeline: Activity_idle id: [email protected] time:609768

W/MapboxEventManager: Not connected to network, so empty events cache and return without attempting to send events

+0

Je pense que j'ai aussi eu ce problème et je vais revenir sur le projet, mais je pense que vous devez vous assurer que vous téléchargez le même style dans vos régions hors-ligne. – dazza5000

+0

Merci pour votre vérification! MapView.getStyleUrl() ne devrait-il pas déjà s'assurer que le même style est téléchargé, car il est déjà utilisé? Je ne change pas le style de la carte après l'avoir défini dans le layout-XML. –

Répondre

0

Pouvez-vous fournir plus d'informations sur la question, comme toute sortie du journal et le comportement ce qui se passe par rapport à vos attentes? Assurez-vous que vous utilisez la même URL de style mapbox pour le téléchargement en mode hors connexion et le style de votre mapviews.

+0

merci pour votre commentaire - J'ai mis à jour la réponse avec plus d'informations. Cette information supplémentaire est-elle utile? –

+0

Juste pour vérifier avec vous encore: J'ai mis à jour la réponse avec plus d'informations. Cette information supplémentaire est-elle utile? –