circle function

Feature<Polygon> circle(
  1. GeoJSONObject center,
  2. num radius, {
  3. num? steps,
  4. Unit? unit,
  5. Map<String, dynamic>? properties,
})

Takes a Point or a Feature<Point> and calculates the circle polygon given a radius in degrees, radians, miles, or kilometers; and steps for precision.

example:

var properties = { 'foo': 'bar' };
var point = Feature(geometry: Point(coordinates: Position.of([-75.343, 39.984])));
final polygonCircle = circle(
                feature.geometry!,
                radius,
                steps: 32,
                unit: Unit.meters,
                properties: feature.properties,
              );

Implementation

Feature<Polygon> circle(
  GeoJSONObject center,
  num radius, {
  num? steps,
  Unit? unit,
  Map<String, dynamic>? properties,
}) {
  steps ??= 64;
  unit ??= Unit.kilometers;
  Point origin;
  final geometry = getGeom(center);
  if (geometry is Point) {
    origin = geometry;
  } else {
    throw GeometryNotSupported(geometry);
  }
  properties ??=
      center is Feature && center.properties != null ? center.properties : {};
  final List<Position> coordinates = [];
  for (var i = 0; i < steps; i++) {
    final c = destination(origin, radius, (i * -360) / steps, unit).coordinates;
    coordinates.add(c);
  }
  coordinates.add(coordinates[0]);
  return Feature<Polygon>(
    properties: properties,
    geometry: Polygon(coordinates: [coordinates]),
  );
}