Proj4Crs.fromFactory constructor

Proj4Crs.fromFactory({
  1. required String code,
  2. required Projection proj4Projection,
  3. List<Point<double>>? origins,
  4. Rect? bounds,
  5. List<double>? scales,
  6. List<double>? resolutions,
})

Create a new Crs that has projection.

Implementation

factory Proj4Crs.fromFactory({
  required String code,
  required proj4.Projection proj4Projection,
  List<Point<double>>? origins,
  Rect? bounds,
  List<double>? scales,
  List<double>? resolutions,
}) {
  final projection = _Proj4Projection(
    proj4Projection: proj4Projection,
    bounds: bounds,
  );

  List<double> finalScales;
  if (null != scales && scales.isNotEmpty) {
    finalScales = scales;
  } else if (null != resolutions && resolutions.isNotEmpty) {
    finalScales = resolutions.map((r) => 1 / r).toList(growable: false);
  } else {
    throw Exception(
        'Please provide scales or resolutions to determine scales');
  }

  List<_Transformation> transformations;
  if (null == origins || origins.isEmpty) {
    transformations = [const _Transformation(1, 0, -1, 0)];
  } else {
    if (origins.length == 1) {
      final origin = origins[0];
      transformations = [_Transformation(1, -origin.x, -1, origin.y)];
    } else {
      transformations =
          origins.map((p) => _Transformation(1, -p.x, -1, p.y)).toList();
    }
  }

  return Proj4Crs._(
    code: code,
    projection: projection,
    infinite: null == bounds,
    transformations: transformations,
    scales: finalScales,
  );
}