fromGeoJson method

Future<void> fromGeoJson(
  1. String data,
  2. {bool verbose = false,
  3. Icon markerIcon = const Icon(Icons.location_on),
  4. bool noIsolate = false}
)

Display some geojson data on the map

Implementation

Future<void> fromGeoJson(String data,
    {bool verbose = false,
    Icon markerIcon = const Icon(Icons.location_on),
    bool noIsolate = false}) async {
  print("From geojson $data");

  final geojson = GeoJson();
  geojson.processedFeatures.listen((GeoJsonFeature feature) {
    switch (feature.type) {
      case GeoJsonFeatureType.point:
        final point = feature.geometry as GeoJsonPoint;
        unawaited(addMarker(
          name: point.name,
          marker: Marker(
              point:
                  LatLng(point.geoPoint.latitude, point.geoPoint.longitude),
              builder: (BuildContext context) => markerIcon),
        ));
        break;
      case GeoJsonFeatureType.multipoint:
        final mp = feature.geometry as GeoJsonMultiPoint;
        for (final geoPoint in mp.geoSerie.geoPoints) {
          unawaited(addMarker(
            name: geoPoint.name,
            marker: Marker(
                point: LatLng(geoPoint.latitude, geoPoint.longitude),
                builder: (BuildContext context) => markerIcon),
          ));
        }
        break;
      case GeoJsonFeatureType.line:
        final line = feature.geometry as GeoJsonLine;
        unawaited(addLine(name: line.name, points: line.geoSerie.toLatLng()));
        break;
      case GeoJsonFeatureType.multiline:
        final ml = feature.geometry as GeoJsonMultiLine;
        for (final line in ml.lines) {
          unawaited(
              addLine(name: line.name, points: line.geoSerie.toLatLng()));
        }
        break;
      case GeoJsonFeatureType.polygon:
        final poly = feature.geometry as GeoJsonPolygon;
        for (final geoSerie in poly.geoSeries) {
          unawaited(
              addPolygon(name: geoSerie.name, points: geoSerie.toLatLng()));
        }
        break;
      case GeoJsonFeatureType.multipolygon:
        final mp = feature.geometry as GeoJsonMultiPolygon;
        for (final poly in mp.polygons) {
          for (final geoSerie in poly.geoSeries) {
            unawaited(
                addPolygon(name: geoSerie.name, points: geoSerie.toLatLng()));
          }
        }
        break;
      case GeoJsonFeatureType.geometryCollection:
        // TODO : implement
        throw const NotImplementedException(
            "GeoJsonFeatureType.geometryCollection Not implemented");
    }
  });
  if (noIsolate) {
    await geojson.parseInMainThread(data);
  } else {
    await geojson.parse(data);
  }
}