toGeoJson<T extends GeoJson<Geometry> > method
T?
toGeoJson<T extends GeoJson<Geometry> >({})
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;
}
}