diff --git a/assets/layers/crab_address/crab_address.json b/assets/layers/crab_address/crab_address.json
deleted file mode 100644
index a71edc2cc..000000000
--- a/assets/layers/crab_address/crab_address.json
+++ /dev/null
@@ -1,38 +0,0 @@
-{
- "id": "crab_address",
- "name": "CRAB-addressen",
- "description": "Address data for Flanders by the governement, suited for import into OpenStreetMap. Datadump from 2021-10-26. This layer contains only visualisation logic. Import buttons should be added via an override. Note that HNRLABEL contains the original value, whereas _HNRLABEL contains a slightly cleaned version",
- "source": {
- "osmTags": "HUISNR~*",
- "geoJson": "https://raw.githubusercontent.com/pietervdvn/MapComplete-data/main/CRAB_2021_10_26/tile_{z}_{x}_{y}.geojson",
- "geoJsonZoomLevel": 18
- },
- "calculatedTags": [
- "_HNRLABEL=(() => {const lbl = feat.properties.HNRLABEL?.split('-')?.map(l => Number(l))?.filter(i => !isNaN (i)) ;if(lbl?.length != 2) {return feat.properties.HNRLABEL}; const addresses = []; for(let i = lbl[0]; i <= lbl[1]; i += 1){addresses.push(''+i);}; return addresses.join(';') })()"
- ],
- "title": "CRAB-adres",
- "pointRendering": [
- {
- "location": [
- "point",
- "centroid"
- ],
- "iconSize": "50,50",
- "label": "
{_HNRLABEL}
",
- "anchor": "center",
- "marker": [
- {
- "icon": "./assets/layers/crab_address/housenumber_blank.svg"
- }
- ]
- }
- ],
- "lineRendering": [],
- "tagRenderings": [
- {
- "id": "render_crab",
- "render": "Volgens het CRAB ligt hier {STRAATNM} {HUISNR} (label: {HNRLABEL})"
- }
- ],
- "allowMove": false
-}
diff --git a/assets/layers/crab_address/housenumber_blank.svg b/assets/layers/crab_address/housenumber_blank.svg
deleted file mode 100644
index 206227d52..000000000
--- a/assets/layers/crab_address/housenumber_blank.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
\ No newline at end of file
diff --git a/assets/layers/crab_address/housenumber_blank.svg.license b/assets/layers/crab_address/housenumber_blank.svg.license
deleted file mode 100644
index ed0288300..000000000
--- a/assets/layers/crab_address/housenumber_blank.svg.license
+++ /dev/null
@@ -1,2 +0,0 @@
-SPDX-FileCopyrightText: Pieter Vander Vennet
-SPDX-License-Identifier: CC0-1.0
\ No newline at end of file
diff --git a/assets/layers/crab_address/license_info.json b/assets/layers/crab_address/license_info.json
deleted file mode 100644
index 48a4000d4..000000000
--- a/assets/layers/crab_address/license_info.json
+++ /dev/null
@@ -1,10 +0,0 @@
-[
- {
- "path": "housenumber_blank.svg",
- "license": "CC0-1.0",
- "authors": [
- "Pieter Vander Vennet"
- ],
- "sources": []
- }
-]
\ No newline at end of file
diff --git a/assets/themes/grb/grb.json b/assets/themes/grb/grb.json
index cdd7260c2..f6726b22a 100644
--- a/assets/themes/grb/grb.json
+++ b/assets/themes/grb/grb.json
@@ -622,128 +622,6 @@
"isCounted": false
},
"address",
- {
- "builtin": "crab_address",
- "override": {
- "calculatedTags+": [
- "_embedded_in=overlapWith(feat)('osm_buildings_no_points').filter(b => /* Do not match newly created objects */ b.feat.properties.id.indexOf('-') < 0)[0]?.feat?.properties ?? {}",
- "_embedding_nr=get(feat)('_embedded_in')['addr:housenumber']+(get(feat)('_embedded_in')['addr:unit'] ?? '')",
- "_embedding_street=get(feat)('_embedded_in')['addr:street']",
- "_embedding_id=get(feat)('_embedded_in').id",
- "_closeby_addresses=closestn(feat)('address',10,undefined,50).map(f => f.feat).filter(addr => addr.properties['addr:street'] == feat.properties['STRAATNM'] && feat.properties['HNRLABEL'] == addr.properties['addr:housenumber'] + (addr.properties['addr:unit']??'') ).length",
- "_has_identical_closeby_address=get(feat)('_closeby_addresses') >= 1 ? 'yes' : 'no'",
- "_embedded_in_grb=overlapWith(feat)('grb')[0]?.feat?.properties ?? {}",
- "_embedding_nr_grb=get(feat)('_embedded_in_grb')['addr:housenumber']",
- "_embedding_street_grb=get(feat)('_embedded_in_grb')['addr:street']"
- ],
- "filter": [
- {
- "id": "show_matched_addresses",
- "options": [
- {
- "question": "Show all CRAB-addresses (including already matched ones)"
- },
- {
- "question": "Only show unmatched addresses",
- "osmTags": {
- "and": [
- "_has_identical_closeby_address!=yes",
- {
- "#": "Matches the embedding OSM object",
- "or": [
- "_embedding_nr!:={HUISNR}",
- "_embedding_street!:={STRAATNM}"
- ]
- },
- {
- "#": "Matches the embedding GRB object",
- "or": [
- "_embedding_nr_grb!:={HUISNR}",
- "_embedding_street_grb!:={STRAATNM}"
- ]
- }
- ]
- },
- "default": true
- }
- ]
- }
- ],
- "tagRenderings+": [
- {
- "id": "render_embedded",
- "render": "Dit CRAB-adres ligt in OSM-gebouw {_embedding_id}",
- "mappings": [
- {
- "if": "_embedding_id=",
- "then": {
- "nl": "Geen omliggend OSM-gebouw gevonden"
- }
- }
- ]
- },
- {
- "id": "embedded_address",
- "render": "Het omliggende OSM-gebouw heeft geen volledig address",
- "mappings": [
- {
- "if": {
- "and": [
- "_embedding_street~*",
- "_embedding_nr~*"
- ]
- },
- "then": "Het omliggende object met addres heeft {_embedding_street} {_embedding_nr}"
- }
- ],
- "condition": "_embedding_id~*"
- },
- {
- "id": "apply-button",
- "render": "{tag_apply(addr:street=$STRAATNM; addr:housenumber=$_HNRLABEL,Apply this address on the OSM-building,,_embedding_id)}",
- "condition": {
- "and": [
- "_embedding_id!=",
- {
- "or": [
- "_embedding_street!:={STRAATNM}",
- "_embedding_nr!:={_HNRLABEL}"
- ]
- }
- ]
- }
- },
- {
- "id": "import-button",
- "render": {
- "special": {
- "type": "import_button",
- "targetLayer": "address",
- "tags": "addr:street=$STRAATNM; addr:housenumber=$_HNRLABEL",
- "text": {
- "nl": "Voeg dit adres als een nieuw adrespunt toe"
- },
- "snap_onto_layers": "osm_buildings_no_points"
- }
- },
- "mappings": [
- {
- "if": "_embedding_id=",
- "then": {
- "nl": "Geen omliggend OSM-gebouw gevonden. Een omliggend gebouw is nodig om dit punt als adres punt toe te voegen. Importeer eerst de gebouwen. Vernieuw dan de pagina om losse adressen toe te voegen
"
- }
- }
- ],
- "condition": {
- "or": [
- "_embedding_street!:={STRAATNM}",
- "_embedding_nr!:={_HNRLABEL}"
- ]
- }
- }
- ]
- }
- },
{
"builtin": "current_view",
"override": {
diff --git a/src/Logic/ExtraFunctions.ts b/src/Logic/ExtraFunctions.ts
index 0da3cd5b6..32bd2d7f7 100644
--- a/src/Logic/ExtraFunctions.ts
+++ b/src/Logic/ExtraFunctions.ts
@@ -1,6 +1,5 @@
import { GeoOperations } from "./GeoOperations"
import Combine from "../UI/Base/Combine"
-import BaseUIElement from "../UI/BaseUIElement"
import List from "../UI/Base/List"
import Title from "../UI/Base/Title"
import { BBox } from "./BBox"
@@ -17,6 +16,10 @@ export interface ExtraFuncParams {
layerId: string,
bbox: BBox
) => Feature>[][]
+ getProbablyOverlapsWith: (
+ layerId: string,
+ bbox: BBox
+ ) => Feature>[][]
getFeatureById: (id: string) => Feature>
}
@@ -102,13 +105,13 @@ class OverlapFunc implements ExtraFunction {
"...layerIds - one or more layer ids of the layer from which every feature is checked for overlap)",
]
- _f(params, feat) {
+ _f(params: ExtraFuncParams, feat: Feature) {
return (...layerIds: string[]) => {
const result: { feat: any; overlap: number }[] = []
const seenIds = new Set()
const bbox = BBox.get(feat)
for (const layerId of layerIds) {
- const otherFeaturess = params.getFeaturesWithin(layerId, bbox)
+ const otherFeaturess = params.getProbablyOverlapsWith(layerId, bbox)
if (otherFeaturess === undefined) {
continue
}
diff --git a/src/Logic/FeatureSource/Actors/GeoIndexedStore.ts b/src/Logic/FeatureSource/Actors/GeoIndexedStore.ts
index ec352cab4..045e17d60 100644
--- a/src/Logic/FeatureSource/Actors/GeoIndexedStore.ts
+++ b/src/Logic/FeatureSource/Actors/GeoIndexedStore.ts
@@ -27,6 +27,19 @@ export default class GeoIndexedStore implements FeatureSource {
const bboxFeature = bbox.asGeojsonCached()
return this.features.data.filter((f) => GeoOperations.completelyWithin(f, bboxFeature))
}
+
+ /**
+ * Gets the current features within the given bbox.
+ *
+ * @param bbox
+ * @constructor
+ */
+ public GetFeaturesProbablyOverlappingWith(bbox: BBox): Feature[] {
+ return this.features.data.filter((f) => {
+ const fBbox = BBox.get(f)
+ return fBbox.overlapsWith(bbox)
+ })
+ }
}
export class GeoIndexedStoreForLayer extends GeoIndexedStore implements FeatureSourceForLayer {
diff --git a/src/Logic/MetaTagging.ts b/src/Logic/MetaTagging.ts
index b93acc30b..c8dfdcde0 100644
--- a/src/Logic/MetaTagging.ts
+++ b/src/Logic/MetaTagging.ts
@@ -290,8 +290,22 @@ export default class MetaTagging {
indexedFeatures: IndexedFeatureSource
perLayer: ReadonlyMap
}) {
- return {
+ return {
getFeatureById: (id) => state.indexedFeatures.featuresById.data.get(id),
+ getProbablyOverlapsWith: (layerId, bbox) => {
+ if (layerId === "*" || layerId === null || layerId === undefined) {
+ const feats: Feature[][] = []
+ state.perLayer.forEach((layer) => {
+ feats.push(layer.GetFeaturesWithin(bbox))
+ })
+ return feats
+ }
+ if (!state.perLayer.get(layerId)) {
+ // This layer is not loaded
+ return []
+ }
+ return [state.perLayer.get(layerId).GetFeaturesProbablyOverlappingWith(bbox)]
+ },
getFeaturesWithin: (layerId, bbox) => {
if (layerId === "*" || layerId === null || layerId === undefined) {
const feats: Feature[][] = []
diff --git a/src/UI/Map/ShowDataLayer.ts b/src/UI/Map/ShowDataLayer.ts
index 4cb36dd79..1eaa8a20e 100644
--- a/src/UI/Map/ShowDataLayer.ts
+++ b/src/UI/Map/ShowDataLayer.ts
@@ -278,7 +278,6 @@ class LineRenderingLayer {
}
})
features.features.addCallbackAndRunD(async (feats) => {
- console.log("New features!", this._layername, feats)
updateNeededSrc.set(true)
this.update(feats)
})