forked from MapComplete/MapComplete
		
	Merge pull request #1098 from wjtje/feature/bag-import
BAG data import helper theme
This commit is contained in:
		
						commit
						c968d7d454
					
				
					 5 changed files with 341 additions and 0 deletions
				
			
		
							
								
								
									
										317
									
								
								assets/themes/bag_import/bag.json
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										317
									
								
								assets/themes/bag_import/bag.json
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,317 @@ | ||||||
|  | { | ||||||
|  |   "id": "bag", | ||||||
|  |   "title": { | ||||||
|  |     "nl": "BAG import helper", | ||||||
|  |     "en": "BAG import helper" | ||||||
|  |   }, | ||||||
|  |   "shortDescription": { | ||||||
|  |     "nl": "BAG import helper tool", | ||||||
|  |     "en": "BAG import helper tool" | ||||||
|  |   }, | ||||||
|  |   "description": { | ||||||
|  |     "nl": "Dit thema helpt het importeren van BAG data", | ||||||
|  |     "en": "This theme helps with importing data from BAG" | ||||||
|  |   }, | ||||||
|  |   "credits": "Wouter van der Wal", | ||||||
|  |   "icon": "./assets/themes/bag_import/logo.svg", | ||||||
|  |   "startLat": 53.1726, | ||||||
|  |   "startLon": 7.04545, | ||||||
|  |   "startZoom": 9, | ||||||
|  |   "layers": [ | ||||||
|  |     { | ||||||
|  |       "id": "osm:buildings", | ||||||
|  |       "name": "OSM Buildings", | ||||||
|  |       "title": "OSM Building", | ||||||
|  |       "description": "Layer showing buildings that are in OpenStreetMap", | ||||||
|  |       "source": { | ||||||
|  |         "osmTags": "building~*", | ||||||
|  |         "maxCacheAge": 0 | ||||||
|  |       }, | ||||||
|  |       "minzoom": 19, | ||||||
|  |       "calculatedTags": [ | ||||||
|  |         "_surface:strict:=feat.get('_surface')" | ||||||
|  |       ], | ||||||
|  |       "mapRendering": [ | ||||||
|  |         { | ||||||
|  |           "width": { | ||||||
|  |             "render": "2", | ||||||
|  |             "mappings": [ | ||||||
|  |               { | ||||||
|  |                 "if": "fixme~*", | ||||||
|  |                 "then": "5" | ||||||
|  |               } | ||||||
|  |             ] | ||||||
|  |           }, | ||||||
|  |           "color": { | ||||||
|  |             "render": "#00c", | ||||||
|  |             "mappings": [ | ||||||
|  |               { | ||||||
|  |                 "if": "fixme~*", | ||||||
|  |                 "then": "#ff00ff" | ||||||
|  |               }, | ||||||
|  |               { | ||||||
|  |                 "if": "building=house", | ||||||
|  |                 "then": "#a00" | ||||||
|  |               }, | ||||||
|  |               { | ||||||
|  |                 "if": "building=shed", | ||||||
|  |                 "then": "#563e02" | ||||||
|  |               }, | ||||||
|  |               { | ||||||
|  |                 "if": { | ||||||
|  |                   "or": [ | ||||||
|  |                     "building=garage", | ||||||
|  |                     "building=garages" | ||||||
|  |                   ] | ||||||
|  |                 }, | ||||||
|  |                 "then": "#f9bfbb" | ||||||
|  |               }, | ||||||
|  |               { | ||||||
|  |                 "if": "building=yes", | ||||||
|  |                 "then": "#0774f2" | ||||||
|  |               } | ||||||
|  |             ] | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       "tagRenderings": [ | ||||||
|  |         { | ||||||
|  |           "id": "Reference", | ||||||
|  |           "render": { | ||||||
|  |             "en": "The reference in BAG is <b>{ref:bag}</b>" | ||||||
|  |           }, | ||||||
|  |           "mappings": [ | ||||||
|  |             { | ||||||
|  |               "if": "ref:bag=", | ||||||
|  |               "then": { | ||||||
|  |                 "en": "This building has no reference in the BAG" | ||||||
|  |               } | ||||||
|  |             } | ||||||
|  |           ] | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "id": "Building type", | ||||||
|  |           "freeform": { | ||||||
|  |             "key": "building", | ||||||
|  |             "type": "string", | ||||||
|  |             "addExtraTags": [ | ||||||
|  |               "construction=" | ||||||
|  |             ] | ||||||
|  |           }, | ||||||
|  |           "render": "This building is a <b>{building}</b>", | ||||||
|  |           "question": "What kind of building is this?" | ||||||
|  |         } | ||||||
|  |       ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "id": "osm:adresses", | ||||||
|  |       "name": "OSM Adresses", | ||||||
|  |       "title": "OSM Adress", | ||||||
|  |       "description": "Layer showing adresses that are in OpenStreetMap", | ||||||
|  |       "source": { | ||||||
|  |         "osmTags": { | ||||||
|  |           "and": [ | ||||||
|  |             "source=BAG", | ||||||
|  |             "addr:city~*", | ||||||
|  |             "addr:housenumber~*", | ||||||
|  |             "addr:postcode~*", | ||||||
|  |             "addr:street~*" | ||||||
|  |           ] | ||||||
|  |         }, | ||||||
|  |         "maxCacheAge": 0 | ||||||
|  |       }, | ||||||
|  |       "minzoom": 19, | ||||||
|  |       "mapRendering": [ | ||||||
|  |         { | ||||||
|  |           "label": { | ||||||
|  |             "render": "<div style='color: black' class='rounded-full p-1 font-bold relative'>{addr:housenumber}</div>", | ||||||
|  |             "condition": "addr:housenumber~*" | ||||||
|  |           }, | ||||||
|  |           "location": [ | ||||||
|  |             "point", | ||||||
|  |             "centroid" | ||||||
|  |           ] | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "width": { | ||||||
|  |             "render": 1 | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "id": "bag:pand", | ||||||
|  |       "name": "BAG Buildings", | ||||||
|  |       "title": "BAG Building", | ||||||
|  |       "description": { | ||||||
|  |         "en": "Buildings from BAG register" | ||||||
|  |       }, | ||||||
|  |       "source": { | ||||||
|  |         "geoJson": "https://service.pdok.nl/lv/bag/wfs/v2_0?request=GetFeature&service=WFS&version=2.0.0&outputFormat=application%2Fjson%3B%20subtype%3Dgeojson&typeName=bag%3Apand&bbox={x_min}%2C{y_min}%2C{x_max}%2C{y_max}%2CCRS84&srsName=EPSG%3A4326", | ||||||
|  |         "geoJsonZoomLevel": 18, | ||||||
|  |         "osmTags": "identificatie~*", | ||||||
|  |         "maxCacheAge": 0 | ||||||
|  |       }, | ||||||
|  |       "minzoom": 19, | ||||||
|  |       "calculatedTags": [ | ||||||
|  |         "_overlaps_with_buildings=feat.overlapWith('osm:buildings').filter(f => f.feat.properties.id.indexOf('-') < 0)", | ||||||
|  |         "_overlaps_with=feat.get('_overlaps_with_buildings').find(f => f.overlap > 1 /* square meter */ )", | ||||||
|  |         "_overlaps_with_properties=feat.get('_overlaps_with')?.feat?.properties", | ||||||
|  |         "_overlap_percentage=Math.round(100 * (feat.get('_overlaps_with')?.overlap / feat.get('_overlaps_with_properties')['_surface:strict']))", | ||||||
|  |         "_reverse_overlap_percentage=Math.round(100 * (feat.get('_overlaps_with')?.overlap / feat.get('_surface')))", | ||||||
|  |         "_bag_obj:in_construction=feat.properties.status.startsWith('Bouwvergunning verleend') || feat.properties.status.startsWith('Bouw gestart')", | ||||||
|  |         "_bag_obj:construction=(feat.properties.gebruiksdoel == 'woonfunctie') ? ((Number(feat.properties.aantal_verblijfsobjecten) == 1) ? 'house' : 'apartments') : 'yes'", | ||||||
|  |         "_bag_obj:building=(feat.properties.status.startsWith('Bouwvergunning verleend') || feat.properties.status.startsWith('Bouw gestart')) ? 'construction' : feat.properties['_bag_obj:construction']", | ||||||
|  |         "_bag_obj:ref:bag=Number(feat.properties.identificatie)", | ||||||
|  |         "_bag_obj:source:date=new Date().toISOString().split('T')[0]", | ||||||
|  |         "_bag_obj:start_date=feat.properties.bouwjaar", | ||||||
|  |         "_osm_obj:id=feat.get('_overlaps_with_properties')?.id", | ||||||
|  |         "_osm_obj:building=feat.get('_overlaps_with_properties')?.building", | ||||||
|  |         "_imported_osm_object_found:=Number(feat.properties.identificatie)==Number(feat.get('_overlaps_with_properties')['ref:bag'])" | ||||||
|  |       ], | ||||||
|  |       "mapRendering": [ | ||||||
|  |         { | ||||||
|  |           "width": { | ||||||
|  |             "render": 5, | ||||||
|  |             "mappings": [ | ||||||
|  |               { | ||||||
|  |                 "if": "_imported_osm_object_found=true", | ||||||
|  |                 "then": "1" | ||||||
|  |               } | ||||||
|  |             ] | ||||||
|  |           }, | ||||||
|  |           "color": { | ||||||
|  |             "render": "#00a", | ||||||
|  |             "mappings": [ | ||||||
|  |               { | ||||||
|  |                 "if": "_imported_osm_object_found=true", | ||||||
|  |                 "then": "#0f0" | ||||||
|  |               } | ||||||
|  |             ] | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       "tagRenderings": [ | ||||||
|  |         { | ||||||
|  |           "id": "Import button", | ||||||
|  |           "render": "{import_way_button(osm:buildings, building=$_bag_obj:building; ref:bag=$_bag_obj:ref:bag; source=BAG; source:date=$_bag_obj:source:date; start_date=$_bag_obj:start_date, Upload this building to OpenStreetMap)}", | ||||||
|  |           "mappings": [ | ||||||
|  |             { | ||||||
|  |               "if": "_overlaps_with!=", | ||||||
|  |               "then": "{conflate_button(osm:buildings, building=$_bag_obj:building; ref:bag=$_bag_obj:ref:bag; source=BAG; source:date=$_bag_obj:source:date; start_date=$_bag_obj:start_date, Replace the geometry in OpenStreetMap, , _osm_obj:id)}" | ||||||
|  |             }, | ||||||
|  |             { | ||||||
|  |               "if": "_bag_obj:in_construction=true", | ||||||
|  |               "then": "{import_way_button(osm:buildings, building=$_bag_obj:building; construction=$_bag_obj:construction; ref:bag=$_bag_obj:ref:bag; source=BAG; source:date=$_bag_obj:source:date; start_date=$_bag_obj:start_date, Upload this building to OpenStreetMap)}" | ||||||
|  |             } | ||||||
|  |           ] | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "id": "Reference", | ||||||
|  |           "render": { | ||||||
|  |             "en": "The reference in BAG is <b>{_bag_obj:ref:bag}</b>" | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "id": "Build year", | ||||||
|  |           "render": { | ||||||
|  |             "en": "This building was built in <b>{_bag_obj:start_date}</b>" | ||||||
|  |           }, | ||||||
|  |           "mappings": [ | ||||||
|  |             { | ||||||
|  |               "if": "_bag_obj:in_construction=true", | ||||||
|  |               "then": { | ||||||
|  |                 "en": "The building was started in <b>{_bag_obj:start_date}</b>" | ||||||
|  |               } | ||||||
|  |             } | ||||||
|  |           ] | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "id": "Building type", | ||||||
|  |           "render": { | ||||||
|  |             "en": "The building type is a <b>{_bag_obj:building}</b>" | ||||||
|  |           }, | ||||||
|  |           "mappings": [ | ||||||
|  |             { | ||||||
|  |               "if": "_bag_obj:in_construction=true", | ||||||
|  |               "then": { | ||||||
|  |                 "en": "The building type will be a <b>{_bag_obj:construction}</b>" | ||||||
|  |               } | ||||||
|  |             } | ||||||
|  |           ] | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "id": "Overlapping building", | ||||||
|  |           "render": "<div>The overlapping <a href=https://osm.org/{_osm_obj:id} target=_blank>osm:buildings</a> is a <b>{_osm_obj:building}</b> and covers <b>{_overlap_percentage}%</b> of the BAG building.<br>The BAG-building covers <b>{_reverse_overlap_percentage}%</b> of the OSM building<div><h3>BAG geometry:</h3>{minimap(21, id):height:10rem;border-radius:1rem;overflow:hidden}<h3>OSM geometry:</h3>{minimap(21,_osm_obj:id):height:10rem;border-radius:1rem;overflow:hidden}</div></div>", | ||||||
|  |           "condition": "_overlaps_with!=" | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "id": "Building status", | ||||||
|  |           "render": "The current building status is <b>{status}</b>" | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "id": "Buidling function", | ||||||
|  |           "render": "The current function of the building is <b>{gebruiksdoel}</b>" | ||||||
|  |         } | ||||||
|  |       ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "id": "bag:verblijfsobject", | ||||||
|  |       "name": "BAG Addresses", | ||||||
|  |       "title": "BAG Address", | ||||||
|  |       "description": "Address information from the BAG register", | ||||||
|  |       "source": { | ||||||
|  |         "geoJson": "https://service.pdok.nl/lv/bag/wfs/v2_0?request=GetFeature&service=WFS&version=2.0.0&outputFormat=application%2Fjson%3B%20subtype%3Dgeojson&typeName=bag%3Averblijfsobject&bbox={x_min}%2C{y_min}%2C{x_max}%2C{y_max}%2CCRS84&srsName=EPSG%3A4326", | ||||||
|  |         "geoJsonZoomLevel": 19, | ||||||
|  |         "osmTags": "identificatie~*", | ||||||
|  |         "maxCacheAge": 0 | ||||||
|  |       }, | ||||||
|  |       "minzoom": 19, | ||||||
|  |       "calculatedTags": [ | ||||||
|  |         "_closed_osm_addr:=feat.closest('osm:adresses').properties", | ||||||
|  |         "_bag_obj:addr:housenumber=`${feat.properties.huisnummer}${feat.properties.huisletter}${(feat.properties.toevoeging != '') ? '-' : ''}${feat.properties.toevoeging}`", | ||||||
|  |         "_bag_obj:ref:bag=Number(feat.properties.identificatie)", | ||||||
|  |         "_bag_obj:source:date=new Date().toISOString().split('T')[0]", | ||||||
|  |         "_osm_obj:addr:city:=feat.get('_closed_osm_addr')['addr:city']", | ||||||
|  |         "_osm_obj:addr:housenumber:=feat.get('_closed_osm_addr')['addr:housenumber']", | ||||||
|  |         "_osm_obj:addr:postcode:=feat.get('_closed_osm_addr')['addr:postcode']", | ||||||
|  |         "_osm_obj:addr:street:=feat.get('_closed_osm_addr')['addr:street']", | ||||||
|  |         "_imported_osm_object_found:=(feat.properties.woonplaats==feat.get('_closed_osm_addr')['addr:city'])&&(feat.get('_bag_obj:addr:housenumber')==feat.get('_closed_osm_addr')['addr:housenumber'])&&(feat.properties.postcode==feat.get('_closed_osm_addr')['addr:postcode'])&&(feat.properties.openbare_ruimte==feat.get('_closed_osm_addr')['addr:street'])" | ||||||
|  |       ], | ||||||
|  |       "mapRendering": [ | ||||||
|  |         { | ||||||
|  |           "label": { | ||||||
|  |             "render": "<div style='color: black' class='rounded-full p-1 font-bold relative'>{_bag_obj:addr:housenumber}</div>", | ||||||
|  |             "mappings": [ | ||||||
|  |               { | ||||||
|  |                 "if": "_imported_osm_object_found=true", | ||||||
|  |                 "then": "<div style='color: #107c10' class='rounded-full p-1 font-bold relative'>{_bag_obj:addr:housenumber}</div>" | ||||||
|  |               } | ||||||
|  |             ] | ||||||
|  |           }, | ||||||
|  |           "location": [ | ||||||
|  |             "point", | ||||||
|  |             "centroid" | ||||||
|  |           ] | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "width": { | ||||||
|  |             "render": 1 | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       "tagRenderings": [ | ||||||
|  |         { | ||||||
|  |           "id": "Import button", | ||||||
|  |           "render": "{import_button(osm:adresses, addr:city=$woonplaats; addr:housenumber=$_bag_obj:addr:housenumber; addr:postcode=$postcode; addr:street=$openbare_ruimte; ref:bag=$_bag_obj:ref:bag; source=BAG; source:date=$_bag_obj:source:date, Upload this adress to OpenStreetMap)}", | ||||||
|  |           "condition": "_imported_osm_object_found=false" | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "id": "Address", | ||||||
|  |           "render": "{openbare_ruimte} {_bag_obj:addr:housenumber}, {woonplaats} {postcode}" | ||||||
|  |         } | ||||||
|  |       ] | ||||||
|  |     } | ||||||
|  |   ], | ||||||
|  |   "hideFromOverview": true | ||||||
|  | } | ||||||
							
								
								
									
										10
									
								
								assets/themes/bag_import/license_info.json
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								assets/themes/bag_import/license_info.json
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,10 @@ | ||||||
|  | [ | ||||||
|  |   { | ||||||
|  |     "path": "logo.svg", | ||||||
|  |     "license": "CC0", | ||||||
|  |     "authors": [ | ||||||
|  |       "Wouter van der Wal" | ||||||
|  |     ], | ||||||
|  |     "sources": [] | ||||||
|  |   } | ||||||
|  | ] | ||||||
							
								
								
									
										5
									
								
								assets/themes/bag_import/logo.svg
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								assets/themes/bag_import/logo.svg
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| After Width: | Height: | Size: 7.6 KiB | 
|  | @ -126,6 +126,10 @@ | ||||||
|                 "if": "theme=artwork", |                 "if": "theme=artwork", | ||||||
|                 "then": "./assets/themes/artwork/artwork.svg" |                 "then": "./assets/themes/artwork/artwork.svg" | ||||||
|               }, |               }, | ||||||
|  |               { | ||||||
|  |                 "if": "theme=bag", | ||||||
|  |                 "then": "./assets/themes/bag_import/logo.svg" | ||||||
|  |               }, | ||||||
|               { |               { | ||||||
|                 "if": "theme=benches", |                 "if": "theme=benches", | ||||||
|                 "then": "./assets/themes/benches/bench_poi.svg" |                 "then": "./assets/themes/benches/bench_poi.svg" | ||||||
|  |  | ||||||
|  | @ -11,6 +11,11 @@ | ||||||
|         "description": "Een vrije kaart met standbeelden, bustes, graffiti en andere kunstwerken van over de hele wereld", |         "description": "Een vrije kaart met standbeelden, bustes, graffiti en andere kunstwerken van over de hele wereld", | ||||||
|         "title": "Open kunstwerken-kaart" |         "title": "Open kunstwerken-kaart" | ||||||
|     }, |     }, | ||||||
|  |     "bag": { | ||||||
|  |         "description": "Dit thema helpt het importeren van BAG data", | ||||||
|  |         "shortDescription": "BAG import helper tool", | ||||||
|  |         "title": "BAG import helper" | ||||||
|  |     }, | ||||||
|     "benches": { |     "benches": { | ||||||
|         "description": "Deze kaart toont alle zitbanken die zijn opgenomen in OpenStreetMap: individuele banken en banken bij bushaltes. Met een OpenStreetMap-account kan je informatie verbeteren en nieuwe zitbanken toevoegen.", |         "description": "Deze kaart toont alle zitbanken die zijn opgenomen in OpenStreetMap: individuele banken en banken bij bushaltes. Met een OpenStreetMap-account kan je informatie verbeteren en nieuwe zitbanken toevoegen.", | ||||||
|         "shortDescription": "Een kaart van zitbanken", |         "shortDescription": "Een kaart van zitbanken", | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue