readMapData method

  1. @override
Future<DatastoreReadResult?> readMapData(
  1. Tile upperLeft,
  2. Tile lowerRight
)
override

Reads data for an area defined by the tile in the upper left and the tile in the lower right corner. The default implementation combines the results from all tiles, a possibly inefficient solution. Precondition: upperLeft.tileX <= lowerRight.tileX && upperLeft.tileY <= lowerRight.tileY

@param upperLeft tile that defines the upper left corner of the requested area. @param lowerRight tile that defines the lower right corner of the requested area. @return map data for the tile.

Implementation

@override
Future<DatastoreReadResult?> readMapData(
    Tile upperLeft, Tile lowerRight) async {
  switch (this.dataPolicy) {
    case DataPolicy.RETURN_FIRST:
      Projection projection =
          MercatorProjection.fromZoomlevel(upperLeft.zoomLevel);
      for (MapDataStore mdb in mapDatabases) {
        if (mdb.supportsTile(upperLeft, projection)) {
          return mdb.readMapData(upperLeft, lowerRight);
        }
      }
      return null;
    case DataPolicy.RETURN_ALL:
      return _readMapDataDedup(upperLeft, lowerRight, false);
    case DataPolicy.DEDUPLICATE:
      return _readMapDataDedup(upperLeft, lowerRight, true);
  }
  //throw new Exception("Invalid data policy for multi map database");
}