readMapData method
Reads complete map data for a rectangular area.
Combines map data from all tiles within the specified area. Default implementations may be inefficient for large areas.
Precondition: upperLeft.tileX <= lowerRight.tileX && upperLeft.tileY <= lowerRight.tileY
upperLeft Upper-left corner tile of the requested area
lowerRight Lower-right corner tile of the requested area
Returns combined map data for the entire area
Implementation
@override
Future<DatastoreBundle> readMapData(Tile upperLeft, Tile lowerRight) async {
switch (dataPolicy) {
case DataPolicy.RETURN_FIRST:
for (Datastore mdb in List.from(datastores)) {
if (_datastoreIntersectsTile(mdb, upperLeft) && (await mdb.supportsTile(upperLeft))) {
return mdb.readMapData(upperLeft, lowerRight);
}
}
return DatastoreBundle(pointOfInterests: [], ways: []);
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");
}