flip function

Flip the coordinates of a Feature, with proper typing for each geometry

Implementation

Feature<GeometryType> flip(Feature<GeometryType>? geojson) {
  if (geojson == null) {
    throw ArgumentError('geojson cannot be null');
  }

  final geometry = geojson.geometry;
  if (geometry == null) return geojson;

  if (geometry is Point) {
    geojson.geometry = Point(
      coordinates: flipPosition(geometry.coordinates),
    );
  } else if (geometry is MultiPoint) {
    geojson.geometry = MultiPoint(
      coordinates: geometry.coordinates.map(flipPosition).toList(),
    );
  } else if (geometry is LineString) {
    geojson.geometry = LineString(
      coordinates: geometry.coordinates.map(flipPosition).toList(),
    );
  } else if (geometry is MultiLineString) {
    geojson.geometry = MultiLineString(
      coordinates: geometry.coordinates
          .map((line) => line.map(flipPosition).toList())
          .toList(),
    );
  } else if (geometry is Polygon) {
    geojson.geometry = Polygon(
      coordinates: geometry.coordinates
          .map((ring) => ring.map(flipPosition).toList())
          .toList(),
    );
  } else if (geometry is MultiPolygon) {
    geojson.geometry = MultiPolygon(
      coordinates: geometry.coordinates
          .map(
            (polygon) =>
                polygon.map((ring) => ring.map(flipPosition).toList()).toList(),
          )
          .toList(),
    );
  }

  return geojson;
}