| 
									
										
										
										
											2020-06-24 00:35:19 +02:00
										 |  |  | import L from "leaflet" | 
					
						
							|  |  |  | import {UIEventSource} from "../UI/UIEventSource"; | 
					
						
							| 
									
										
										
										
											2020-06-29 03:12:44 +02:00
										 |  |  | import {UIElement} from "../UI/UIElement"; | 
					
						
							| 
									
										
										
										
											2020-06-24 00:35:19 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-22 14:46:43 +02:00
										 |  |  | export class BaseLayers { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public static readonly defaultLayerName = "Kaart van OpenStreetMap"; | 
					
						
							|  |  |  |     public static readonly baseLayers = { | 
					
						
							|  |  |  |         ["Luchtfoto Vlaanderen (recentste door AIV)"]: | 
					
						
							|  |  |  |             L.tileLayer("https://tile.informatievlaanderen.be/ws/raadpleegdiensten/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&" + | 
					
						
							|  |  |  |                 "LAYER=omwrgbmrvl&STYLE=&FORMAT=image/png&tileMatrixSet=GoogleMapsVL&tileMatrix={z}&tileRow={y}&tileCol={x}", | 
					
						
							|  |  |  |                 { | 
					
						
							|  |  |  |                     // omwrgbmrvl
 | 
					
						
							|  |  |  |                     attribution: 'Luchtfoto\'s van © AIV Vlaanderen (Laatste)  © AGIV', | 
					
						
							|  |  |  |                     maxZoom: 20, | 
					
						
							|  |  |  |                     minZoom: 1, | 
					
						
							|  |  |  |                     wmts: true | 
					
						
							|  |  |  |                 }), | 
					
						
							|  |  |  |         ["Luchtfoto Vlaanderen (2013-2015, door AIV)"]: L.tileLayer.wms('https://geoservices.informatievlaanderen.be/raadpleegdiensten/OGW/wms?s', | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 layers: "OGWRGB13_15VL", | 
					
						
							|  |  |  |                 attribution: "Luchtfoto's van © AIV Vlaanderen (2013-2015) | " | 
					
						
							|  |  |  |             }), | 
					
						
							|  |  |  |         [BaseLayers.defaultLayerName]: L.tileLayer("https://tile.openstreetmap.org/{z}/{x}/{y}.png", | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 attribution: '', | 
					
						
							|  |  |  |                 maxZoom: 19, | 
					
						
							|  |  |  |                 minZoom: 1 | 
					
						
							|  |  |  |             }), | 
					
						
							|  |  |  |         ["Kaart Grootschalig ReferentieBestand Vlaanderen (GRB) door AIV"]: L.tileLayer("https://tile.informatievlaanderen.be/ws/raadpleegdiensten/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=grb_bsk&STYLE=&FORMAT=image/png&tileMatrixSet=GoogleMapsVL&tileMatrix={z}&tileCol={x}&tileRow={y}", | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 attribution: 'Achtergrond <i>Grootschalig ReferentieBestand</i>(GRB) © AGIV', | 
					
						
							|  |  |  |                 maxZoom: 20, | 
					
						
							|  |  |  |                 minZoom: 1, | 
					
						
							|  |  |  |                 wmts: true | 
					
						
							|  |  |  |             }), | 
					
						
							|  |  |  |     }; | 
					
						
							| 
									
										
										
										
											2020-06-24 00:35:19 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-22 14:46:43 +02:00
										 |  |  |     public static readonly defaultLayer = BaseLayers.baseLayers[BaseLayers.defaultLayerName]; | 
					
						
							| 
									
										
										
										
											2020-06-24 00:35:19 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-22 14:46:43 +02:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2020-06-24 00:35:19 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-22 14:46:43 +02:00
										 |  |  | // Contains all setup and baselayers for Leaflet stuff
 | 
					
						
							|  |  |  | export class Basemap { | 
					
						
							| 
									
										
										
										
											2020-06-24 00:35:19 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-22 14:46:43 +02:00
										 |  |  |     // @ts-ignore
 | 
					
						
							|  |  |  |     public map: Map; | 
					
						
							| 
									
										
										
										
											2020-06-24 00:35:19 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-22 14:46:43 +02:00
										 |  |  |     public Location: UIEventSource<{ zoom: number, lat: number, lon: number }>; | 
					
						
							|  |  |  |     public LastClickLocation: UIEventSource<{ lat: number, lon: number }> = new UIEventSource<{ lat: number, lon: number }>(undefined) | 
					
						
							|  |  |  |     public CurrentLayer: UIEventSource<{ | 
					
						
							|  |  |  |         name: string, | 
					
						
							|  |  |  |         layer: L.tileLayer | 
					
						
							|  |  |  |     }> = new UIEventSource<L.tileLayer>( | 
					
						
							|  |  |  |         {name: BaseLayers.defaultLayerName, layer: BaseLayers.defaultLayer} | 
					
						
							|  |  |  |     ); | 
					
						
							| 
									
										
										
										
											2020-06-24 00:35:19 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-29 03:12:44 +02:00
										 |  |  |     constructor(leafletElementId: string, | 
					
						
							|  |  |  |                 location: UIEventSource<{ zoom: number, lat: number, lon: number }>, | 
					
						
							|  |  |  |                 extraAttribution: UIElement) { | 
					
						
							| 
									
										
										
										
											2020-06-27 03:06:51 +02:00
										 |  |  |         this.map = L.map(leafletElementId, { | 
					
						
							| 
									
										
										
										
											2020-06-24 00:35:19 +02:00
										 |  |  |             center: [location.data.lat, location.data.lon], | 
					
						
							|  |  |  |             zoom: location.data.zoom, | 
					
						
							| 
									
										
										
										
											2020-07-22 14:46:43 +02:00
										 |  |  |             layers: [BaseLayers.defaultLayer], | 
					
						
							| 
									
										
										
										
											2020-06-24 00:35:19 +02:00
										 |  |  |         }); | 
					
						
							| 
									
										
										
										
											2020-06-29 03:40:19 +02:00
										 |  |  |         this.map.attributionControl.setPrefix( | 
					
						
							|  |  |  |             extraAttribution.Render() + " | <a href='https://osm.org'>OpenStreetMap</a>"); | 
					
						
							| 
									
										
										
										
											2020-06-24 00:35:19 +02:00
										 |  |  |         this.Location = location; | 
					
						
							| 
									
										
										
										
											2020-06-29 03:12:44 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-27 03:06:51 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-28 00:06:23 +02:00
										 |  |  |         this.map.zoomControl.setPosition("bottomright"); | 
					
						
							| 
									
										
										
										
											2020-06-24 00:35:19 +02:00
										 |  |  |         const self = this; | 
					
						
							| 
									
										
										
										
											2020-06-27 03:06:51 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-24 00:35:19 +02:00
										 |  |  |         this.map.on("moveend", function () { | 
					
						
							|  |  |  |             location.data.zoom = self.map.getZoom(); | 
					
						
							|  |  |  |             location.data.lat = self.map.getCenter().lat; | 
					
						
							| 
									
										
										
										
											2020-06-29 03:12:44 +02:00
										 |  |  |             location.data.lon = self.map.getCenter().lng; | 
					
						
							| 
									
										
										
										
											2020-06-24 00:35:19 +02:00
										 |  |  |             location.ping(); | 
					
						
							| 
									
										
										
										
											2020-06-27 03:06:51 +02:00
										 |  |  |         }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-29 03:12:44 +02:00
										 |  |  |         this.map.on("click", function (e) { | 
					
						
							|  |  |  |             self.LastClickLocation.setData({lat: e.latlng.lat, lon: e.latlng.lng}) | 
					
						
							|  |  |  |         }); | 
					
						
							| 
									
										
										
										
											2020-06-24 00:35:19 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |