forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			61 lines
		
	
	
		
			No EOL
		
	
	
		
			2.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			No EOL
		
	
	
		
			2.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import FeatureSource, {Tiled} from "../../Logic/FeatureSource/FeatureSource";
 | 
						|
import {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 * as clusterstyle from "../../assets/layers/cluster_style/cluster_style.json"
 | 
						|
export default class ShowTileInfo {
 | 
						|
    public static readonly styling = new LayerConfig(
 | 
						|
        clusterstyle, "tileinfo", true)
 | 
						|
 | 
						|
    constructor(options: {
 | 
						|
        source: FeatureSource & Tiled, leafletMap: UIEventSource<any>, layer?: LayerConfig,
 | 
						|
        doShowLayer?: UIEventSource<boolean>
 | 
						|
    }) {
 | 
						|
 | 
						|
 | 
						|
        const source = options.source
 | 
						|
        const metaFeature: UIEventSource<any[]> =
 | 
						|
            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]
 | 
						|
            })
 | 
						|
 | 
						|
        new ShowDataLayer({
 | 
						|
            layerToShow: ShowTileInfo.styling,
 | 
						|
            features: new StaticFeatureSource(metaFeature, false),
 | 
						|
            leafletMap: options.leafletMap,
 | 
						|
            doShowLayer: options.doShowLayer
 | 
						|
        })
 | 
						|
 | 
						|
    }
 | 
						|
 | 
						|
} |