forked from MapComplete/MapComplete
		
	Featuer: add selfhosted version of pmtiles
This commit is contained in:
		
							parent
							
								
									de74a5dc08
								
							
						
					
					
						commit
						55339435d5
					
				
					 7 changed files with 4543 additions and 11 deletions
				
			
		
							
								
								
									
										423
									
								
								public/assets/protomaps.json
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										423
									
								
								public/assets/protomaps.json
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,423 @@ | ||||||
|  | { | ||||||
|  |   "attribution": "<a href=\"https://www.openstreetmap.org/copyright\" target=\"_blank\">© OpenStreetMap</a>", | ||||||
|  |   "bounds": [ | ||||||
|  |     -180, | ||||||
|  |     -85.0511287, | ||||||
|  |     180, | ||||||
|  |     85.0511287 | ||||||
|  |   ], | ||||||
|  |   "center": [ | ||||||
|  |     0, | ||||||
|  |     0, | ||||||
|  |     0 | ||||||
|  |   ], | ||||||
|  |   "description": "Basemap layers derived from OpenStreetMap and Natural Earth, self-hosted", | ||||||
|  |   "maxzoom": 15, | ||||||
|  |   "minzoom": 0, | ||||||
|  |   "name": "Protomaps Basemap", | ||||||
|  |   "scheme": "xyz", | ||||||
|  |   "tilejson": "3.0.0", | ||||||
|  |   "tiles": [ | ||||||
|  |     "https://api.protomaps.com/tiles/v4/{z}/{x}/{y}.mvt?key=e6cd5633d51d8e24" | ||||||
|  |   ], | ||||||
|  |   "vector_layers": [ | ||||||
|  |     { | ||||||
|  |       "fields": { | ||||||
|  |         "brk_a3": "String", | ||||||
|  |         "disputed": "Boolean", | ||||||
|  |         "kind": "String", | ||||||
|  |         "kind_detail": "Number", | ||||||
|  |         "sort_rank": "Number" | ||||||
|  |       }, | ||||||
|  |       "id": "boundaries", | ||||||
|  |       "maxzoom": 15, | ||||||
|  |       "minzoom": 0 | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "fields": { | ||||||
|  |         "addr_housenumber": "String", | ||||||
|  |         "height": "Number", | ||||||
|  |         "kind": "String", | ||||||
|  |         "kind_detail": "String", | ||||||
|  |         "layer": "Number", | ||||||
|  |         "min_height": "Number", | ||||||
|  |         "sort_rank": "Number" | ||||||
|  |       }, | ||||||
|  |       "id": "buildings", | ||||||
|  |       "maxzoom": 15, | ||||||
|  |       "minzoom": 11 | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "fields": { | ||||||
|  |         "kind": "String", | ||||||
|  |         "min_zoom": "Number", | ||||||
|  |         "name": "String", | ||||||
|  |         "name2": "String", | ||||||
|  |         "name3": "String", | ||||||
|  |         "name:ar": "String", | ||||||
|  |         "name:bg": "String", | ||||||
|  |         "name:cs": "String", | ||||||
|  |         "name:da": "String", | ||||||
|  |         "name:de": "String", | ||||||
|  |         "name:el": "String", | ||||||
|  |         "name:en": "String", | ||||||
|  |         "name:es": "String", | ||||||
|  |         "name:et": "String", | ||||||
|  |         "name:fa": "String", | ||||||
|  |         "name:fi": "String", | ||||||
|  |         "name:fr": "String", | ||||||
|  |         "name:ga": "String", | ||||||
|  |         "name:he": "String", | ||||||
|  |         "name:hi": "String", | ||||||
|  |         "name:hr": "String", | ||||||
|  |         "name:hu": "String", | ||||||
|  |         "name:id": "String", | ||||||
|  |         "name:it": "String", | ||||||
|  |         "name:ja": "String", | ||||||
|  |         "name:ko": "String", | ||||||
|  |         "name:lt": "String", | ||||||
|  |         "name:lv": "String", | ||||||
|  |         "name:mr": "String", | ||||||
|  |         "name:mt": "String", | ||||||
|  |         "name:ne": "String", | ||||||
|  |         "name:nl": "String", | ||||||
|  |         "name:no": "String", | ||||||
|  |         "name:pl": "String", | ||||||
|  |         "name:pt": "String", | ||||||
|  |         "name:ro": "String", | ||||||
|  |         "name:ru": "String", | ||||||
|  |         "name:sk": "String", | ||||||
|  |         "name:sl": "String", | ||||||
|  |         "name:sv": "String", | ||||||
|  |         "name:tr": "String", | ||||||
|  |         "name:uk": "String", | ||||||
|  |         "name:ur": "String", | ||||||
|  |         "name:vi": "String", | ||||||
|  |         "name:zh-Hans": "String", | ||||||
|  |         "name:zh-Hant": "String", | ||||||
|  |         "pgf:name2": "String", | ||||||
|  |         "pgf:name:hi": "String", | ||||||
|  |         "pgf:name:mr": "String", | ||||||
|  |         "pgf:name:ne": "String", | ||||||
|  |         "script": "String", | ||||||
|  |         "script2": "String", | ||||||
|  |         "script3": "String" | ||||||
|  |       }, | ||||||
|  |       "id": "earth", | ||||||
|  |       "maxzoom": 15, | ||||||
|  |       "minzoom": 0 | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "fields": { | ||||||
|  |         "kind": "String" | ||||||
|  |       }, | ||||||
|  |       "id": "landcover", | ||||||
|  |       "maxzoom": 7, | ||||||
|  |       "minzoom": 0 | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "fields": { | ||||||
|  |         "kind": "String", | ||||||
|  |         "sort_rank": "Number" | ||||||
|  |       }, | ||||||
|  |       "id": "landuse", | ||||||
|  |       "maxzoom": 15, | ||||||
|  |       "minzoom": 2 | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "fields": { | ||||||
|  |         "capital": "String", | ||||||
|  |         "kind": "String", | ||||||
|  |         "kind_detail": "String", | ||||||
|  |         "min_zoom": "Number", | ||||||
|  |         "name": "String", | ||||||
|  |         "name2": "String", | ||||||
|  |         "name3": "String", | ||||||
|  |         "name:ar": "String", | ||||||
|  |         "name:bg": "String", | ||||||
|  |         "name:cs": "String", | ||||||
|  |         "name:da": "String", | ||||||
|  |         "name:de": "String", | ||||||
|  |         "name:el": "String", | ||||||
|  |         "name:en": "String", | ||||||
|  |         "name:es": "String", | ||||||
|  |         "name:et": "String", | ||||||
|  |         "name:fa": "String", | ||||||
|  |         "name:fi": "String", | ||||||
|  |         "name:fr": "String", | ||||||
|  |         "name:ga": "String", | ||||||
|  |         "name:he": "String", | ||||||
|  |         "name:hi": "String", | ||||||
|  |         "name:hr": "String", | ||||||
|  |         "name:hu": "String", | ||||||
|  |         "name:id": "String", | ||||||
|  |         "name:it": "String", | ||||||
|  |         "name:ja": "String", | ||||||
|  |         "name:ko": "String", | ||||||
|  |         "name:lt": "String", | ||||||
|  |         "name:lv": "String", | ||||||
|  |         "name:mr": "String", | ||||||
|  |         "name:mt": "String", | ||||||
|  |         "name:ne": "String", | ||||||
|  |         "name:nl": "String", | ||||||
|  |         "name:no": "String", | ||||||
|  |         "name:pl": "String", | ||||||
|  |         "name:pt": "String", | ||||||
|  |         "name:ro": "String", | ||||||
|  |         "name:ru": "String", | ||||||
|  |         "name:sk": "String", | ||||||
|  |         "name:sl": "String", | ||||||
|  |         "name:sv": "String", | ||||||
|  |         "name:tr": "String", | ||||||
|  |         "name:uk": "String", | ||||||
|  |         "name:ur": "String", | ||||||
|  |         "name:vi": "String", | ||||||
|  |         "name:zh-Hans": "String", | ||||||
|  |         "name:zh-Hant": "String", | ||||||
|  |         "pgf:name": "String", | ||||||
|  |         "pgf:name2": "String", | ||||||
|  |         "pgf:name:en": "String", | ||||||
|  |         "pgf:name:hi": "String", | ||||||
|  |         "pgf:name:mr": "String", | ||||||
|  |         "pgf:name:ne": "String", | ||||||
|  |         "population": "Number", | ||||||
|  |         "population_rank": "Number", | ||||||
|  |         "ref": "String", | ||||||
|  |         "ref:FR:FANTOIR": "String", | ||||||
|  |         "ref:FR:SIREN": "String", | ||||||
|  |         "ref:RS:nkd": "String", | ||||||
|  |         "ref:USCG": "String", | ||||||
|  |         "ref:USPS": "String", | ||||||
|  |         "ref:assessors_office": "String", | ||||||
|  |         "ref:catasto": "String", | ||||||
|  |         "ref:category": "String", | ||||||
|  |         "ref:en": "String", | ||||||
|  |         "ref:lzh": "String", | ||||||
|  |         "ref:nid": "String", | ||||||
|  |         "ref:se:pts:postort": "String", | ||||||
|  |         "ref:vi": "String", | ||||||
|  |         "ref:whc": "String", | ||||||
|  |         "ref:xpcc": "String", | ||||||
|  |         "ref:zh": "String", | ||||||
|  |         "ref:zh-Hans": "String", | ||||||
|  |         "ref:zh-Hant": "String", | ||||||
|  |         "script": "String", | ||||||
|  |         "script2": "String", | ||||||
|  |         "script3": "String", | ||||||
|  |         "sort_key": "Number", | ||||||
|  |         "wikidata": "String" | ||||||
|  |       }, | ||||||
|  |       "id": "places", | ||||||
|  |       "maxzoom": 15, | ||||||
|  |       "minzoom": 0 | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "fields": { | ||||||
|  |         "elevation": "String", | ||||||
|  |         "iata": "String", | ||||||
|  |         "kind": "String", | ||||||
|  |         "kind_detail": "String", | ||||||
|  |         "min_zoom": "Number", | ||||||
|  |         "name": "String", | ||||||
|  |         "name2": "String", | ||||||
|  |         "name3": "String", | ||||||
|  |         "name:ar": "String", | ||||||
|  |         "name:bg": "String", | ||||||
|  |         "name:cs": "String", | ||||||
|  |         "name:da": "String", | ||||||
|  |         "name:de": "String", | ||||||
|  |         "name:el": "String", | ||||||
|  |         "name:en": "String", | ||||||
|  |         "name:es": "String", | ||||||
|  |         "name:et": "String", | ||||||
|  |         "name:fa": "String", | ||||||
|  |         "name:fi": "String", | ||||||
|  |         "name:fr": "String", | ||||||
|  |         "name:ga": "String", | ||||||
|  |         "name:he": "String", | ||||||
|  |         "name:hi": "String", | ||||||
|  |         "name:hr": "String", | ||||||
|  |         "name:hu": "String", | ||||||
|  |         "name:id": "String", | ||||||
|  |         "name:it": "String", | ||||||
|  |         "name:ja": "String", | ||||||
|  |         "name:ko": "String", | ||||||
|  |         "name:lt": "String", | ||||||
|  |         "name:lv": "String", | ||||||
|  |         "name:mr": "String", | ||||||
|  |         "name:mt": "String", | ||||||
|  |         "name:ne": "String", | ||||||
|  |         "name:nl": "String", | ||||||
|  |         "name:no": "String", | ||||||
|  |         "name:pl": "String", | ||||||
|  |         "name:pt": "String", | ||||||
|  |         "name:ro": "String", | ||||||
|  |         "name:ru": "String", | ||||||
|  |         "name:sk": "String", | ||||||
|  |         "name:sl": "String", | ||||||
|  |         "name:sv": "String", | ||||||
|  |         "name:tr": "String", | ||||||
|  |         "name:uk": "String", | ||||||
|  |         "name:ur": "String", | ||||||
|  |         "name:vi": "String", | ||||||
|  |         "name:zh-Hans": "String", | ||||||
|  |         "name:zh-Hant": "String", | ||||||
|  |         "pgf:name": "String", | ||||||
|  |         "pgf:name2": "String", | ||||||
|  |         "pgf:name3": "String", | ||||||
|  |         "pgf:name:en": "String", | ||||||
|  |         "pgf:name:he": "String", | ||||||
|  |         "pgf:name:hi": "String", | ||||||
|  |         "pgf:name:mr": "String", | ||||||
|  |         "pgf:name:ne": "String", | ||||||
|  |         "script": "String", | ||||||
|  |         "script2": "String", | ||||||
|  |         "script3": "String" | ||||||
|  |       }, | ||||||
|  |       "id": "pois", | ||||||
|  |       "maxzoom": 15, | ||||||
|  |       "minzoom": 5 | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "fields": { | ||||||
|  |         "is_bridge": "Boolean", | ||||||
|  |         "is_link": "Boolean", | ||||||
|  |         "is_tunnel": "Boolean", | ||||||
|  |         "kind": "String", | ||||||
|  |         "kind_detail": "String", | ||||||
|  |         "min_zoom": "Number", | ||||||
|  |         "name": "String", | ||||||
|  |         "name2": "String", | ||||||
|  |         "name3": "String", | ||||||
|  |         "name:ar": "String", | ||||||
|  |         "name:bg": "String", | ||||||
|  |         "name:cs": "String", | ||||||
|  |         "name:da": "String", | ||||||
|  |         "name:de": "String", | ||||||
|  |         "name:el": "String", | ||||||
|  |         "name:en": "String", | ||||||
|  |         "name:es": "String", | ||||||
|  |         "name:et": "String", | ||||||
|  |         "name:fa": "String", | ||||||
|  |         "name:fi": "String", | ||||||
|  |         "name:fr": "String", | ||||||
|  |         "name:ga": "String", | ||||||
|  |         "name:he": "String", | ||||||
|  |         "name:hi": "String", | ||||||
|  |         "name:hr": "String", | ||||||
|  |         "name:hu": "String", | ||||||
|  |         "name:id": "String", | ||||||
|  |         "name:it": "String", | ||||||
|  |         "name:ja": "String", | ||||||
|  |         "name:ko": "String", | ||||||
|  |         "name:lt": "String", | ||||||
|  |         "name:lv": "String", | ||||||
|  |         "name:mr": "String", | ||||||
|  |         "name:mt": "String", | ||||||
|  |         "name:ne": "String", | ||||||
|  |         "name:nl": "String", | ||||||
|  |         "name:no": "String", | ||||||
|  |         "name:pl": "String", | ||||||
|  |         "name:pt": "String", | ||||||
|  |         "name:ro": "String", | ||||||
|  |         "name:ru": "String", | ||||||
|  |         "name:sk": "String", | ||||||
|  |         "name:sl": "String", | ||||||
|  |         "name:sv": "String", | ||||||
|  |         "name:tr": "String", | ||||||
|  |         "name:uk": "String", | ||||||
|  |         "name:ur": "String", | ||||||
|  |         "name:vi": "String", | ||||||
|  |         "name:zh-Hans": "String", | ||||||
|  |         "name:zh-Hant": "String", | ||||||
|  |         "network": "String", | ||||||
|  |         "oneway": "String", | ||||||
|  |         "pgf:name": "String", | ||||||
|  |         "pgf:name2": "String", | ||||||
|  |         "pgf:name:en": "String", | ||||||
|  |         "pgf:name:hi": "String", | ||||||
|  |         "pgf:name:mr": "String", | ||||||
|  |         "pgf:name:ne": "String", | ||||||
|  |         "ref": "String", | ||||||
|  |         "route": "String", | ||||||
|  |         "script": "String", | ||||||
|  |         "script2": "String", | ||||||
|  |         "script3": "String", | ||||||
|  |         "service": "String", | ||||||
|  |         "shield_text_length": "Number", | ||||||
|  |         "sort_rank": "Number" | ||||||
|  |       }, | ||||||
|  |       "id": "roads", | ||||||
|  |       "maxzoom": 15, | ||||||
|  |       "minzoom": 3 | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "fields": { | ||||||
|  |         "bridge": "String", | ||||||
|  |         "kind": "String", | ||||||
|  |         "kind_detail": "String", | ||||||
|  |         "layer": "Number", | ||||||
|  |         "min_zoom": "Number", | ||||||
|  |         "name": "String", | ||||||
|  |         "name2": "String", | ||||||
|  |         "name3": "String", | ||||||
|  |         "name:ar": "String", | ||||||
|  |         "name:bg": "String", | ||||||
|  |         "name:cs": "String", | ||||||
|  |         "name:da": "String", | ||||||
|  |         "name:de": "String", | ||||||
|  |         "name:el": "String", | ||||||
|  |         "name:en": "String", | ||||||
|  |         "name:es": "String", | ||||||
|  |         "name:et": "String", | ||||||
|  |         "name:fa": "String", | ||||||
|  |         "name:fi": "String", | ||||||
|  |         "name:fr": "String", | ||||||
|  |         "name:ga": "String", | ||||||
|  |         "name:he": "String", | ||||||
|  |         "name:hi": "String", | ||||||
|  |         "name:hr": "String", | ||||||
|  |         "name:hu": "String", | ||||||
|  |         "name:id": "String", | ||||||
|  |         "name:it": "String", | ||||||
|  |         "name:ja": "String", | ||||||
|  |         "name:ko": "String", | ||||||
|  |         "name:lt": "String", | ||||||
|  |         "name:lv": "String", | ||||||
|  |         "name:mr": "String", | ||||||
|  |         "name:mt": "String", | ||||||
|  |         "name:ne": "String", | ||||||
|  |         "name:nl": "String", | ||||||
|  |         "name:no": "String", | ||||||
|  |         "name:pl": "String", | ||||||
|  |         "name:pt": "String", | ||||||
|  |         "name:ro": "String", | ||||||
|  |         "name:ru": "String", | ||||||
|  |         "name:sk": "String", | ||||||
|  |         "name:sl": "String", | ||||||
|  |         "name:sv": "String", | ||||||
|  |         "name:tr": "String", | ||||||
|  |         "name:uk": "String", | ||||||
|  |         "name:ur": "String", | ||||||
|  |         "name:vi": "String", | ||||||
|  |         "name:zh-Hans": "String", | ||||||
|  |         "name:zh-Hant": "String", | ||||||
|  |         "pgf:name": "String", | ||||||
|  |         "pgf:name2": "String", | ||||||
|  |         "pgf:name:en": "String", | ||||||
|  |         "pgf:name:hi": "String", | ||||||
|  |         "pgf:name:mr": "String", | ||||||
|  |         "pgf:name:ne": "String", | ||||||
|  |         "script": "String", | ||||||
|  |         "script2": "String", | ||||||
|  |         "script3": "String", | ||||||
|  |         "sort_rank": "Number", | ||||||
|  |         "tunnel": "String" | ||||||
|  |       }, | ||||||
|  |       "id": "water", | ||||||
|  |       "maxzoom": 15, | ||||||
|  |       "minzoom": 0 | ||||||
|  |     } | ||||||
|  |   ], | ||||||
|  |   "version": "4.11.0" | ||||||
|  | } | ||||||
							
								
								
									
										4085
									
								
								public/assets/sunny-hosted.json
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4085
									
								
								public/assets/sunny-hosted.json
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							|  | @ -7,9 +7,7 @@ | ||||||
|       "protomaps": { |       "protomaps": { | ||||||
|          "attribution": "<a href=\"https://github.com/protomaps/basemaps\">Protomaps</a> © <a href=\"https://openstreetmap.org\">OpenStreetMap</a>", |          "attribution": "<a href=\"https://github.com/protomaps/basemaps\">Protomaps</a> © <a href=\"https://openstreetmap.org\">OpenStreetMap</a>", | ||||||
|          "type": "vector", |          "type": "vector", | ||||||
|          "tiles": [ |          "url": "pmtiles://https://cache.mapcomplete.org/planet-latest.pmtiles", | ||||||
|             "https://api.protomaps.com/tiles/v4/{z}/{x}/{y}.mvt?key=2af8b969a9e8b692" |  | ||||||
|          ], |  | ||||||
|          "maxzoom": 15 |          "maxzoom": 15 | ||||||
|       } |       } | ||||||
|    }, |    }, | ||||||
|  |  | ||||||
|  | @ -6,9 +6,7 @@ | ||||||
|     "protomaps": { |     "protomaps": { | ||||||
|       "attribution": "<a href=\"https://github.com/protomaps/basemaps\">Protomaps</a> © <a href=\"https://openstreetmap.org\">OpenStreetMap</a>", |       "attribution": "<a href=\"https://github.com/protomaps/basemaps\">Protomaps</a> © <a href=\"https://openstreetmap.org\">OpenStreetMap</a>", | ||||||
|       "type": "vector", |       "type": "vector", | ||||||
|       "tiles": [ |       "url": "pmtiles://https://cache.mapcomplete.org/planet-latest.pmtiles", | ||||||
|         "https://api.protomaps.com/tiles/v4/{z}/{x}/{y}.mvt?key=2af8b969a9e8b692" |  | ||||||
|       ], |  | ||||||
|       "maxzoom": 15 |       "maxzoom": 15 | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|  |  | ||||||
|  | @ -16,8 +16,21 @@ export class GenerateSunnyUnlabeled extends Script { | ||||||
|         writeFileSync("public/assets/sunny-unlabeled.json", JSON.stringify(unlabeled, null, "   ")) |         writeFileSync("public/assets/sunny-unlabeled.json", JSON.stringify(unlabeled, null, "   ")) | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     /** | ||||||
|  |      * Generates a variation hosted by api.protomaps | ||||||
|  |      */ | ||||||
|  |     generateHosted() { | ||||||
|  |         const tilesource = "https://api.protomaps.com/tiles/v4/{z}/{x}/{y}.mvt?key=2af8b969a9e8b692" | ||||||
|  |         const hosted = { "#": "AUTOMATICALLY GENERATED! Do not edit.", ...sunny } | ||||||
|  |         delete hosted.sources.protomaps.url | ||||||
|  |         hosted.sources.protomaps["tiles"] = [tilesource] | ||||||
|  |         writeFileSync("public/assets/sunny-hosted.json", JSON.stringify(hosted, null, "   ")) | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     async main(args: string[]): Promise<void> { |     async main(args: string[]): Promise<void> { | ||||||
|         this.generateUnlabeled() |         this.generateUnlabeled() | ||||||
|  |         this.generateHosted() | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -70,12 +70,13 @@ export class AvailableRasterLayers { | ||||||
|             throw "Detected invalid global layer with invalid id" |             throw "Detected invalid global layer with invalid id" | ||||||
|         } |         } | ||||||
|         return joined.map( |         return joined.map( | ||||||
|             (properties) => |             (properties) => { | ||||||
|                 <RasterLayerPolygon>{ |                 return <RasterLayerPolygon>{ | ||||||
|                     type: "Feature", |                     type: "Feature", | ||||||
|                     properties, |                     properties, | ||||||
|                     geometry: BBox.global.asGeometry(), |                     geometry: BBox.global.asGeometry(), | ||||||
|                 } |                 } | ||||||
|  |             } | ||||||
|         ) |         ) | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,14 +1,28 @@ | ||||||
| { | { | ||||||
|   "layers": [ |   "layers": [ | ||||||
|     { |     { | ||||||
|       "url": "pmtiles://https://api.protomaps.com/tiles/v4.json?key=2af8b969a9e8b692", |       "style": "assets/sunny-hosted.json", | ||||||
|       "style": "assets/sunny.json", |  | ||||||
|       "connect-src": [ |       "connect-src": [ | ||||||
|         "https://protomaps.github.io" |         "https://protomaps.github.io" | ||||||
|       ], |       ], | ||||||
|       "best": true, |       "best": true, | ||||||
|       "id": "protomaps.sunny", |       "id": "protomaps.sunny", | ||||||
|       "name": "Protomaps Sunny", |       "name": "Protomaps Sunny (Hosted by Protomaps)", | ||||||
|  |       "type": "vector", | ||||||
|  |       "category": "osmbasedmap", | ||||||
|  |       "attribution": { | ||||||
|  |         "text": "Protomaps", | ||||||
|  |         "url": "https://protomaps.com/" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "style": "assets/sunny.json", | ||||||
|  |       "connect-src": [ | ||||||
|  |         "https://protomaps.github.io" | ||||||
|  |       ], | ||||||
|  |       "best": true, | ||||||
|  |       "id": "protomaps.sunny-self", | ||||||
|  |       "name": "Protomaps Sunny (Hosted by pietervdvn)", | ||||||
|       "type": "vector", |       "type": "vector", | ||||||
|       "category": "osmbasedmap", |       "category": "osmbasedmap", | ||||||
|       "attribution": { |       "attribution": { | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue