mapbox-maps-flutter icon indicating copy to clipboard operation
mapbox-maps-flutter copied to clipboard

Tile Region estimate is 0 on Android

Open David-Prelinger opened this issue 11 months ago • 1 comments

When trying to estimate a region, it works on iOS and returns the size in bytes. But on Android it returns 0 for transfer size and estimate size.

Tested on 2.5.1.

Our code looks like this:

  /// Returns the number of bytes that are the estimated transfer size.
  Future<int> estimateTransferRegionSize({
    required String styleUri,
    required MapRegionMetaData metaData,
  }) async {
    TileRegionEstimateResult estimate =
        await _tileStoreService.estimateRegionSize(
      regionId: _generateRegionId(metaData.polygon, metaData.zoomRange),
      styleUri: styleUri,
      metaData: metaData,
    );
    // Returns 0 on Android
    print(estimate.storageSize);

    // Returns 0 on Android
    print(estimate.transferSize);
    return estimate.transferSize;
  }

    Future<TileRegionEstimateResult> estimateRegionSize({
      required String regionId,
      required String styleUri,
      required MapRegionMetaData metaData,
      void Function(TileRegionEstimateProgress)? progressListener,
    }) async {
      TileStore store = await _tileStore.get();
      TileRegionLoadOptions loadOptions = _getLoadOptions(styleUri, metaData);
      return store.estimateTileRegion(
        regionId,
        loadOptions,
        _getEstimateOptions(),
        progressListener,
      );
    }

 TileRegionLoadOptions _getLoadOptions(
    String styleUri,
    MapRegionMetaData metaData,
  ) {
    /// Needed because https://github.com/mapbox/mapbox-maps-flutter/issues/846,
    /// can be removed when 2.6.0 got released.
    TilesetDescriptorOptions tilesetDescriptorOptions =
        _getTilesetDescriptorOptions(styleUri, metaData.zoomRange);
    Map<String, dynamic> geometryJson = metaData.polygon.toJson()
      ..remove('bbox');
    return TileRegionLoadOptions(
      acceptExpired: true,
      networkRestriction: NetworkRestriction.NONE,
      geometry: geometryJson,
      metadata: metaData.toJson(),
      extraOptions: {'test': 3},
      startLocation:
          Point(coordinates: metaData.polygon.coordinates.first.first),
      descriptorsOptions: <TilesetDescriptorOptions?>[tilesetDescriptorOptions],
    );
  }

An example of the metadata looks like this:

{updated_at: 1738085493503, created_at: 1738085493503, polygon: {type: Polygon, coordinates: [[[-0.00007829435426742748, 0.0002035126051964653], [0.00012067678505900403, -0.00016614456038155367], [-0.00007829435426742748, -0.00016614456038155367], [0.00012067678505900403, 0.0002035126051964653], [-0.00007829435426742748, 0.0002035126051964653]]]}, name: Ostsee, min_zoom: 0, max_zoom: 13}

David-Prelinger avatar Jan 28 '25 17:01 David-Prelinger

I need to correct myself. It does sometimes return the estimated storage size but estimated transfer size is still 0. I cannot isolate what causes the "sometimes". At least right now the estimated storage size is correct.

David-Prelinger avatar Jan 28 '25 18:01 David-Prelinger