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
 | |
|         })
 | |
| 
 | |
|     }
 | |
| 
 | |
| } |