toGeoJson<T extends GeoJson<Geometry>> method

  1. @override
T? toGeoJson<T extends GeoJson<Geometry>>({
  1. required int x,
  2. required int y,
  3. required int z,
})
override

Optimized toGeoJson using native code

Implementation

@override
T? toGeoJson<T extends geo.GeoJson>({
  required int x,
  required int y,
  required int z,
}) {
  // Decode geometry using native optimized path
  final coords = _geometryDecoder(x, y, z);

  // Decode properties if not already done
  if (properties == null) {
    properties = {};
    for (int i = 0; i < tags.length; i += 2) {
      final keyIndex = tags[i];
      final valueIndex = tags[i + 1];
      if (keys != null &&
          values != null &&
          keyIndex < keys!.length &&
          valueIndex < values!.length) {
        properties![keys![keyIndex]] = values![valueIndex];
      }
    }
  }

  // Convert to appropriate GeoJson type based on geometry type
  switch (_geometryTypeVtz) {
    case VtzGeometryType.point:
      if (coords.isEmpty || coords.first.isEmpty) {
        return null;
      }
      final point = coords.first.first;
      return geo.GeoJsonPoint(
        geometry: geom.GeometryPoint(coordinates: point),
        properties: properties,
      ) as T;

    case VtzGeometryType.linestring:
      if (coords.isEmpty) return null;
      if (coords.length == 1) {
        return geo.GeoJsonLineString(
          geometry: geom.GeometryLineString(coordinates: coords.first),
          properties: properties,
        ) as T;
      } else {
        return geo.GeoJsonMultiLineString(
          geometry: geom.GeometryMultiLineString(coordinates: coords),
          properties: properties,
        ) as T;
      }

    case VtzGeometryType.polygon:
      if (coords.isEmpty) return null;
      return geo.GeoJsonPolygon(
        geometry: geom.GeometryPolygon(coordinates: coords),
        properties: properties,
      ) as T;

    default:
      return null;
  }
}