Proj4Crs.fromFactory constructor

Proj4Crs.fromFactory({
  1. required String code,
  2. required Projection proj4Projection,
  3. Transformation? transformation,
  4. List<CustomPoint<num>>? origins,
  5. Bounds<double>? bounds,
  6. List<double>? scales,
  7. List<double>? resolutions,
})

Implementation

factory Proj4Crs.fromFactory({
  required String code,
  required proj4.Projection proj4Projection,
  Transformation? transformation,
  List<CustomPoint>? origins,
  Bounds<double>? bounds,
  List<double>? scales,
  List<double>? resolutions,
}) {
  final projection =
      _Proj4Projection(proj4Projection: proj4Projection, bounds: bounds);
  List<Transformation>? transformations;
  var infinite = null == 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');
  }

  if (null == origins || origins.isEmpty) {
    transformation ??= Transformation(1, 0, -1, 0);
  } else {
    if (origins.length == 1) {
      var origin = origins[0];
      transformation = Transformation(1, -origin.x, -1, origin.y);
    } else {
      transformations =
          origins.map((p) => Transformation(1, -p.x, -1, p.y)).toList();
      transformation = null;
    }
  }

  return Proj4Crs._(
    code: code,
    projection: projection,
    transformation: transformation!,
    infinite: infinite,
    transformations: transformations,
    scales: finalScales,
  );
}