UNPKG

maplibre-gl

Version:

BSD licensed community fork of mapbox-gl, a WebGL interactive maps library

58 lines (47 loc) 1.69 kB
import type {VectorTileFeature} from '@mapbox/vector-tile'; import type {LayerSpecification} from '../style-spec/types.g'; export type MapGeoJSONFeature = GeoJSONFeature & { layer: Omit<LayerSpecification, 'source'> & {source: string}; source: string; sourceLayer?: string; state: { [key: string]: any }; } class GeoJSONFeature { type: 'Feature'; _geometry: GeoJSON.Geometry; properties: { [name: string]: any }; id: number | string | undefined; _vectorTileFeature: VectorTileFeature; constructor(vectorTileFeature: VectorTileFeature, z: number, x: number, y: number, id: string | number | undefined) { this.type = 'Feature'; this._vectorTileFeature = vectorTileFeature; (vectorTileFeature as any)._z = z; (vectorTileFeature as any)._x = x; (vectorTileFeature as any)._y = y; this.properties = vectorTileFeature.properties; this.id = id; } get geometry(): GeoJSON.Geometry { if (this._geometry === undefined) { this._geometry = this._vectorTileFeature.toGeoJSON( (this._vectorTileFeature as any)._x, (this._vectorTileFeature as any)._y, (this._vectorTileFeature as any)._z).geometry; } return this._geometry; } set geometry(g: GeoJSON.Geometry) { this._geometry = g; } toJSON() { const json: any = { geometry: this.geometry }; for (const i in this) { if (i === '_geometry' || i === '_vectorTileFeature') continue; json[i] = (this)[i]; } return json; } } export default GeoJSONFeature;