diff --git a/assets/themes/bag_import/bag.json b/assets/themes/bag_import/bag.json new file mode 100644 index 000000000..c4934eb7d --- /dev/null +++ b/assets/themes/bag_import/bag.json @@ -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 {ref:bag}" + }, + "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 {building}", + "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": "
{addr:housenumber}
", + "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 {_bag_obj:ref:bag}" + } + }, + { + "id": "Build year", + "render": { + "en": "This building was built in {_bag_obj:start_date}" + }, + "mappings": [ + { + "if": "_bag_obj:in_construction=true", + "then": { + "en": "The building was started in {_bag_obj:start_date}" + } + } + ] + }, + { + "id": "Building type", + "render": { + "en": "The building type is a {_bag_obj:building}" + }, + "mappings": [ + { + "if": "_bag_obj:in_construction=true", + "then": { + "en": "The building type will be a {_bag_obj:construction}" + } + } + ] + }, + { + "id": "Overlapping building", + "render": "
The overlapping osm:buildings is a {_osm_obj:building} and covers {_overlap_percentage}% of the BAG building.
The BAG-building covers {_reverse_overlap_percentage}% of the OSM building

BAG geometry:

{minimap(21, id):height:10rem;border-radius:1rem;overflow:hidden}

OSM geometry:

{minimap(21,_osm_obj:id):height:10rem;border-radius:1rem;overflow:hidden}
", + "condition": "_overlaps_with!=" + }, + { + "id": "Building status", + "render": "The current building status is {status}" + }, + { + "id": "Buidling function", + "render": "The current function of the building is {gebruiksdoel}" + } + ] + }, + { + "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": "
{_bag_obj:addr:housenumber}
", + "mappings": [ + { + "if": "_imported_osm_object_found=true", + "then": "
{_bag_obj:addr:housenumber}
" + } + ] + }, + "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 +} diff --git a/assets/themes/bag_import/license_info.json b/assets/themes/bag_import/license_info.json new file mode 100644 index 000000000..0feae26b3 --- /dev/null +++ b/assets/themes/bag_import/license_info.json @@ -0,0 +1,10 @@ +[ + { + "path": "logo.svg", + "license": "CC0", + "authors": [ + "Wouter van der Wal" + ], + "sources": [] + } +] \ No newline at end of file diff --git a/assets/themes/bag_import/logo.svg b/assets/themes/bag_import/logo.svg new file mode 100644 index 000000000..5b84e63d9 --- /dev/null +++ b/assets/themes/bag_import/logo.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/themes/mapcomplete-changes/mapcomplete-changes.json b/assets/themes/mapcomplete-changes/mapcomplete-changes.json index 346c8baa8..52d6257bf 100644 --- a/assets/themes/mapcomplete-changes/mapcomplete-changes.json +++ b/assets/themes/mapcomplete-changes/mapcomplete-changes.json @@ -126,6 +126,10 @@ "if": "theme=artwork", "then": "./assets/themes/artwork/artwork.svg" }, + { + "if": "theme=bag", + "then": "./assets/themes/bag_import/logo.svg" + }, { "if": "theme=benches", "then": "./assets/themes/benches/bench_poi.svg" diff --git a/langs/themes/nl.json b/langs/themes/nl.json index 8a872280f..6b438f5a3 100644 --- a/langs/themes/nl.json +++ b/langs/themes/nl.json @@ -11,6 +11,11 @@ "description": "Een vrije kaart met standbeelden, bustes, graffiti en andere kunstwerken van over de hele wereld", "title": "Open kunstwerken-kaart" }, + "bag": { + "description": "Dit thema helpt het importeren van BAG data", + "shortDescription": "BAG import helper tool", + "title": "BAG import helper" + }, "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.", "shortDescription": "Een kaart van zitbanken",