64 lines
2.5 KiB
TypeScript
64 lines
2.5 KiB
TypeScript
import FeatureSource, { Tiled } from "../../Logic/FeatureSource/FeatureSource"
|
|
import { Store, UIEventSource } from "../../Logic/UIEventSource"
|
|
import LayerConfig from "../../Models/ThemeConfig/LayerConfig"
|
|
import ShowDataLayer from "./ShowDataLayer"
|
|
import StaticFeatureSource from "../../Logic/FeatureSource/Sources/StaticFeatureSource"
|
|
import { GeoOperations } from "../../Logic/GeoOperations"
|
|
import { Tiles } from "../../Models/TileRange"
|
|
import clusterstyle from "../../assets/layers/cluster_style/cluster_style.json"
|
|
|
|
export default class ShowTileInfo {
|
|
public static readonly styling = new LayerConfig(clusterstyle, "ShowTileInfo", true)
|
|
|
|
constructor(
|
|
options: {
|
|
source: FeatureSource & Tiled
|
|
leafletMap: UIEventSource<any>
|
|
layer?: LayerConfig
|
|
doShowLayer?: UIEventSource<boolean>
|
|
},
|
|
state
|
|
) {
|
|
const source = options.source
|
|
const metaFeature: Store<{ feature; freshness: Date }[]> = source.features.map(
|
|
(features) => {
|
|
const bbox = source.bbox
|
|
const [z, x, y] = Tiles.tile_from_index(source.tileIndex)
|
|
const box = {
|
|
type: "Feature",
|
|
properties: {
|
|
z: z,
|
|
x: x,
|
|
y: y,
|
|
tileIndex: source.tileIndex,
|
|
source: source.name,
|
|
count: features.length,
|
|
tileId: source.name + "/" + source.tileIndex,
|
|
},
|
|
geometry: {
|
|
type: "Polygon",
|
|
coordinates: [
|
|
[
|
|
[bbox.minLon, bbox.minLat],
|
|
[bbox.minLon, bbox.maxLat],
|
|
[bbox.maxLon, bbox.maxLat],
|
|
[bbox.maxLon, bbox.minLat],
|
|
[bbox.minLon, bbox.minLat],
|
|
],
|
|
],
|
|
},
|
|
}
|
|
const center = GeoOperations.centerpoint(box)
|
|
return [box, center].map((feature) => ({ feature, freshness: new Date() }))
|
|
}
|
|
)
|
|
|
|
new ShowDataLayer({
|
|
layerToShow: ShowTileInfo.styling,
|
|
features: new StaticFeatureSource(metaFeature),
|
|
leafletMap: options.leafletMap,
|
|
doShowLayer: options.doShowLayer,
|
|
state,
|
|
})
|
|
}
|
|
}
|