From cccf5c8c1b69e60d48c52c02985bae39220c25a5 Mon Sep 17 00:00:00 2001 From: Florian Date: Wed, 7 Oct 2026 23:03:14 +0200 Subject: [PATCH 1/4] docs(discovery): investigate Berlin business name/address retrieval --- .../administration/services-administration.md | 10 + .../business-name-address-retrieval.md | 285 ++ docs/docs/developer/discovery-evaluation.md | 6 + .../business-name-address/README.md | 80 + .../business-name-address/conditions-v1.json | 98 + .../business-name-address/evidence.test.ts | 178 + .../business-name-address/queries-v1.json | 83 + .../business-name-address/replay-v1.json | 338 ++ .../business-name-address/replay.ts | 59 + .../business-name-address/responses-v1.json | 3067 +++++++++++++++++ .../business-name-address/sources-v1.json | 464 +++ .../business-name-address/tsconfig.json | 4 + .../business-name-address/ui-v1.json | 849 +++++ scripts/discovery-eval/tsconfig.json | 2 +- 14 files changed, 5522 insertions(+), 1 deletion(-) create mode 100644 docs/docs/developer/business-name-address-retrieval.md create mode 100644 scripts/discovery-eval/business-name-address/README.md create mode 100644 scripts/discovery-eval/business-name-address/conditions-v1.json create mode 100644 scripts/discovery-eval/business-name-address/evidence.test.ts create mode 100644 scripts/discovery-eval/business-name-address/queries-v1.json create mode 100644 scripts/discovery-eval/business-name-address/replay-v1.json create mode 100644 scripts/discovery-eval/business-name-address/replay.ts create mode 100644 scripts/discovery-eval/business-name-address/responses-v1.json create mode 100644 scripts/discovery-eval/business-name-address/sources-v1.json create mode 100644 scripts/discovery-eval/business-name-address/tsconfig.json create mode 100644 scripts/discovery-eval/business-name-address/ui-v1.json diff --git a/docs/docs/administration/services-administration.md b/docs/docs/administration/services-administration.md index 5aa8713d5..a38c16d97 100644 --- a/docs/docs/administration/services-administration.md +++ b/docs/docs/administration/services-administration.md @@ -217,6 +217,16 @@ the downloaded region and confirm the operation, or run `openmapx data search-index build [region]`. A new PBF never triggers a country- or planet-scale rebuild during API boot. +A ready index covers the documented aliases/codes/acronyms; it does not establish +ordinary business-name/address coverage. For an investigation, record the +authenticated `/api/data-manager/search-index/status` response's +`sourceFingerprint` and `epoch` as well as the Overture status response's release +and region. The search card's summary does not display the source fingerprint. +Keep unavailable generations unknown and do not rebuild or flush shared caches +to diagnose a query. See the +[business retrieval investigation](../developer/business-name-address-retrieval.md) +for the distinction between source presence and searchable candidates. + The job requires PostGIS and Osmium Tool. It streams records in bounded batches into `osm_search__staging`, builds exact/prefix and geographic indexes, validates counts and referential integrity, then swaps schemas in one database diff --git a/docs/docs/developer/business-name-address-retrieval.md b/docs/docs/developer/business-name-address-retrieval.md new file mode 100644 index 000000000..862522718 --- /dev/null +++ b/docs/docs/developer/business-name-address-retrieval.md @@ -0,0 +1,285 @@ +--- +title: Berlin business name/address retrieval investigation +description: Evidence and a bounded lexical-search recommendation for issue 430, without production search or ingestion changes. +--- + +# Berlin business name/address retrieval: go/no-go + +**Decision, 2026-10-07:** GO for a small, local lexical candidate follow-up using +existing Overture Places, after inspecting the intended deployed generation. +NO-GO for production adoption on this evidence alone. There is no demonstrated +need for a new source pipeline: the inspected Overture release already contains +the independently verified EDEKA Moch tenant. No production code, data, cache, +configuration, ingestion or deployment changed in this investigation. + +The immediate failure is reproducible for the operator-specific name: +`EDEKA Moch` retrieves fuzzy namesakes, and `EDEKA Moch Grunerstraße 20` retrieves +addresses without a business. Shorter EDEKA queries retrieve a mall POI with a +different inferred address and incomplete identity. That is a separate outcome: +**a different returned address does not prove a different real-world branch**. +Ranking cannot recover a missing named candidate; conversely, branch rows lost +after retrieval must not be scored as upstream omissions. + +## Evidence and reproducibility + +The [versioned evidence directory](https://github.com/OpenMapX/openmapx/tree/main/scripts/discovery-eval/business-name-address) +contains 13 queries, selected raw/provider and adapted fields, source records, +request metadata/hashes, the historical combination/ranking/Enter replay, +independently observed live UI lists and offline checks. Its README provides +recapture parameters and commands. Full raw captures and screenshots stay outside +Git in `/tmp/openmapx-430`; this temporary local archive has no durable public URL. +Committed selected fixtures support review without access to that archive. + +This extends the [discovery evaluation protocol](discovery-evaluation.md) and +the [#424 live pilot](https://github.com/OpenMapX/openmapx/pull/424#issuecomment-6045066881). +Unlike the pilot's approximate label/radius assessment, exact business recall +here requires an independently verified branch identity. A same-brand row within +200m is insufficient. Expectations were frozen before comparison; there is no +before/after production feature comparison or application-only causal claim. +The initial 12 queries were captured together; the independently verified Schaaf +control was added before capturing that additional query. Alexanderstraße's +initial target judgment was corrected to **unresolved**, with no exact-entity +denominator, after inspecting its source reference. + +| Condition | Pinned value or specific limitation | +| ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Source inspection and replay | Freshly fetched main `3c80939d26a09f131b16d849895255436b5e5798`; task-owned worktree/branch. Source files unchanged; evaluation additions made the worktree dirty during replay. | +| Concurrent fixes | #428/#429 issue bodies/comments read; no fixes/cherry-picks included. Historical replay is tied to this baseline. The current replay command prints its own revision and must not be compared as if unchanged. | +| Public API/UI deployment | Unknown SHA; public responses do not identify it. Local HEAD does not identify the remote app. | +| Query context | English, center `[13.416,52.5194]`, zoom 15. Raw MapTiler uses the adapter's rounded proximity `[13.42,52.52]`; autocomplete `limit=6`, `autocomplete=true`, explicit types including POI; aggregate limit 8. All 13 queries have one synonym variant. | +| Raw provider | MapTiler, operator-owned local API credential; credentials omitted from capture parameters and fixtures. Geocoder dataset/index generation unavailable. | +| Public providers | `/api/integrations` listed MapTiler, Photon, Nominatim, Pelias, MOTIS, DB RIS, Entur, OSM aliases and notable places as enabled. Response rows identify `geocoding-maptiler`. This does not establish the configured chain order, service availability, database contents or capability bindings. `poi-overture` was not listed. | +| Deployed OSM/Overture | Unknown extract/fingerprint, active generation, index epoch and publication state. Both authenticated status endpoints returned HTTP 401; admin integration navigation redirected to the public map. No deployed database was accessed. | +| Inspected OSM | Current OSM API map bbox `[13.414,52.5185,13.418,52.521]`, direct elements/history for controls, explicit IDs/versions/timestamps. This is not a regional PBF or a deployed extract. Map response SHA-256 is in `sources-v1.json`. | +| Inspected Overture | Read-only S3 Places release `2026-09-23.1`, bbox `[13.408,52.513,13.426,52.527]`, DuckDB 1.5.6, 3,255 unfiltered rows. Selected records retain GERS IDs, versions and per-property provenance. STAC discovery returned 403; the explicit release path from official documentation was readable. No asset ETags/full release checksum measured. | +| Cache | Uncontrolled at MapTiler/public CDN/API/browser. API source has autocomplete L1 soft 5min/hard 2h, L2 1h; forward cache 24h; aggregate 5min and partial responses uncached. No cache was flushed or bypassed. HTTP headers do not establish cold/warm state. | +| Live UI | Separate public capture, 1280×800, DPR 1, dark, fixed camera, pitch/bearing 0, anonymous session, no saved places or recents before list capture. Camera initialization attempts were discarded; retained rows have the Berlin camera. Styles were not pinned: no cartography comparison is claimed. | + +Source traces at the pinned revision: + +- `integrations/geocoding-maptiler/provider.ts`: autocomplete maps features in + order without filtering or sorting; `properties.ref` is not exposed as an OSM + identity. A formatted address is provider output, not necessarily an OSM tag. +- `integrations/geocoding/{index,orchestrator,query-expansion}.ts`: round bias, + cache, first nonempty configured provider, concatenate variants/deduplicate IDs. +- `services/data-manager/src/jobs/search-index/{terms,extract}.ts` and + `integrations/search-osm-aliases/provider.ts`: aliases/codes/conservative acronyms + drive exact/prefix search. Ordinary primary name/address terms are not added; + zero-term features are skipped. The inspected EDEKA room, MediaMarkt, REWE and + Schaaf all produce zero terms in the existing extractor. +- `integrations/poi-overture/index.ts`: category provider, confidence floor 0.5, + permanent-closure filter and top-50 window; no business-name text candidate + method. `poi-search/orchestrator.ts` selects the first text-capable provider. +- `packages/core/src/utils/overpass.service.ts`: full escaped query matched + against `name` on POI nodes/ways; no name/address decomposition. The known OSM + name `EDEKA` cannot match the whole `EDEKA Moch Grunerstraße 20` expression. +- `integrations/search-suggestions/orchestrator.ts`: provider deadline 1,200ms, + all-settled fan-out, merge before limit. `SearchBar.tsx` concatenates aggregate + suggestions and autocomplete, then uses `suggestionRanking.ts` and `enterAction`. + +## Tenant and branch judgments + +[Official EDEKA profile 408935](https://www.edeka.de/maerkte/408935/) +identifies EDEKA Moch at Grunerstr. 20, 10179 Berlin, phone `+493024045625`. +Its structured point is `[13.4147929,52.519901]`; this is a retailer listing point, +not a surveyed entrance. The [mall's own listing](https://www.alexacentre.com/en/center-info/opening-hours/) +places its EDEKA in the first basement. Do not use shared mall coordinates to +merge EDEKA with [MediaMarkt Berlin-Mitte](https://www.mediamarkt.de/de/store/berlin-mitte-190). + +| Inspected source/entity | Status and identity evidence | +| ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| Overture Moch | **Present, verified listing:** GERS `035b544e-40f5-4ce0-a06f-1c9032ded028`, v13, name “EDEKA Moch Supermarket”, Grunerstraße 20, same official phone. Meta record `194804870560113`, updated 2026-08-24; Overture confidence calculation updated 2026-09-17. Confidence ≈0.99991, operating status null (unknown, not closed). | +| OSM exact operator name/address | **Absent in the inspected mall records:** no `Moch` name/contact or Grunerstraße address on the EDEKA element. This is a bounded attribute gap, not proof that the business is absent from all OSM. | +| OSM EDEKA mall room | **Present, operator identity unresolved:** [way 1204762785 v3](https://www.openstreetmap.org/way/1204762785/history/3), timestamp 2026-01-23, supermarket, indoor room, level -1, name EDEKA, city Berlin; no street/number/contact/operator. Mall [way 258898047 v38](https://www.openstreetmap.org/way/258898047/history/38) has Grunerstraße 20. Geometric context and basement agreement suggest the same tenant, but do not independently establish its operator or a verified cross-source link. | +| Returned Alexanderstraße 25 | Raw MapTiler `poi.39267497` explicitly references `osm:w1204762785`, coordinates `[13.4167764,52.5185536]`. The OSM way does not assert Alexanderstraße 25. Nominatim resolves that way to Alexanderstraße without a house number. Therefore **address inference/identity ambiguity**, not a verified alternative branch and not exact Moch success. | +| MediaMarkt control | OSM [node 322490364 v24](https://www.openstreetmap.org/node/322490364/history/24), explicit Grunerstraße 20 and branch-specific website. Overture GERS `bfbe5e1d-7db5-482e-8772-f53959dde008` v9 and `81270f18-8f0b-48a9-ae69-31d4ef96cdd5` v8 both describe the mall branch; candidate duplicate requiring branch/website evidence, not an ID-only merge. | +| Nearby EDEKA control | [Official Schaaf profile 407497](https://www.edeka.de/maerkte/407497/), Schillingstr. 2, phone `+493023458611`. OSM node `9154787137` has that street/number; Overture GERS `a56cd442-edcf-4d26-98c1-9c70de50f1d7` v11 has matching name/address/phone. Raw MapTiler references that node but formats Singerstraße 121, another address discrepancy. This branch is distinct from Moch by verified name/address/contact. | +| REWE control | [Official REWE profile 1350030](https://www.rewe.de/marktseite/berlin-mitte/1350030/rewe-markt-ackerstr-23-26-invalidenstr-158/) and OSM node `348000444` v29 verify Invalidenstraße 158. Its Overture status is **unknown**: outside the scanned bbox, not queried. | +| Production copies | All source-presence judgments above are **unknown in the deployed generations**. No query miss establishes an empty deployed table. | + +The Overture Moch record is sufficient to justify evaluating existing-data +retrieval. No ATP coverage claim is made. If a pinned deployed generation lacks +it, first compare that generation/source row and import filters to this inspected +release. If the intended source truly lacks it, a separate enrichment proposal +needs a dated retailer listing, source permissions, stable store ID and a +bounded independently judged coverage sample; do not assume ATP contains it. + +## Layer comparison and quality + +Each query yielded six raw MapTiler features and six public autocomplete rows, +with identical ID order across the independent captures. Offline invocation of +the actual pinned adapter preserves every feature's ID, label, formatted address, +type and coordinates. All 13 aggregate replies were empty **and partial**; +provider health/errors or deployed index availability remain unknown. +The combined place pool is therefore the six adapted rows per query, not evidence +of a successful empty local-data lookup. No synonym amplification occurred. + +| Query | Raw/adapted retrieval | Pinned ranked places and Enter | Live dropdown | +| ----------------------------------------- | -------------------------------------------------------------- | --------------------------------------------- | ---------------------------------------------------------------------- | +| EDEKA Moch | Moch absent; fuzzy Koch/Möck namesakes | Six rows; choose | Namesake first, no Moch | +| EDEKA Moch Grunerstraße 20 | No POI; address first | Six rows; weak area search | Address first; actual Enter → area panel, 0 results | +| EDEKA Grunerstraße 20 Berlin | Unresolved `poi.39267497`, no verified Moch | Six rows; weak area search | Unresolved EDEKA first | +| EDEKA Alexa | Same unresolved way first | Six → three rows; open unresolved ID | Three places; actual Enter → that EDEKA sheet, Alexanderstraße address | +| EDEKA Grunerstraße | Same unresolved way first | Six → four; weak area search | Four places; unresolved EDEKA first | +| EDEKA Alexanderstraße 25 Berlin | Returned-address control; identity unresolved | Six → four; open unresolved ID | Same unresolved candidate first | +| EDEKA | Ambiguous brand; no unique branch expectation | Six → three; area search | Three places plus brand shortcut; no exact-tenant success claim | +| MediaMarkt Alexa | Verified Berlin branch raw rank 2; Rijswijk first | Berlin remains rank 2; open Rijswijk | Rijswijk first, Berlin second: #428 ranking defect | +| MediaMarkt Grunerstraße 20 Berlin | Verified branch rank 1 | Rank 1; open Berlin | Berlin first | +| REWE Invalidenstraße 158 Berlin | Verified OSM-ref branch rank 1 | Six → four; rank 1, open REWE | REWE first; other branches removed after retrieval | +| EDEKA Moch Grunerstraße 999 Berlin | No exact business/address assertion | Six rows; weak area search | Berlin area first; no invented exact tenant | +| Zzqxv430 Testladen Grunerstraße 20 Berlin | Invented business absent; address/number POIs returned | Six → five; weak area search | Address first; no exact-business success | +| EDEKA Schaaf Schillingstraße 2 Berlin | Verified OSM-ref candidate rank 1, formatted address conflicts | Berlin area first, Schaaf rank 2; weak search | Berlin first, Schaaf second | + +There are nine positive exact-entity queries: five Moch, two MediaMarkt, one REWE, +one Schaaf. Strict verified-entity Hit@3 is **4/9** at raw, adapted, combined and +pinned ranked place stages. The five Moch queries have **0/5 confirmed** hits; +three have the unresolved mall way, so the possible Hit@3 range is 4/9–7/9 if a +future independent identity judgment establishes that link. The name and full +Moch name/address queries still omit it. Unknown identity is not a false-branch +count or a successful hit. MediaMarkt ALEXA has one confirmed wrong-branch top row; +Schaaf's Berlin-area top row is not a business substitution. Both negatives have +zero claimed exact business matches, but generic fallback rows are retained. + +Across the 13 queries, the place-only replay reduces **78 combined rows to 65** +after shared merge/ranking. The EDEKA and REWE branch losses occur there, separately +from retrieval (#429). Do not require future implementations to reproduce these +defects: `replay-v1.json` is historical evidence, while `replay.ts` identifies the +code actually used for a new replay. Live lists independently confirm the main +ordering/count outcomes; REWE's UI capture recorded only its geocoder fetch +(aggregate cache reuse was not network-observed in that interaction). + +The two actual Enter observations are explicitly recorded; the other Enter +actions in the table are **source replay**, not observed navigation. Saved/recent +and category/brand/preset shortcuts were excluded from that place-only replay. +UI brand shortcuts and the appended area-search row are not counted as retrieved +businesses. The older label/radius pilot must not mark `poi.39267497` verified +solely because it lies near the mall. + +Timings for 13 requests per layer, in milliseconds: + +| Layer | Min / median / max | Cache interpretation | +| --------------------------- | ------------------------ | ------------------------------------------------------------- | +| Raw MapTiler | 52.47 / 275.82 / 506.45 | Uncontrolled; provider generation/cache unknown | +| Public adapted autocomplete | 86.58 / 160.29 / 524.77 | Uncontrolled; no cold/warm classification | +| Public aggregate | 109.52 / 113.60 / 139.49 | Empty partial replies; not successful local retrieval latency | + +These were 39 independent HTTP requests, with no retries in the query capture. +Public browser operations add their own requests and are not included in these 39. No p95 SLA, cold/warm success, indexed PostgreSQL latency or query-plan claim +is established. Bbox source acquisition took about 35s, with 2 DuckDB threads and +512MB configured memory limit; transfer bytes and peak RSS were not measured. +It is an offline inspection cost, not interactive-search latency. + +## Concrete bounded follow-up design + +Use a region-scoped **search-suggestions provider over the existing imported +Overture table**, enabled only for a local Berlin evaluation. Do not repurpose the +OSM alias index or install a source pipeline. Begin with primary/common names, +source-provided brand names and address tokens in a separate release-keyed lexical +index/view; retain source tables and credits separately. Evaluate an exact/prefix +index first, then optional PostgreSQL trigram fallback only if needed. No embedding +or model service is needed to test this hypothesis. + +1. Normalize Unicode/case and German street spellings, preserving original display + values. Decompose terminal street+house number+city when recognized. Retrieve + with name/brand token coverage **and** parsed address constraints; `Moch` and + house number `999` cannot be discarded to make a convenient same-brand match. + Require token boundaries; `Alexa` is not evidence for `Alexanderstraße`. +2. Resolve a mall suffix to an independently known mall identity/footprint and + use a verified containment/address association as context. Do not invent an + `Alexa` alias on a business or expand every unmatched word to a city. Until + such association is available, name-only Moch/address queries are supported + while `EDEKA Alexa` remains an explicit evaluation gap. +3. Return `overture:` identity, source names, structured address, provenance, + release and closure/unknown status through the existing composition. If + adapting MapTiler's validated `osm:n/w/r` reference becomes necessary, handle + that in a narrow reviewed adapter follow-up. Brand Wikidata IDs describe the + chain, not the branch. Proximity/shared mall address/phone switchboards alone + cannot establish identity. Conflicting addresses/contacts stay separate; a + verified OSM↔GERS link may merge only with retained IDs and credits. +4. Exclude permanently closed records; retain null status as unknown, and do not + reinterpret a current opening-hours “Closed” badge as permanent closure. + Carry Meta/Foursquare/Overture attribution using the existing contributor + mapping and release gates. The two MediaMarkt GERS records need a verified + duplicate judgment; the café inside MediaMarkt is a separate tenant. +5. Bound candidate acquisition to at most 30 rows, local output to 8 and the + existing combined API limit to 8 (hard route maximum 20), UI maximum 10. One + bounded SQL operation per query, no per-result remote enrichments in candidate + generation. Preserve explicit remote-city/address search instead of forcing + all business queries to the nearest branch. +6. Use a 300ms database deadline inside the existing 1,200ms provider deadline. + Proposed local-provider p95 budget: cold ≤500ms, warm ≤150ms; total interaction + pilot ceilings remain cold ≤5,000ms/warm ≤2,000ms from #424. These are proposed + gates, not measured achievements. Release/index epoch, normalized query, + language, region and proximity partition the isolated evaluation cache; test + both query orders and cold/warm runs. Do not cache timeouts/partial failures as + authoritative misses. Missing/unready index or timeout leaves normal geocoder + fallback available and reports partial/unavailable state. + +Map candidates to the existing `SearchSuggestion` envelope: `id=overture:`, +`ids.overture=`, `type=poi`, localized primary name as `label`, formatted +address as `sublabel`, coordinates, provider/source IDs, and `searchMatch` with +the retained matched name (`name` or explicitly permitted `near_name`). Use a +neutral bounded `importance`; source confidence is not business prominence. +The envelope does not carry arbitrary structured address/provenance fields. +Keep those, release and closure judgments in the source/audit row; return credits +through the provider's `attributions`. On selection, the existing `poi-overture` +resolver supplies structured place details and provenance. A local integration +must declare that resolver and PostGIS dependency, verify resolver readiness, +and freeze the same generation through candidate lookup and resolution. If that +dependency or the selected record is unavailable, report the failure and retain +fallback rather than silently substituting another branch. This wiring is a +follow-up design, not an enabled capability of the inspected deployment. + +The promotion gate requires all nine verified positive queries in the first +three results, zero wrong-branch selections and false exact negative matches, +the unresolved mall identity either independently resolved or still marked unknown, +and preserved nearby/co-located branches after combination. Measure rank/recall +**before** merge/ranking and again after it; adopt applicable #428/#429 behavior +only in a separately pinned run. Their completion was not required to perform +this investigation. Add explicit remote city, ambiguous brand, closures, duplicate +GERS, contradictory addresses and language/order/cache controls before adoption. + +Operational cost is a regional lexical index plus staged validation and cache +keys, not another upstream ingestion system. Measure table/index bytes, build +time, peak memory, EXPLAIN/BUFFERS and cold/warm query percentiles on a disposable +copy of the intended generation. Those costs are unknown here. Keep zero new +remote requests in the lexical path; exact absence, unavailable data and timeout +must remain distinguishable. A country-scale rebuild/rollout needs separate scope. + +## Validation + +The focused evaluation, adapter, ranking and term-extractor suite passed **127 +tests in nine files**, including 17 new evidence tests. The evaluation TypeScript +check, offline replay and documentation production build passed. An independent +read-only review recomputed recall, row totals and timing summaries and verified +all 39 archived query-response hashes against fixture metadata. Historical +ranking is evidence, not an assertion that later #428/#429 fixes must preserve it. +The complete repository test suite and production database checks were not run; +there are no production code or schema changes in this PR. + +## Admin inspection and completion status + +Current **Services → Data workflows** already has Overture release/region/counts +and search-index epoch/publication/staleness controls. The OSM index description +correctly calls it code/alias/acronym search. A ready index is not evidence that +ordinary business names are searchable, and an Overture health “up” state is not +a named-business retrieval capability. `SearchIndexMaintenance` receives a source +fingerprint but does not display it in its summary; use the authenticated status +response to pin it. This is documented as an inspection detail rather than a UI +change because no local lexical feature is being enabled. Broad admin changes +would exceed the investigation's need. + +Completed: source revision pin; public provider inventory and explicit unavailable +production metadata; official tenant/alternative identities; available OSM and +Overture IDs/provenance; 13-query raw/adapted/combined/ranked/live-list comparison; +two live Enter outcomes; strict branch/negative judgments; operational limits, +fallback, credits/closures and candidate design; versioned fixtures/offline checks; +go/no-go report. No prototype is required: the issue explicitly permits a concrete +candidate-integration design for data-present cases. + +Remaining unknowns: deployed revision/chain order/generations/index health; exact +operator identity of the generic OSM mall way and its link to GERS; provider +generation and cache history; Overture REWE coverage outside the bbox; measured +lexical/PostgreSQL resource costs and controlled cold/warm latency. These limit +production adoption, not the completed bounded investigation. No merge or deploy +is authorized by this report. diff --git a/docs/docs/developer/discovery-evaluation.md b/docs/docs/developer/discovery-evaluation.md index 46d2cc813..2711eb804 100644 --- a/docs/docs/developer/discovery-evaluation.md +++ b/docs/docs/developer/discovery-evaluation.md @@ -10,6 +10,12 @@ connects existing semantic search fixtures, conflation guards, Overture gates, place-card and selected-sheet contracts and navigation replays. It does not turn synthetic tests into evidence of current regional coverage or installed-device readiness. +For business-name/address retrieval, see the +[Berlin EDEKA investigation](business-name-address-retrieval.md). It compares +independent raw, adapted, combined, ranked and live UI evidence and uses stable +source identities. The pilot's label/radius score alone cannot verify a nearby +same-brand tenant or resolve a conflicting returned address. + ## Run and compare From the repository root: diff --git a/scripts/discovery-eval/business-name-address/README.md b/scripts/discovery-eval/business-name-address/README.md new file mode 100644 index 000000000..40fe806cd --- /dev/null +++ b/scripts/discovery-eval/business-name-address/README.md @@ -0,0 +1,80 @@ +# Berlin business name/address investigation v1 + +Evidence for [#430](https://github.com/OpenMapX/openmapx/issues/430), captured on +2026-10-07. Read the [go/no-go report](../../../docs/docs/developer/business-name-address-retrieval.md) +for identity judgments, conditions, limitations and the bounded integration design. +This directory is evaluation material; it implements no search provider. + +- `queries-v1.json`: frozen query expectations and budgets. The Alexanderstraße + control has unresolved business identity and no required-entity judgment. +- `responses-v1.json`: **selected fields**, independently captured raw MapTiler + features, public adapted rows and aggregate replies; timestamps, request + parameters, status, response hashes and uncontrolled-cache timings. Raw feature + order is retained. Neither projection is a full payload. +- `sources-v1.json`: reviewed OSM elements and five Overture records, source + IDs/versions, release, provenance, license fields and bbox-acquisition hashes. +- `replay-v1.json`: historical place-only combination/ranking/Enter trace at + `3c80939d26a09f131b16d849895255436b5e5798`. It is not a future ranking contract. +- `ui-v1.json`: independently observed live DOM rows and request IDs at the fixed + Berlin camera, followed by two actual Enter outcomes. The deployment SHA is + unknown; these are not observations of the locally pinned application. +- `evidence.test.ts`: offline fixture/provenance checks and replay through the + real MapTiler adapter. It does not require future rankers to retain #428/#429. +- `replay.ts`: rerun place-only composition with the current checkout, reporting + its revision separately. Saved places, recents, categories, brands and presets + are omitted deliberately; the live UI evidence includes the actual dropdown. + +```sh +pnpm exec vitest run scripts/discovery-eval/business-name-address/evidence.test.ts +pnpm exec tsc -p scripts/discovery-eval/business-name-address/tsconfig.json +pnpm -C packages/cli exec tsx ../../scripts/discovery-eval/business-name-address/replay.ts \ + --out /tmp/business-retrieval-replay.json +``` + +For recapture, use the queries in file order. Fetch the three layers separately: +MapTiler `/geocoding/{encoded-query}.json` with an operator-owned key and the +recorded parameters; OpenMapX `/api/integrations/geocoding/autocomplete`; and +`/api/integrations/search-suggestions/search` with `limit=8`. The API rounds the +autocomplete anchor to `[13.42,52.52]`; do not send the unrounded point directly +to MapTiler when comparing it to that adapter path. Never print or save the key. +Capture HTTP status and hash the response bytes before projecting them. Empty +partial/error results cannot establish source absence. Use an isolated cache for +any cold/warm budget claim. Freeze a new version for changed judgments; do not +overwrite v1 with current network results. + +OSM can be rechecked via `https://api.openstreetmap.org/api/0.6/map` with the +recorded bbox and direct element endpoints. The bounded Overture acquisition used +Python DuckDB 1.5.6, `httpfs`, two threads and a 512MB memory limit: + +```sql +SELECT id, version, names, addresses, phones, websites, brand, confidence, + operating_status, sources, bbox +FROM read_parquet( + 's3://overturemaps-us-west-2/release/2026-09-23.1/theme=places/type=place/*' +) +WHERE bbox.xmin BETWEEN 13.408 AND 13.426 + AND bbox.ymin BETWEEN 52.513 AND 52.527; +``` + +This is a point/bbox-origin predicate for this Places sample, not a general +polygon-intersection query. It returned 3,255 unfiltered rows; only reviewed +business records are committed. REWE is outside that bbox and its Overture +presence was not inspected. Full raw files and screenshots remain in the task's +local operator archive `/tmp/openmapx-430`; that temporary path is not a durable +public archive. The selected fixtures make the report reviewable without it. + +## Source credits and rights + +© MapTiler, © OpenStreetMap contributors. MapTiler search results remain subject +to [MapTiler Cloud terms](https://www.maptiler.com/terms/cloud/), including the +search-results export permission in section 6.4 and database attribution in +section 6.3. These samples are not relicensed as application code. + +OSM records: © OpenStreetMap contributors, [ODbL-1.0](https://www.openstreetmap.org/copyright). +Overture release: © Overture Maps Foundation and contributing datasets. The +selected records retain Meta and Overture `CDLA-Permissive-2.0` provenance and +Foursquare `Apache-2.0` provenance. See the upstream +[data documentation](https://github.com/OvertureMaps/data/blob/main/README.md) +and each retained `sources[]` entry. There is no inference that the code license +covers external data. No credentials, cookies, admin configuration or OSM +contributor account identifiers are retained. diff --git a/scripts/discovery-eval/business-name-address/conditions-v1.json b/scripts/discovery-eval/business-name-address/conditions-v1.json new file mode 100644 index 000000000..6d81165b6 --- /dev/null +++ b/scripts/discovery-eval/business-name-address/conditions-v1.json @@ -0,0 +1,98 @@ +{ + "version": 1, + "baseline": "3c80939d26a09f131b16d849895255436b5e5798", + "productionDeployment": { + "value": null, + "reason": "Not exposed by public API/UI; authenticated metadata not available" + }, + "productionOsmExtract": { + "value": null, + "reason": "No production DB access; search-index/status returned HTTP 401" + }, + "productionOvertureGeneration": { + "value": null, + "reason": "No production DB access; overture/status returned HTTP 401" + }, + "providerDatasetGeneration": { + "value": null, + "reason": "Not returned by MapTiler geocoding API" + }, + "providerChainOrder": { + "value": null, + "reason": "Admin configuration unavailable; served rows identify MapTiler only" + }, + "publicRegistry": { + "capturedAt": "2026-10-07T20:40:55.323587+00:00", + "revision": "577370047f7a31f265ee654d5753cd34ed2a494e05a1d3b878c2b22cda0f493f", + "sha256": "8c84e209123317d50ea5195d76c2fdcba872e1327f8d0f69ec13bf1c4234faab", + "projection": [ + { + "id": "geocoding", + "enabled": true, + "domains": ["geocoding"] + }, + { + "id": "geocoding-db-ris", + "enabled": true, + "domains": ["geocoding", "search-suggestions"] + }, + { + "id": "geocoding-entur", + "enabled": true, + "domains": ["geocoding", "search-suggestions"] + }, + { + "id": "geocoding-maptiler", + "enabled": true, + "domains": ["geocoding"] + }, + { + "id": "geocoding-motis", + "enabled": true, + "domains": ["geocoding"] + }, + { + "id": "geocoding-nominatim", + "enabled": true, + "domains": ["geocoding"] + }, + { + "id": "geocoding-pelias", + "enabled": true, + "domains": ["geocoding"] + }, + { + "id": "geocoding-photon", + "enabled": true, + "domains": ["geocoding"] + }, + { + "id": "poi-search", + "enabled": true, + "domains": ["poi-search"] + }, + { + "id": "search-nlp", + "enabled": true, + "domains": ["search-nlp"] + }, + { + "id": "search-notable-places", + "enabled": true, + "domains": ["search-suggestions"] + }, + { + "id": "search-osm-aliases", + "enabled": true, + "domains": ["search-suggestions"] + }, + { + "id": "search-suggestions", + "enabled": true, + "domains": ["search-suggestions"] + } + ] + }, + "rawCaptureCache": "uncontrolled", + "credentialsRedacted": true +} diff --git a/scripts/discovery-eval/business-name-address/evidence.test.ts b/scripts/discovery-eval/business-name-address/evidence.test.ts new file mode 100644 index 000000000..303195ee3 --- /dev/null +++ b/scripts/discovery-eval/business-name-address/evidence.test.ts @@ -0,0 +1,178 @@ +import { createHash } from "node:crypto"; +import { readFileSync } from "node:fs"; +import { afterEach, describe, expect, it, vi } from "vitest"; +import { getQueryVariants } from "../../../integrations/geocoding/query-expansion.js"; +import { + maptilerGeocodingService, + setMaptilerApiKey, +} from "../../../integrations/geocoding-maptiler/provider.js"; +import { extractTerms } from "../../../services/data-manager/src/jobs/search-index/terms.js"; + +function read(name: string) { + return JSON.parse(readFileSync(new URL(name, import.meta.url), "utf8")); +} + +const queries = read("queries-v1.json"); +const responses = read("responses-v1.json"); +const sources = read("sources-v1.json"); +const historical = read("replay-v1.json"); +const ui = read("ui-v1.json"); + +afterEach(() => { + setMaptilerApiKey(undefined); + vi.unstubAllGlobals(); +}); + +describe("#430 versioned business retrieval evidence", () => { + it("pins a complete query set and keeps replay and deployment conditions distinct", () => { + expect(responses.queriesSha256).toBe( + createHash("sha256") + .update(readFileSync(new URL("queries-v1.json", import.meta.url))) + .digest("hex"), + ); + expect(historical.baseline).toBe(queries.baseline); + const ids = queries.cases.map((c: { id: string }) => c.id); + expect(new Set(ids).size).toBe(13); + expect(responses.cases.map((c: { caseId: string }) => c.caseId)).toEqual(ids); + expect(historical.cases.map((c: { caseId: string }) => c.caseId)).toEqual(ids); + expect(ui.caseResults.map((c: { caseId: string }) => c.caseId)).toEqual(ids); + expect(ui.deployment).toBeNull(); + expect(ui.cache).toBe("uncontrolled"); + }); + + for (const entry of responses.cases) { + it(`${entry.caseId}: maps every raw candidate without inventing tenant retrieval`, async () => { + const query = queries.cases.find((c: { id: string }) => c.id === entry.caseId); + expect(getQueryVariants(query.query)).toEqual([query.query]); + const fetch = vi.fn().mockResolvedValue(Response.json({ features: entry.rawFeatures })); + vi.stubGlobal("fetch", fetch); + setMaptilerApiKey("fixture-only"); + const adapted = await maptilerGeocodingService.autocomplete(query.query, queries.language, { + proximity: queries.upstreamProximity, + zoom: queries.zoom, + }); + expect(adapted.map((r) => r.id)).toEqual(entry.publicRows.map((r: { id: string }) => r.id)); + expect(adapted.map((r) => [r.label, r.sublabel, r.coordinates, r.type])).toEqual( + entry.publicRows.map( + (r: { label: string; sublabel: string; coordinates: number[]; type: string }) => [ + r.label, + r.sublabel, + r.coordinates, + r.type, + ], + ), + ); + expect(fetch).toHaveBeenCalledTimes(1); + expect(entry.aggregate).toEqual({ suggestions: [], attributions: [], partial: true }); + for (const capture of entry.captures) { + expect(capture.status).toBe(200); + expect(capture.requests).toBe(1); + expect(capture.cache).toBe("uncontrolled"); + expect(capture.sha256).toMatch(/^[a-f0-9]{64}$/); + expect(Number.isFinite(capture.latencyMs) && capture.latencyMs > 0).toBe(true); + expect(capture.parameters).not.toHaveProperty("key"); + } + const replay = historical.cases.find((c: { caseId: string }) => c.caseId === entry.caseId); + expect(replay.combinedIds).toEqual(entry.publicRows.map((r: { id: string }) => r.id)); + // Validate a historical trace without requiring future rankers to preserve #428/#429 bugs. + expect(replay.rankedIds.every((id: string) => replay.combinedIds.includes(id))).toBe(true); + expect(new Set(replay.rankedIds).size).toBe(replay.rankedIds.length); + }); + } + + it("keeps the unresolved mall way separate from the verified Overture Moch record", () => { + const way = sources.osm.records.find((r: { id: string }) => r.id === "way/1204762785"); + expect(way.version).toBe(3); + expect(way.tags.name).toBe("EDEKA"); + expect(way.tags["addr:street"]).toBeUndefined(); + expect(extractTerms(way.tags)).toEqual([]); + const raw = responses.cases.find((c: { caseId: string }) => c.caseId === "edeka-alexa"); + expect(raw.rawFeatures[0].properties.ref).toBe("osm:w1204762785"); + expect(raw.rawFeatures[0].place_name).toContain("Alexanderstraße 25"); + const moch = sources.overture.records.find( + (r: { id: string }) => r.id === "035b544e-40f5-4ce0-a06f-1c9032ded028", + ); + expect(sources.overture.release).toBe("2026-09-23.1"); + expect(moch.version).toBe(13); + expect(moch.addresses[0].freeform).toBe("Grunerstraße 20"); + expect(moch.phones).toContain("+493024045625"); + expect(moch.sources[0].record_id).toBe("194804870560113"); + expect(moch.sources[0].license).toBe("CDLA-Permissive-2.0"); + expect(moch.operating_status).not.toBe("permanently_closed"); + expect(queries.cases.find((c: { id: string }) => c.id === "edeka-alexander").target).toBeNull(); + }); + + it("recomputes the report's historical recall and row counts using verified OSM identities", () => { + // A provider ID/label or shared mall address alone is not branch verification. + // These controls have independently checked retailer listings and OSM references. + const verifiedRefs: Record = { + media: "osm:n322490364", + rewe: "osm:n348000444", + schaaf: "osm:n9154787137", + }; + const positive = queries.cases.filter( + (c: { target: string | null }) => c.target && c.target !== "negative", + ); + expect(positive).toHaveLength(9); + const hits = [0, 0, 0, 0]; + for (const query of positive) { + const capture = responses.cases.find((c: { caseId: string }) => c.caseId === query.id); + const trace = historical.cases.find((c: { caseId: string }) => c.caseId === query.id); + const verifiedIds = capture.rawFeatures + .filter( + (f: { properties: { ref?: string } }) => + verifiedRefs[query.target] !== undefined && + f.properties.ref === verifiedRefs[query.target], + ) + .map((f: { id: string }) => `maptiler:${f.id}`); + const stages = [ + capture.rawFeatures.map((f: { id: string }) => `maptiler:${f.id}`), + capture.publicRows.map((r: { id: string }) => r.id), + trace.combinedIds, + trace.rankedIds, + ]; + stages.forEach((ids: string[], stage: number) => { + if (ids.slice(0, queries.budgets.maxRank).some((id) => verifiedIds.includes(id))) { + hits[stage]++; + } + }); + } + expect(hits).toEqual([4, 4, 4, 4]); + expect( + historical.cases.reduce( + (n: number, c: { combinedIds: string[] }) => n + c.combinedIds.length, + 0, + ), + ).toBe(78); + expect( + historical.cases.reduce((n: number, c: { rankedIds: string[] }) => n + c.rankedIds.length, 0), + ).toBe(65); + }); + + it("retains real branch and co-located tenant controls and negative query judgments", () => { + const names = sources.overture.records.map( + (r: { names: { primary: string } }) => r.names.primary, + ); + expect(names).toContain("EDEKA Schaaf"); + expect(names).toContain("MediaMarkt Berlin-Mitte (im Alexa)"); + const media = sources.osm.records.find((r: { id: string }) => r.id === "node/322490364"); + expect(media.tags["addr:street"]).toBe("Grunerstraße"); + expect(media.tags["addr:housenumber"]).toBe("20"); + expect(extractTerms(media.tags)).toEqual([]); + expect(queries.cases.filter((c: { target: string }) => c.target === "negative")).toHaveLength( + 2, + ); + const nameQuery = responses.cases.find((c: { caseId: string }) => c.caseId === "moch-name"); + expect(nameQuery.rawFeatures.some((f: { text: string }) => /\bmoch\b/i.test(f.text))).toBe( + false, + ); + const addressQuery = responses.cases.find( + (c: { caseId: string }) => c.caseId === "moch-address", + ); + expect( + addressQuery.rawFeatures.some((f: { place_type: string[] }) => f.place_type.includes("poi")), + ).toBe(false); + expect(ui.selections[0].selectedId).toBeNull(); + expect(ui.selections[1].selectedId).toBe("maptiler:poi.39267497"); + }); +}); diff --git a/scripts/discovery-eval/business-name-address/queries-v1.json b/scripts/discovery-eval/business-name-address/queries-v1.json new file mode 100644 index 000000000..6d2d98772 --- /dev/null +++ b/scripts/discovery-eval/business-name-address/queries-v1.json @@ -0,0 +1,83 @@ +{ + "version": 1, + "baseline": "3c80939d26a09f131b16d849895255436b5e5798", + "region": "Berlin ALEXA and nearby branch controls", + "language": "en", + "center": [13.416, 52.5194], + "upstreamProximity": [13.42, 52.52], + "zoom": 15, + "budgets": { + "maxRank": 3, + "maxWrongBranchClaims": 0, + "coldMs": 5000, + "warmMs": 2000 + }, + "cases": [ + { + "id": "moch-name", + "query": "EDEKA Moch", + "target": "moch" + }, + { + "id": "moch-address", + "query": "EDEKA Moch Grunerstraße 20", + "target": "moch" + }, + { + "id": "edeka-address", + "query": "EDEKA Grunerstraße 20 Berlin", + "target": "moch" + }, + { + "id": "edeka-alexa", + "query": "EDEKA Alexa", + "target": "moch" + }, + { + "id": "edeka-gruner", + "query": "EDEKA Grunerstraße", + "target": "moch" + }, + { + "id": "edeka-alexander", + "query": "EDEKA Alexanderstraße 25 Berlin", + "target": null, + "judgment": "Returned-address control; real-world branch identity unresolved, excluded from exact-entity denominator" + }, + { + "id": "edeka-brand", + "query": "EDEKA", + "target": null + }, + { + "id": "media-alexa", + "query": "MediaMarkt Alexa", + "target": "media" + }, + { + "id": "media-address", + "query": "MediaMarkt Grunerstraße 20 Berlin", + "target": "media" + }, + { + "id": "rewe-address", + "query": "REWE Invalidenstraße 158 Berlin", + "target": "rewe" + }, + { + "id": "wrong-address", + "query": "EDEKA Moch Grunerstraße 999 Berlin", + "target": "negative" + }, + { + "id": "invented-name", + "query": "Zzqxv430 Testladen Grunerstraße 20 Berlin", + "target": "negative" + }, + { + "id": "schaaf-address", + "query": "EDEKA Schaaf Schillingstraße 2 Berlin", + "target": "schaaf" + } + ] +} diff --git a/scripts/discovery-eval/business-name-address/replay-v1.json b/scripts/discovery-eval/business-name-address/replay-v1.json new file mode 100644 index 000000000..7129c7cb6 --- /dev/null +++ b/scripts/discovery-eval/business-name-address/replay-v1.json @@ -0,0 +1,338 @@ +{ + "baseline": "3c80939d26a09f131b16d849895255436b5e5798", + "mode": "place-only source replay; saved/recent/category/brand/preset inputs omitted; not live UI", + "cases": [ + { + "caseId": "moch-name", + "variants": ["EDEKA Moch"], + "combinedIds": [ + "maptiler:poi.30456941", + "maptiler:poi.27997147", + "maptiler:poi.32434263", + "maptiler:poi.31643808", + "maptiler:poi.14639240", + "maptiler:poi.14883072" + ], + "rankedIds": [ + "maptiler:poi.30456941", + "maptiler:poi.27997147", + "maptiler:poi.32434263", + "maptiler:poi.31643808", + "maptiler:poi.14639240", + "maptiler:poi.14883072" + ], + "rankedTop": "EDEKA Koch-Sportpark, Karl-Brandt-Weg 11, 44629 Herne, Germany", + "enter": { + "kind": "choose" + } + }, + { + "caseId": "moch-address", + "variants": ["EDEKA Moch Grunerstraße 20"], + "combinedIds": [ + "maptiler:address.12686057", + "maptiler:address.10027702", + "maptiler:address.10343043", + "maptiler:address.9410688", + "maptiler:address.5097698", + "maptiler:place.4929509" + ], + "rankedIds": [ + "maptiler:address.12686057", + "maptiler:place.4929509", + "maptiler:address.10027702", + "maptiler:address.10343043", + "maptiler:address.9410688", + "maptiler:address.5097698" + ], + "rankedTop": "Grunerstraße 20, 10179 Berlin, Germany", + "enter": { + "kind": "search", + "weak": true + } + }, + { + "caseId": "edeka-address", + "variants": ["EDEKA Grunerstraße 20 Berlin"], + "combinedIds": [ + "maptiler:poi.39267497", + "maptiler:poi.15407240", + "maptiler:poi.15448214", + "maptiler:poi.30149398", + "maptiler:address.12686057", + "maptiler:address.10027702" + ], + "rankedIds": [ + "maptiler:poi.39267497", + "maptiler:address.12686057", + "maptiler:poi.15407240", + "maptiler:poi.15448214", + "maptiler:address.10027702", + "maptiler:poi.30149398" + ], + "rankedTop": "EDEKA, Alexanderstraße 25, 10178 Berlin, Germany", + "enter": { + "kind": "search", + "weak": true + } + }, + { + "caseId": "edeka-alexa", + "variants": ["EDEKA Alexa"], + "combinedIds": [ + "maptiler:poi.39267497", + "maptiler:poi.15445342", + "maptiler:poi.15632141", + "maptiler:poi.15895501", + "maptiler:poi.32007491", + "maptiler:poi.15469482" + ], + "rankedIds": ["maptiler:poi.39267497", "maptiler:poi.15632141", "maptiler:poi.15895501"], + "rankedTop": "EDEKA, Alexanderstraße 25, 10178 Berlin, Germany", + "enter": { + "kind": "open", + "id": "maptiler:poi.39267497" + } + }, + { + "caseId": "edeka-gruner", + "variants": ["EDEKA Grunerstraße"], + "combinedIds": [ + "maptiler:poi.39267497", + "maptiler:poi.15448214", + "maptiler:poi.15864452", + "maptiler:poi.15445342", + "maptiler:poi.15632141", + "maptiler:poi.15895501" + ], + "rankedIds": [ + "maptiler:poi.39267497", + "maptiler:poi.15632141", + "maptiler:poi.15895501", + "maptiler:poi.15448214" + ], + "rankedTop": "EDEKA, Alexanderstraße 25, 10178 Berlin, Germany", + "enter": { + "kind": "search", + "weak": true + } + }, + { + "caseId": "edeka-alexander", + "variants": ["EDEKA Alexanderstraße 25 Berlin"], + "combinedIds": [ + "maptiler:poi.39267497", + "maptiler:poi.15445342", + "maptiler:poi.15632141", + "maptiler:poi.32007491", + "maptiler:address.6574798", + "maptiler:poi.15258278" + ], + "rankedIds": [ + "maptiler:poi.39267497", + "maptiler:address.6574798", + "maptiler:poi.15632141", + "maptiler:poi.15258278" + ], + "rankedTop": "EDEKA, Alexanderstraße 25, 10178 Berlin, Germany", + "enter": { + "kind": "open", + "id": "maptiler:poi.39267497" + } + }, + { + "caseId": "edeka-brand", + "variants": ["EDEKA"], + "combinedIds": [ + "maptiler:poi.39267497", + "maptiler:poi.15864452", + "maptiler:poi.15445342", + "maptiler:poi.15632141", + "maptiler:poi.15895501", + "maptiler:poi.32007491" + ], + "rankedIds": ["maptiler:poi.39267497", "maptiler:poi.15632141", "maptiler:poi.15895501"], + "rankedTop": "EDEKA, Alexanderstraße 25, 10178 Berlin, Germany", + "enter": { + "kind": "search", + "weak": false + } + }, + { + "caseId": "media-alexa", + "variants": ["MediaMarkt Alexa"], + "combinedIds": [ + "maptiler:poi.15539884", + "maptiler:poi.15422100", + "maptiler:poi.15388462", + "maptiler:poi.15513302", + "maptiler:poi.27301831", + "maptiler:poi.31290179" + ], + "rankedIds": [ + "maptiler:poi.15539884", + "maptiler:poi.15422100", + "maptiler:poi.15388462", + "maptiler:poi.15513302", + "maptiler:poi.27301831", + "maptiler:poi.31290179" + ], + "rankedTop": "MediaMarkt, Pr Willem Alexander Prom 69-83, 2284 DJ Rijswijk, Netherlands", + "enter": { + "kind": "open", + "id": "maptiler:poi.15539884" + } + }, + { + "caseId": "media-address", + "variants": ["MediaMarkt Grunerstraße 20 Berlin"], + "combinedIds": [ + "maptiler:poi.15422100", + "maptiler:address.12686057", + "maptiler:poi.34392614", + "maptiler:poi.30823762", + "maptiler:address.10027702", + "maptiler:address.10343043" + ], + "rankedIds": [ + "maptiler:poi.15422100", + "maptiler:address.12686057", + "maptiler:address.10027702", + "maptiler:address.10343043", + "maptiler:poi.34392614", + "maptiler:poi.30823762" + ], + "rankedTop": "MediaMarkt, Grunerstraße 20, 10179 Berlin, Germany", + "enter": { + "kind": "open", + "id": "maptiler:poi.15422100" + } + }, + { + "caseId": "rewe-address", + "variants": ["REWE Invalidenstraße 158 Berlin"], + "combinedIds": [ + "maptiler:poi.15426609", + "maptiler:poi.15741076", + "maptiler:poi.34014416", + "maptiler:poi.15509199", + "maptiler:poi.36656201", + "maptiler:address.8692633" + ], + "rankedIds": [ + "maptiler:poi.15426609", + "maptiler:address.8692633", + "maptiler:poi.36656201", + "maptiler:poi.15741076" + ], + "rankedTop": "REWE, Invalidenstraße 158, 10115 Berlin, Germany", + "enter": { + "kind": "open", + "id": "maptiler:poi.15426609" + } + }, + { + "caseId": "wrong-address", + "variants": ["EDEKA Moch Grunerstraße 999 Berlin"], + "combinedIds": [ + "maptiler:place.4795446", + "maptiler:region.505", + "maptiler:locality.2701", + "maptiler:place.4534518", + "maptiler:neighbourhood.20256", + "maptiler:place.2470107" + ], + "rankedIds": [ + "maptiler:region.505", + "maptiler:locality.2701", + "maptiler:place.4534518", + "maptiler:place.4795446", + "maptiler:place.2470107", + "maptiler:neighbourhood.20256" + ], + "rankedTop": "Berlin, Germany", + "enter": { + "kind": "search", + "weak": true + } + }, + { + "caseId": "invented-name", + "variants": ["Zzqxv430 Testladen Grunerstraße 20 Berlin"], + "combinedIds": [ + "maptiler:address.12686057", + "maptiler:address.10027702", + "maptiler:address.10343043", + "maptiler:poi.2947497", + "maptiler:poi.2947574", + "maptiler:poi.6230752" + ], + "rankedIds": [ + "maptiler:address.12686057", + "maptiler:poi.6230752", + "maptiler:poi.2947497", + "maptiler:address.10027702", + "maptiler:address.10343043" + ], + "rankedTop": "Grunerstraße 20, 10179 Berlin, Germany", + "enter": { + "kind": "search", + "weak": true + } + }, + { + "caseId": "schaaf-address", + "variants": ["EDEKA Schaaf Schillingstraße 2 Berlin"], + "combinedIds": [ + "maptiler:poi.32879876", + "maptiler:address.4011014", + "maptiler:address.9975161", + "maptiler:address.18028993", + "maptiler:address.6705156", + "maptiler:region.505" + ], + "rankedIds": [ + "maptiler:region.505", + "maptiler:poi.32879876", + "maptiler:address.4011014", + "maptiler:address.18028993", + "maptiler:address.6705156", + "maptiler:address.9975161" + ], + "rankedTop": "Berlin, Germany", + "enter": { + "kind": "search", + "weak": true + } + } + ], + "osmTerms": [ + { + "id": "node/322490364", + "terms": [] + }, + { + "id": "way/258898047", + "terms": [ + { + "normalizedTerm": "alexa berlin", + "displayValue": "Alexa Berlin", + "kind": "explicit_alias", + "namespace": "alt_name" + } + ] + }, + { + "id": "way/1204762785", + "terms": [] + }, + { + "id": "node/348000444", + "terms": [] + }, + { + "id": "node/9154787137", + "terms": [] + } + ] +} diff --git a/scripts/discovery-eval/business-name-address/replay.ts b/scripts/discovery-eval/business-name-address/replay.ts new file mode 100644 index 000000000..023ff15c4 --- /dev/null +++ b/scripts/discovery-eval/business-name-address/replay.ts @@ -0,0 +1,59 @@ +/** Offline diagnostic replay. It never calls providers or changes production data. */ +import { execFileSync } from "node:child_process"; +import { readFileSync, writeFileSync } from "node:fs"; +import { getQueryVariants } from "../../../integrations/geocoding/query-expansion.js"; +import type { AutocompleteResult } from "../../../packages/core/src/types/geocoding.js"; +import { + enterAction, + rankAutocompleteRows, +} from "../../../packages/core/src/utils/suggestionRanking.js"; + +interface QuerySet { + baseline: string; + center: [number, number]; + zoom: number; + cases: Array<{ id: string; query: string }>; +} +interface Responses { + cases: Array<{ + caseId: string; + publicRows: AutocompleteResult[]; + aggregate: { suggestions: AutocompleteResult[]; partial: boolean }; + }>; +} +function read(name: string): T { + return JSON.parse(readFileSync(new URL(name, import.meta.url), "utf8")) as T; +} +const queries = read("queries-v1.json"); +const responses = read("responses-v1.json"); +const revision = execFileSync("git", ["rev-parse", "HEAD"], { encoding: "utf8" }).trim(); +const report = { + captureBaseline: queries.baseline, + replayRevision: revision, + dirty: execFileSync("git", ["status", "--porcelain"], { encoding: "utf8" }).trim() !== "", + sameRevision: revision === queries.baseline, + mode: "place-only source replay; shortcuts and live UI are separate evidence", + cases: responses.cases.map((fixture) => { + const entry = queries.cases.find((query) => query.id === fixture.caseId); + if (!entry) throw new Error("Missing business retrieval query"); + const context = { query: entry.query, proximity: queries.center, zoom: queries.zoom }; + const combined = [...fixture.aggregate.suggestions, ...fixture.publicRows]; + const ranked = rankAutocompleteRows({ places: combined }, context); + const action = enterAction(ranked, context); + return { + caseId: fixture.caseId, + variants: getQueryVariants(entry.query), + partial: fixture.aggregate.partial, + combinedIds: combined.map((row) => row.id), + rankedIds: ranked.map((row) => row.id), + enter: action.kind === "open" ? { kind: "open", id: action.row.id } : action, + }; + }), +}; +const output = `${JSON.stringify(report, null, 2)}\n`; +const outIndex = process.argv.indexOf("--out"); +if (outIndex >= 0) { + const out = process.argv[outIndex + 1]; + if (!out) throw new Error("Missing --out path"); + writeFileSync(out, output); +} else process.stdout.write(output); diff --git a/scripts/discovery-eval/business-name-address/responses-v1.json b/scripts/discovery-eval/business-name-address/responses-v1.json new file mode 100644 index 000000000..5b2ee5115 --- /dev/null +++ b/scripts/discovery-eval/business-name-address/responses-v1.json @@ -0,0 +1,3067 @@ +{ + "version": 1, + "provenance": "selected fields from independently captured raw MapTiler and public adapted API; not deployed revision evidence", + "queriesSha256": "bdc16e4a468dcda386be3f5cca86398b1e204056399b4fd1a4559d03eec27572", + "cases": [ + { + "caseId": "moch-name", + "captures": [ + { + "caseId": "moch-name", + "layer": "raw", + "capturedAt": "2026-10-07T20:37:20.387614+00:00", + "parameters": { + "language": "en", + "limit": "6", + "autocomplete": "true", + "types": "poi,address,street,neighbourhood,municipality,municipal_district,locality,subregion,region,county,country,postal_code,place", + "proximity": "13.42,52.52" + }, + "cache": "uncontrolled", + "requests": 1, + "status": 200, + "sha256": "3b672b7a47d0ce48d98dfbea22652977cc74c04ec1e220514fb0e0cf9365ba4e", + "cacheControl": "public, max-age=28800", + "age": null, + "latencyMs": 375.71 + }, + { + "caseId": "moch-name", + "layer": "public", + "capturedAt": "2026-10-07T20:37:20.388292+00:00", + "parameters": { + "q": "EDEKA Moch", + "lang": "en", + "lat": "52.5194", + "lng": "13.416", + "zoom": "15" + }, + "cache": "uncontrolled", + "requests": 1, + "status": 200, + "sha256": "bdb2ff47fcb089e90c32b8cce859a8ec8a85bc7375cc3f7129cac1386860a7ad", + "cacheControl": "public, max-age=3600", + "age": null, + "latencyMs": 116.75 + }, + { + "caseId": "moch-name", + "layer": "aggregate", + "capturedAt": "2026-10-07T20:37:20.388431+00:00", + "parameters": { + "q": "EDEKA Moch", + "lang": "en", + "lat": "52.5194", + "lng": "13.416", + "limit": "8" + }, + "cache": "uncontrolled", + "requests": 1, + "status": 200, + "sha256": "b8b2af892915997b28e1d8a1067f3ffe35e0ba5ae97941b49e112edf98cfa254", + "cacheControl": "no-store", + "age": null, + "latencyMs": 139.49 + } + ], + "rawFeatures": [ + { + "id": "poi.30456941", + "text": "EDEKA Koch-Sportpark", + "place_name": "EDEKA Koch-Sportpark, Karl-Brandt-Weg 11, 44629 Herne, Germany", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [7.208717748485128, 51.55210278682949] + }, + "properties": { + "ref": "osm:w25670529", + "categories": ["stadium"], + "wikidata": "Q1671027" + } + }, + { + "id": "poi.27997147", + "text": "Edeka Möck", + "place_name": "Edeka Möck, August-Lämmle-Straße 17, 72766 Reutlingen, Germany", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [9.22899305820465, 48.48657027701767] + }, + "properties": { + "ref": "osm:n3593639849", + "categories": ["supermarket"], + "feature_tags": { + "shop": "supermarket", + "addr:postcode": "72766", + "addr:city": "Reutlingen", + "addr:housenumber": "17", + "addr:street": "August-Lämmle-Straße" + } + } + }, + { + "id": "poi.32434263", + "text": "Edeka Möck", + "place_name": "Edeka Möck, Friedrich-Naumann-Straße 36, 72762 Reutlingen, Germany", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [9.191001408020384, 48.48736248347219] + }, + "properties": { + "ref": "osm:w62488816", + "categories": ["supermarket", "retail building"], + "feature_tags": { + "shop": "supermarket", + "addr:postcode": "72762", + "addr:city": "Reutlingen", + "addr:housenumber": "36", + "addr:street": "Friedrich-Naumann-Straße" + } + } + }, + { + "id": "poi.31643808", + "text": "Edeka Möck", + "place_name": "Edeka Möck, 72810 Gomaringen, Germany", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [9.102380722761154, 48.459401998661164] + }, + "properties": { + "ref": "osm:n13314629571", + "categories": ["supermarket"], + "feature_tags": { + "shop": "supermarket", + "addr:postcode": "72810", + "addr:city": "Gomaringen", + "addr:housenumber": "15", + "addr:street": "Ohmenhäuser Straße" + } + } + }, + { + "id": "poi.14639240", + "text": "Edeka Möck", + "place_name": "Edeka Möck, Robert-Bosch-Straße 19, 72810 Gomaringen, Germany", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [9.080636147370342, 48.455747733004614] + }, + "properties": { + "ref": "osm:w27644197", + "categories": ["supermarket"], + "feature_tags": { + "shop": "supermarket", + "addr:postcode": "72810", + "addr:city": "Gomaringen", + "addr:housenumber": "19", + "addr:street": "Robert-Bosch-Straße" + } + } + }, + { + "id": "poi.14883072", + "text": "Edeka Koch", + "place_name": "Edeka Koch, Im Grund 1, 72469 Meßstetten, Germany", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [8.954309790404409, 48.1768506016719] + }, + "properties": { + "ref": "osm:w922994590", + "categories": ["supermarket", "building"], + "feature_tags": { + "addr:housenumber": "1", + "shop": "supermarket", + "addr:street": "Im Grund", + "addr:postcode": "72469", + "addr:city": "Meßstetten" + } + } + } + ], + "publicRows": [ + { + "id": "maptiler:poi.30456941", + "ids": { + "wikidata": "Q1671027" + }, + "label": "EDEKA Koch-Sportpark", + "sublabel": "EDEKA Koch-Sportpark, Karl-Brandt-Weg 11, 44629 Herne, Germany", + "coordinates": [7.208717748485128, 51.55210278682949], + "type": "poi", + "rawCategory": "stadium", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:poi.27997147", + "label": "Edeka Möck", + "sublabel": "Edeka Möck, August-Lämmle-Straße 17, 72766 Reutlingen, Germany", + "coordinates": [9.22899305820465, 48.48657027701767], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:poi.32434263", + "label": "Edeka Möck", + "sublabel": "Edeka Möck, Friedrich-Naumann-Straße 36, 72762 Reutlingen, Germany", + "coordinates": [9.191001408020384, 48.48736248347219], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:poi.31643808", + "label": "Edeka Möck", + "sublabel": "Edeka Möck, 72810 Gomaringen, Germany", + "coordinates": [9.102380722761154, 48.459401998661164], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:poi.14639240", + "label": "Edeka Möck", + "sublabel": "Edeka Möck, Robert-Bosch-Straße 19, 72810 Gomaringen, Germany", + "coordinates": [9.080636147370342, 48.455747733004614], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:poi.14883072", + "label": "Edeka Koch", + "sublabel": "Edeka Koch, Im Grund 1, 72469 Meßstetten, Germany", + "coordinates": [8.954309790404409, 48.1768506016719], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" + } + ], + "aggregate": { + "suggestions": [], + "attributions": [], + "partial": true + } + }, + { + "caseId": "moch-address", + "captures": [ + { + "caseId": "moch-address", + "layer": "raw", + "capturedAt": "2026-10-07T20:37:20.763779+00:00", + "parameters": { + "language": "en", + "limit": "6", + "autocomplete": "true", + "types": "poi,address,street,neighbourhood,municipality,municipal_district,locality,subregion,region,county,country,postal_code,place", + "proximity": "13.42,52.52" + }, + "cache": "uncontrolled", + "requests": 1, + "status": 200, + "sha256": "de32c8bdf301705dd7748c4e040c678be1cc8861bac1b13610c6597a71acee58", + "cacheControl": "public, max-age=28800", + "age": null, + "latencyMs": 54.38 + }, + { + "caseId": "moch-address", + "layer": "public", + "capturedAt": "2026-10-07T20:37:20.764004+00:00", + "parameters": { + "q": "EDEKA Moch Grunerstraße 20", + "lang": "en", + "lat": "52.5194", + "lng": "13.416", + "zoom": "15" + }, + "cache": "uncontrolled", + "requests": 1, + "status": 200, + "sha256": "79320b1160a9a845ddbbbd27c78fab18d709bffa5c95eecab153dc8de3eb8091", + "cacheControl": "public, max-age=3600", + "age": null, + "latencyMs": 110.89 + }, + { + "caseId": "moch-address", + "layer": "aggregate", + "capturedAt": "2026-10-07T20:37:20.764227+00:00", + "parameters": { + "q": "EDEKA Moch Grunerstraße 20", + "lang": "en", + "lat": "52.5194", + "lng": "13.416", + "limit": "8" + }, + "cache": "uncontrolled", + "requests": 1, + "status": 200, + "sha256": "b8b2af892915997b28e1d8a1067f3ffe35e0ba5ae97941b49e112edf98cfa254", + "cacheControl": "no-store", + "age": null, + "latencyMs": 115.36 + } + ], + "rawFeatures": [ + { + "id": "address.12686057", + "text": "Grunerstraße", + "place_name": "Grunerstraße 20, 10179 Berlin, Germany", + "place_type": ["address"], + "geometry": { + "type": "Point", + "coordinates": [13.41582100000005, 52.518307] + }, + "properties": { + "ref": "osm:w1025851956", + "wikidata": "Q1550809" + } + }, + { + "id": "address.10027702", + "text": "Groenerstraße", + "place_name": "Groenerstraße 20, 13585 Berlin, Germany", + "place_type": ["address"], + "geometry": { + "type": "Point", + "coordinates": [13.20358299999998, 52.543163] + }, + "properties": { + "ref": "osm:w1306242932" + } + }, + { + "id": "address.10343043", + "text": "Gründerstraße", + "place_name": "Gründerstraße 20, 12526 Berlin, Germany", + "place_type": ["address"], + "geometry": { + "type": "Point", + "coordinates": [13.574141999999938, 52.409928] + }, + "properties": { + "ref": "osm:w130868556" + } + }, + { + "id": "address.9410688", + "text": "Grünerstraße", + "place_name": "Grünerstraße 20, 95615 Marktredwitz, Germany", + "place_type": ["address"], + "geometry": { + "type": "Point", + "coordinates": [12.09223099999997, 50.005279] + }, + "properties": { + "ref": "osm:w147440163" + } + }, + { + "id": "address.5097698", + "text": "Grunerstraße", + "place_name": "Grunerstraße 20, 65510 Idstein, Germany", + "place_type": ["address"], + "geometry": { + "type": "Point", + "coordinates": [8.267456000000038, 50.216309] + }, + "properties": { + "ref": "osm:w11487422" + } + }, + { + "id": "place.4929509", + "text": "Colonia 20 de Noviembre", + "place_name": "Colonia 20 de Noviembre, Huaniqueo, Mexico", + "place_type": ["place"], + "geometry": { + "type": "Point", + "coordinates": [-101.58130947500467, 19.893160393441814] + }, + "properties": { + "ref": "osm:n4554041879", + "place_designation": "hamlet" + } + } + ], + "publicRows": [ + { + "id": "maptiler:address.12686057", + "ids": { + "wikidata": "Q1550809" + }, + "label": "Grunerstraße", + "sublabel": "Grunerstraße 20, 10179 Berlin, Germany", + "coordinates": [13.41582100000005, 52.518307], + "type": "address", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:address.10027702", + "label": "Groenerstraße", + "sublabel": "Groenerstraße 20, 13585 Berlin, Germany", + "coordinates": [13.20358299999998, 52.543163], + "type": "address", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:address.10343043", + "label": "Gründerstraße", + "sublabel": "Gründerstraße 20, 12526 Berlin, Germany", + "coordinates": [13.574141999999938, 52.409928], + "type": "address", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:address.9410688", + "label": "Grünerstraße", + "sublabel": "Grünerstraße 20, 95615 Marktredwitz, Germany", + "coordinates": [12.09223099999997, 50.005279], + "type": "address", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:address.5097698", + "label": "Grunerstraße", + "sublabel": "Grunerstraße 20, 65510 Idstein, Germany", + "coordinates": [8.267456000000038, 50.216309], + "type": "address", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:place.4929509", + "label": "Colonia 20 de Noviembre", + "sublabel": "Colonia 20 de Noviembre, Huaniqueo, Mexico", + "coordinates": [-101.58130947500467, 19.893160393441814], + "type": "region", + "rawCategory": "place/hamlet", + "provider": "geocoding-maptiler" + } + ], + "aggregate": { + "suggestions": [], + "attributions": [], + "partial": true + } + }, + { + "caseId": "edeka-address", + "captures": [ + { + "caseId": "edeka-address", + "layer": "raw", + "capturedAt": "2026-10-07T20:37:20.880122+00:00", + "parameters": { + "language": "en", + "limit": "6", + "autocomplete": "true", + "types": "poi,address,street,neighbourhood,municipality,municipal_district,locality,subregion,region,county,country,postal_code,place", + "proximity": "13.42,52.52" + }, + "cache": "uncontrolled", + "requests": 1, + "status": 200, + "sha256": "59370a7728687624c9b4ad73c60e63a0095ad9ae0ac76534b9c9e8d0d1bcf44c", + "cacheControl": "public, max-age=28800", + "age": null, + "latencyMs": 275.82 + }, + { + "caseId": "edeka-address", + "layer": "public", + "capturedAt": "2026-10-07T20:37:20.880818+00:00", + "parameters": { + "q": "EDEKA Grunerstraße 20 Berlin", + "lang": "en", + "lat": "52.5194", + "lng": "13.416", + "zoom": "15" + }, + "cache": "uncontrolled", + "requests": 1, + "status": 200, + "sha256": "718bbdca726d99b4bc37527147a36f724b592f603fdfeddc4f18f46d4ddc2600", + "cacheControl": "public, max-age=3600", + "age": null, + "latencyMs": 293.55 + }, + { + "caseId": "edeka-address", + "layer": "aggregate", + "capturedAt": "2026-10-07T20:37:20.881283+00:00", + "parameters": { + "q": "EDEKA Grunerstraße 20 Berlin", + "lang": "en", + "lat": "52.5194", + "lng": "13.416", + "limit": "8" + }, + "cache": "uncontrolled", + "requests": 1, + "status": 200, + "sha256": "b8b2af892915997b28e1d8a1067f3ffe35e0ba5ae97941b49e112edf98cfa254", + "cacheControl": "no-store", + "age": null, + "latencyMs": 109.86 + } + ], + "rawFeatures": [ + { + "id": "poi.39267497", + "text": "EDEKA", + "place_name": "EDEKA, Alexanderstraße 25, 10178 Berlin, Germany", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [13.416776409228078, 52.51855355456135] + }, + "properties": { + "ref": "osm:w1204762785", + "categories": ["supermarket"], + "feature_tags": { + "shop": "supermarket", + "level": "-1", + "addr:city": "Berlin" + } + } + }, + { + "id": "poi.15407240", + "text": "EDEKA", + "place_name": "EDEKA, Markt 11, 13597 Berlin, Germany", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [13.204706087708473, 52.53740364108829] + }, + "properties": { + "ref": "osm:n271738194", + "categories": ["supermarket"], + "feature_tags": { + "shop": "supermarket", + "addr:postcode": "13597", + "addr:city": "Berlin", + "addr:housenumber": "11", + "addr:street": "Markt" + } + } + }, + { + "id": "poi.15448214", + "text": "EDEKA", + "place_name": "EDEKA, Buntzelstraße 14, 12526 Berlin, Germany", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [13.57199840247631, 52.408887070774476] + }, + "properties": { + "ref": "osm:n471301175", + "categories": ["supermarket"], + "feature_tags": { + "shop": "supermarket", + "addr:postcode": "12526", + "addr:city": "Berlin", + "addr:housenumber": "14", + "addr:street": "Buntzelstraße" + } + } + }, + { + "id": "poi.30149398", + "text": "EDEKA", + "place_name": "EDEKA, Falkenseer Chaussee 266a, 13583 Berlin, Germany", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [13.186250478029251, 52.54698238754912] + }, + "properties": { + "ref": "osm:n1008550282", + "categories": ["supermarket"], + "feature_tags": { + "shop": "supermarket" + } + } + }, + { + "id": "address.12686057", + "text": "Grunerstraße", + "place_name": "Grunerstraße 20, 10179 Berlin, Germany", + "place_type": ["address"], + "geometry": { + "type": "Point", + "coordinates": [13.41582100000005, 52.518307] + }, + "properties": { + "ref": "osm:w1025851956", + "wikidata": "Q1550809" + } + }, + { + "id": "address.10027702", + "text": "Groenerstraße", + "place_name": "Groenerstraße 20, 13585 Berlin, Germany", + "place_type": ["address"], + "geometry": { + "type": "Point", + "coordinates": [13.20358299999998, 52.543163] + }, + "properties": { + "ref": "osm:w1306242932" + } + } + ], + "publicRows": [ + { + "id": "maptiler:poi.39267497", + "label": "EDEKA", + "sublabel": "EDEKA, Alexanderstraße 25, 10178 Berlin, Germany", + "coordinates": [13.416776409228078, 52.51855355456135], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:poi.15407240", + "label": "EDEKA", + "sublabel": "EDEKA, Markt 11, 13597 Berlin, Germany", + "coordinates": [13.204706087708473, 52.53740364108829], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:poi.15448214", + "label": "EDEKA", + "sublabel": "EDEKA, Buntzelstraße 14, 12526 Berlin, Germany", + "coordinates": [13.57199840247631, 52.408887070774476], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:poi.30149398", + "label": "EDEKA", + "sublabel": "EDEKA, Falkenseer Chaussee 266a, 13583 Berlin, Germany", + "coordinates": [13.186250478029251, 52.54698238754912], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:address.12686057", + "ids": { + "wikidata": "Q1550809" + }, + "label": "Grunerstraße", + "sublabel": "Grunerstraße 20, 10179 Berlin, Germany", + "coordinates": [13.41582100000005, 52.518307], + "type": "address", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:address.10027702", + "label": "Groenerstraße", + "sublabel": "Groenerstraße 20, 13585 Berlin, Germany", + "coordinates": [13.20358299999998, 52.543163], + "type": "address", + "provider": "geocoding-maptiler" + } + ], + "aggregate": { + "suggestions": [], + "attributions": [], + "partial": true + } + }, + { + "caseId": "edeka-alexa", + "captures": [ + { + "caseId": "edeka-alexa", + "layer": "raw", + "capturedAt": "2026-10-07T20:37:21.174953+00:00", + "parameters": { + "language": "en", + "limit": "6", + "autocomplete": "true", + "types": "poi,address,street,neighbourhood,municipality,municipal_district,locality,subregion,region,county,country,postal_code,place", + "proximity": "13.42,52.52" + }, + "cache": "uncontrolled", + "requests": 1, + "status": 200, + "sha256": "65030fdf1a6f03343e40a346b6ef71bb9fe80ff0c0b8c85f3e37009ccc022db1", + "cacheControl": "public, max-age=28800", + "age": null, + "latencyMs": 58.12 + }, + { + "caseId": "edeka-alexa", + "layer": "public", + "capturedAt": "2026-10-07T20:37:21.175677+00:00", + "parameters": { + "q": "EDEKA Alexa", + "lang": "en", + "lat": "52.5194", + "lng": "13.416", + "zoom": "15" + }, + "cache": "uncontrolled", + "requests": 1, + "status": 200, + "sha256": "2c73b1d516e02b6f8e42f22394a13d4d209512ce3148b59d2fc34582fa0de461", + "cacheControl": "public, max-age=3600", + "age": null, + "latencyMs": 102.36 + }, + { + "caseId": "edeka-alexa", + "layer": "aggregate", + "capturedAt": "2026-10-07T20:37:21.176078+00:00", + "parameters": { + "q": "EDEKA Alexa", + "lang": "en", + "lat": "52.5194", + "lng": "13.416", + "limit": "8" + }, + "cache": "uncontrolled", + "requests": 1, + "status": 200, + "sha256": "b8b2af892915997b28e1d8a1067f3ffe35e0ba5ae97941b49e112edf98cfa254", + "cacheControl": "no-store", + "age": null, + "latencyMs": 122.65 + } + ], + "rawFeatures": [ + { + "id": "poi.39267497", + "text": "EDEKA", + "place_name": "EDEKA, Alexanderstraße 25, 10178 Berlin, Germany", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [13.416776409228078, 52.51855355456135] + }, + "properties": { + "ref": "osm:w1204762785", + "categories": ["supermarket"], + "feature_tags": { + "shop": "supermarket", + "level": "-1", + "addr:city": "Berlin" + } + } + }, + { + "id": "poi.15445342", + "text": "EDEKA", + "place_name": "EDEKA, Barnimstraße 18, 10249 Berlin, Germany", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [13.42295877635479, 52.52607532450191] + }, + "properties": { + "ref": "osm:n448814806", + "categories": ["supermarket"], + "feature_tags": { + "shop": "supermarket", + "addr:postcode": "10249", + "addr:city": "Berlin", + "addr:housenumber": "18", + "addr:street": "Barnimstraße" + } + } + }, + { + "id": "poi.15632141", + "text": "EDEKA", + "place_name": "EDEKA, Straßburger Straße 9A-C, 10405 Berlin, Germany", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [13.41357808560133, 52.52919226436692] + }, + "properties": { + "ref": "osm:n3889187276", + "categories": ["supermarket"], + "feature_tags": { + "shop": "supermarket", + "addr:postcode": "10405", + "addr:city": "Berlin", + "addr:housenumber": "9A-C", + "addr:street": "Straßburger Straße" + } + } + }, + { + "id": "poi.15895501", + "text": "EDEKA", + "place_name": "EDEKA, Annenstraße 4a, 10179 Berlin, Germany", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [13.415483734242002, 52.50777084974184] + }, + "properties": { + "ref": "osm:w52092588", + "categories": ["supermarket", "commercial building"], + "feature_tags": { + "shop": "supermarket", + "addr:postcode": "10179", + "addr:city": "Berlin", + "addr:housenumber": "4a", + "addr:street": "Annenstraße" + } + } + }, + { + "id": "poi.32007491", + "text": "EDEKA", + "place_name": "EDEKA, Templiner Straße 13a, 10119 Berlin, Germany", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [13.40784888714552, 52.53201304601752] + }, + "properties": { + "ref": "osm:n6595730361", + "categories": ["supermarket"], + "feature_tags": { + "shop": "supermarket", + "level": "0", + "addr:postcode": "10119", + "addr:city": "Berlin", + "addr:housenumber": "12", + "addr:street": "Templiner Straße" + } + } + }, + { + "id": "poi.15469482", + "text": "EDEKA", + "place_name": "EDEKA, Ritterstraße 38-40, 10969 Berlin, Germany", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [13.403648883104324, 52.5035654379113] + }, + "properties": { + "ref": "osm:n652570198", + "categories": ["supermarket"], + "feature_tags": { + "shop": "supermarket", + "addr:postcode": "10969", + "addr:city": "Berlin", + "addr:housenumber": "38-40", + "addr:street": "Ritterstraße" + } + } + } + ], + "publicRows": [ + { + "id": "maptiler:poi.39267497", + "label": "EDEKA", + "sublabel": "EDEKA, Alexanderstraße 25, 10178 Berlin, Germany", + "coordinates": [13.416776409228078, 52.51855355456135], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:poi.15445342", + "label": "EDEKA", + "sublabel": "EDEKA, Barnimstraße 18, 10249 Berlin, Germany", + "coordinates": [13.42295877635479, 52.52607532450191], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:poi.15632141", + "label": "EDEKA", + "sublabel": "EDEKA, Straßburger Straße 9A-C, 10405 Berlin, Germany", + "coordinates": [13.41357808560133, 52.52919226436692], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:poi.15895501", + "label": "EDEKA", + "sublabel": "EDEKA, Annenstraße 4a, 10179 Berlin, Germany", + "coordinates": [13.415483734242002, 52.50777084974184], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:poi.32007491", + "label": "EDEKA", + "sublabel": "EDEKA, Templiner Straße 13a, 10119 Berlin, Germany", + "coordinates": [13.40784888714552, 52.53201304601752], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:poi.15469482", + "label": "EDEKA", + "sublabel": "EDEKA, Ritterstraße 38-40, 10969 Berlin, Germany", + "coordinates": [13.403648883104324, 52.5035654379113], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" + } + ], + "aggregate": { + "suggestions": [], + "attributions": [], + "partial": true + } + }, + { + "caseId": "edeka-gruner", + "captures": [ + { + "caseId": "edeka-gruner", + "layer": "raw", + "capturedAt": "2026-10-07T20:37:21.299263+00:00", + "parameters": { + "language": "en", + "limit": "6", + "autocomplete": "true", + "types": "poi,address,street,neighbourhood,municipality,municipal_district,locality,subregion,region,county,country,postal_code,place", + "proximity": "13.42,52.52" + }, + "cache": "uncontrolled", + "requests": 1, + "status": 200, + "sha256": "df9f7962a16a2bd5b792fae793281fcaa49ee32d4c208776f1d6945619f43870", + "cacheControl": "public, max-age=28800", + "age": null, + "latencyMs": 73.66 + }, + { + "caseId": "edeka-gruner", + "layer": "public", + "capturedAt": "2026-10-07T20:37:21.299956+00:00", + "parameters": { + "q": "EDEKA Grunerstraße", + "lang": "en", + "lat": "52.5194", + "lng": "13.416", + "zoom": "15" + }, + "cache": "uncontrolled", + "requests": 1, + "status": 200, + "sha256": "da505f6bbd228d5c42b6ab9e5475e440fc88090fa44c470a03eb867cc15dae74", + "cacheControl": "public, max-age=3600", + "age": null, + "latencyMs": 114.39 + }, + { + "caseId": "edeka-gruner", + "layer": "aggregate", + "capturedAt": "2026-10-07T20:37:21.300560+00:00", + "parameters": { + "q": "EDEKA Grunerstraße", + "lang": "en", + "lat": "52.5194", + "lng": "13.416", + "limit": "8" + }, + "cache": "uncontrolled", + "requests": 1, + "status": 200, + "sha256": "b8b2af892915997b28e1d8a1067f3ffe35e0ba5ae97941b49e112edf98cfa254", + "cacheControl": "no-store", + "age": null, + "latencyMs": 113.85 + } + ], + "rawFeatures": [ + { + "id": "poi.39267497", + "text": "EDEKA", + "place_name": "EDEKA, Alexanderstraße 25, 10178 Berlin, Germany", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [13.416776409228078, 52.51855355456135] + }, + "properties": { + "ref": "osm:w1204762785", + "categories": ["supermarket"], + "feature_tags": { + "shop": "supermarket", + "level": "-1", + "addr:city": "Berlin" + } + } + }, + { + "id": "poi.15448214", + "text": "EDEKA", + "place_name": "EDEKA, Buntzelstraße 14, 12526 Berlin, Germany", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [13.57199840247631, 52.408887070774476] + }, + "properties": { + "ref": "osm:n471301175", + "categories": ["supermarket"], + "feature_tags": { + "shop": "supermarket", + "addr:postcode": "12526", + "addr:city": "Berlin", + "addr:housenumber": "14", + "addr:street": "Buntzelstraße" + } + } + }, + { + "id": "poi.15864452", + "text": "EDEKA", + "place_name": "EDEKA, Platz der Vereinten Nationen 14, 10249 Berlin, Germany", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [13.428411649527902, 52.52262534175838] + }, + "properties": { + "ref": "osm:w24035130", + "categories": ["supermarket", "retail building"], + "feature_tags": { + "shop": "supermarket", + "addr:postcode": "10249", + "addr:city": "Berlin", + "addr:housenumber": "14", + "addr:street": "Platz der Vereinten Nationen" + } + } + }, + { + "id": "poi.15445342", + "text": "EDEKA", + "place_name": "EDEKA, Barnimstraße 18, 10249 Berlin, Germany", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [13.42295877635479, 52.52607532450191] + }, + "properties": { + "ref": "osm:n448814806", + "categories": ["supermarket"], + "feature_tags": { + "shop": "supermarket", + "addr:postcode": "10249", + "addr:city": "Berlin", + "addr:housenumber": "18", + "addr:street": "Barnimstraße" + } + } + }, + { + "id": "poi.15632141", + "text": "EDEKA", + "place_name": "EDEKA, Straßburger Straße 9A-C, 10405 Berlin, Germany", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [13.41357808560133, 52.52919226436692] + }, + "properties": { + "ref": "osm:n3889187276", + "categories": ["supermarket"], + "feature_tags": { + "shop": "supermarket", + "addr:postcode": "10405", + "addr:city": "Berlin", + "addr:housenumber": "9A-C", + "addr:street": "Straßburger Straße" + } + } + }, + { + "id": "poi.15895501", + "text": "EDEKA", + "place_name": "EDEKA, Annenstraße 4a, 10179 Berlin, Germany", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [13.415483734242002, 52.50777084974184] + }, + "properties": { + "ref": "osm:w52092588", + "categories": ["supermarket", "commercial building"], + "feature_tags": { + "shop": "supermarket", + "addr:postcode": "10179", + "addr:city": "Berlin", + "addr:housenumber": "4a", + "addr:street": "Annenstraße" + } + } + } + ], + "publicRows": [ + { + "id": "maptiler:poi.39267497", + "label": "EDEKA", + "sublabel": "EDEKA, Alexanderstraße 25, 10178 Berlin, Germany", + "coordinates": [13.416776409228078, 52.51855355456135], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:poi.15448214", + "label": "EDEKA", + "sublabel": "EDEKA, Buntzelstraße 14, 12526 Berlin, Germany", + "coordinates": [13.57199840247631, 52.408887070774476], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:poi.15864452", + "label": "EDEKA", + "sublabel": "EDEKA, Platz der Vereinten Nationen 14, 10249 Berlin, Germany", + "coordinates": [13.428411649527902, 52.52262534175838], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:poi.15445342", + "label": "EDEKA", + "sublabel": "EDEKA, Barnimstraße 18, 10249 Berlin, Germany", + "coordinates": [13.42295877635479, 52.52607532450191], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:poi.15632141", + "label": "EDEKA", + "sublabel": "EDEKA, Straßburger Straße 9A-C, 10405 Berlin, Germany", + "coordinates": [13.41357808560133, 52.52919226436692], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:poi.15895501", + "label": "EDEKA", + "sublabel": "EDEKA, Annenstraße 4a, 10179 Berlin, Germany", + "coordinates": [13.415483734242002, 52.50777084974184], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" + } + ], + "aggregate": { + "suggestions": [], + "attributions": [], + "partial": true + } + }, + { + "caseId": "edeka-alexander", + "captures": [ + { + "caseId": "edeka-alexander", + "layer": "raw", + "capturedAt": "2026-10-07T20:37:21.414677+00:00", + "parameters": { + "language": "en", + "limit": "6", + "autocomplete": "true", + "types": "poi,address,street,neighbourhood,municipality,municipal_district,locality,subregion,region,county,country,postal_code,place", + "proximity": "13.42,52.52" + }, + "cache": "uncontrolled", + "requests": 1, + "status": 200, + "sha256": "6ae6be3085ab9315c8fac4800ce955f9a9c6dd805622e095bc2c64ce90d0e26a", + "cacheControl": "public, max-age=28800", + "age": null, + "latencyMs": 380.2 + }, + { + "caseId": "edeka-alexander", + "layer": "public", + "capturedAt": "2026-10-07T20:37:21.414883+00:00", + "parameters": { + "q": "EDEKA Alexanderstraße 25 Berlin", + "lang": "en", + "lat": "52.5194", + "lng": "13.416", + "zoom": "15" + }, + "cache": "uncontrolled", + "requests": 1, + "status": 200, + "sha256": "e494003a80cb535257e463ca733a903e40f82f607993a718dc689820ee529500", + "cacheControl": "public, max-age=3600", + "age": null, + "latencyMs": 395.34 + }, + { + "caseId": "edeka-alexander", + "layer": "aggregate", + "capturedAt": "2026-10-07T20:37:21.415015+00:00", + "parameters": { + "q": "EDEKA Alexanderstraße 25 Berlin", + "lang": "en", + "lat": "52.5194", + "lng": "13.416", + "limit": "8" + }, + "cache": "uncontrolled", + "requests": 1, + "status": 200, + "sha256": "b8b2af892915997b28e1d8a1067f3ffe35e0ba5ae97941b49e112edf98cfa254", + "cacheControl": "no-store", + "age": null, + "latencyMs": 110.33 + } + ], + "rawFeatures": [ + { + "id": "poi.39267497", + "text": "EDEKA", + "place_name": "EDEKA, Alexanderstraße 25, 10178 Berlin, Germany", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [13.416776409228078, 52.51855355456135] + }, + "properties": { + "ref": "osm:w1204762785", + "categories": ["supermarket"], + "feature_tags": { + "shop": "supermarket", + "level": "-1", + "addr:city": "Berlin" + } + } + }, + { + "id": "poi.15445342", + "text": "EDEKA", + "place_name": "EDEKA, Barnimstraße 18, 10249 Berlin, Germany", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [13.42295877635479, 52.52607532450191] + }, + "properties": { + "ref": "osm:n448814806", + "categories": ["supermarket"], + "feature_tags": { + "shop": "supermarket", + "addr:postcode": "10249", + "addr:city": "Berlin", + "addr:housenumber": "18", + "addr:street": "Barnimstraße" + } + } + }, + { + "id": "poi.15632141", + "text": "EDEKA", + "place_name": "EDEKA, Straßburger Straße 9A-C, 10405 Berlin, Germany", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [13.41357808560133, 52.52919226436692] + }, + "properties": { + "ref": "osm:n3889187276", + "categories": ["supermarket"], + "feature_tags": { + "shop": "supermarket", + "addr:postcode": "10405", + "addr:city": "Berlin", + "addr:housenumber": "9A-C", + "addr:street": "Straßburger Straße" + } + } + }, + { + "id": "poi.32007491", + "text": "EDEKA", + "place_name": "EDEKA, Templiner Straße 13a, 10119 Berlin, Germany", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [13.40784888714552, 52.53201304601752] + }, + "properties": { + "ref": "osm:n6595730361", + "categories": ["supermarket"], + "feature_tags": { + "shop": "supermarket", + "level": "0", + "addr:postcode": "10119", + "addr:city": "Berlin", + "addr:housenumber": "12", + "addr:street": "Templiner Straße" + } + } + }, + { + "id": "address.6574798", + "text": "Alexanderstraße", + "place_name": "Alexanderstraße 25, 10179 Berlin, Germany", + "place_type": ["address"], + "geometry": { + "type": "Point", + "coordinates": [13.41794200000004, 52.519004] + }, + "properties": { + "ref": "osm:w100405009", + "wikidata": "Q17486182" + } + }, + { + "id": "poi.15258278", + "text": "Edeka", + "place_name": "Edeka, Berliner Straße 96, 13507 Berlin, Germany", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [13.284847810864449, 52.589088279152] + }, + "properties": { + "ref": "osm:n316772479", + "categories": ["supermarket"], + "feature_tags": { + "shop": "supermarket", + "addr:postcode": "13507", + "addr:city": "Berlin", + "addr:housenumber": "96", + "addr:street": "Berliner Straße" + } + } + } + ], + "publicRows": [ + { + "id": "maptiler:poi.39267497", + "label": "EDEKA", + "sublabel": "EDEKA, Alexanderstraße 25, 10178 Berlin, Germany", + "coordinates": [13.416776409228078, 52.51855355456135], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:poi.15445342", + "label": "EDEKA", + "sublabel": "EDEKA, Barnimstraße 18, 10249 Berlin, Germany", + "coordinates": [13.42295877635479, 52.52607532450191], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:poi.15632141", + "label": "EDEKA", + "sublabel": "EDEKA, Straßburger Straße 9A-C, 10405 Berlin, Germany", + "coordinates": [13.41357808560133, 52.52919226436692], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:poi.32007491", + "label": "EDEKA", + "sublabel": "EDEKA, Templiner Straße 13a, 10119 Berlin, Germany", + "coordinates": [13.40784888714552, 52.53201304601752], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:address.6574798", + "ids": { + "wikidata": "Q17486182" + }, + "label": "Alexanderstraße", + "sublabel": "Alexanderstraße 25, 10179 Berlin, Germany", + "coordinates": [13.41794200000004, 52.519004], + "type": "address", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:poi.15258278", + "label": "Edeka", + "sublabel": "Edeka, Berliner Straße 96, 13507 Berlin, Germany", + "coordinates": [13.284847810864449, 52.589088279152], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" + } + ], + "aggregate": { + "suggestions": [], + "attributions": [], + "partial": true + } + }, + { + "caseId": "edeka-brand", + "captures": [ + { + "caseId": "edeka-brand", + "layer": "raw", + "capturedAt": "2026-10-07T20:37:21.811697+00:00", + "parameters": { + "language": "en", + "limit": "6", + "autocomplete": "true", + "types": "poi,address,street,neighbourhood,municipality,municipal_district,locality,subregion,region,county,country,postal_code,place", + "proximity": "13.42,52.52" + }, + "cache": "uncontrolled", + "requests": 1, + "status": 200, + "sha256": "0c28b49388c08526bcfd175580af9f19dcb9ba0de1d88615611323b22c2c3b2f", + "cacheControl": "public, max-age=28800", + "age": null, + "latencyMs": 52.47 + }, + { + "caseId": "edeka-brand", + "layer": "public", + "capturedAt": "2026-10-07T20:37:21.812402+00:00", + "parameters": { + "q": "EDEKA", + "lang": "en", + "lat": "52.5194", + "lng": "13.416", + "zoom": "15" + }, + "cache": "uncontrolled", + "requests": 1, + "status": 200, + "sha256": "25c4325737819e2daf8ae46221350c5032a62ff0c75e8b440648ed6a12a2f94d", + "cacheControl": "public, max-age=3600", + "age": null, + "latencyMs": 86.58 + }, + { + "caseId": "edeka-brand", + "layer": "aggregate", + "capturedAt": "2026-10-07T20:37:21.812631+00:00", + "parameters": { + "q": "EDEKA", + "lang": "en", + "lat": "52.5194", + "lng": "13.416", + "limit": "8" + }, + "cache": "uncontrolled", + "requests": 1, + "status": 200, + "sha256": "b8b2af892915997b28e1d8a1067f3ffe35e0ba5ae97941b49e112edf98cfa254", + "cacheControl": "no-store", + "age": null, + "latencyMs": 113.13 + } + ], + "rawFeatures": [ + { + "id": "poi.39267497", + "text": "EDEKA", + "place_name": "EDEKA, Alexanderstraße 25, 10178 Berlin, Germany", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [13.416776409228078, 52.51855355456135] + }, + "properties": { + "ref": "osm:w1204762785", + "categories": ["supermarket"], + "feature_tags": { + "shop": "supermarket", + "level": "-1", + "addr:city": "Berlin" + } + } + }, + { + "id": "poi.15864452", + "text": "EDEKA", + "place_name": "EDEKA, Platz der Vereinten Nationen 14, 10249 Berlin, Germany", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [13.428411649527902, 52.52262534175838] + }, + "properties": { + "ref": "osm:w24035130", + "categories": ["supermarket", "retail building"], + "feature_tags": { + "shop": "supermarket", + "addr:postcode": "10249", + "addr:city": "Berlin", + "addr:housenumber": "14", + "addr:street": "Platz der Vereinten Nationen" + } + } + }, + { + "id": "poi.15445342", + "text": "EDEKA", + "place_name": "EDEKA, Barnimstraße 18, 10249 Berlin, Germany", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [13.42295877635479, 52.52607532450191] + }, + "properties": { + "ref": "osm:n448814806", + "categories": ["supermarket"], + "feature_tags": { + "shop": "supermarket", + "addr:postcode": "10249", + "addr:city": "Berlin", + "addr:housenumber": "18", + "addr:street": "Barnimstraße" + } + } + }, + { + "id": "poi.15632141", + "text": "EDEKA", + "place_name": "EDEKA, Straßburger Straße 9A-C, 10405 Berlin, Germany", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [13.41357808560133, 52.52919226436692] + }, + "properties": { + "ref": "osm:n3889187276", + "categories": ["supermarket"], + "feature_tags": { + "shop": "supermarket", + "addr:postcode": "10405", + "addr:city": "Berlin", + "addr:housenumber": "9A-C", + "addr:street": "Straßburger Straße" + } + } + }, + { + "id": "poi.15895501", + "text": "EDEKA", + "place_name": "EDEKA, Annenstraße 4a, 10179 Berlin, Germany", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [13.415483734242002, 52.50777084974184] + }, + "properties": { + "ref": "osm:w52092588", + "categories": ["supermarket", "commercial building"], + "feature_tags": { + "shop": "supermarket", + "addr:postcode": "10179", + "addr:city": "Berlin", + "addr:housenumber": "4a", + "addr:street": "Annenstraße" + } + } + }, + { + "id": "poi.32007491", + "text": "EDEKA", + "place_name": "EDEKA, Templiner Straße 13a, 10119 Berlin, Germany", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [13.40784888714552, 52.53201304601752] + }, + "properties": { + "ref": "osm:n6595730361", + "categories": ["supermarket"], + "feature_tags": { + "shop": "supermarket", + "level": "0", + "addr:postcode": "10119", + "addr:city": "Berlin", + "addr:housenumber": "12", + "addr:street": "Templiner Straße" + } + } + } + ], + "publicRows": [ + { + "id": "maptiler:poi.39267497", + "label": "EDEKA", + "sublabel": "EDEKA, Alexanderstraße 25, 10178 Berlin, Germany", + "coordinates": [13.416776409228078, 52.51855355456135], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:poi.15864452", + "label": "EDEKA", + "sublabel": "EDEKA, Platz der Vereinten Nationen 14, 10249 Berlin, Germany", + "coordinates": [13.428411649527902, 52.52262534175838], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:poi.15445342", + "label": "EDEKA", + "sublabel": "EDEKA, Barnimstraße 18, 10249 Berlin, Germany", + "coordinates": [13.42295877635479, 52.52607532450191], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:poi.15632141", + "label": "EDEKA", + "sublabel": "EDEKA, Straßburger Straße 9A-C, 10405 Berlin, Germany", + "coordinates": [13.41357808560133, 52.52919226436692], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:poi.15895501", + "label": "EDEKA", + "sublabel": "EDEKA, Annenstraße 4a, 10179 Berlin, Germany", + "coordinates": [13.415483734242002, 52.50777084974184], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:poi.32007491", + "label": "EDEKA", + "sublabel": "EDEKA, Templiner Straße 13a, 10119 Berlin, Germany", + "coordinates": [13.40784888714552, 52.53201304601752], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" + } + ], + "aggregate": { + "suggestions": [], + "attributions": [], + "partial": true + } + }, + { + "caseId": "media-alexa", + "captures": [ + { + "caseId": "media-alexa", + "layer": "raw", + "capturedAt": "2026-10-07T20:37:21.926437+00:00", + "parameters": { + "language": "en", + "limit": "6", + "autocomplete": "true", + "types": "poi,address,street,neighbourhood,municipality,municipal_district,locality,subregion,region,county,country,postal_code,place", + "proximity": "13.42,52.52" + }, + "cache": "uncontrolled", + "requests": 1, + "status": 200, + "sha256": "8f4c2dfd75dbae992ec0f0014cb6ff0da401b30f2202ead718751c3894f0e271", + "cacheControl": "public, max-age=28800", + "age": null, + "latencyMs": 61.11 + }, + { + "caseId": "media-alexa", + "layer": "public", + "capturedAt": "2026-10-07T20:37:21.927781+00:00", + "parameters": { + "q": "MediaMarkt Alexa", + "lang": "en", + "lat": "52.5194", + "lng": "13.416", + "zoom": "15" + }, + "cache": "uncontrolled", + "requests": 1, + "status": 200, + "sha256": "2689f023c52e128f95bc529f9088fa96926800b18e54211dac6322fcf33e812b", + "cacheControl": "public, max-age=3600", + "age": null, + "latencyMs": 96.67 + }, + { + "caseId": "media-alexa", + "layer": "aggregate", + "capturedAt": "2026-10-07T20:37:21.930101+00:00", + "parameters": { + "q": "MediaMarkt Alexa", + "lang": "en", + "lat": "52.5194", + "lng": "13.416", + "limit": "8" + }, + "cache": "uncontrolled", + "requests": 1, + "status": 200, + "sha256": "b8b2af892915997b28e1d8a1067f3ffe35e0ba5ae97941b49e112edf98cfa254", + "cacheControl": "no-store", + "age": null, + "latencyMs": 113.35 + } + ], + "rawFeatures": [ + { + "id": "poi.15539884", + "text": "MediaMarkt", + "place_name": "MediaMarkt, Pr Willem Alexander Prom 69-83, 2284 DJ Rijswijk, Netherlands", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [4.316869229078293, 52.03636822992996] + }, + "properties": { + "ref": "osm:n1845949909", + "categories": ["electronics"], + "feature_tags": { + "shop": "electronics", + "level": "1", + "addr:postcode": "2284DJ", + "addr:city": "Rijswijk", + "addr:housenumber": "69-83", + "addr:street": "Pr Willem Alexander Prom" + } + } + }, + { + "id": "poi.15422100", + "text": "MediaMarkt", + "place_name": "MediaMarkt, Grunerstraße 20, 10179 Berlin, Germany", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [13.414790779352188, 52.51986159027454] + }, + "properties": { + "ref": "osm:n322490364", + "categories": ["electronics"], + "feature_tags": { + "shop": "electronics", + "level": "0", + "addr:postcode": "10179", + "addr:city": "Berlin", + "addr:housenumber": "20", + "addr:street": "Grunerstraße" + } + } + }, + { + "id": "poi.15388462", + "text": "MediaMarkt", + "place_name": "MediaMarkt, Äußere Schneeberger Straße 95, 08056 Zwickau, Germany", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [12.499412186443806, 50.70416170071806] + }, + "properties": { + "ref": "osm:n267485594", + "categories": ["electronics"], + "feature_tags": { + "shop": "electronics", + "addr:postcode": "08056", + "addr:city": "Zwickau", + "addr:housenumber": "95", + "addr:street": "Äußere Schneeberger Straße" + } + } + }, + { + "id": "poi.15513302", + "text": "MediaMarkt", + "place_name": "MediaMarkt, Waldershofer Straße 10, 95615 Marktredwitz, Germany", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [12.077845813448675, 49.99956173454102] + }, + "properties": { + "ref": "osm:w145348876", + "categories": ["electronics", "building"], + "feature_tags": { + "addr:housenumber": "10", + "shop": "electronics", + "addr:street": "Waldershofer Straße", + "addr:postcode": "95615", + "addr:city": "Marktredwitz" + } + } + }, + { + "id": "poi.27301831", + "text": "MediaMarkt", + "place_name": "MediaMarkt, Schloßplatz 8, 26122 Oldenburg, Germany", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [8.216576837003231, 53.13856416583732] + }, + "properties": { + "ref": "osm:n3555055573", + "categories": ["electronics"], + "feature_tags": { + "shop": "electronics", + "level": "-1", + "addr:postcode": "26122", + "addr:city": "Oldenburg", + "addr:housenumber": "3", + "addr:street": "Schloßplatz" + } + } + }, + { + "id": "poi.31290179", + "text": "MediaMarkt", + "place_name": "MediaMarkt, Posthalterweg 15, 26129 Oldenburg, Germany", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [8.172727230560895, 53.16099834226386] + }, + "properties": { + "ref": "osm:w1134980105", + "categories": ["electronics", "retail building"], + "feature_tags": { + "shop": "electronics", + "addr:postcode": "26129", + "addr:city": "Oldenburg", + "addr:housenumber": "15", + "addr:street": "Posthalterweg" + } + } + } + ], + "publicRows": [ + { + "id": "maptiler:poi.15539884", + "label": "MediaMarkt", + "sublabel": "MediaMarkt, Pr Willem Alexander Prom 69-83, 2284 DJ Rijswijk, Netherlands", + "coordinates": [4.316869229078293, 52.03636822992996], + "type": "poi", + "rawCategory": "electronics", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:poi.15422100", + "label": "MediaMarkt", + "sublabel": "MediaMarkt, Grunerstraße 20, 10179 Berlin, Germany", + "coordinates": [13.414790779352188, 52.51986159027454], + "type": "poi", + "rawCategory": "electronics", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:poi.15388462", + "label": "MediaMarkt", + "sublabel": "MediaMarkt, Äußere Schneeberger Straße 95, 08056 Zwickau, Germany", + "coordinates": [12.499412186443806, 50.70416170071806], + "type": "poi", + "rawCategory": "electronics", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:poi.15513302", + "label": "MediaMarkt", + "sublabel": "MediaMarkt, Waldershofer Straße 10, 95615 Marktredwitz, Germany", + "coordinates": [12.077845813448675, 49.99956173454102], + "type": "poi", + "rawCategory": "electronics", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:poi.27301831", + "label": "MediaMarkt", + "sublabel": "MediaMarkt, Schloßplatz 8, 26122 Oldenburg, Germany", + "coordinates": [8.216576837003231, 53.13856416583732], + "type": "poi", + "rawCategory": "electronics", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:poi.31290179", + "label": "MediaMarkt", + "sublabel": "MediaMarkt, Posthalterweg 15, 26129 Oldenburg, Germany", + "coordinates": [8.172727230560895, 53.16099834226386], + "type": "poi", + "rawCategory": "electronics", + "provider": "geocoding-maptiler" + } + ], + "aggregate": { + "suggestions": [], + "attributions": [], + "partial": true + } + }, + { + "caseId": "media-address", + "captures": [ + { + "caseId": "media-address", + "layer": "raw", + "capturedAt": "2026-10-07T20:37:22.043748+00:00", + "parameters": { + "language": "en", + "limit": "6", + "autocomplete": "true", + "types": "poi,address,street,neighbourhood,municipality,municipal_district,locality,subregion,region,county,country,postal_code,place", + "proximity": "13.42,52.52" + }, + "cache": "uncontrolled", + "requests": 1, + "status": 200, + "sha256": "e54136143c408403aa00a742989f3d6d9624012228d07b301e3fb99b97a6fe4b", + "cacheControl": "public, max-age=28800", + "age": null, + "latencyMs": 506.45 + }, + { + "caseId": "media-address", + "layer": "public", + "capturedAt": "2026-10-07T20:37:22.043936+00:00", + "parameters": { + "q": "MediaMarkt Grunerstraße 20 Berlin", + "lang": "en", + "lat": "52.5194", + "lng": "13.416", + "zoom": "15" + }, + "cache": "uncontrolled", + "requests": 1, + "status": 200, + "sha256": "5ff4e2cbdb84bda98fa212979f62d6a189888e8548709c19d3526799ce9472bb", + "cacheControl": "public, max-age=3600", + "age": null, + "latencyMs": 524.77 + }, + { + "caseId": "media-address", + "layer": "aggregate", + "capturedAt": "2026-10-07T20:37:22.044102+00:00", + "parameters": { + "q": "MediaMarkt Grunerstraße 20 Berlin", + "lang": "en", + "lat": "52.5194", + "lng": "13.416", + "limit": "8" + }, + "cache": "uncontrolled", + "requests": 1, + "status": 200, + "sha256": "b8b2af892915997b28e1d8a1067f3ffe35e0ba5ae97941b49e112edf98cfa254", + "cacheControl": "no-store", + "age": null, + "latencyMs": 130.63 + } + ], + "rawFeatures": [ + { + "id": "poi.15422100", + "text": "MediaMarkt", + "place_name": "MediaMarkt, Grunerstraße 20, 10179 Berlin, Germany", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [13.414790779352188, 52.51986159027454] + }, + "properties": { + "ref": "osm:n322490364", + "categories": ["electronics"], + "feature_tags": { + "shop": "electronics", + "level": "0", + "addr:postcode": "10179", + "addr:city": "Berlin", + "addr:housenumber": "20", + "addr:street": "Grunerstraße" + } + } + }, + { + "id": "address.12686057", + "text": "Grunerstraße", + "place_name": "Grunerstraße 20, 10179 Berlin, Germany", + "place_type": ["address"], + "geometry": { + "type": "Point", + "coordinates": [13.41582100000005, 52.518307] + }, + "properties": { + "ref": "osm:w1025851956", + "wikidata": "Q1550809" + } + }, + { + "id": "poi.34392614", + "text": "MediaMarkt", + "place_name": "MediaMarkt, Berliner Straße 15, 89250 Senden, Germany", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [10.039082317799625, 48.33283310114879] + }, + "properties": { + "ref": "osm:w100513761", + "categories": ["electronics", "retail building"], + "wikidata": "Q659320", + "feature_tags": { + "shop": "electronics", + "addr:postcode": "89250", + "addr:city": "Senden", + "addr:housenumber": "13", + "addr:street": "Berliner Straße" + } + } + }, + { + "id": "poi.30823762", + "text": "MediaMarkt", + "place_name": "MediaMarkt, Berliner Allee 34a, 22850 Norderstedt, Germany", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [9.985382588983953, 53.6835389749034] + }, + "properties": { + "ref": "osm:w907293928", + "categories": ["electronics"], + "feature_tags": { + "shop": "electronics", + "level": "1", + "addr:postcode": "22850", + "addr:city": "Norderstedt", + "addr:housenumber": "8", + "addr:street": "De-Gasperi-Passage" + } + } + }, + { + "id": "address.10027702", + "text": "Groenerstraße", + "place_name": "Groenerstraße 20, 13585 Berlin, Germany", + "place_type": ["address"], + "geometry": { + "type": "Point", + "coordinates": [13.20358299999998, 52.543163] + }, + "properties": { + "ref": "osm:w1306242932" + } + }, + { + "id": "address.10343043", + "text": "Gründerstraße", + "place_name": "Gründerstraße 20, 12526 Berlin, Germany", + "place_type": ["address"], + "geometry": { + "type": "Point", + "coordinates": [13.574141999999938, 52.409928] + }, + "properties": { + "ref": "osm:w130868556" + } + } + ], + "publicRows": [ + { + "id": "maptiler:poi.15422100", + "label": "MediaMarkt", + "sublabel": "MediaMarkt, Grunerstraße 20, 10179 Berlin, Germany", + "coordinates": [13.414790779352188, 52.51986159027454], + "type": "poi", + "rawCategory": "electronics", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:address.12686057", + "ids": { + "wikidata": "Q1550809" + }, + "label": "Grunerstraße", + "sublabel": "Grunerstraße 20, 10179 Berlin, Germany", + "coordinates": [13.41582100000005, 52.518307], + "type": "address", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:poi.34392614", + "ids": { + "wikidata": "Q659320" + }, + "label": "MediaMarkt", + "sublabel": "MediaMarkt, Berliner Straße 15, 89250 Senden, Germany", + "coordinates": [10.039082317799625, 48.33283310114879], + "type": "poi", + "rawCategory": "electronics", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:poi.30823762", + "label": "MediaMarkt", + "sublabel": "MediaMarkt, Berliner Allee 34a, 22850 Norderstedt, Germany", + "coordinates": [9.985382588983953, 53.6835389749034], + "type": "poi", + "rawCategory": "electronics", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:address.10027702", + "label": "Groenerstraße", + "sublabel": "Groenerstraße 20, 13585 Berlin, Germany", + "coordinates": [13.20358299999998, 52.543163], + "type": "address", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:address.10343043", + "label": "Gründerstraße", + "sublabel": "Gründerstraße 20, 12526 Berlin, Germany", + "coordinates": [13.574141999999938, 52.409928], + "type": "address", + "provider": "geocoding-maptiler" + } + ], + "aggregate": { + "suggestions": [], + "attributions": [], + "partial": true + } + }, + { + "caseId": "rewe-address", + "captures": [ + { + "caseId": "rewe-address", + "layer": "raw", + "capturedAt": "2026-10-07T20:37:22.569003+00:00", + "parameters": { + "language": "en", + "limit": "6", + "autocomplete": "true", + "types": "poi,address,street,neighbourhood,municipality,municipal_district,locality,subregion,region,county,country,postal_code,place", + "proximity": "13.42,52.52" + }, + "cache": "uncontrolled", + "requests": 1, + "status": 200, + "sha256": "3d9e69eacc830aecf24998911d31932ec4a04c4d0eaf32bb5c29aca9e5e0b55b", + "cacheControl": "public, max-age=28800", + "age": null, + "latencyMs": 320.83 + }, + { + "caseId": "rewe-address", + "layer": "public", + "capturedAt": "2026-10-07T20:37:22.569169+00:00", + "parameters": { + "q": "REWE Invalidenstraße 158 Berlin", + "lang": "en", + "lat": "52.5194", + "lng": "13.416", + "zoom": "15" + }, + "cache": "uncontrolled", + "requests": 1, + "status": 200, + "sha256": "0dd485db12cafb18b7b57011208f80d9320145453694ce740d1f0c62145444d7", + "cacheControl": "public, max-age=3600", + "age": null, + "latencyMs": 335.41 + }, + { + "caseId": "rewe-address", + "layer": "aggregate", + "capturedAt": "2026-10-07T20:37:22.569350+00:00", + "parameters": { + "q": "REWE Invalidenstraße 158 Berlin", + "lang": "en", + "lat": "52.5194", + "lng": "13.416", + "limit": "8" + }, + "cache": "uncontrolled", + "requests": 1, + "status": 200, + "sha256": "b8b2af892915997b28e1d8a1067f3ffe35e0ba5ae97941b49e112edf98cfa254", + "cacheControl": "no-store", + "age": null, + "latencyMs": 119.53 + } + ], + "rawFeatures": [ + { + "id": "poi.15426609", + "text": "REWE", + "place_name": "REWE, Invalidenstraße 158, 10115 Berlin, Germany", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [13.397083505988121, 52.531980821191] + }, + "properties": { + "ref": "osm:n348000444", + "categories": ["supermarket"], + "feature_tags": { + "shop": "supermarket", + "level": "0", + "addr:postcode": "10115", + "addr:city": "Berlin", + "addr:housenumber": "158", + "addr:street": "Invalidenstraße" + } + } + }, + { + "id": "poi.15741076", + "text": "REWE", + "place_name": "REWE, Heidestraße 41, 10557 Berlin, Germany", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [13.3660389482975, 52.53228104144362] + }, + "properties": { + "ref": "osm:n8367158861", + "categories": ["supermarket"], + "feature_tags": { + "shop": "supermarket", + "addr:postcode": "10557", + "level": "0", + "addr:city": "Berlin", + "addr:housenumber": "41", + "addr:street": "Heidestraße" + } + } + }, + { + "id": "poi.34014416", + "text": "REWE", + "place_name": "REWE, Aaron-Bernstein-Platz 7, 10117 Berlin, Germany", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [13.389315493404865, 52.52533119149872] + }, + "properties": { + "ref": "osm:n11027556740", + "categories": ["supermarket"], + "feature_tags": { + "shop": "supermarket", + "level": "-1", + "addr:postcode": "10117", + "addr:city": "Berlin", + "addr:housenumber": "111", + "addr:street": "Friedrichstraße" + } + } + }, + { + "id": "poi.15509199", + "text": "REWE", + "place_name": "REWE, Chausseestraße 118-120, 10115 Berlin, Germany", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [13.383975215256214, 52.529563891805815] + }, + "properties": { + "ref": "osm:n1110843201", + "categories": ["supermarket"], + "feature_tags": { + "shop": "supermarket", + "addr:postcode": "10115", + "level": "0", + "addr:city": "Berlin", + "addr:housenumber": "118-120", + "addr:street": "Chausseestraße" + } + } + }, + { + "id": "poi.36656201", + "text": "Rewe To Go", + "place_name": "Rewe To Go, Europaplatz 2, 10557 Berlin, Germany", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [13.369845424343566, 52.52523409426698] + }, + "properties": { + "ref": "osm:w407684446", + "categories": ["supermarket"], + "feature_tags": { + "shop": "supermarket", + "level": "-1" + } + } + }, + { + "id": "address.8692633", + "text": "Invalidenstraße", + "place_name": "Invalidenstraße 158, 10115 Berlin, Germany", + "place_type": ["address"], + "geometry": { + "type": "Point", + "coordinates": [13.39708399999995, 52.531981] + }, + "properties": { + "ref": "osm:w1021196045", + "wikidata": "Q463414" + } + } + ], + "publicRows": [ + { + "id": "maptiler:poi.15426609", + "label": "REWE", + "sublabel": "REWE, Invalidenstraße 158, 10115 Berlin, Germany", + "coordinates": [13.397083505988121, 52.531980821191], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:poi.15741076", + "label": "REWE", + "sublabel": "REWE, Heidestraße 41, 10557 Berlin, Germany", + "coordinates": [13.3660389482975, 52.53228104144362], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:poi.34014416", + "label": "REWE", + "sublabel": "REWE, Aaron-Bernstein-Platz 7, 10117 Berlin, Germany", + "coordinates": [13.389315493404865, 52.52533119149872], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:poi.15509199", + "label": "REWE", + "sublabel": "REWE, Chausseestraße 118-120, 10115 Berlin, Germany", + "coordinates": [13.383975215256214, 52.529563891805815], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:poi.36656201", + "label": "Rewe To Go", + "sublabel": "Rewe To Go, Europaplatz 2, 10557 Berlin, Germany", + "coordinates": [13.369845424343566, 52.52523409426698], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:address.8692633", + "ids": { + "wikidata": "Q463414" + }, + "label": "Invalidenstraße", + "sublabel": "Invalidenstraße 158, 10115 Berlin, Germany", + "coordinates": [13.39708399999995, 52.531981], + "type": "address", + "provider": "geocoding-maptiler" + } + ], + "aggregate": { + "suggestions": [], + "attributions": [], + "partial": true + } + }, + { + "caseId": "wrong-address", + "captures": [ + { + "caseId": "wrong-address", + "layer": "raw", + "capturedAt": "2026-10-07T20:37:22.904844+00:00", + "parameters": { + "language": "en", + "limit": "6", + "autocomplete": "true", + "types": "poi,address,street,neighbourhood,municipality,municipal_district,locality,subregion,region,county,country,postal_code,place", + "proximity": "13.42,52.52" + }, + "cache": "uncontrolled", + "requests": 1, + "status": 200, + "sha256": "907710c12c285a35d06286a357d5c914dfef7e18ffc851557211a34426bb18ca", + "cacheControl": "public, max-age=28800", + "age": null, + "latencyMs": 236.0 + }, + { + "caseId": "wrong-address", + "layer": "public", + "capturedAt": "2026-10-07T20:37:22.905024+00:00", + "parameters": { + "q": "EDEKA Moch Grunerstraße 999 Berlin", + "lang": "en", + "lat": "52.5194", + "lng": "13.416", + "zoom": "15" + }, + "cache": "uncontrolled", + "requests": 1, + "status": 200, + "sha256": "65a17b4fca88bfddc5a2edc7db44e3fa75944ff3aba1774548f26bb6cdb4e956", + "cacheControl": "public, max-age=3600", + "age": null, + "latencyMs": 254.07 + }, + { + "caseId": "wrong-address", + "layer": "aggregate", + "capturedAt": "2026-10-07T20:37:22.905246+00:00", + "parameters": { + "q": "EDEKA Moch Grunerstraße 999 Berlin", + "lang": "en", + "lat": "52.5194", + "lng": "13.416", + "limit": "8" + }, + "cache": "uncontrolled", + "requests": 1, + "status": 200, + "sha256": "b8b2af892915997b28e1d8a1067f3ffe35e0ba5ae97941b49e112edf98cfa254", + "cacheControl": "no-store", + "age": null, + "latencyMs": 109.52 + } + ], + "rawFeatures": [ + { + "id": "place.4795446", + "text": "Berlin Center", + "place_name": "Berlin Center, Berlin Township, United States", + "place_type": ["place"], + "geometry": { + "type": "Point", + "coordinates": [-85.13417344540358, 42.90058887898288] + }, + "properties": { + "ref": "osm:n153413103", + "place_designation": "hamlet" + } + }, + { + "id": "region.505", + "text": "Berlin", + "place_name": "Berlin, Germany", + "place_type": ["region"], + "geometry": { + "type": "Point", + "coordinates": [13.39513085782528, 52.51738870388956] + }, + "properties": { + "ref": "osm:r62422", + "wikidata": "Q64", + "place_designation": "city" + } + }, + { + "id": "locality.2701", + "text": "Neukölln", + "place_name": "Neukölln, Berlin, Germany", + "place_type": ["locality"], + "geometry": { + "type": "Point", + "coordinates": [13.43534991145134, 52.48114978975832] + }, + "properties": { + "ref": "osm:r409213", + "wikidata": "Q169492", + "place_designation": "suburb" + } + }, + { + "id": "place.4534518", + "text": "Stone Pieces", + "place_name": "Stone Pieces, Berlin, Germany", + "place_type": ["place"], + "geometry": { + "type": "Point", + "coordinates": [13.129702471196651, 52.38950275667193] + }, + "properties": { + "ref": "osm:r14687142", + "wikidata": "Q515015", + "place_designation": "neighbourhood" + } + }, + { + "id": "neighbourhood.20256", + "text": "Berliner Vorstadt", + "place_name": "Berliner Vorstadt, Potsdam, Germany", + "place_type": ["neighbourhood"], + "geometry": { + "type": "Point", + "coordinates": [13.079091534018517, 52.412128278186444] + }, + "properties": { + "ref": "osm:r6577655", + "wikidata": "Q48173386", + "place_designation": "suburb" + } + }, + { + "id": "place.2470107", + "text": "Berliner Siedlung", + "place_name": "Berliner Siedlung, Treuenbrietzen, Germany", + "place_type": ["place"], + "geometry": { + "type": "Point", + "coordinates": [12.889782898128033, 52.10644753168435] + }, + "properties": { + "ref": "osm:n7678030785", + "wikidata": "Q113687898", + "place_designation": "neighbourhood" + } + } + ], + "publicRows": [ + { + "id": "maptiler:place.4795446", + "label": "Berlin Center", + "sublabel": "Berlin Center, Berlin Township, United States", + "coordinates": [-85.13417344540358, 42.90058887898288], + "type": "region", + "rawCategory": "place/hamlet", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:region.505", + "ids": { + "wikidata": "Q64" + }, + "label": "Berlin", + "sublabel": "Berlin, Germany", + "coordinates": [13.39513085782528, 52.51738870388956], + "type": "region", + "rawCategory": "place/city", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:locality.2701", + "ids": { + "wikidata": "Q169492" + }, + "label": "Neukölln", + "sublabel": "Neukölln, Berlin, Germany", + "coordinates": [13.43534991145134, 52.48114978975832], + "type": "region", + "rawCategory": "place/suburb", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:place.4534518", + "ids": { + "wikidata": "Q515015" + }, + "label": "Stone Pieces", + "sublabel": "Stone Pieces, Berlin, Germany", + "coordinates": [13.129702471196651, 52.38950275667193], + "type": "region", + "rawCategory": "place/neighbourhood", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:neighbourhood.20256", + "ids": { + "wikidata": "Q48173386" + }, + "label": "Berliner Vorstadt", + "sublabel": "Berliner Vorstadt, Potsdam, Germany", + "coordinates": [13.079091534018517, 52.412128278186444], + "type": "street", + "rawCategory": "place/suburb", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:place.2470107", + "ids": { + "wikidata": "Q113687898" + }, + "label": "Berliner Siedlung", + "sublabel": "Berliner Siedlung, Treuenbrietzen, Germany", + "coordinates": [12.889782898128033, 52.10644753168435], + "type": "region", + "rawCategory": "place/neighbourhood", + "provider": "geocoding-maptiler" + } + ], + "aggregate": { + "suggestions": [], + "attributions": [], + "partial": true + } + }, + { + "caseId": "invented-name", + "captures": [ + { + "caseId": "invented-name", + "layer": "raw", + "capturedAt": "2026-10-07T20:37:23.159493+00:00", + "parameters": { + "language": "en", + "limit": "6", + "autocomplete": "true", + "types": "poi,address,street,neighbourhood,municipality,municipal_district,locality,subregion,region,county,country,postal_code,place", + "proximity": "13.42,52.52" + }, + "cache": "uncontrolled", + "requests": 1, + "status": 200, + "sha256": "16a728274f5c79e07b2aad47d26b0002d70bc2c1a945668f948b155704e8fa23", + "cacheControl": "public, max-age=28800", + "age": null, + "latencyMs": 362.39 + }, + { + "caseId": "invented-name", + "layer": "public", + "capturedAt": "2026-10-07T20:37:23.159813+00:00", + "parameters": { + "q": "Zzqxv430 Testladen Grunerstraße 20 Berlin", + "lang": "en", + "lat": "52.5194", + "lng": "13.416", + "zoom": "15" + }, + "cache": "uncontrolled", + "requests": 1, + "status": 200, + "sha256": "96825fc006a4723b0aab666b0c2daff67c7041d80eb8599bbda4c499978773d8", + "cacheControl": "public, max-age=3600", + "age": null, + "latencyMs": 379.33 + }, + { + "caseId": "invented-name", + "layer": "aggregate", + "capturedAt": "2026-10-07T20:37:23.160038+00:00", + "parameters": { + "q": "Zzqxv430 Testladen Grunerstraße 20 Berlin", + "lang": "en", + "lat": "52.5194", + "lng": "13.416", + "limit": "8" + }, + "cache": "uncontrolled", + "requests": 1, + "status": 200, + "sha256": "b8b2af892915997b28e1d8a1067f3ffe35e0ba5ae97941b49e112edf98cfa254", + "cacheControl": "no-store", + "age": null, + "latencyMs": 113.54 + } + ], + "rawFeatures": [ + { + "id": "address.12686057", + "text": "Grunerstraße", + "place_name": "Grunerstraße 20, 10179 Berlin, Germany", + "place_type": ["address"], + "geometry": { + "type": "Point", + "coordinates": [13.41582100000005, 52.518307] + }, + "properties": { + "ref": "osm:w1025851956", + "wikidata": "Q1550809" + } + }, + { + "id": "address.10027702", + "text": "Groenerstraße", + "place_name": "Groenerstraße 20, 13585 Berlin, Germany", + "place_type": ["address"], + "geometry": { + "type": "Point", + "coordinates": [13.20358299999998, 52.543163] + }, + "properties": { + "ref": "osm:w1306242932" + } + }, + { + "id": "address.10343043", + "text": "Gründerstraße", + "place_name": "Gründerstraße 20, 12526 Berlin, Germany", + "place_type": ["address"], + "geometry": { + "type": "Point", + "coordinates": [13.574141999999938, 52.409928] + }, + "properties": { + "ref": "osm:w130868556" + } + }, + { + "id": "poi.2947497", + "text": "20", + "place_name": "20, Siemenssiedlung am Hohenzollernkanal III, Berlin, Germany", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [13.251579366624355, 52.55727716817165] + }, + "properties": { + "ref": "osm:n11165225437", + "categories": ["water well"] + } + }, + { + "id": "poi.2947574", + "text": "20", + "place_name": "20, Saatwinkel, Berlin, Germany", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [13.242084681987762, 52.55983688062971] + }, + "properties": { + "ref": "osm:n11165225465", + "categories": ["water well"] + } + }, + { + "id": "poi.6230752", + "text": "20", + "place_name": "20, Elisabeth-Schwarzhaupt-Platz, Berlin, Germany", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [13.383162542017772, 52.53501260472217] + }, + "properties": { + "ref": "osm:w372459506", + "categories": ["pitch", "beachvolleyball"] + } + } + ], + "publicRows": [ + { + "id": "maptiler:address.12686057", + "ids": { + "wikidata": "Q1550809" + }, + "label": "Grunerstraße", + "sublabel": "Grunerstraße 20, 10179 Berlin, Germany", + "coordinates": [13.41582100000005, 52.518307], + "type": "address", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:address.10027702", + "label": "Groenerstraße", + "sublabel": "Groenerstraße 20, 13585 Berlin, Germany", + "coordinates": [13.20358299999998, 52.543163], + "type": "address", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:address.10343043", + "label": "Gründerstraße", + "sublabel": "Gründerstraße 20, 12526 Berlin, Germany", + "coordinates": [13.574141999999938, 52.409928], + "type": "address", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:poi.2947497", + "label": "20", + "sublabel": "20, Siemenssiedlung am Hohenzollernkanal III, Berlin, Germany", + "coordinates": [13.251579366624355, 52.55727716817165], + "type": "poi", + "rawCategory": "water well", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:poi.2947574", + "label": "20", + "sublabel": "20, Saatwinkel, Berlin, Germany", + "coordinates": [13.242084681987762, 52.55983688062971], + "type": "poi", + "rawCategory": "water well", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:poi.6230752", + "label": "20", + "sublabel": "20, Elisabeth-Schwarzhaupt-Platz, Berlin, Germany", + "coordinates": [13.383162542017772, 52.53501260472217], + "type": "poi", + "rawCategory": "pitch", + "provider": "geocoding-maptiler" + } + ], + "aggregate": { + "suggestions": [], + "attributions": [], + "partial": true + } + }, + { + "caseId": "schaaf-address", + "captures": [ + { + "caseId": "schaaf-address", + "layer": "raw", + "capturedAt": "2026-10-07T20:39:33.152677+00:00", + "parameters": { + "language": "en", + "limit": "6", + "autocomplete": "true", + "types": "poi,address,street,neighbourhood,municipality,municipal_district,locality,subregion,region,county,country,postal_code,place", + "proximity": "13.42,52.52" + }, + "cache": "uncontrolled", + "requests": 1, + "status": 200, + "sha256": "9ebb9c83fc922cd8eb36b382b51e42c9ef6ba011bc0a661783c699ca22dfe5f9", + "cacheControl": "public, max-age=28800", + "age": null, + "latencyMs": 331.17 + }, + { + "caseId": "schaaf-address", + "layer": "public", + "capturedAt": "2026-10-07T20:39:33.484051+00:00", + "parameters": { + "q": "EDEKA Schaaf Schillingstraße 2 Berlin", + "lang": "en", + "lat": "52.5194", + "lng": "13.416", + "zoom": "15" + }, + "cache": "uncontrolled", + "requests": 1, + "status": 200, + "sha256": "8a0b3375a5ec9b9ebe5a488dc2d1ce9cda1ab8e00f435b3d3cbacca7a5fcd506", + "cacheControl": "public, max-age=3600", + "age": null, + "latencyMs": 160.29 + }, + { + "caseId": "schaaf-address", + "layer": "aggregate", + "capturedAt": "2026-10-07T20:39:33.644676+00:00", + "parameters": { + "q": "EDEKA Schaaf Schillingstraße 2 Berlin", + "lang": "en", + "lat": "52.5194", + "lng": "13.416", + "limit": "8" + }, + "cache": "uncontrolled", + "requests": 1, + "status": 200, + "sha256": "b8b2af892915997b28e1d8a1067f3ffe35e0ba5ae97941b49e112edf98cfa254", + "cacheControl": "no-store", + "age": null, + "latencyMs": 113.6 + } + ], + "rawFeatures": [ + { + "id": "poi.32879876", + "text": "Edeka Schaaf", + "place_name": "Edeka Schaaf, Singerstraße 121, 10179 Berlin, Germany", + "place_type": ["poi"], + "geometry": { + "type": "Point", + "coordinates": [13.420668505132198, 52.51747194496568] + }, + "properties": { + "ref": "osm:n9154787137", + "categories": ["supermarket"], + "feature_tags": { + "shop": "supermarket", + "level": "0", + "addr:postcode": "10179", + "addr:city": "Berlin", + "addr:housenumber": "2", + "addr:street": "Schillingstraße" + } + } + }, + { + "id": "address.4011014", + "text": "Schillingstraße", + "place_name": "Schillingstraße 2, 10179 Berlin, Germany", + "place_type": ["address"], + "geometry": { + "type": "Point", + "coordinates": [13.42051600000002, 52.517376] + }, + "properties": { + "ref": "osm:w1076055688" + } + }, + { + "id": "address.9975161", + "text": "Schillingstraße", + "place_name": "Schillingstraße 2, 13403 Berlin, Germany", + "place_type": ["address"], + "geometry": { + "type": "Point", + "coordinates": [13.320637000000033, 52.566285] + }, + "properties": { + "ref": "osm:w1156572743" + } + }, + { + "id": "address.18028993", + "text": "Schillingstrasse", + "place_name": "Schillingstrasse, 10179 Berlin, Germany", + "place_type": ["address"], + "geometry": { + "type": "Point", + "coordinates": [13.420090489089489, 52.51717590797079] + }, + "properties": { + "ref": "osm:n10188970798" + } + }, + { + "id": "address.6705156", + "text": "Schellingstraße", + "place_name": "Schellingstraße, 10785 Berlin, Germany", + "place_type": ["address"], + "geometry": { + "type": "Point", + "coordinates": [13.37306197732687, 52.505255650814135] + }, + "properties": { + "ref": "osm:w1472672676" + } + }, + { + "id": "region.505", + "text": "Berlin", + "place_name": "Berlin, Germany", + "place_type": ["region"], + "geometry": { + "type": "Point", + "coordinates": [13.39513085782528, 52.51738870388956] + }, + "properties": { + "ref": "osm:r62422", + "wikidata": "Q64", + "place_designation": "city" + } + } + ], + "publicRows": [ + { + "id": "maptiler:poi.32879876", + "label": "Edeka Schaaf", + "sublabel": "Edeka Schaaf, Singerstraße 121, 10179 Berlin, Germany", + "coordinates": [13.420668505132198, 52.51747194496568], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:address.4011014", + "label": "Schillingstraße", + "sublabel": "Schillingstraße 2, 10179 Berlin, Germany", + "coordinates": [13.42051600000002, 52.517376], + "type": "address", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:address.9975161", + "label": "Schillingstraße", + "sublabel": "Schillingstraße 2, 13403 Berlin, Germany", + "coordinates": [13.320637000000033, 52.566285], + "type": "address", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:address.18028993", + "label": "Schillingstrasse", + "sublabel": "Schillingstrasse, 10179 Berlin, Germany", + "coordinates": [13.420090489089489, 52.51717590797079], + "type": "address", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:address.6705156", + "label": "Schellingstraße", + "sublabel": "Schellingstraße, 10785 Berlin, Germany", + "coordinates": [13.37306197732687, 52.505255650814135], + "type": "address", + "provider": "geocoding-maptiler" + }, + { + "id": "maptiler:region.505", + "ids": { + "wikidata": "Q64" + }, + "label": "Berlin", + "sublabel": "Berlin, Germany", + "coordinates": [13.39513085782528, 52.51738870388956], + "type": "region", + "rawCategory": "place/city", + "provider": "geocoding-maptiler" + } + ], + "aggregate": { + "suggestions": [], + "attributions": [], + "partial": true + } + } + ] +} diff --git a/scripts/discovery-eval/business-name-address/sources-v1.json b/scripts/discovery-eval/business-name-address/sources-v1.json new file mode 100644 index 000000000..4561b7637 --- /dev/null +++ b/scripts/discovery-eval/business-name-address/sources-v1.json @@ -0,0 +1,464 @@ +{ + "version": 1, + "assessedAt": "2026-10-07T20:40:55.784378+00:00", + "osm": { + "access": "OSM API map bbox and direct versioned elements; no deployed extract", + "bbox": [13.414, 52.5185, 13.418, 52.521], + "mapSha256": "b0e10e00f82586f4746e2ea77101a110250e8fa34d64742fea960a0e28f21ce1", + "records": [ + { + "id": "node/322490364", + "version": 24, + "timestamp": "2024-09-05T10:13:11Z", + "tags": { + "addr:city": "Berlin", + "addr:country": "DE", + "addr:housename": "MediaMarkt", + "addr:housenumber": "20", + "addr:postcode": "10179", + "addr:street": "Grunerstraße", + "addr:suburb": "Mitte", + "brand": "MediaMarkt", + "brand:wikidata": "Q2381223", + "brand:wikipedia": "en:Media Markt", + "contact:phone": "+49 30 2408840", + "internet_access": "wlan", + "level": "0", + "name": "MediaMarkt", + "opening_hours": "Mo-Sa 10:00-20:00", + "shop": "electronics", + "website": "https://www.mediamarkt.de/de/store/berlin-mitte-190", + "wheelchair": "yes" + } + }, + { + "id": "way/258898047", + "version": 38, + "timestamp": "2026-09-04T20:52:25Z", + "tags": { + "addr:city": "Berlin", + "addr:city:fa": "برلین", + "addr:country": "DE", + "addr:housename": "Alexa", + "addr:housenumber": "20", + "addr:postcode": "10179", + "addr:street": "Grunerstraße", + "addr:suburb": "Mitte", + "alt_name": "Alexa Berlin", + "building": "retail", + "building:colour": "#b6434e", + "building:levels": "4", + "building:material": "concrete", + "contact:website": "https://www.alexacentre.com/", + "fixme": "Indoor mapping with rooms started but not finished.\nIndoor corridors are missing.", + "internet_access": "wlan", + "name": "Alexa", + "opening_hours": "Mo-Sa 10:00-21:00", + "phone": "+49 30 269340121", + "roof:colour": "gray", + "roof:shape": "flat", + "shop": "mall", + "start_date": "2007-9-12", + "toilets": "yes", + "toilets:wheelchair": "yes", + "wheelchair": "yes", + "wikidata": "Q322847", + "wikipedia": "de:Alexa (Einkaufszentrum)" + } + }, + { + "id": "way/1204762785", + "version": 3, + "timestamp": "2026-01-23T16:12:26Z", + "tags": { + "addr:city": "Berlin", + "brand": "Edeka", + "brand:wikidata": "Q701755", + "brand:wikipedia": "de:Edeka", + "indoor": "room", + "level": "-1", + "name": "EDEKA", + "opening_hours": "Mo-Sa 08:00-21:00", + "payment:cash": "yes", + "payment:debit_cards": "yes", + "room": "shop", + "shop": "supermarket", + "wheelchair": "yes" + } + }, + { + "id": "node/348000444", + "version": 29, + "timestamp": "2025-04-10T11:24:48Z", + "tags": { + "addr:city": "Berlin", + "addr:housenumber": "158", + "addr:postcode": "10115", + "addr:street": "Invalidenstraße", + "brand": "Rewe", + "brand:wikidata": "Q16968817", + "brand:wikipedia": "de:Rewe", + "check_date": "2024-06-16", + "check_date:opening_hours": "2022-06-10", + "level": "0", + "name": "REWE", + "opening_hours": "Mo-Sa 07:00-23:00", + "payment:cash": "yes", + "payment:credit_cards": "yes", + "payment:debit_cards": "yes", + "phone": "+49 30 28390336", + "shop": "supermarket", + "toilets:wheelchair": "yes", + "website": "https://www.rewe.de/marktseite/rewe-markt-berlin-invalidenstra%C3%9Fe-158/", + "wheelchair": "yes" + } + }, + { + "id": "node/9154787137", + "version": 13, + "timestamp": "2026-08-18T07:17:13Z", + "tags": { + "addr:city": "Berlin", + "addr:country": "DE", + "addr:housenumber": "2", + "addr:postcode": "10179", + "addr:street": "Schillingstraße", + "addr:suburb": "Mitte", + "brand": "Edeka", + "brand:wikidata": "Q701755", + "check_date:opening_hours": "2026-08-18", + "contact:website": "https://www.edeka.de/eh/minden-hannover/edeka-schaaf-schillingstr.-2/index.jsp", + "currency:EUR": "yes", + "diet:halal": "no", + "diet:kosher": "no", + "level": "0", + "name": "Edeka Schaaf", + "opening_hours": "Mo-Sa 07:00-22:00", + "organic": "yes", + "second_hand": "no", + "shop": "supermarket", + "stroller": "yes", + "wheelchair": "yes", + "wikimedia_commons": "File:Schillingstraße 2.jpg" + } + } + ] + }, + "overture": { + "access": "read-only DuckDB 1.5.6 S3 bbox scan; no import", + "release": "2026-09-23.1", + "url": "s3://overturemaps-us-west-2/release/2026-09-23.1/theme=places/type=place/*", + "bbox": [13.408, 52.513, 13.426, 52.527], + "unfilteredRowCount": 3255, + "subsetSha256": "a9ec6402ecd390d6200151ace4d5a5a7106d1ca8641652e19dd336211684ba93", + "records": [ + { + "id": "466267a9-58bc-48bd-9457-93e7eb90e2b8", + "version": 10, + "names": { + "primary": "EDEKA Barnimstraße", + "common": null, + "rules": null + }, + "addresses": [ + { + "freeform": "Barnimstraße 18", + "locality": "Berlin", + "postcode": "10249", + "region": null, + "country": "DE" + } + ], + "phones": ["+493024729176"], + "websites": ["https://www.edeka.de/"], + "brand": { + "wikidata": null, + "names": { + "primary": "EDEKA", + "common": null, + "rules": null + } + }, + "confidence": 0.999917788362503, + "operating_status": null, + "sources": [ + { + "property": "", + "dataset": "meta", + "license": "CDLA-Permissive-2.0", + "record_id": "366295967427907", + "update_time": "2026-09-14T00:00:00.000Z", + "confidence": 0.9880852699279785, + "between": null, + "provider": "meta", + "resource": "meta", + "version": "2026-09-14" + }, + { + "property": "/properties/confidence", + "dataset": "Overture", + "license": "CDLA-Permissive-2.0", + "record_id": null, + "update_time": "2026-09-17T22:52:12Z", + "confidence": null, + "between": null, + "provider": "overture", + "resource": "confidence_calculation", + "version": "2026-09-17" + } + ], + "bbox": { + "xmin": 13.422950744628906, + "xmax": 13.422952651977539, + "ymin": 52.52610778808594, + "ymax": 52.52611541748047 + } + }, + { + "id": "bfbe5e1d-7db5-482e-8772-f53959dde008", + "version": 9, + "names": { + "primary": "MediaMarkt Berlin-Mitte (im Alexa)", + "common": null, + "rules": null + }, + "addresses": [ + { + "freeform": "Grunerstraße 20", + "locality": "Berlin", + "postcode": "10179", + "region": null, + "country": "DE" + } + ], + "phones": ["+4922122243333"], + "websites": [ + "https://www.mediamarkt.de/de/store/berlin-mitte-190?utm_source=places+link&utm_medium=seo-places+link&utm_term=Media+Markt+Berlin-Mitte+StoreId+190" + ], + "brand": { + "wikidata": null, + "names": { + "primary": "MediaMarktSaturn", + "common": null, + "rules": null + } + }, + "confidence": 0.9999635516405105, + "operating_status": null, + "sources": [ + { + "property": "", + "dataset": "meta", + "license": "CDLA-Permissive-2.0", + "record_id": "295733827232255", + "update_time": "2026-09-14T00:00:00.000Z", + "confidence": 0.9939252734184265, + "between": null, + "provider": "meta", + "resource": "meta", + "version": "2026-09-14" + }, + { + "property": "/properties/confidence", + "dataset": "Overture", + "license": "CDLA-Permissive-2.0", + "record_id": null, + "update_time": "2026-09-17T22:52:12Z", + "confidence": null, + "between": null, + "provider": "overture", + "resource": "confidence_calculation", + "version": "2026-09-17" + } + ], + "bbox": { + "xmin": 13.414756774902344, + "xmax": 13.414758682250977, + "ymin": 52.519893646240234, + "ymax": 52.519901275634766 + } + }, + { + "id": "035b544e-40f5-4ce0-a06f-1c9032ded028", + "version": 13, + "names": { + "primary": "EDEKA Moch Supermarket", + "common": null, + "rules": null + }, + "addresses": [ + { + "freeform": "Grunerstraße 20", + "locality": "Berlin", + "postcode": "10179", + "region": null, + "country": "DE" + } + ], + "phones": ["+493024045625"], + "websites": ["http://Edeka.de/"], + "brand": { + "wikidata": null, + "names": { + "primary": "EDEKA", + "common": null, + "rules": null + } + }, + "confidence": 0.9999057413816452, + "operating_status": null, + "sources": [ + { + "property": "", + "dataset": "meta", + "license": "CDLA-Permissive-2.0", + "record_id": "194804870560113", + "update_time": "2026-08-24T00:00:00.000Z", + "confidence": 0.9863393306732178, + "between": null, + "provider": "meta", + "resource": "meta", + "version": "2026-08-24" + }, + { + "property": "/properties/confidence", + "dataset": "Overture", + "license": "CDLA-Permissive-2.0", + "record_id": null, + "update_time": "2026-09-17T22:52:12Z", + "confidence": null, + "between": null, + "provider": "overture", + "resource": "confidence_calculation", + "version": "2026-09-17" + } + ], + "bbox": { + "xmin": 13.414728164672852, + "xmax": 13.414730072021484, + "ymin": 52.51996994018555, + "ymax": 52.51997756958008 + } + }, + { + "id": "81270f18-8f0b-48a9-ae69-31d4ef96cdd5", + "version": 8, + "names": { + "primary": "MediaMarkt", + "common": null, + "rules": null + }, + "addresses": [ + { + "freeform": "Grunerstr. 20", + "locality": "Berlin", + "postcode": "10179", + "region": "Berlin", + "country": "DE" + } + ], + "phones": ["030 2408840"], + "websites": ["https://www.mediamarkt.de/markt/berlin-mitte"], + "brand": null, + "confidence": 0.77, + "operating_status": null, + "sources": [ + { + "property": "", + "dataset": "Foursquare", + "license": "Apache-2.0", + "record_id": "4b1530cef964a5201da923e3", + "update_time": "2026-04-11T00:00:00.000", + "confidence": 0.77, + "between": null, + "provider": "foursquare", + "resource": "foursquare", + "version": "2026-04-14" + }, + { + "property": "/properties/confidence", + "dataset": "Overture", + "license": "CDLA-Permissive-2.0", + "record_id": null, + "update_time": "2026-09-17T22:52:12Z", + "confidence": null, + "between": null, + "provider": "overture", + "resource": "confidence_calculation", + "version": "2026-09-17" + } + ], + "bbox": { + "xmin": 13.414745330810547, + "xmax": 13.41474723815918, + "ymin": 52.519866943359375, + "ymax": 52.519874572753906 + } + }, + { + "id": "a56cd442-edcf-4d26-98c1-9c70de50f1d7", + "version": 11, + "names": { + "primary": "EDEKA Schaaf", + "common": null, + "rules": null + }, + "addresses": [ + { + "freeform": "Schillingstraße 2", + "locality": "Berlin", + "postcode": "10179", + "region": null, + "country": "DE" + } + ], + "phones": ["+493023458611"], + "websites": [ + "https://www.edeka.de/eh/minden-hannover/edeka-schaaf-schillingstr.-2/index.jsp" + ], + "brand": { + "wikidata": null, + "names": { + "primary": "EDEKA", + "common": null, + "rules": null + } + }, + "confidence": 0.9999163304030895, + "operating_status": null, + "sources": [ + { + "property": "", + "dataset": "meta", + "license": "CDLA-Permissive-2.0", + "record_id": "101877065539523", + "update_time": "2026-09-14T00:00:00.000Z", + "confidence": 0.9878739714622498, + "between": null, + "provider": "meta", + "resource": "meta", + "version": "2026-09-14" + }, + { + "property": "/properties/confidence", + "dataset": "Overture", + "license": "CDLA-Permissive-2.0", + "record_id": null, + "update_time": "2026-09-17T22:52:12Z", + "confidence": null, + "between": null, + "provider": "overture", + "resource": "confidence_calculation", + "version": "2026-09-17" + } + ], + "bbox": { + "xmin": 13.420568466186523, + "xmax": 13.420570373535156, + "ymin": 52.51737594604492, + "ymax": 52.51738357543945 + } + } + ] + } +} diff --git a/scripts/discovery-eval/business-name-address/tsconfig.json b/scripts/discovery-eval/business-name-address/tsconfig.json new file mode 100644 index 000000000..e6f83d5e3 --- /dev/null +++ b/scripts/discovery-eval/business-name-address/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "../tsconfig.json", + "include": ["*.ts"] +} diff --git a/scripts/discovery-eval/business-name-address/ui-v1.json b/scripts/discovery-eval/business-name-address/ui-v1.json new file mode 100644 index 000000000..49259b160 --- /dev/null +++ b/scripts/discovery-eval/business-name-address/ui-v1.json @@ -0,0 +1,849 @@ +{ + "version": 1, + "deployment": null, + "deploymentUnknownReason": "Public UI exposes no deployment SHA", + "cache": "uncontrolled", + "viewport": [1280, 800], + "dpr": 1, + "theme": "dark", + "center": [13.416, 52.5194], + "zoom": 15, + "pitch": 0, + "bearing": 0, + "caseResults": [ + { + "capturedAt": "2026-10-07T20:41:38.831Z", + "caseId": "moch-name", + "query": "EDEKA Moch", + "requests": [ + { + "completed": true, + "lat": "52.52", + "lng": "13.42", + "path": "/api/integrations/geocoding/autocomplete", + "q": "EDEKA Moch", + "status": 200, + "zoom": "15", + "ids": [ + "maptiler:poi.30456941", + "maptiler:poi.27997147", + "maptiler:poi.32434263", + "maptiler:poi.31643808", + "maptiler:poi.14639240", + "maptiler:poi.14883072" + ], + "partial": null + }, + { + "completed": true, + "lat": "52.52", + "lng": "13.42", + "path": "/api/integrations/search-suggestions/search", + "q": "EDEKA Moch", + "status": 200, + "zoom": null, + "ids": [], + "partial": true + } + ], + "rows": [ + { + "id": "search-bar-option-0", + "text": "EDEKA Koch-SportparkPlace · Karl-Brandt-Weg 11, 44629 Herne, Germany · 438 km from map center" + }, + { + "id": "search-bar-option-1", + "text": "Edeka MöckPlace · August-Lämmle-Straße 17, 72766 Reutlingen, Germany · 537 km from map center" + }, + { + "id": "search-bar-option-2", + "text": "Edeka MöckPlace · Friedrich-Naumann-Straße 36, 72762 Reutlingen, Germany · 539 km from map center" + }, + { + "id": "search-bar-option-3", + "text": "Edeka MöckPlace · 72810 Gomaringen, Germany · 545 km from map center" + }, + { + "id": "search-bar-option-4", + "text": "Edeka MöckPlace · Robert-Bosch-Straße 19, 72810 Gomaringen, Germany · 546 km from map center" + }, + { + "id": "search-bar-option-5", + "text": "Edeka KochPlace · Im Grund 1, 72469 Meßstetten, Germany · 577 km from map center" + }, + { + "id": "search-bar-option-6", + "text": "Search \"EDEKA Moch\" in this area" + } + ], + "url": "https://openmapx.com/?map=52.5194%2C13.416%2C15%2C0%2C0" + }, + { + "capturedAt": "2026-10-07T20:41:39.786Z", + "caseId": "moch-address", + "query": "EDEKA Moch Grunerstraße 20", + "requests": [ + { + "completed": true, + "lat": "52.52", + "lng": "13.42", + "path": "/api/integrations/geocoding/autocomplete", + "q": "EDEKA Moch Grunerstraße 20", + "status": 200, + "zoom": "15", + "ids": [ + "maptiler:address.12686057", + "maptiler:address.10027702", + "maptiler:address.10343043", + "maptiler:address.9410688", + "maptiler:address.5097698", + "maptiler:place.4929509" + ], + "partial": null + }, + { + "completed": true, + "lat": "52.52", + "lng": "13.42", + "path": "/api/integrations/search-suggestions/search", + "q": "EDEKA Moch Grunerstraße 20", + "status": 200, + "zoom": null, + "ids": [], + "partial": true + } + ], + "rows": [ + { + "id": "search-bar-option-0", + "text": "GrunerstraßeAddress · Grunerstraße 20, 10179 Berlin, Germany · 122 m from map center" + }, + { + "id": "search-bar-option-1", + "text": "Colonia 20 de NoviembreArea · Huaniqueo, Mexico · 9828 km from map center" + }, + { + "id": "search-bar-option-2", + "text": "GroenerstraßeAddress · Groenerstraße 20, 13585 Berlin, Germany · 15 km from map center" + }, + { + "id": "search-bar-option-3", + "text": "GründerstraßeAddress · Gründerstraße 20, 12526 Berlin, Germany · 16 km from map center" + }, + { + "id": "search-bar-option-4", + "text": "GrünerstraßeAddress · Grünerstraße 20, 95615 Marktredwitz, Germany · 294 km from map center" + }, + { + "id": "search-bar-option-5", + "text": "GrunerstraßeAddress · Grunerstraße 20, 65510 Idstein, Germany · 440 km from map center" + }, + { + "id": "search-bar-option-6", + "text": "Search \"EDEKA Moch Grunerstraße 20\" in this area" + } + ], + "url": "https://openmapx.com/?map=52.5194%2C13.416%2C15%2C0%2C0" + }, + { + "capturedAt": "2026-10-07T20:41:40.797Z", + "caseId": "edeka-address", + "query": "EDEKA Grunerstraße 20 Berlin", + "requests": [ + { + "completed": true, + "lat": "52.52", + "lng": "13.42", + "path": "/api/integrations/geocoding/autocomplete", + "q": "EDEKA Grunerstraße 20 Berlin", + "status": 200, + "zoom": "15", + "ids": [ + "maptiler:poi.39267497", + "maptiler:poi.15407240", + "maptiler:poi.15448214", + "maptiler:poi.30149398", + "maptiler:address.12686057", + "maptiler:address.10027702" + ], + "partial": null + }, + { + "completed": true, + "lat": "52.52", + "lng": "13.42", + "path": "/api/integrations/search-suggestions/search", + "q": "EDEKA Grunerstraße 20 Berlin", + "status": 200, + "zoom": null, + "ids": [], + "partial": true + } + ], + "rows": [ + { + "id": "search-bar-option-0", + "text": "EDEKAPlace · Alexanderstraße 25, 10178 Berlin, Germany · 108 m from map center" + }, + { + "id": "search-bar-option-1", + "text": "GrunerstraßeAddress · Grunerstraße 20, 10179 Berlin, Germany · 122 m from map center" + }, + { + "id": "search-bar-option-2", + "text": "EDEKAPlace · Markt 11, 13597 Berlin, Germany · 14 km from map center" + }, + { + "id": "search-bar-option-3", + "text": "EDEKAPlace · Buntzelstraße 14, 12526 Berlin, Germany · 16 km from map center" + }, + { + "id": "search-bar-option-4", + "text": "GroenerstraßeAddress · Groenerstraße 20, 13585 Berlin, Germany · 15 km from map center" + }, + { + "id": "search-bar-option-5", + "text": "EDEKAPlace · Falkenseer Chaussee 266a, 13583 Berlin, Germany · 16 km from map center" + }, + { + "id": "search-bar-option-6", + "text": "Search \"EDEKA Grunerstraße 20 Berlin\" in this area" + } + ], + "url": "https://openmapx.com/?map=52.5194%2C13.416%2C15%2C0%2C0" + }, + { + "capturedAt": "2026-10-07T20:41:42.335Z", + "caseId": "edeka-alexa", + "query": "EDEKA Alexa", + "requests": [ + { + "completed": true, + "lat": "52.52", + "lng": "13.42", + "path": "/api/integrations/geocoding/autocomplete", + "q": "EDEKA Alexa", + "status": 200, + "zoom": "15", + "ids": [ + "maptiler:poi.39267497", + "maptiler:poi.15445342", + "maptiler:poi.15632141", + "maptiler:poi.15895501", + "maptiler:poi.32007491", + "maptiler:poi.15469482" + ], + "partial": null + }, + { + "completed": true, + "lat": "52.52", + "lng": "13.42", + "path": "/api/integrations/search-suggestions/search", + "q": "EDEKA Alexa", + "status": 200, + "zoom": null, + "ids": [], + "partial": true + } + ], + "rows": [ + { + "id": "search-bar-option-0", + "text": "EDEKAPlace · Alexanderstraße 25, 10178 Berlin, Germany · 108 m from map center" + }, + { + "id": "search-bar-option-1", + "text": "EDEKAPlace · Straßburger Straße 9A-C, 10405 Berlin, Germany · 1.1 km from map center" + }, + { + "id": "search-bar-option-2", + "text": "EDEKAPlace · Annenstraße 4a, 10179 Berlin, Germany · 1.3 km from map center" + }, + { + "id": "search-bar-option-3", + "text": "Search \"EDEKA Alexa\" in this area" + } + ], + "url": "https://openmapx.com/?map=52.5194%2C13.416%2C15%2C0%2C0" + }, + { + "capturedAt": "2026-10-07T20:41:43.365Z", + "caseId": "edeka-gruner", + "query": "EDEKA Grunerstraße", + "requests": [ + { + "completed": true, + "lat": "52.52", + "lng": "13.42", + "path": "/api/integrations/geocoding/autocomplete", + "q": "EDEKA Grunerstraße", + "status": 200, + "zoom": "15", + "ids": [ + "maptiler:poi.39267497", + "maptiler:poi.15448214", + "maptiler:poi.15864452", + "maptiler:poi.15445342", + "maptiler:poi.15632141", + "maptiler:poi.15895501" + ], + "partial": null + }, + { + "completed": true, + "lat": "52.52", + "lng": "13.42", + "path": "/api/integrations/search-suggestions/search", + "q": "EDEKA Grunerstraße", + "status": 200, + "zoom": null, + "ids": [], + "partial": true + } + ], + "rows": [ + { + "id": "search-bar-option-0", + "text": "EDEKAPlace · Alexanderstraße 25, 10178 Berlin, Germany · 108 m from map center" + }, + { + "id": "search-bar-option-1", + "text": "EDEKAPlace · Straßburger Straße 9A-C, 10405 Berlin, Germany · 1.1 km from map center" + }, + { + "id": "search-bar-option-2", + "text": "EDEKAPlace · Annenstraße 4a, 10179 Berlin, Germany · 1.3 km from map center" + }, + { + "id": "search-bar-option-3", + "text": "EDEKAPlace · Buntzelstraße 14, 12526 Berlin, Germany · 16 km from map center" + }, + { + "id": "search-bar-option-4", + "text": "Search \"EDEKA Grunerstraße\" in this area" + } + ], + "url": "https://openmapx.com/?map=52.5194%2C13.416%2C15%2C0%2C0" + }, + { + "capturedAt": "2026-10-07T20:41:44.434Z", + "caseId": "edeka-alexander", + "query": "EDEKA Alexanderstraße 25 Berlin", + "requests": [ + { + "completed": true, + "lat": "52.52", + "lng": "13.42", + "path": "/api/integrations/geocoding/autocomplete", + "q": "EDEKA Alexanderstraße 25 Berlin", + "status": 200, + "zoom": "15", + "ids": [ + "maptiler:poi.39267497", + "maptiler:poi.15445342", + "maptiler:poi.15632141", + "maptiler:poi.32007491", + "maptiler:address.6574798", + "maptiler:poi.15258278" + ], + "partial": null + }, + { + "completed": true, + "lat": "52.52", + "lng": "13.42", + "path": "/api/integrations/search-suggestions/search", + "q": "EDEKA Alexanderstraße 25 Berlin", + "status": 200, + "zoom": null, + "ids": [], + "partial": true + } + ], + "rows": [ + { + "id": "search-bar-option-0", + "text": "EDEKAPlace · Alexanderstraße 25, 10178 Berlin, Germany · 108 m from map center" + }, + { + "id": "search-bar-option-1", + "text": "AlexanderstraßeAddress · Alexanderstraße 25, 10179 Berlin, Germany · 139 m from map center" + }, + { + "id": "search-bar-option-2", + "text": "EDEKAPlace · Straßburger Straße 9A-C, 10405 Berlin, Germany · 1.1 km from map center" + }, + { + "id": "search-bar-option-3", + "text": "EdekaPlace · Berliner Straße 96, 13507 Berlin, Germany · 12 km from map center" + }, + { + "id": "search-bar-option-4", + "text": "Search \"EDEKA Alexanderstraße 25 Berlin\" in this area" + } + ], + "url": "https://openmapx.com/?map=52.5194%2C13.416%2C15%2C0%2C0" + }, + { + "capturedAt": "2026-10-07T20:41:45.631Z", + "caseId": "edeka-brand", + "query": "EDEKA", + "requests": [ + { + "completed": true, + "lat": "52.52", + "lng": "13.42", + "path": "/api/integrations/geocoding/autocomplete", + "q": "EDEKA", + "status": 200, + "zoom": "15", + "ids": [ + "maptiler:poi.39267497", + "maptiler:poi.15864452", + "maptiler:poi.15445342", + "maptiler:poi.15632141", + "maptiler:poi.15895501", + "maptiler:poi.32007491" + ], + "partial": null + }, + { + "completed": true, + "lat": "52.52", + "lng": "13.42", + "path": "/api/integrations/search-suggestions/search", + "q": "EDEKA", + "status": 200, + "zoom": null, + "ids": [], + "partial": true + } + ], + "rows": [ + { + "id": "search-bar-option-0", + "text": "EDEKAPlace · Alexanderstraße 25, 10178 Berlin, Germany · 108 m from map center" + }, + { + "id": "search-bar-option-1", + "text": "EDEKAPlace · Straßburger Straße 9A-C, 10405 Berlin, Germany · 1.1 km from map center" + }, + { + "id": "search-bar-option-2", + "text": "EDEKAPlace · Annenstraße 4a, 10179 Berlin, Germany · 1.3 km from map center" + }, + { + "id": "search-bar-option-3", + "text": "EdekaChain · German supermarket chain" + }, + { + "id": "search-bar-option-4", + "text": "Nextbikeedeka nextbikeChain · German bicycle-sharing company and franchise" + }, + { + "id": "search-bar-option-5", + "text": "Search \"EDEKA\" in this area" + } + ], + "url": "https://openmapx.com/?map=52.5194%2C13.416%2C15%2C0%2C0" + }, + { + "capturedAt": "2026-10-07T20:41:46.609Z", + "caseId": "media-alexa", + "query": "MediaMarkt Alexa", + "requests": [ + { + "completed": true, + "lat": "52.52", + "lng": "13.42", + "path": "/api/integrations/geocoding/autocomplete", + "q": "MediaMarkt Alexa", + "status": 200, + "zoom": "15", + "ids": [ + "maptiler:poi.15539884", + "maptiler:poi.15422100", + "maptiler:poi.15388462", + "maptiler:poi.15513302", + "maptiler:poi.27301831", + "maptiler:poi.31290179" + ], + "partial": null + }, + { + "completed": true, + "lat": "52.52", + "lng": "13.42", + "path": "/api/integrations/search-suggestions/search", + "q": "MediaMarkt Alexa", + "status": 200, + "zoom": null, + "ids": [], + "partial": true + } + ], + "rows": [ + { + "id": "search-bar-option-0", + "text": "MediaMarktPlace · Pr Willem Alexander Prom 69-83, 2284 DJ Rijswijk, Netherlands · 621 km from map center" + }, + { + "id": "search-bar-option-1", + "text": "MediaMarktPlace · Grunerstraße 20, 10179 Berlin, Germany · 97 m from map center" + }, + { + "id": "search-bar-option-2", + "text": "MediaMarktPlace · Äußere Schneeberger Straße 95, 08056 Zwickau, Germany · 212 km from map center" + }, + { + "id": "search-bar-option-3", + "text": "MediaMarktPlace · Waldershofer Straße 10, 95615 Marktredwitz, Germany · 295 km from map center" + }, + { + "id": "search-bar-option-4", + "text": "MediaMarktPlace · Schloßplatz 8, 26122 Oldenburg, Germany · 356 km from map center" + }, + { + "id": "search-bar-option-5", + "text": "MediaMarktPlace · Posthalterweg 15, 26129 Oldenburg, Germany · 359 km from map center" + }, + { + "id": "search-bar-option-6", + "text": "Search \"MediaMarkt Alexa\" in this area" + } + ], + "url": "https://openmapx.com/?map=52.5194%2C13.416%2C15%2C0%2C0" + }, + { + "capturedAt": "2026-10-07T20:41:47.644Z", + "caseId": "media-address", + "query": "MediaMarkt Grunerstraße 20 Berlin", + "requests": [ + { + "completed": true, + "lat": "52.52", + "lng": "13.42", + "path": "/api/integrations/geocoding/autocomplete", + "q": "MediaMarkt Grunerstraße 20 Berlin", + "status": 200, + "zoom": "15", + "ids": [ + "maptiler:poi.15422100", + "maptiler:address.12686057", + "maptiler:poi.34392614", + "maptiler:poi.30823762", + "maptiler:address.10027702", + "maptiler:address.10343043" + ], + "partial": null + }, + { + "completed": true, + "lat": "52.52", + "lng": "13.42", + "path": "/api/integrations/search-suggestions/search", + "q": "MediaMarkt Grunerstraße 20 Berlin", + "status": 200, + "zoom": null, + "ids": [], + "partial": true + } + ], + "rows": [ + { + "id": "search-bar-option-0", + "text": "MediaMarktPlace · Grunerstraße 20, 10179 Berlin, Germany · 97 m from map center" + }, + { + "id": "search-bar-option-1", + "text": "GrunerstraßeAddress · Grunerstraße 20, 10179 Berlin, Germany · 122 m from map center" + }, + { + "id": "search-bar-option-2", + "text": "GroenerstraßeAddress · Groenerstraße 20, 13585 Berlin, Germany · 15 km from map center" + }, + { + "id": "search-bar-option-3", + "text": "GründerstraßeAddress · Gründerstraße 20, 12526 Berlin, Germany · 16 km from map center" + }, + { + "id": "search-bar-option-4", + "text": "MediaMarktPlace · Berliner Straße 15, 89250 Senden, Germany · 523 km from map center" + }, + { + "id": "search-bar-option-5", + "text": "MediaMarktPlace · Berliner Allee 34a, 22850 Norderstedt, Germany · 263 km from map center" + }, + { + "id": "search-bar-option-6", + "text": "Search \"MediaMarkt Grunerstraße 20 Berlin\" in this area" + } + ], + "url": "https://openmapx.com/?map=52.5194%2C13.416%2C15%2C0%2C0" + }, + { + "capturedAt": "2026-10-07T20:41:48.565Z", + "caseId": "rewe-address", + "query": "REWE Invalidenstraße 158 Berlin", + "requests": [ + { + "completed": true, + "lat": "52.52", + "lng": "13.42", + "path": "/api/integrations/geocoding/autocomplete", + "q": "REWE Invalidenstraße 158 Berlin", + "status": 200, + "zoom": "15", + "ids": [ + "maptiler:poi.15426609", + "maptiler:poi.15741076", + "maptiler:poi.34014416", + "maptiler:poi.15509199", + "maptiler:poi.36656201", + "maptiler:address.8692633" + ], + "partial": null + } + ], + "rows": [ + { + "id": "search-bar-option-0", + "text": "REWEPlace · Invalidenstraße 158, 10115 Berlin, Germany · 1.9 km from map center" + }, + { + "id": "search-bar-option-1", + "text": "InvalidenstraßeAddress · Invalidenstraße 158, 10115 Berlin, Germany · 1.9 km from map center" + }, + { + "id": "search-bar-option-2", + "text": "Rewe To GoPlace · Europaplatz 2, 10557 Berlin, Germany · 3.2 km from map center" + }, + { + "id": "search-bar-option-3", + "text": "REWEPlace · Heidestraße 41, 10557 Berlin, Germany · 3.7 km from map center" + }, + { + "id": "search-bar-option-4", + "text": "Search \"REWE Invalidenstraße 158 Berlin\" in this area" + } + ], + "url": "https://openmapx.com/?map=52.5194%2C13.416%2C15%2C0%2C0" + }, + { + "capturedAt": "2026-10-07T20:41:50.165Z", + "caseId": "wrong-address", + "query": "EDEKA Moch Grunerstraße 999 Berlin", + "requests": [ + { + "completed": true, + "lat": "52.52", + "lng": "13.42", + "path": "/api/integrations/geocoding/autocomplete", + "q": "EDEKA Moch Grunerstraße 999 Berlin", + "status": 200, + "zoom": "15", + "ids": [ + "maptiler:place.4795446", + "maptiler:region.505", + "maptiler:locality.2701", + "maptiler:place.4534518", + "maptiler:neighbourhood.20256", + "maptiler:place.2470107" + ], + "partial": null + }, + { + "completed": true, + "lat": "52.52", + "lng": "13.42", + "path": "/api/integrations/search-suggestions/search", + "q": "EDEKA Moch Grunerstraße 999 Berlin", + "status": 200, + "zoom": null, + "ids": [], + "partial": true + } + ], + "rows": [ + { + "id": "search-bar-option-0", + "text": "BerlinArea · Germany · 1.4 km from map center" + }, + { + "id": "search-bar-option-1", + "text": "NeuköllnArea · Berlin, Germany · 4.5 km from map center" + }, + { + "id": "search-bar-option-2", + "text": "Stone PiecesArea · Berlin, Germany · 24 km from map center" + }, + { + "id": "search-bar-option-3", + "text": "Berlin CenterArea · Berlin Township, United States · 6862 km from map center" + }, + { + "id": "search-bar-option-4", + "text": "Berliner SiedlungArea · Treuenbrietzen, Germany · 58 km from map center" + }, + { + "id": "search-bar-option-5", + "text": "Berliner VorstadtStreet · Potsdam, Germany · 26 km from map center" + }, + { + "id": "search-bar-option-6", + "text": "Search \"EDEKA Moch Grunerstraße 999 Berlin\" in this area" + } + ], + "url": "https://openmapx.com/?map=52.5194%2C13.416%2C15%2C0%2C0" + }, + { + "capturedAt": "2026-10-07T20:41:51.194Z", + "caseId": "invented-name", + "query": "Zzqxv430 Testladen Grunerstraße 20 Berlin", + "requests": [ + { + "completed": true, + "lat": "52.52", + "lng": "13.42", + "path": "/api/integrations/geocoding/autocomplete", + "q": "Zzqxv430 Testladen Grunerstraße 20 Berlin", + "status": 200, + "zoom": "15", + "ids": [ + "maptiler:address.12686057", + "maptiler:address.10027702", + "maptiler:address.10343043", + "maptiler:poi.2947497", + "maptiler:poi.2947574", + "maptiler:poi.6230752" + ], + "partial": null + }, + { + "completed": true, + "lat": "52.52", + "lng": "13.42", + "path": "/api/integrations/search-suggestions/search", + "q": "Zzqxv430 Testladen Grunerstraße 20 Berlin", + "status": 200, + "zoom": null, + "ids": [], + "partial": true + } + ], + "rows": [ + { + "id": "search-bar-option-0", + "text": "GrunerstraßeAddress · Grunerstraße 20, 10179 Berlin, Germany · 122 m from map center" + }, + { + "id": "search-bar-option-1", + "text": "20Place · Elisabeth-Schwarzhaupt-Platz, Berlin, Germany · 2.8 km from map center" + }, + { + "id": "search-bar-option-2", + "text": "20Place · Siemenssiedlung am Hohenzollernkanal III, Berlin, Germany · 12 km from map center" + }, + { + "id": "search-bar-option-3", + "text": "GroenerstraßeAddress · Groenerstraße 20, 13585 Berlin, Germany · 15 km from map center" + }, + { + "id": "search-bar-option-4", + "text": "GründerstraßeAddress · Gründerstraße 20, 12526 Berlin, Germany · 16 km from map center" + }, + { + "id": "search-bar-option-5", + "text": "Search \"Zzqxv430 Testladen Grunerstraße 20 Berlin\" in this area" + } + ], + "url": "https://openmapx.com/?map=52.5194%2C13.416%2C15%2C0%2C0" + }, + { + "capturedAt": "2026-10-07T20:41:52.849Z", + "caseId": "schaaf-address", + "query": "EDEKA Schaaf Schillingstraße 2 Berlin", + "requests": [ + { + "completed": true, + "lat": "52.52", + "lng": "13.42", + "path": "/api/integrations/geocoding/autocomplete", + "q": "EDEKA Schaaf Schillingstraße 2 Berlin", + "status": 200, + "zoom": "15", + "ids": [ + "maptiler:poi.32879876", + "maptiler:address.4011014", + "maptiler:address.9975161", + "maptiler:address.18028993", + "maptiler:address.6705156", + "maptiler:region.505" + ], + "partial": null + }, + { + "completed": true, + "lat": "52.52", + "lng": "13.42", + "path": "/api/integrations/search-suggestions/search", + "q": "EDEKA Schaaf Schillingstraße 2 Berlin", + "status": 200, + "zoom": null, + "ids": [], + "partial": true + } + ], + "rows": [ + { + "id": "search-bar-option-0", + "text": "BerlinArea · Germany · 1.4 km from map center" + }, + { + "id": "search-bar-option-1", + "text": "Edeka SchaafPlace · Singerstraße 121, 10179 Berlin, Germany · 382 m from map center" + }, + { + "id": "search-bar-option-2", + "text": "SchillingstraßeAddress · Schillingstraße 2, 10179 Berlin, Germany · 380 m from map center" + }, + { + "id": "search-bar-option-3", + "text": "SchillingstrasseAddress · 10179 Berlin, Germany · 371 m from map center" + }, + { + "id": "search-bar-option-4", + "text": "SchellingstraßeAddress · 10785 Berlin, Germany · 3.3 km from map center" + }, + { + "id": "search-bar-option-5", + "text": "SchillingstraßeAddress · Schillingstraße 2, 13403 Berlin, Germany · 8.3 km from map center" + }, + { + "id": "search-bar-option-6", + "text": "Search \"EDEKA Schaaf Schillingstraße 2 Berlin\" in this area" + } + ], + "url": "https://openmapx.com/?map=52.5194%2C13.416%2C15%2C0%2C0" + } + ], + "selections": [ + { + "query": "EDEKA Moch Grunerstraße 20", + "action": "Enter", + "observed": "area search, 0 results", + "capturedAt": "2026-10-07T20:42:24.163Z", + "panel": "category", + "selectedId": null + }, + { + "query": "EDEKA Alexa", + "action": "Enter", + "observed": "opened EDEKA place sheet with Alexanderstraße address; same-tenant status unresolved", + "capturedAt": "2026-10-07T20:43:00.894Z", + "panel": "place", + "selectedId": "maptiler:poi.39267497" + } + ] +} diff --git a/scripts/discovery-eval/tsconfig.json b/scripts/discovery-eval/tsconfig.json index a3bb5722b..7b8719880 100644 --- a/scripts/discovery-eval/tsconfig.json +++ b/scripts/discovery-eval/tsconfig.json @@ -7,5 +7,5 @@ "noEmit": true, "typeRoots": ["../../packages/cli/node_modules/@types"] }, - "include": ["*.ts", "../record-search-eval.mts"] + "include": ["*.ts", "business-name-address/*.ts", "../record-search-eval.mts"] } From bd77c6d305b3b252db8a1a4de4212ba51374705a Mon Sep 17 00:00:00 2001 From: Florian Date: Wed, 7 Oct 2026 23:07:04 +0200 Subject: [PATCH 2/4] chore(discovery): register offline replay and document validation --- .../developer/business-name-address-retrieval.md | 16 +++++++++++++--- knip.jsonc | 1 + 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/docs/docs/developer/business-name-address-retrieval.md b/docs/docs/developer/business-name-address-retrieval.md index 862522718..caaf4facd 100644 --- a/docs/docs/developer/business-name-address-retrieval.md +++ b/docs/docs/developer/business-name-address-retrieval.md @@ -250,12 +250,22 @@ must remain distinguishable. A country-scale rebuild/rollout needs separate scop The focused evaluation, adapter, ranking and term-extractor suite passed **127 tests in nine files**, including 17 new evidence tests. The evaluation TypeScript -check, offline replay and documentation production build passed. An independent +check, offline replay and documentation production build passed. Commit hooks +also passed repository type checks (30 cached Turbo tasks plus a fresh evaluation +compiler run) and policy checks; repository lint passed with existing warnings. +An independent read-only review recomputed recall, row totals and timing summaries and verified all 39 archived query-response hashes against fixture metadata. Historical ranking is evidence, not an assertion that later #428/#429 fixes must preserve it. -The complete repository test suite and production database checks were not run; -there are no production code or schema changes in this PR. +Full repository test-gate and remote CI results are tracked in the delivery PR. +Production database checks were not run; there are no production code or schema +changes in this PR. + +The broader dead-code scan still reports 17 existing unused files and one +development-dependency diagnostic. The same findings reproduce with the baseline +Knip configuration while excluding this investigation's new directory. The new +standalone replay is explicitly declared as a Knip entry and adds no remaining +dead-code finding. Unrelated baseline cleanup is outside this bounded report. ## Admin inspection and completion status diff --git a/knip.jsonc b/knip.jsonc index fcaded218..4029eb0a5 100644 --- a/knip.jsonc +++ b/knip.jsonc @@ -9,6 +9,7 @@ "workspaces": { ".": { "entry": [ + "scripts/discovery-eval/business-name-address/replay.ts", "scripts/check-dockerfile-workspace-sync.ts", "scripts/check-credential-keys.ts", "scripts/check-feed-ids.ts", From fe8781a62710f3a50a37283842dd00c31889dbf2 Mon Sep 17 00:00:00 2001 From: Florian Date: Wed, 7 Oct 2026 23:32:39 +0200 Subject: [PATCH 3/4] docs(admin): correct search-index summary fields --- docs/docs/administration/services-administration.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/administration/services-administration.md b/docs/docs/administration/services-administration.md index a38c16d97..89363f512 100644 --- a/docs/docs/administration/services-administration.md +++ b/docs/docs/administration/services-administration.md @@ -210,7 +210,7 @@ data workflow is documented in [Preparing data](../install/preparing-data.md). ### OSM code and alias search index The data workflow also operates the local OSM code/alias/acronym index used by -consumer autocomplete. It shows the source region and fingerprint, current +consumer autocomplete. It shows the source region, current build stage, place and term counts, publication epoch and time, whether a newer PBF has made the index stale, and the last error. Building is explicit: select the downloaded region and confirm the operation, or run From 7f0f57e9439f2716212be24afe9cb922666f835a Mon Sep 17 00:00:00 2001 From: Florian Date: Thu, 8 Oct 2026 20:00:16 +0200 Subject: [PATCH 4/4] docs(discovery): retain compact retrieval regressions and lexical findings --- .../business-name-address-retrieval.md | 454 +- .../business-name-address/README.md | 113 +- .../business-name-address/conditions-v1.json | 98 - .../business-name-address/evidence.test.ts | 169 +- .../business-name-address/replay-v1.json | 338 -- .../business-name-address/replay.ts | 14 +- .../business-name-address/responses-v1.json | 4334 ++++++----------- .../business-name-address/sources-v1.json | 186 +- .../business-name-address/ui-v1.json | 849 ---- 9 files changed, 1623 insertions(+), 4932 deletions(-) delete mode 100644 scripts/discovery-eval/business-name-address/conditions-v1.json delete mode 100644 scripts/discovery-eval/business-name-address/replay-v1.json delete mode 100644 scripts/discovery-eval/business-name-address/ui-v1.json diff --git a/docs/docs/developer/business-name-address-retrieval.md b/docs/docs/developer/business-name-address-retrieval.md index caaf4facd..98f4bf4ee 100644 --- a/docs/docs/developer/business-name-address-retrieval.md +++ b/docs/docs/developer/business-name-address-retrieval.md @@ -1,295 +1,167 @@ --- title: Berlin business name/address retrieval investigation -description: Evidence and a bounded lexical-search recommendation for issue 430, without production search or ingestion changes. +description: Source identities, reusable regressions and a bounded local lexical evaluation for issue 430. --- -# Berlin business name/address retrieval: go/no-go - -**Decision, 2026-10-07:** GO for a small, local lexical candidate follow-up using -existing Overture Places, after inspecting the intended deployed generation. -NO-GO for production adoption on this evidence alone. There is no demonstrated -need for a new source pipeline: the inspected Overture release already contains -the independently verified EDEKA Moch tenant. No production code, data, cache, -configuration, ingestion or deployment changed in this investigation. - -The immediate failure is reproducible for the operator-specific name: -`EDEKA Moch` retrieves fuzzy namesakes, and `EDEKA Moch Grunerstraße 20` retrieves -addresses without a business. Shorter EDEKA queries retrieve a mall POI with a -different inferred address and incomplete identity. That is a separate outcome: -**a different returned address does not prove a different real-world branch**. -Ranking cannot recover a missing named candidate; conversely, branch rows lost -after retrieval must not be scored as upstream omissions. - -## Evidence and reproducibility - -The [versioned evidence directory](https://github.com/OpenMapX/openmapx/tree/main/scripts/discovery-eval/business-name-address) -contains 13 queries, selected raw/provider and adapted fields, source records, -request metadata/hashes, the historical combination/ranking/Enter replay, -independently observed live UI lists and offline checks. Its README provides -recapture parameters and commands. Full raw captures and screenshots stay outside -Git in `/tmp/openmapx-430`; this temporary local archive has no durable public URL. -Committed selected fixtures support review without access to that archive. - -This extends the [discovery evaluation protocol](discovery-evaluation.md) and -the [#424 live pilot](https://github.com/OpenMapX/openmapx/pull/424#issuecomment-6045066881). -Unlike the pilot's approximate label/radius assessment, exact business recall -here requires an independently verified branch identity. A same-brand row within -200m is insufficient. Expectations were frozen before comparison; there is no -before/after production feature comparison or application-only causal claim. -The initial 12 queries were captured together; the independently verified Schaaf -control was added before capturing that additional query. Alexanderstraße's -initial target judgment was corrected to **unresolved**, with no exact-entity -denominator, after inspecting its source reference. - -| Condition | Pinned value or specific limitation | -| ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Source inspection and replay | Freshly fetched main `3c80939d26a09f131b16d849895255436b5e5798`; task-owned worktree/branch. Source files unchanged; evaluation additions made the worktree dirty during replay. | -| Concurrent fixes | #428/#429 issue bodies/comments read; no fixes/cherry-picks included. Historical replay is tied to this baseline. The current replay command prints its own revision and must not be compared as if unchanged. | -| Public API/UI deployment | Unknown SHA; public responses do not identify it. Local HEAD does not identify the remote app. | -| Query context | English, center `[13.416,52.5194]`, zoom 15. Raw MapTiler uses the adapter's rounded proximity `[13.42,52.52]`; autocomplete `limit=6`, `autocomplete=true`, explicit types including POI; aggregate limit 8. All 13 queries have one synonym variant. | -| Raw provider | MapTiler, operator-owned local API credential; credentials omitted from capture parameters and fixtures. Geocoder dataset/index generation unavailable. | -| Public providers | `/api/integrations` listed MapTiler, Photon, Nominatim, Pelias, MOTIS, DB RIS, Entur, OSM aliases and notable places as enabled. Response rows identify `geocoding-maptiler`. This does not establish the configured chain order, service availability, database contents or capability bindings. `poi-overture` was not listed. | -| Deployed OSM/Overture | Unknown extract/fingerprint, active generation, index epoch and publication state. Both authenticated status endpoints returned HTTP 401; admin integration navigation redirected to the public map. No deployed database was accessed. | -| Inspected OSM | Current OSM API map bbox `[13.414,52.5185,13.418,52.521]`, direct elements/history for controls, explicit IDs/versions/timestamps. This is not a regional PBF or a deployed extract. Map response SHA-256 is in `sources-v1.json`. | -| Inspected Overture | Read-only S3 Places release `2026-09-23.1`, bbox `[13.408,52.513,13.426,52.527]`, DuckDB 1.5.6, 3,255 unfiltered rows. Selected records retain GERS IDs, versions and per-property provenance. STAC discovery returned 403; the explicit release path from official documentation was readable. No asset ETags/full release checksum measured. | -| Cache | Uncontrolled at MapTiler/public CDN/API/browser. API source has autocomplete L1 soft 5min/hard 2h, L2 1h; forward cache 24h; aggregate 5min and partial responses uncached. No cache was flushed or bypassed. HTTP headers do not establish cold/warm state. | -| Live UI | Separate public capture, 1280×800, DPR 1, dark, fixed camera, pitch/bearing 0, anonymous session, no saved places or recents before list capture. Camera initialization attempts were discarded; retained rows have the Berlin camera. Styles were not pinned: no cartography comparison is claimed. | - -Source traces at the pinned revision: - -- `integrations/geocoding-maptiler/provider.ts`: autocomplete maps features in - order without filtering or sorting; `properties.ref` is not exposed as an OSM - identity. A formatted address is provider output, not necessarily an OSM tag. -- `integrations/geocoding/{index,orchestrator,query-expansion}.ts`: round bias, - cache, first nonempty configured provider, concatenate variants/deduplicate IDs. -- `services/data-manager/src/jobs/search-index/{terms,extract}.ts` and - `integrations/search-osm-aliases/provider.ts`: aliases/codes/conservative acronyms - drive exact/prefix search. Ordinary primary name/address terms are not added; - zero-term features are skipped. The inspected EDEKA room, MediaMarkt, REWE and - Schaaf all produce zero terms in the existing extractor. -- `integrations/poi-overture/index.ts`: category provider, confidence floor 0.5, - permanent-closure filter and top-50 window; no business-name text candidate - method. `poi-search/orchestrator.ts` selects the first text-capable provider. -- `packages/core/src/utils/overpass.service.ts`: full escaped query matched - against `name` on POI nodes/ways; no name/address decomposition. The known OSM - name `EDEKA` cannot match the whole `EDEKA Moch Grunerstraße 20` expression. -- `integrations/search-suggestions/orchestrator.ts`: provider deadline 1,200ms, - all-settled fan-out, merge before limit. `SearchBar.tsx` concatenates aggregate - suggestions and autocomplete, then uses `suggestionRanking.ts` and `enterAction`. - -## Tenant and branch judgments - -[Official EDEKA profile 408935](https://www.edeka.de/maerkte/408935/) -identifies EDEKA Moch at Grunerstr. 20, 10179 Berlin, phone `+493024045625`. -Its structured point is `[13.4147929,52.519901]`; this is a retailer listing point, -not a surveyed entrance. The [mall's own listing](https://www.alexacentre.com/en/center-info/opening-hours/) -places its EDEKA in the first basement. Do not use shared mall coordinates to -merge EDEKA with [MediaMarkt Berlin-Mitte](https://www.mediamarkt.de/de/store/berlin-mitte-190). - -| Inspected source/entity | Status and identity evidence | -| ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| Overture Moch | **Present, verified listing:** GERS `035b544e-40f5-4ce0-a06f-1c9032ded028`, v13, name “EDEKA Moch Supermarket”, Grunerstraße 20, same official phone. Meta record `194804870560113`, updated 2026-08-24; Overture confidence calculation updated 2026-09-17. Confidence ≈0.99991, operating status null (unknown, not closed). | -| OSM exact operator name/address | **Absent in the inspected mall records:** no `Moch` name/contact or Grunerstraße address on the EDEKA element. This is a bounded attribute gap, not proof that the business is absent from all OSM. | -| OSM EDEKA mall room | **Present, operator identity unresolved:** [way 1204762785 v3](https://www.openstreetmap.org/way/1204762785/history/3), timestamp 2026-01-23, supermarket, indoor room, level -1, name EDEKA, city Berlin; no street/number/contact/operator. Mall [way 258898047 v38](https://www.openstreetmap.org/way/258898047/history/38) has Grunerstraße 20. Geometric context and basement agreement suggest the same tenant, but do not independently establish its operator or a verified cross-source link. | -| Returned Alexanderstraße 25 | Raw MapTiler `poi.39267497` explicitly references `osm:w1204762785`, coordinates `[13.4167764,52.5185536]`. The OSM way does not assert Alexanderstraße 25. Nominatim resolves that way to Alexanderstraße without a house number. Therefore **address inference/identity ambiguity**, not a verified alternative branch and not exact Moch success. | -| MediaMarkt control | OSM [node 322490364 v24](https://www.openstreetmap.org/node/322490364/history/24), explicit Grunerstraße 20 and branch-specific website. Overture GERS `bfbe5e1d-7db5-482e-8772-f53959dde008` v9 and `81270f18-8f0b-48a9-ae69-31d4ef96cdd5` v8 both describe the mall branch; candidate duplicate requiring branch/website evidence, not an ID-only merge. | -| Nearby EDEKA control | [Official Schaaf profile 407497](https://www.edeka.de/maerkte/407497/), Schillingstr. 2, phone `+493023458611`. OSM node `9154787137` has that street/number; Overture GERS `a56cd442-edcf-4d26-98c1-9c70de50f1d7` v11 has matching name/address/phone. Raw MapTiler references that node but formats Singerstraße 121, another address discrepancy. This branch is distinct from Moch by verified name/address/contact. | -| REWE control | [Official REWE profile 1350030](https://www.rewe.de/marktseite/berlin-mitte/1350030/rewe-markt-ackerstr-23-26-invalidenstr-158/) and OSM node `348000444` v29 verify Invalidenstraße 158. Its Overture status is **unknown**: outside the scanned bbox, not queried. | -| Production copies | All source-presence judgments above are **unknown in the deployed generations**. No query miss establishes an empty deployed table. | - -The Overture Moch record is sufficient to justify evaluating existing-data -retrieval. No ATP coverage claim is made. If a pinned deployed generation lacks -it, first compare that generation/source row and import filters to this inspected -release. If the intended source truly lacks it, a separate enrichment proposal -needs a dated retailer listing, source permissions, stable store ID and a -bounded independently judged coverage sample; do not assume ATP contains it. - -## Layer comparison and quality - -Each query yielded six raw MapTiler features and six public autocomplete rows, -with identical ID order across the independent captures. Offline invocation of -the actual pinned adapter preserves every feature's ID, label, formatted address, -type and coordinates. All 13 aggregate replies were empty **and partial**; -provider health/errors or deployed index availability remain unknown. -The combined place pool is therefore the six adapted rows per query, not evidence -of a successful empty local-data lookup. No synonym amplification occurred. - -| Query | Raw/adapted retrieval | Pinned ranked places and Enter | Live dropdown | -| ----------------------------------------- | -------------------------------------------------------------- | --------------------------------------------- | ---------------------------------------------------------------------- | -| EDEKA Moch | Moch absent; fuzzy Koch/Möck namesakes | Six rows; choose | Namesake first, no Moch | -| EDEKA Moch Grunerstraße 20 | No POI; address first | Six rows; weak area search | Address first; actual Enter → area panel, 0 results | -| EDEKA Grunerstraße 20 Berlin | Unresolved `poi.39267497`, no verified Moch | Six rows; weak area search | Unresolved EDEKA first | -| EDEKA Alexa | Same unresolved way first | Six → three rows; open unresolved ID | Three places; actual Enter → that EDEKA sheet, Alexanderstraße address | -| EDEKA Grunerstraße | Same unresolved way first | Six → four; weak area search | Four places; unresolved EDEKA first | -| EDEKA Alexanderstraße 25 Berlin | Returned-address control; identity unresolved | Six → four; open unresolved ID | Same unresolved candidate first | -| EDEKA | Ambiguous brand; no unique branch expectation | Six → three; area search | Three places plus brand shortcut; no exact-tenant success claim | -| MediaMarkt Alexa | Verified Berlin branch raw rank 2; Rijswijk first | Berlin remains rank 2; open Rijswijk | Rijswijk first, Berlin second: #428 ranking defect | -| MediaMarkt Grunerstraße 20 Berlin | Verified branch rank 1 | Rank 1; open Berlin | Berlin first | -| REWE Invalidenstraße 158 Berlin | Verified OSM-ref branch rank 1 | Six → four; rank 1, open REWE | REWE first; other branches removed after retrieval | -| EDEKA Moch Grunerstraße 999 Berlin | No exact business/address assertion | Six rows; weak area search | Berlin area first; no invented exact tenant | -| Zzqxv430 Testladen Grunerstraße 20 Berlin | Invented business absent; address/number POIs returned | Six → five; weak area search | Address first; no exact-business success | -| EDEKA Schaaf Schillingstraße 2 Berlin | Verified OSM-ref candidate rank 1, formatted address conflicts | Berlin area first, Schaaf rank 2; weak search | Berlin first, Schaaf second | - -There are nine positive exact-entity queries: five Moch, two MediaMarkt, one REWE, -one Schaaf. Strict verified-entity Hit@3 is **4/9** at raw, adapted, combined and -pinned ranked place stages. The five Moch queries have **0/5 confirmed** hits; -three have the unresolved mall way, so the possible Hit@3 range is 4/9–7/9 if a -future independent identity judgment establishes that link. The name and full -Moch name/address queries still omit it. Unknown identity is not a false-branch -count or a successful hit. MediaMarkt ALEXA has one confirmed wrong-branch top row; -Schaaf's Berlin-area top row is not a business substitution. Both negatives have -zero claimed exact business matches, but generic fallback rows are retained. - -Across the 13 queries, the place-only replay reduces **78 combined rows to 65** -after shared merge/ranking. The EDEKA and REWE branch losses occur there, separately -from retrieval (#429). Do not require future implementations to reproduce these -defects: `replay-v1.json` is historical evidence, while `replay.ts` identifies the -code actually used for a new replay. Live lists independently confirm the main -ordering/count outcomes; REWE's UI capture recorded only its geocoder fetch -(aggregate cache reuse was not network-observed in that interaction). - -The two actual Enter observations are explicitly recorded; the other Enter -actions in the table are **source replay**, not observed navigation. Saved/recent -and category/brand/preset shortcuts were excluded from that place-only replay. -UI brand shortcuts and the appended area-search row are not counted as retrieved -businesses. The older label/radius pilot must not mark `poi.39267497` verified -solely because it lies near the mall. - -Timings for 13 requests per layer, in milliseconds: - -| Layer | Min / median / max | Cache interpretation | -| --------------------------- | ------------------------ | ------------------------------------------------------------- | -| Raw MapTiler | 52.47 / 275.82 / 506.45 | Uncontrolled; provider generation/cache unknown | -| Public adapted autocomplete | 86.58 / 160.29 / 524.77 | Uncontrolled; no cold/warm classification | -| Public aggregate | 109.52 / 113.60 / 139.49 | Empty partial replies; not successful local retrieval latency | - -These were 39 independent HTTP requests, with no retries in the query capture. -Public browser operations add their own requests and are not included in these 39. No p95 SLA, cold/warm success, indexed PostgreSQL latency or query-plan claim -is established. Bbox source acquisition took about 35s, with 2 DuckDB threads and -512MB configured memory limit; transfer bytes and peak RSS were not measured. -It is an offline inspection cost, not interactive-search latency. - -## Concrete bounded follow-up design - -Use a region-scoped **search-suggestions provider over the existing imported -Overture table**, enabled only for a local Berlin evaluation. Do not repurpose the -OSM alias index or install a source pipeline. Begin with primary/common names, -source-provided brand names and address tokens in a separate release-keyed lexical -index/view; retain source tables and credits separately. Evaluate an exact/prefix -index first, then optional PostgreSQL trigram fallback only if needed. No embedding -or model service is needed to test this hypothesis. - -1. Normalize Unicode/case and German street spellings, preserving original display - values. Decompose terminal street+house number+city when recognized. Retrieve - with name/brand token coverage **and** parsed address constraints; `Moch` and - house number `999` cannot be discarded to make a convenient same-brand match. - Require token boundaries; `Alexa` is not evidence for `Alexanderstraße`. -2. Resolve a mall suffix to an independently known mall identity/footprint and - use a verified containment/address association as context. Do not invent an - `Alexa` alias on a business or expand every unmatched word to a city. Until - such association is available, name-only Moch/address queries are supported - while `EDEKA Alexa` remains an explicit evaluation gap. -3. Return `overture:` identity, source names, structured address, provenance, - release and closure/unknown status through the existing composition. If - adapting MapTiler's validated `osm:n/w/r` reference becomes necessary, handle - that in a narrow reviewed adapter follow-up. Brand Wikidata IDs describe the - chain, not the branch. Proximity/shared mall address/phone switchboards alone - cannot establish identity. Conflicting addresses/contacts stay separate; a - verified OSM↔GERS link may merge only with retained IDs and credits. -4. Exclude permanently closed records; retain null status as unknown, and do not - reinterpret a current opening-hours “Closed” badge as permanent closure. - Carry Meta/Foursquare/Overture attribution using the existing contributor - mapping and release gates. The two MediaMarkt GERS records need a verified - duplicate judgment; the café inside MediaMarkt is a separate tenant. -5. Bound candidate acquisition to at most 30 rows, local output to 8 and the - existing combined API limit to 8 (hard route maximum 20), UI maximum 10. One - bounded SQL operation per query, no per-result remote enrichments in candidate - generation. Preserve explicit remote-city/address search instead of forcing - all business queries to the nearest branch. -6. Use a 300ms database deadline inside the existing 1,200ms provider deadline. - Proposed local-provider p95 budget: cold ≤500ms, warm ≤150ms; total interaction - pilot ceilings remain cold ≤5,000ms/warm ≤2,000ms from #424. These are proposed - gates, not measured achievements. Release/index epoch, normalized query, - language, region and proximity partition the isolated evaluation cache; test - both query orders and cold/warm runs. Do not cache timeouts/partial failures as - authoritative misses. Missing/unready index or timeout leaves normal geocoder - fallback available and reports partial/unavailable state. - -Map candidates to the existing `SearchSuggestion` envelope: `id=overture:`, -`ids.overture=`, `type=poi`, localized primary name as `label`, formatted -address as `sublabel`, coordinates, provider/source IDs, and `searchMatch` with -the retained matched name (`name` or explicitly permitted `near_name`). Use a -neutral bounded `importance`; source confidence is not business prominence. -The envelope does not carry arbitrary structured address/provenance fields. -Keep those, release and closure judgments in the source/audit row; return credits -through the provider's `attributions`. On selection, the existing `poi-overture` -resolver supplies structured place details and provenance. A local integration -must declare that resolver and PostGIS dependency, verify resolver readiness, -and freeze the same generation through candidate lookup and resolution. If that -dependency or the selected record is unavailable, report the failure and retain -fallback rather than silently substituting another branch. This wiring is a -follow-up design, not an enabled capability of the inspected deployment. - -The promotion gate requires all nine verified positive queries in the first -three results, zero wrong-branch selections and false exact negative matches, -the unresolved mall identity either independently resolved or still marked unknown, -and preserved nearby/co-located branches after combination. Measure rank/recall -**before** merge/ranking and again after it; adopt applicable #428/#429 behavior -only in a separately pinned run. Their completion was not required to perform -this investigation. Add explicit remote city, ambiguous brand, closures, duplicate -GERS, contradictory addresses and language/order/cache controls before adoption. - -Operational cost is a regional lexical index plus staged validation and cache -keys, not another upstream ingestion system. Measure table/index bytes, build -time, peak memory, EXPLAIN/BUFFERS and cold/warm query percentiles on a disposable -copy of the intended generation. Those costs are unknown here. Keep zero new -remote requests in the lexical path; exact absence, unavailable data and timeout -must remain distinguishable. A country-scale rebuild/rollout needs separate scope. - -## Validation - -The focused evaluation, adapter, ranking and term-extractor suite passed **127 -tests in nine files**, including 17 new evidence tests. The evaluation TypeScript -check, offline replay and documentation production build passed. Commit hooks -also passed repository type checks (30 cached Turbo tasks plus a fresh evaluation -compiler run) and policy checks; repository lint passed with existing warnings. -An independent -read-only review recomputed recall, row totals and timing summaries and verified -all 39 archived query-response hashes against fixture metadata. Historical -ranking is evidence, not an assertion that later #428/#429 fixes must preserve it. -Full repository test-gate and remote CI results are tracked in the delivery PR. -Production database checks were not run; there are no production code or schema -changes in this PR. - -The broader dead-code scan still reports 17 existing unused files and one -development-dependency diagnostic. The same findings reproduce with the baseline -Knip configuration while excluding this investigation's new directory. The new -standalone replay is explicitly declared as a Knip entry and adds no remaining -dead-code finding. Unrelated baseline cleanup is outside this bounded report. - -## Admin inspection and completion status - -Current **Services → Data workflows** already has Overture release/region/counts -and search-index epoch/publication/staleness controls. The OSM index description -correctly calls it code/alias/acronym search. A ready index is not evidence that -ordinary business names are searchable, and an Overture health “up” state is not -a named-business retrieval capability. `SearchIndexMaintenance` receives a source -fingerprint but does not display it in its summary; use the authenticated status -response to pin it. This is documented as an inspection detail rather than a UI -change because no local lexical feature is being enabled. Broad admin changes -would exceed the investigation's need. - -Completed: source revision pin; public provider inventory and explicit unavailable -production metadata; official tenant/alternative identities; available OSM and -Overture IDs/provenance; 13-query raw/adapted/combined/ranked/live-list comparison; -two live Enter outcomes; strict branch/negative judgments; operational limits, -fallback, credits/closures and candidate design; versioned fixtures/offline checks; -go/no-go report. No prototype is required: the issue explicitly permits a concrete -candidate-integration design for data-present cases. - -Remaining unknowns: deployed revision/chain order/generations/index health; exact -operator identity of the generic OSM mall way and its link to GERS; provider -generation and cache history; Overture REWE coverage outside the bbox; measured -lexical/PostgreSQL resource costs and controlled cold/warm latency. These limit -production adoption, not the completed bounded investigation. No merge or deploy -is authorized by this report. +# Business name/address retrieval: decision and next steps + +**2026-10-08: GO for staged local lexical development over existing Overture +data; NO-GO for production adoption yet.** The disposable PostgreSQL probe +retrieves Moch without another ingestion source. Combined with saved geocoder +results, verified Hit@3 rises **4/9→8/9**. A mall association gap, three weak +address-query Enter decisions, unknown deployed generations and unmeasured +regional/cold performance remain gates. No application provider/schema, +production data/cache/configuration, ingestion or deployment changed. + +## Reusable inputs and external evidence + +The [regression corpus](https://github.com/OpenMapX/openmapx/tree/main/scripts/discovery-eval/business-name-address) +keeps 13 versioned queries, 52 distinct raw/adapter candidate projections, reviewed +source identities, real-adapter checks and a current-checkout replay. Its README +provides commands, recapture conditions and rights. Inputs were captured on +2026-10-07; these are not today's live provider results. + +Dated dropdowns/status snapshots, timings, repeated per-query lists, historical +rank/Enter outputs and the original report are in the [October 7 capture archive](https://gist.github.com/Medformatik/c36d8b8f44c88971277659512a533a51/8b33cd9238ba743f54f3235f2831470cf3bb5972). +The throwaway code, 3,255-row source projection, SQL plans/costs, current-main +replay/composition and reproduction instructions are in the [October 8 lexical +probe archive](https://gist.github.com/Medformatik/3fdd91df857e72bf3a492836324f3c69/4f458cce9bdcce34cb335881e91c56a5bbf781e1). Both commit permalinks have checksum manifests and +attribution. Full raw operator files/screenshots/test logs were temporary; no +public durable archive is claimed for them. Prior Git history is preserved. + +| Input/condition | Pin or limitation | +| -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Initial source/replay | Main `3c80939d26a09f131b16d849895255436b5e5798` | +| Current-main replay/composition | Freshly fetched `fe6b7969979ae024655e38d3b4f605295e757f93`, clean source export; #432 included; #429/#438 evaluated separately below | +| Captured query context | EN, Berlin `[13.416,52.5194]`, zoom 15; upstream rounded `[13.42,52.52]`, MapTiler limit 6/autocomplete/types including POI, aggregate limit 8 | +| Public deployment/provider/cache | Unknown deployment SHA, provider generation/chain, OSM extract, active Overture generation and cache history; authenticated status 401. Enabled registry does not prove health/data/capability bindings | +| OSM | API bbox/direct versioned elements, not deployed data or a regional PBF; Overpass failed before API fallback | +| Overture | Dated release `2026-09-23.1`, bbox `[13.408,52.513,13.426,52.527]`, 3,255 rows; export SHA256 `a9ec6402ecd390d6200151ace4d5a5a7106d1ca8641652e19dd336211684ba93`; STAC 403, explicit release readable | +| Live UI | Separate dated anonymous capture, 1280×800/DPR1/dark/fixed Berlin camera; 13 lists/two Enter observations. No prototype UI or application-only comparison | + +## Identity and source presence + +[Official Moch](https://www.edeka.de/maerkte/408935/) verifies Grunerstr. 20, +10179 Berlin, phone +493024045625; rechecked 2026-10-08. Its point is a listing +location, not a surveyed entrance. Shared mall address/proximity/brand cannot +establish exact tenant identity. + +| Entity | Evidence and judgment | +| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Moch/Overture | **Present, verified listing:** GERS `035b544e-40f5-4ce0-a06f-1c9032ded028` v13, matching name/address/phone; Meta 194804870560113 updated2026-08-24. Operating status null=unknown | +| OSM EDEKA room | **Present, operator unresolved:** way 1204762785 v3, supermarket/indoor/level −1/name EDEKA; no operator/contact/street/number. Exact Moch attributes absent in inspected mall records, not globally absent OSM | +| Alexanderstraße 25 result | MapTiler `poi.39267497` references that same way, which does not assert this address; Nominatim gives Alexanderstraße without house number. **Address inference/identity ambiguity**, neither a verified other branch nor confirmed Moch | +| MediaMarkt | OSM node 322490364 v24 at Grunerstraße 20, branch-specific website. GERS `bfbe5e1d-7db5-482e-8772-f53959dde008` v9 and `81270f18-8f0b-48a9-ae69-31d4ef96cdd5` v8 describe the mall branch: duplicate judgment must retain IDs/credits. Espressobar `337b556d-d0d0-4c38-a81b-c92bc326eba1` is a separately named tenant | +| Schaaf alternative | Dated official profile 407497, Schillingstr. 2/phone +493023458611, OSM node 9154787137 v13 and GERS `a56cd442-edcf-4d26-98c1-9c70de50f1d7` v11 agree. Raw MapTiler references the node but formats Singerstraße 121. Official profile recheck 404 on October 8 leaves current operation unknown, not proven closed | +| REWE | Dated official profile 1350030/OSM node 348000444 v29 verify Invalidenstraße 158. Overture **unknown**, outside inspected bbox | +| Deployed copies | **Unknown** for every source-presence judgment; no production DB access | + +Provenance/licenses remain separate from code licensing: MapTiler terms, OSM +ODbL, Overture/Meta CDLA-Permissive 2.0, Foursquare Apache 2.0 and contributor CC0 +where recorded. No ATP coverage claim/new-source requirement. If an intended +generation lacks Moch, inspect release/import filters before proposing enrichment. + +## Separate retrieval, adaptation, ranking and selection + +Raw MapTiler and independently captured adapted rows have the same 78 candidates +and ID order across 13 queries: the adapter does not cause Moch's omission. All +aggregate replies were empty/partial: unavailable retrieval, not source absence. +Initial combined 78→ranked 65 losses happen after retrieval. The OSM index covers +aliases/codes/acronyms, skipping ordinary business names; Overture exposes category +search rather than named-business candidates; Overpass matches whole query against +name without address decomposition. Code: `integrations/geocoding-maptiler/provider.ts`, +`services/data-manager/src/jobs/search-index/{terms,extract}.ts`, +`integrations/poi-overture/index.ts`, `packages/core/src/utils/overpass.service.ts`, +`integrations/search-suggestions/orchestrator.ts`, shared `suggestionRanking.ts`. + +| Offline layer/run | Verified Hit@3 | Interpretation | +| ----------------------------------------- | ------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Saved raw/adapted/combined | 4/9 | Five Moch variants have no confirmed exact tenant; three have unresolved possible matches | +| Same pool, initial/current-main ranker | 4/9→4/9 | #432 puts Berlin MediaMarkt above Rijswijk; Enter becomes weak/search instead of opening Rijswijk. EDEKA Alexa also becomes weak/search. Total 65 rows unchanged | +| Local lexical candidates | 7/8 inspected-source positives | Four Moch variants, two MediaMarkt variants and Schaaf; REWE outside bbox excluded from this denominator, not called absent | +| Lexical+saved adapter/current-main ranked | 8/9 | Combined 90→ranked 75; EDEKA Alexa stays missing. Both lexical negatives return 0; geocoder address/area fallback remains | + +Moch ranks first for four retrieved variants. Enter opens it for `EDEKA Moch`, +but remains weak/search for `EDEKA Moch Grunerstraße 20`, `EDEKA Grunerstraße 20 +Berlin` and `EDEKA Grunerstraße`: selection-policy gaps despite retrieval success. +Explicit Alexanderstraße still opens the unresolved provider row and stays +unjudged. Offline outputs are not observed new live navigation. + +## Separately pinned #429/#438 comparison + +[PR #438](https://github.com/OpenMapX/openmapx/pull/438) head +`dadd03d5339ad65b64de7a8240054d3befacd10c` was evaluated against its verified +ancestor `5f07b70967319b4b2c86769b542b551b93f98e02`, using clean task-owned source +exports and identical input pools. Fresh main +`9b212363ba891e97ac4a19c080a10bbc0e343cbd` produces the same traces as that base. +No other task's branch/worktree was changed; #438 is unmerged in this comparison. + +Geocoder candidates stay78 but ranked rows rise65→78; lexical+geocoder candidates +stay90 but ranked rows rise75→90. All candidates survive shared ranking in these +small pools. Verified Hit@3 stays4/9 and8/9 respectively; every Enter action is +unchanged. This is deduplication preservation, not new upstream/local retrieval. +The two MediaMarkt GERS rows and MapTiler branch now remain separate until +corroborated cross-source identity. Duplicate handling remains an integration +gate; the missing Alexa association and three weak Moch address selections remain. +The archive contains separate base/head/current-main traces and recomputed counts. + +## Local probe and bounded integration rules + +Throwaway SQL normalizes case/diacritics/German street spellings; decomposes name +and same-address street requirements, a separate house-number field and separate +locality tokens; permits only ≥3-character final +name prefixes; excludes permanent closure while retaining unknown status. Wrong +operator/house/city cannot fall through to that business. Whole/leading business +names precede tenants merely mentioning them. An initial Espressobar-first result +was reproduced by a failing DB check and corrected. GERS candidates remain distinct +before ranking: no invented mall alias or cross-source link. A review reproduced +postcode-as-house substitution; separate address roles now reject it and region-as-city +substitution. Trailing single house numbers/suffixes are supported; ranges and +general address parsing, +brand+city without street, multilingual matching and mall associations remain incomplete. + +| Measured local cost | Result/conditions | +| ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Database | PostgreSQL 18.6/PostGIS 3.6.4/aarch64; image `ghcr.io/baosystems/postgis@sha256:f5d625d4263fd9e9a90033951619c2707734a04abbce41ade91522f3428e42d9`; network disabled, own tmpfs 256 MiB, 2 CPU/512 MiB | +| Import/index build | 1.60s/0.16s including Docker/psql overhead; 3,255 places+3,255 addresses | +| Table/index bytes | 2,392,064/1,056,768 across both tables | +| Memory | Whole-container cgroup peak 300,068,864 bytes over probe session, not process peak RSS | +| Warm SQL p95 | 0.205–3.396ms per-query range; 20 EXPLAIN ANALYZE/BUFFERS repeats/query, nearest-rank p95; warmed by import/earlier calls | +| Warm command p95 | 67.8–94.0ms including Docker exec/psql startup; not application/provider latency | +| Plans/cold/scale | Selective bitmap indexes; broad EDEKA includes sequential scans. LIMIT caps candidates, not scanned rows. OS-cold/regional/production costs unknown; shared host load uncontrolled | + +Follow-up: an isolated regional lexical index over existing imports, retaining the +specialized alias index; acquire≤30/output≤8 (combined API 8/hard 20/UI 10), one SQL +operation/300ms DB deadline within existing 1,200 ms provider deadline, no remote +candidate enrichment. Proposed provider p95 cold≤500ms/warm≤150ms and interaction +cold≤5000ms/warm≤2000ms remain **unproven**. Cache by release/index epoch/query/ +language/region/proximity; test both orders/cold/warm. Unready/timeout reports +partial/unavailable with geocoder fallback; do not cache failures as authoritative misses. + +Use existing `SearchSuggestion`: `id=overture:`, `ids.overture`, actual +source name/address/coordinates, provider, matched name, neutral importance. Keep +structured provenance/release/address in audit rows, credits in attributions; +selection requires `poi-overture` resolver/PostGIS ready on the same generation. +Brand IDs/proximity/shared addresses/switchboards cannot alone merge branches. +Conflicts stay separate; verified links retain IDs/credits. Missing selection +must not silently substitute another branch. + +## Validation, admin inspection and remaining work + +Compact corpus: 14 real-adapter/term-extractor checks. Probe: 10 normalization/SQL +checks plus 15 transactional DB checks for identities, negatives, abbreviations, +boundaries, branches/tenants, permanent/unknown closure, remote address, same-address +consistency, postcode/region role confusion, caps, injection and timeout. Focused/types/lint/docs/CI recorded in PR. + +Existing admin workflows expose Overture release/region/counts and search-index +epoch/publication/staleness. Fingerprint is available in authenticated status, +not the card summary. Ready alias-index/healthy Overture does not establish business +lexical coverage. Documentation corrected; no admin behavior/shared caches changed. + +Next: review separately owned #438/#429; +address verified name+address Enter intent while retaining unknown-identity guards; +resolve or retain the EDEKA Alexa gap; inspect intended generation/resolver and +measure regional/cold/warm resource costs. Promotion requires 9/9 verified positives +in top 3, zero wrong-branch/false exact negatives, branch preservation and controlled +fallback/latency. No production feature, embeddings, ATP pipeline, global rollout, +merge or deployment is authorized by this evaluation. diff --git a/scripts/discovery-eval/business-name-address/README.md b/scripts/discovery-eval/business-name-address/README.md index 40fe806cd..561618f3e 100644 --- a/scripts/discovery-eval/business-name-address/README.md +++ b/scripts/discovery-eval/business-name-address/README.md @@ -1,28 +1,22 @@ -# Berlin business name/address investigation v1 - -Evidence for [#430](https://github.com/OpenMapX/openmapx/issues/430), captured on -2026-10-07. Read the [go/no-go report](../../../docs/docs/developer/business-name-address-retrieval.md) -for identity judgments, conditions, limitations and the bounded integration design. -This directory is evaluation material; it implements no search provider. - -- `queries-v1.json`: frozen query expectations and budgets. The Alexanderstraße - control has unresolved business identity and no required-entity judgment. -- `responses-v1.json`: **selected fields**, independently captured raw MapTiler - features, public adapted rows and aggregate replies; timestamps, request - parameters, status, response hashes and uncontrolled-cache timings. Raw feature - order is retained. Neither projection is a full payload. -- `sources-v1.json`: reviewed OSM elements and five Overture records, source - IDs/versions, release, provenance, license fields and bbox-acquisition hashes. -- `replay-v1.json`: historical place-only combination/ranking/Enter trace at - `3c80939d26a09f131b16d849895255436b5e5798`. It is not a future ranking contract. -- `ui-v1.json`: independently observed live DOM rows and request IDs at the fixed - Berlin camera, followed by two actual Enter outcomes. The deployment SHA is - unknown; these are not observations of the locally pinned application. -- `evidence.test.ts`: offline fixture/provenance checks and replay through the - real MapTiler adapter. It does not require future rankers to retain #428/#429. -- `replay.ts`: rerun place-only composition with the current checkout, reporting - its revision separately. Saved places, recents, categories, brands and presets - are omitted deliberately; the live UI evidence includes the actual dropdown. +# Business name/address regression corpus + +Reusable inputs from [#430](https://github.com/OpenMapX/openmapx/issues/430). +See the [findings and follow-up](../../../docs/docs/developer/business-name-address-retrieval.md). +This directory implements no search provider or ingestion process. + +- `queries-v1.json`: 13 frozen queries, expected identities/negatives and budgets. + Alexanderstraße remains unresolved, outside exact-business recall. +- `responses-v1.json`: 52 distinct selected raw MapTiler features and adapted rows, + reused by ID across queries. Fixed inputs captured 2026-10-07; neither projection + is a full payload or a claim about today's provider/deployment. +- `sources-v1.json`: compact reviewed OSM/Overture identity/provenance records. + A shared mall address or brand is not a verified business cross-link. +- `evidence.test.ts`: real-adapter identity/order parity and specialized OSM + term-extractor behavior. Tests do not freeze historical ranking or UI state. +- `replay.ts`: current-checkout place-only combination/ranking/Enter comparison + over fixed inputs. It reports its own revision/dirty state. The historical + aggregate was empty/partial; absence from it proves no source gap. Shortcuts, + recents and actual UI observations are separate evidence. ```sh pnpm exec vitest run scripts/discovery-eval/business-name-address/evidence.test.ts @@ -31,50 +25,33 @@ pnpm -C packages/cli exec tsx ../../scripts/discovery-eval/business-name-address --out /tmp/business-retrieval-replay.json ``` -For recapture, use the queries in file order. Fetch the three layers separately: -MapTiler `/geocoding/{encoded-query}.json` with an operator-owned key and the -recorded parameters; OpenMapX `/api/integrations/geocoding/autocomplete`; and -`/api/integrations/search-suggestions/search` with `limit=8`. The API rounds the -autocomplete anchor to `[13.42,52.52]`; do not send the unrounded point directly -to MapTiler when comparing it to that adapter path. Never print or save the key. -Capture HTTP status and hash the response bytes before projecting them. Empty -partial/error results cannot establish source absence. Use an isolated cache for -any cold/warm budget claim. Freeze a new version for changed judgments; do not -overwrite v1 with current network results. - -OSM can be rechecked via `https://api.openstreetmap.org/api/0.6/map` with the -recorded bbox and direct element endpoints. The bounded Overture acquisition used -Python DuckDB 1.5.6, `httpfs`, two threads and a 512MB memory limit: - -```sql -SELECT id, version, names, addresses, phones, websites, brand, confidence, - operating_status, sources, bbox -FROM read_parquet( - 's3://overturemaps-us-west-2/release/2026-09-23.1/theme=places/type=place/*' -) -WHERE bbox.xmin BETWEEN 13.408 AND 13.426 - AND bbox.ymin BETWEEN 52.513 AND 52.527; -``` - -This is a point/bbox-origin predicate for this Places sample, not a general -polygon-intersection query. It returned 3,255 unfiltered rows; only reviewed -business records are committed. REWE is outside that bbox and its Overture -presence was not inspected. Full raw files and screenshots remain in the task's -local operator archive `/tmp/openmapx-430`; that temporary path is not a durable -public archive. The selected fixtures make the report reviewable without it. +## External captures and recapture + +The [dated capture archive](https://gist.github.com/Medformatik/c36d8b8f44c88971277659512a533a51/8b33cd9238ba743f54f3235f2831470cf3bb5972) preserves historical request parameters, +response hashes/timings, full selected per-query lists, source acquisition details, +UI observations, status limitations and the original report. `checksums.json` +binds its exact bytes. These remain audit records rather than CI expectations. +The report links the reviewed 2026-10-08 lexical probe, its disposable container +command, measured costs and remaining adoption gates. Full raw operator +files and execution logs were temporary and are not a durable public artifact. + +For recapture, use query file order. Fetch raw MapTiler and public adapter/aggregate +layers independently. Match the adapter's rounded `[13.42,52.52]` upstream anchor; +EN, zoom 15, MapTiler limit 6/autocomplete true/types including POI, aggregate +limit 8. Use an operator-owned key; never print or store it. Capture timestamps, +parameters, status and byte hashes before projection. Record remote deployment, +provider/generation and cache conditions separately, unknown when unavailable. +Use isolated caches for cold/warm claims. Freeze a new version for changed +judgments; do not replace historical fixtures with live responses. ## Source credits and rights © MapTiler, © OpenStreetMap contributors. MapTiler search results remain subject -to [MapTiler Cloud terms](https://www.maptiler.com/terms/cloud/), including the -search-results export permission in section 6.4 and database attribution in -section 6.3. These samples are not relicensed as application code. - -OSM records: © OpenStreetMap contributors, [ODbL-1.0](https://www.openstreetmap.org/copyright). -Overture release: © Overture Maps Foundation and contributing datasets. The -selected records retain Meta and Overture `CDLA-Permissive-2.0` provenance and -Foursquare `Apache-2.0` provenance. See the upstream -[data documentation](https://github.com/OvertureMaps/data/blob/main/README.md) -and each retained `sources[]` entry. There is no inference that the code license -covers external data. No credentials, cookies, admin configuration or OSM -contributor account identifiers are retained. +to [MapTiler Cloud terms](https://www.maptiler.com/terms/cloud/), including export +permission in section 6.4 and database attribution in section 6.3. OSM: © +OpenStreetMap contributors, [ODbL-1.0](https://www.openstreetmap.org/copyright). +Overture/Meta: [CDLA-Permissive-2.0](https://cdla.dev/permissive-2-0/). Foursquare: +[Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0), copyright Foursquare Labs. +Selected source records retain applicable dataset/license IDs. External samples +are not relicensed as application code; official retailer pages establish +identity facts, not permission to redistribute their pages or photos. diff --git a/scripts/discovery-eval/business-name-address/conditions-v1.json b/scripts/discovery-eval/business-name-address/conditions-v1.json deleted file mode 100644 index 6d81165b6..000000000 --- a/scripts/discovery-eval/business-name-address/conditions-v1.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "version": 1, - "baseline": "3c80939d26a09f131b16d849895255436b5e5798", - "productionDeployment": { - "value": null, - "reason": "Not exposed by public API/UI; authenticated metadata not available" - }, - "productionOsmExtract": { - "value": null, - "reason": "No production DB access; search-index/status returned HTTP 401" - }, - "productionOvertureGeneration": { - "value": null, - "reason": "No production DB access; overture/status returned HTTP 401" - }, - "providerDatasetGeneration": { - "value": null, - "reason": "Not returned by MapTiler geocoding API" - }, - "providerChainOrder": { - "value": null, - "reason": "Admin configuration unavailable; served rows identify MapTiler only" - }, - "publicRegistry": { - "capturedAt": "2026-10-07T20:40:55.323587+00:00", - "revision": "577370047f7a31f265ee654d5753cd34ed2a494e05a1d3b878c2b22cda0f493f", - "sha256": "8c84e209123317d50ea5195d76c2fdcba872e1327f8d0f69ec13bf1c4234faab", - "projection": [ - { - "id": "geocoding", - "enabled": true, - "domains": ["geocoding"] - }, - { - "id": "geocoding-db-ris", - "enabled": true, - "domains": ["geocoding", "search-suggestions"] - }, - { - "id": "geocoding-entur", - "enabled": true, - "domains": ["geocoding", "search-suggestions"] - }, - { - "id": "geocoding-maptiler", - "enabled": true, - "domains": ["geocoding"] - }, - { - "id": "geocoding-motis", - "enabled": true, - "domains": ["geocoding"] - }, - { - "id": "geocoding-nominatim", - "enabled": true, - "domains": ["geocoding"] - }, - { - "id": "geocoding-pelias", - "enabled": true, - "domains": ["geocoding"] - }, - { - "id": "geocoding-photon", - "enabled": true, - "domains": ["geocoding"] - }, - { - "id": "poi-search", - "enabled": true, - "domains": ["poi-search"] - }, - { - "id": "search-nlp", - "enabled": true, - "domains": ["search-nlp"] - }, - { - "id": "search-notable-places", - "enabled": true, - "domains": ["search-suggestions"] - }, - { - "id": "search-osm-aliases", - "enabled": true, - "domains": ["search-suggestions"] - }, - { - "id": "search-suggestions", - "enabled": true, - "domains": ["search-suggestions"] - } - ] - }, - "rawCaptureCache": "uncontrolled", - "credentialsRedacted": true -} diff --git a/scripts/discovery-eval/business-name-address/evidence.test.ts b/scripts/discovery-eval/business-name-address/evidence.test.ts index 303195ee3..e77d85bca 100644 --- a/scripts/discovery-eval/business-name-address/evidence.test.ts +++ b/scripts/discovery-eval/business-name-address/evidence.test.ts @@ -1,7 +1,5 @@ -import { createHash } from "node:crypto"; import { readFileSync } from "node:fs"; import { afterEach, describe, expect, it, vi } from "vitest"; -import { getQueryVariants } from "../../../integrations/geocoding/query-expansion.js"; import { maptilerGeocodingService, setMaptilerApiKey, @@ -11,168 +9,55 @@ import { extractTerms } from "../../../services/data-manager/src/jobs/search-ind function read(name: string) { return JSON.parse(readFileSync(new URL(name, import.meta.url), "utf8")); } - const queries = read("queries-v1.json"); const responses = read("responses-v1.json"); const sources = read("sources-v1.json"); -const historical = read("replay-v1.json"); -const ui = read("ui-v1.json"); afterEach(() => { setMaptilerApiKey(undefined); vi.unstubAllGlobals(); }); -describe("#430 versioned business retrieval evidence", () => { - it("pins a complete query set and keeps replay and deployment conditions distinct", () => { - expect(responses.queriesSha256).toBe( - createHash("sha256") - .update(readFileSync(new URL("queries-v1.json", import.meta.url))) - .digest("hex"), - ); - expect(historical.baseline).toBe(queries.baseline); - const ids = queries.cases.map((c: { id: string }) => c.id); - expect(new Set(ids).size).toBe(13); - expect(responses.cases.map((c: { caseId: string }) => c.caseId)).toEqual(ids); - expect(historical.cases.map((c: { caseId: string }) => c.caseId)).toEqual(ids); - expect(ui.caseResults.map((c: { caseId: string }) => c.caseId)).toEqual(ids); - expect(ui.deployment).toBeNull(); - expect(ui.cache).toBe("uncontrolled"); - }); - +describe("business name/address adapter regression corpus", () => { for (const entry of responses.cases) { - it(`${entry.caseId}: maps every raw candidate without inventing tenant retrieval`, async () => { + it(`${entry.caseId}: preserves every captured candidate and its displayed identity`, async () => { const query = queries.cases.find((c: { id: string }) => c.id === entry.caseId); - expect(getQueryVariants(query.query)).toEqual([query.query]); - const fetch = vi.fn().mockResolvedValue(Response.json({ features: entry.rawFeatures })); + const features = entry.rawIds.map((id: string) => { + const feature = responses.features.find((f: { raw: { id: string } }) => f.raw.id === id); + if (!feature) throw new Error("Missing regression candidate"); + return feature; + }); + const fetch = vi + .fn() + .mockResolvedValue( + Response.json({ features: features.map((f: { raw: unknown }) => f.raw) }), + ); vi.stubGlobal("fetch", fetch); setMaptilerApiKey("fixture-only"); const adapted = await maptilerGeocodingService.autocomplete(query.query, queries.language, { proximity: queries.upstreamProximity, zoom: queries.zoom, }); - expect(adapted.map((r) => r.id)).toEqual(entry.publicRows.map((r: { id: string }) => r.id)); - expect(adapted.map((r) => [r.label, r.sublabel, r.coordinates, r.type])).toEqual( - entry.publicRows.map( - (r: { label: string; sublabel: string; coordinates: number[]; type: string }) => [ - r.label, - r.sublabel, - r.coordinates, - r.type, - ], - ), + const fields = (r: { + id: string; + label: string; + sublabel?: string; + coordinates?: readonly number[]; + type: string; + rawCategory?: string; + ids?: unknown; + }) => [r.id, r.label, r.sublabel, r.coordinates, r.type, r.rawCategory, r.ids]; + expect(adapted.map(fields)).toEqual( + features.map((f: { adapted: Parameters[0] }) => fields(f.adapted)), ); expect(fetch).toHaveBeenCalledTimes(1); - expect(entry.aggregate).toEqual({ suggestions: [], attributions: [], partial: true }); - for (const capture of entry.captures) { - expect(capture.status).toBe(200); - expect(capture.requests).toBe(1); - expect(capture.cache).toBe("uncontrolled"); - expect(capture.sha256).toMatch(/^[a-f0-9]{64}$/); - expect(Number.isFinite(capture.latencyMs) && capture.latencyMs > 0).toBe(true); - expect(capture.parameters).not.toHaveProperty("key"); - } - const replay = historical.cases.find((c: { caseId: string }) => c.caseId === entry.caseId); - expect(replay.combinedIds).toEqual(entry.publicRows.map((r: { id: string }) => r.id)); - // Validate a historical trace without requiring future rankers to preserve #428/#429 bugs. - expect(replay.rankedIds.every((id: string) => replay.combinedIds.includes(id))).toBe(true); - expect(new Set(replay.rankedIds).size).toBe(replay.rankedIds.length); }); } - it("keeps the unresolved mall way separate from the verified Overture Moch record", () => { - const way = sources.osm.records.find((r: { id: string }) => r.id === "way/1204762785"); - expect(way.version).toBe(3); - expect(way.tags.name).toBe("EDEKA"); - expect(way.tags["addr:street"]).toBeUndefined(); - expect(extractTerms(way.tags)).toEqual([]); - const raw = responses.cases.find((c: { caseId: string }) => c.caseId === "edeka-alexa"); - expect(raw.rawFeatures[0].properties.ref).toBe("osm:w1204762785"); - expect(raw.rawFeatures[0].place_name).toContain("Alexanderstraße 25"); - const moch = sources.overture.records.find( - (r: { id: string }) => r.id === "035b544e-40f5-4ce0-a06f-1c9032ded028", - ); - expect(sources.overture.release).toBe("2026-09-23.1"); - expect(moch.version).toBe(13); - expect(moch.addresses[0].freeform).toBe("Grunerstraße 20"); - expect(moch.phones).toContain("+493024045625"); - expect(moch.sources[0].record_id).toBe("194804870560113"); - expect(moch.sources[0].license).toBe("CDLA-Permissive-2.0"); - expect(moch.operating_status).not.toBe("permanently_closed"); - expect(queries.cases.find((c: { id: string }) => c.id === "edeka-alexander").target).toBeNull(); - }); - - it("recomputes the report's historical recall and row counts using verified OSM identities", () => { - // A provider ID/label or shared mall address alone is not branch verification. - // These controls have independently checked retailer listings and OSM references. - const verifiedRefs: Record = { - media: "osm:n322490364", - rewe: "osm:n348000444", - schaaf: "osm:n9154787137", - }; - const positive = queries.cases.filter( - (c: { target: string | null }) => c.target && c.target !== "negative", - ); - expect(positive).toHaveLength(9); - const hits = [0, 0, 0, 0]; - for (const query of positive) { - const capture = responses.cases.find((c: { caseId: string }) => c.caseId === query.id); - const trace = historical.cases.find((c: { caseId: string }) => c.caseId === query.id); - const verifiedIds = capture.rawFeatures - .filter( - (f: { properties: { ref?: string } }) => - verifiedRefs[query.target] !== undefined && - f.properties.ref === verifiedRefs[query.target], - ) - .map((f: { id: string }) => `maptiler:${f.id}`); - const stages = [ - capture.rawFeatures.map((f: { id: string }) => `maptiler:${f.id}`), - capture.publicRows.map((r: { id: string }) => r.id), - trace.combinedIds, - trace.rankedIds, - ]; - stages.forEach((ids: string[], stage: number) => { - if (ids.slice(0, queries.budgets.maxRank).some((id) => verifiedIds.includes(id))) { - hits[stage]++; - } - }); + it("keeps ordinary business names outside the specialized code/alias index", () => { + for (const id of ["way/1204762785", "node/322490364", "node/348000444", "node/9154787137"]) { + const record = sources.osm.records.find((r: { id: string }) => r.id === id); + expect(extractTerms(record.tags)).toEqual([]); } - expect(hits).toEqual([4, 4, 4, 4]); - expect( - historical.cases.reduce( - (n: number, c: { combinedIds: string[] }) => n + c.combinedIds.length, - 0, - ), - ).toBe(78); - expect( - historical.cases.reduce((n: number, c: { rankedIds: string[] }) => n + c.rankedIds.length, 0), - ).toBe(65); - }); - - it("retains real branch and co-located tenant controls and negative query judgments", () => { - const names = sources.overture.records.map( - (r: { names: { primary: string } }) => r.names.primary, - ); - expect(names).toContain("EDEKA Schaaf"); - expect(names).toContain("MediaMarkt Berlin-Mitte (im Alexa)"); - const media = sources.osm.records.find((r: { id: string }) => r.id === "node/322490364"); - expect(media.tags["addr:street"]).toBe("Grunerstraße"); - expect(media.tags["addr:housenumber"]).toBe("20"); - expect(extractTerms(media.tags)).toEqual([]); - expect(queries.cases.filter((c: { target: string }) => c.target === "negative")).toHaveLength( - 2, - ); - const nameQuery = responses.cases.find((c: { caseId: string }) => c.caseId === "moch-name"); - expect(nameQuery.rawFeatures.some((f: { text: string }) => /\bmoch\b/i.test(f.text))).toBe( - false, - ); - const addressQuery = responses.cases.find( - (c: { caseId: string }) => c.caseId === "moch-address", - ); - expect( - addressQuery.rawFeatures.some((f: { place_type: string[] }) => f.place_type.includes("poi")), - ).toBe(false); - expect(ui.selections[0].selectedId).toBeNull(); - expect(ui.selections[1].selectedId).toBe("maptiler:poi.39267497"); }); }); diff --git a/scripts/discovery-eval/business-name-address/replay-v1.json b/scripts/discovery-eval/business-name-address/replay-v1.json deleted file mode 100644 index 7129c7cb6..000000000 --- a/scripts/discovery-eval/business-name-address/replay-v1.json +++ /dev/null @@ -1,338 +0,0 @@ -{ - "baseline": "3c80939d26a09f131b16d849895255436b5e5798", - "mode": "place-only source replay; saved/recent/category/brand/preset inputs omitted; not live UI", - "cases": [ - { - "caseId": "moch-name", - "variants": ["EDEKA Moch"], - "combinedIds": [ - "maptiler:poi.30456941", - "maptiler:poi.27997147", - "maptiler:poi.32434263", - "maptiler:poi.31643808", - "maptiler:poi.14639240", - "maptiler:poi.14883072" - ], - "rankedIds": [ - "maptiler:poi.30456941", - "maptiler:poi.27997147", - "maptiler:poi.32434263", - "maptiler:poi.31643808", - "maptiler:poi.14639240", - "maptiler:poi.14883072" - ], - "rankedTop": "EDEKA Koch-Sportpark, Karl-Brandt-Weg 11, 44629 Herne, Germany", - "enter": { - "kind": "choose" - } - }, - { - "caseId": "moch-address", - "variants": ["EDEKA Moch Grunerstraße 20"], - "combinedIds": [ - "maptiler:address.12686057", - "maptiler:address.10027702", - "maptiler:address.10343043", - "maptiler:address.9410688", - "maptiler:address.5097698", - "maptiler:place.4929509" - ], - "rankedIds": [ - "maptiler:address.12686057", - "maptiler:place.4929509", - "maptiler:address.10027702", - "maptiler:address.10343043", - "maptiler:address.9410688", - "maptiler:address.5097698" - ], - "rankedTop": "Grunerstraße 20, 10179 Berlin, Germany", - "enter": { - "kind": "search", - "weak": true - } - }, - { - "caseId": "edeka-address", - "variants": ["EDEKA Grunerstraße 20 Berlin"], - "combinedIds": [ - "maptiler:poi.39267497", - "maptiler:poi.15407240", - "maptiler:poi.15448214", - "maptiler:poi.30149398", - "maptiler:address.12686057", - "maptiler:address.10027702" - ], - "rankedIds": [ - "maptiler:poi.39267497", - "maptiler:address.12686057", - "maptiler:poi.15407240", - "maptiler:poi.15448214", - "maptiler:address.10027702", - "maptiler:poi.30149398" - ], - "rankedTop": "EDEKA, Alexanderstraße 25, 10178 Berlin, Germany", - "enter": { - "kind": "search", - "weak": true - } - }, - { - "caseId": "edeka-alexa", - "variants": ["EDEKA Alexa"], - "combinedIds": [ - "maptiler:poi.39267497", - "maptiler:poi.15445342", - "maptiler:poi.15632141", - "maptiler:poi.15895501", - "maptiler:poi.32007491", - "maptiler:poi.15469482" - ], - "rankedIds": ["maptiler:poi.39267497", "maptiler:poi.15632141", "maptiler:poi.15895501"], - "rankedTop": "EDEKA, Alexanderstraße 25, 10178 Berlin, Germany", - "enter": { - "kind": "open", - "id": "maptiler:poi.39267497" - } - }, - { - "caseId": "edeka-gruner", - "variants": ["EDEKA Grunerstraße"], - "combinedIds": [ - "maptiler:poi.39267497", - "maptiler:poi.15448214", - "maptiler:poi.15864452", - "maptiler:poi.15445342", - "maptiler:poi.15632141", - "maptiler:poi.15895501" - ], - "rankedIds": [ - "maptiler:poi.39267497", - "maptiler:poi.15632141", - "maptiler:poi.15895501", - "maptiler:poi.15448214" - ], - "rankedTop": "EDEKA, Alexanderstraße 25, 10178 Berlin, Germany", - "enter": { - "kind": "search", - "weak": true - } - }, - { - "caseId": "edeka-alexander", - "variants": ["EDEKA Alexanderstraße 25 Berlin"], - "combinedIds": [ - "maptiler:poi.39267497", - "maptiler:poi.15445342", - "maptiler:poi.15632141", - "maptiler:poi.32007491", - "maptiler:address.6574798", - "maptiler:poi.15258278" - ], - "rankedIds": [ - "maptiler:poi.39267497", - "maptiler:address.6574798", - "maptiler:poi.15632141", - "maptiler:poi.15258278" - ], - "rankedTop": "EDEKA, Alexanderstraße 25, 10178 Berlin, Germany", - "enter": { - "kind": "open", - "id": "maptiler:poi.39267497" - } - }, - { - "caseId": "edeka-brand", - "variants": ["EDEKA"], - "combinedIds": [ - "maptiler:poi.39267497", - "maptiler:poi.15864452", - "maptiler:poi.15445342", - "maptiler:poi.15632141", - "maptiler:poi.15895501", - "maptiler:poi.32007491" - ], - "rankedIds": ["maptiler:poi.39267497", "maptiler:poi.15632141", "maptiler:poi.15895501"], - "rankedTop": "EDEKA, Alexanderstraße 25, 10178 Berlin, Germany", - "enter": { - "kind": "search", - "weak": false - } - }, - { - "caseId": "media-alexa", - "variants": ["MediaMarkt Alexa"], - "combinedIds": [ - "maptiler:poi.15539884", - "maptiler:poi.15422100", - "maptiler:poi.15388462", - "maptiler:poi.15513302", - "maptiler:poi.27301831", - "maptiler:poi.31290179" - ], - "rankedIds": [ - "maptiler:poi.15539884", - "maptiler:poi.15422100", - "maptiler:poi.15388462", - "maptiler:poi.15513302", - "maptiler:poi.27301831", - "maptiler:poi.31290179" - ], - "rankedTop": "MediaMarkt, Pr Willem Alexander Prom 69-83, 2284 DJ Rijswijk, Netherlands", - "enter": { - "kind": "open", - "id": "maptiler:poi.15539884" - } - }, - { - "caseId": "media-address", - "variants": ["MediaMarkt Grunerstraße 20 Berlin"], - "combinedIds": [ - "maptiler:poi.15422100", - "maptiler:address.12686057", - "maptiler:poi.34392614", - "maptiler:poi.30823762", - "maptiler:address.10027702", - "maptiler:address.10343043" - ], - "rankedIds": [ - "maptiler:poi.15422100", - "maptiler:address.12686057", - "maptiler:address.10027702", - "maptiler:address.10343043", - "maptiler:poi.34392614", - "maptiler:poi.30823762" - ], - "rankedTop": "MediaMarkt, Grunerstraße 20, 10179 Berlin, Germany", - "enter": { - "kind": "open", - "id": "maptiler:poi.15422100" - } - }, - { - "caseId": "rewe-address", - "variants": ["REWE Invalidenstraße 158 Berlin"], - "combinedIds": [ - "maptiler:poi.15426609", - "maptiler:poi.15741076", - "maptiler:poi.34014416", - "maptiler:poi.15509199", - "maptiler:poi.36656201", - "maptiler:address.8692633" - ], - "rankedIds": [ - "maptiler:poi.15426609", - "maptiler:address.8692633", - "maptiler:poi.36656201", - "maptiler:poi.15741076" - ], - "rankedTop": "REWE, Invalidenstraße 158, 10115 Berlin, Germany", - "enter": { - "kind": "open", - "id": "maptiler:poi.15426609" - } - }, - { - "caseId": "wrong-address", - "variants": ["EDEKA Moch Grunerstraße 999 Berlin"], - "combinedIds": [ - "maptiler:place.4795446", - "maptiler:region.505", - "maptiler:locality.2701", - "maptiler:place.4534518", - "maptiler:neighbourhood.20256", - "maptiler:place.2470107" - ], - "rankedIds": [ - "maptiler:region.505", - "maptiler:locality.2701", - "maptiler:place.4534518", - "maptiler:place.4795446", - "maptiler:place.2470107", - "maptiler:neighbourhood.20256" - ], - "rankedTop": "Berlin, Germany", - "enter": { - "kind": "search", - "weak": true - } - }, - { - "caseId": "invented-name", - "variants": ["Zzqxv430 Testladen Grunerstraße 20 Berlin"], - "combinedIds": [ - "maptiler:address.12686057", - "maptiler:address.10027702", - "maptiler:address.10343043", - "maptiler:poi.2947497", - "maptiler:poi.2947574", - "maptiler:poi.6230752" - ], - "rankedIds": [ - "maptiler:address.12686057", - "maptiler:poi.6230752", - "maptiler:poi.2947497", - "maptiler:address.10027702", - "maptiler:address.10343043" - ], - "rankedTop": "Grunerstraße 20, 10179 Berlin, Germany", - "enter": { - "kind": "search", - "weak": true - } - }, - { - "caseId": "schaaf-address", - "variants": ["EDEKA Schaaf Schillingstraße 2 Berlin"], - "combinedIds": [ - "maptiler:poi.32879876", - "maptiler:address.4011014", - "maptiler:address.9975161", - "maptiler:address.18028993", - "maptiler:address.6705156", - "maptiler:region.505" - ], - "rankedIds": [ - "maptiler:region.505", - "maptiler:poi.32879876", - "maptiler:address.4011014", - "maptiler:address.18028993", - "maptiler:address.6705156", - "maptiler:address.9975161" - ], - "rankedTop": "Berlin, Germany", - "enter": { - "kind": "search", - "weak": true - } - } - ], - "osmTerms": [ - { - "id": "node/322490364", - "terms": [] - }, - { - "id": "way/258898047", - "terms": [ - { - "normalizedTerm": "alexa berlin", - "displayValue": "Alexa Berlin", - "kind": "explicit_alias", - "namespace": "alt_name" - } - ] - }, - { - "id": "way/1204762785", - "terms": [] - }, - { - "id": "node/348000444", - "terms": [] - }, - { - "id": "node/9154787137", - "terms": [] - } - ] -} diff --git a/scripts/discovery-eval/business-name-address/replay.ts b/scripts/discovery-eval/business-name-address/replay.ts index 023ff15c4..68a83e9df 100644 --- a/scripts/discovery-eval/business-name-address/replay.ts +++ b/scripts/discovery-eval/business-name-address/replay.ts @@ -15,10 +15,10 @@ interface QuerySet { cases: Array<{ id: string; query: string }>; } interface Responses { + features: Array<{ raw: { id: string }; adapted: AutocompleteResult }>; cases: Array<{ caseId: string; - publicRows: AutocompleteResult[]; - aggregate: { suggestions: AutocompleteResult[]; partial: boolean }; + rawIds: string[]; }>; } function read(name: string): T { @@ -37,13 +37,19 @@ const report = { const entry = queries.cases.find((query) => query.id === fixture.caseId); if (!entry) throw new Error("Missing business retrieval query"); const context = { query: entry.query, proximity: queries.center, zoom: queries.zoom }; - const combined = [...fixture.aggregate.suggestions, ...fixture.publicRows]; + // The historical aggregate was empty/partial. Replay the captured geocoder + // pool; do not treat the unavailable aggregate as source absence. + const combined = fixture.rawIds.map((id) => { + const feature = responses.features.find((candidate) => candidate.raw.id === id); + if (!feature) throw new Error("Missing captured candidate"); + return feature.adapted; + }); const ranked = rankAutocompleteRows({ places: combined }, context); const action = enterAction(ranked, context); return { caseId: fixture.caseId, variants: getQueryVariants(entry.query), - partial: fixture.aggregate.partial, + partial: true, combinedIds: combined.map((row) => row.id), rankedIds: ranked.map((row) => row.id), enter: action.kind === "open" ? { kind: "open", id: action.row.id } : action, diff --git a/scripts/discovery-eval/business-name-address/responses-v1.json b/scripts/discovery-eval/business-name-address/responses-v1.json index 5b2ee5115..c5173db9a 100644 --- a/scripts/discovery-eval/business-name-address/responses-v1.json +++ b/scripts/discovery-eval/business-name-address/responses-v1.json @@ -1,3067 +1,1445 @@ { "version": 1, - "provenance": "selected fields from independently captured raw MapTiler and public adapted API; not deployed revision evidence", + "provenance": "Selected raw MapTiler features and public adapted rows captured 2026-10-07; fixed historical inputs, not current production results", + "archive": "https://gist.github.com/Medformatik/c36d8b8f44c88971277659512a533a51/8b33cd9238ba743f54f3235f2831470cf3bb5972", "queriesSha256": "bdc16e4a468dcda386be3f5cca86398b1e204056399b4fd1a4559d03eec27572", - "cases": [ + "features": [ { - "caseId": "moch-name", - "captures": [ - { - "caseId": "moch-name", - "layer": "raw", - "capturedAt": "2026-10-07T20:37:20.387614+00:00", - "parameters": { - "language": "en", - "limit": "6", - "autocomplete": "true", - "types": "poi,address,street,neighbourhood,municipality,municipal_district,locality,subregion,region,county,country,postal_code,place", - "proximity": "13.42,52.52" - }, - "cache": "uncontrolled", - "requests": 1, - "status": 200, - "sha256": "3b672b7a47d0ce48d98dfbea22652977cc74c04ec1e220514fb0e0cf9365ba4e", - "cacheControl": "public, max-age=28800", - "age": null, - "latencyMs": 375.71 - }, - { - "caseId": "moch-name", - "layer": "public", - "capturedAt": "2026-10-07T20:37:20.388292+00:00", - "parameters": { - "q": "EDEKA Moch", - "lang": "en", - "lat": "52.5194", - "lng": "13.416", - "zoom": "15" - }, - "cache": "uncontrolled", - "requests": 1, - "status": 200, - "sha256": "bdb2ff47fcb089e90c32b8cce859a8ec8a85bc7375cc3f7129cac1386860a7ad", - "cacheControl": "public, max-age=3600", - "age": null, - "latencyMs": 116.75 - }, - { - "caseId": "moch-name", - "layer": "aggregate", - "capturedAt": "2026-10-07T20:37:20.388431+00:00", - "parameters": { - "q": "EDEKA Moch", - "lang": "en", - "lat": "52.5194", - "lng": "13.416", - "limit": "8" - }, - "cache": "uncontrolled", - "requests": 1, - "status": 200, - "sha256": "b8b2af892915997b28e1d8a1067f3ffe35e0ba5ae97941b49e112edf98cfa254", - "cacheControl": "no-store", - "age": null, - "latencyMs": 139.49 - } - ], - "rawFeatures": [ - { - "id": "poi.30456941", - "text": "EDEKA Koch-Sportpark", - "place_name": "EDEKA Koch-Sportpark, Karl-Brandt-Weg 11, 44629 Herne, Germany", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [7.208717748485128, 51.55210278682949] - }, - "properties": { - "ref": "osm:w25670529", - "categories": ["stadium"], - "wikidata": "Q1671027" - } - }, - { - "id": "poi.27997147", - "text": "Edeka Möck", - "place_name": "Edeka Möck, August-Lämmle-Straße 17, 72766 Reutlingen, Germany", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [9.22899305820465, 48.48657027701767] - }, - "properties": { - "ref": "osm:n3593639849", - "categories": ["supermarket"], - "feature_tags": { - "shop": "supermarket", - "addr:postcode": "72766", - "addr:city": "Reutlingen", - "addr:housenumber": "17", - "addr:street": "August-Lämmle-Straße" - } - } - }, - { - "id": "poi.32434263", - "text": "Edeka Möck", - "place_name": "Edeka Möck, Friedrich-Naumann-Straße 36, 72762 Reutlingen, Germany", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [9.191001408020384, 48.48736248347219] - }, - "properties": { - "ref": "osm:w62488816", - "categories": ["supermarket", "retail building"], - "feature_tags": { - "shop": "supermarket", - "addr:postcode": "72762", - "addr:city": "Reutlingen", - "addr:housenumber": "36", - "addr:street": "Friedrich-Naumann-Straße" - } - } - }, - { - "id": "poi.31643808", - "text": "Edeka Möck", - "place_name": "Edeka Möck, 72810 Gomaringen, Germany", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [9.102380722761154, 48.459401998661164] - }, - "properties": { - "ref": "osm:n13314629571", - "categories": ["supermarket"], - "feature_tags": { - "shop": "supermarket", - "addr:postcode": "72810", - "addr:city": "Gomaringen", - "addr:housenumber": "15", - "addr:street": "Ohmenhäuser Straße" - } - } - }, - { - "id": "poi.14639240", - "text": "Edeka Möck", - "place_name": "Edeka Möck, Robert-Bosch-Straße 19, 72810 Gomaringen, Germany", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [9.080636147370342, 48.455747733004614] - }, - "properties": { - "ref": "osm:w27644197", - "categories": ["supermarket"], - "feature_tags": { - "shop": "supermarket", - "addr:postcode": "72810", - "addr:city": "Gomaringen", - "addr:housenumber": "19", - "addr:street": "Robert-Bosch-Straße" - } - } - }, - { - "id": "poi.14883072", - "text": "Edeka Koch", - "place_name": "Edeka Koch, Im Grund 1, 72469 Meßstetten, Germany", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [8.954309790404409, 48.1768506016719] - }, - "properties": { - "ref": "osm:w922994590", - "categories": ["supermarket", "building"], - "feature_tags": { - "addr:housenumber": "1", - "shop": "supermarket", - "addr:street": "Im Grund", - "addr:postcode": "72469", - "addr:city": "Meßstetten" - } + "raw": { + "id": "poi.30456941", + "text": "EDEKA Koch-Sportpark", + "place_name": "EDEKA Koch-Sportpark, Karl-Brandt-Weg 11, 44629 Herne, Germany", + "place_type": ["poi"], + "geometry": { "type": "Point", "coordinates": [7.208717748485128, 51.55210278682949] }, + "properties": { "ref": "osm:w25670529", "categories": ["stadium"], "wikidata": "Q1671027" } + }, + "adapted": { + "id": "maptiler:poi.30456941", + "ids": { "wikidata": "Q1671027" }, + "label": "EDEKA Koch-Sportpark", + "sublabel": "EDEKA Koch-Sportpark, Karl-Brandt-Weg 11, 44629 Herne, Germany", + "coordinates": [7.208717748485128, 51.55210278682949], + "type": "poi", + "rawCategory": "stadium", + "provider": "geocoding-maptiler" + } + }, + { + "raw": { + "id": "poi.27997147", + "text": "Edeka Möck", + "place_name": "Edeka Möck, August-Lämmle-Straße 17, 72766 Reutlingen, Germany", + "place_type": ["poi"], + "geometry": { "type": "Point", "coordinates": [9.22899305820465, 48.48657027701767] }, + "properties": { + "ref": "osm:n3593639849", + "categories": ["supermarket"], + "feature_tags": { + "shop": "supermarket", + "addr:postcode": "72766", + "addr:city": "Reutlingen", + "addr:housenumber": "17", + "addr:street": "August-Lämmle-Straße" } } - ], - "publicRows": [ - { - "id": "maptiler:poi.30456941", - "ids": { - "wikidata": "Q1671027" - }, - "label": "EDEKA Koch-Sportpark", - "sublabel": "EDEKA Koch-Sportpark, Karl-Brandt-Weg 11, 44629 Herne, Germany", - "coordinates": [7.208717748485128, 51.55210278682949], - "type": "poi", - "rawCategory": "stadium", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:poi.27997147", - "label": "Edeka Möck", - "sublabel": "Edeka Möck, August-Lämmle-Straße 17, 72766 Reutlingen, Germany", - "coordinates": [9.22899305820465, 48.48657027701767], - "type": "poi", - "rawCategory": "supermarket", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:poi.32434263", - "label": "Edeka Möck", - "sublabel": "Edeka Möck, Friedrich-Naumann-Straße 36, 72762 Reutlingen, Germany", - "coordinates": [9.191001408020384, 48.48736248347219], - "type": "poi", - "rawCategory": "supermarket", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:poi.31643808", - "label": "Edeka Möck", - "sublabel": "Edeka Möck, 72810 Gomaringen, Germany", - "coordinates": [9.102380722761154, 48.459401998661164], - "type": "poi", - "rawCategory": "supermarket", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:poi.14639240", - "label": "Edeka Möck", - "sublabel": "Edeka Möck, Robert-Bosch-Straße 19, 72810 Gomaringen, Germany", - "coordinates": [9.080636147370342, 48.455747733004614], - "type": "poi", - "rawCategory": "supermarket", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:poi.14883072", - "label": "Edeka Koch", - "sublabel": "Edeka Koch, Im Grund 1, 72469 Meßstetten, Germany", - "coordinates": [8.954309790404409, 48.1768506016719], - "type": "poi", - "rawCategory": "supermarket", - "provider": "geocoding-maptiler" - } - ], - "aggregate": { - "suggestions": [], - "attributions": [], - "partial": true + }, + "adapted": { + "id": "maptiler:poi.27997147", + "label": "Edeka Möck", + "sublabel": "Edeka Möck, August-Lämmle-Straße 17, 72766 Reutlingen, Germany", + "coordinates": [9.22899305820465, 48.48657027701767], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" } }, { - "caseId": "moch-address", - "captures": [ - { - "caseId": "moch-address", - "layer": "raw", - "capturedAt": "2026-10-07T20:37:20.763779+00:00", - "parameters": { - "language": "en", - "limit": "6", - "autocomplete": "true", - "types": "poi,address,street,neighbourhood,municipality,municipal_district,locality,subregion,region,county,country,postal_code,place", - "proximity": "13.42,52.52" - }, - "cache": "uncontrolled", - "requests": 1, - "status": 200, - "sha256": "de32c8bdf301705dd7748c4e040c678be1cc8861bac1b13610c6597a71acee58", - "cacheControl": "public, max-age=28800", - "age": null, - "latencyMs": 54.38 - }, - { - "caseId": "moch-address", - "layer": "public", - "capturedAt": "2026-10-07T20:37:20.764004+00:00", - "parameters": { - "q": "EDEKA Moch Grunerstraße 20", - "lang": "en", - "lat": "52.5194", - "lng": "13.416", - "zoom": "15" - }, - "cache": "uncontrolled", - "requests": 1, - "status": 200, - "sha256": "79320b1160a9a845ddbbbd27c78fab18d709bffa5c95eecab153dc8de3eb8091", - "cacheControl": "public, max-age=3600", - "age": null, - "latencyMs": 110.89 - }, - { - "caseId": "moch-address", - "layer": "aggregate", - "capturedAt": "2026-10-07T20:37:20.764227+00:00", - "parameters": { - "q": "EDEKA Moch Grunerstraße 20", - "lang": "en", - "lat": "52.5194", - "lng": "13.416", - "limit": "8" - }, - "cache": "uncontrolled", - "requests": 1, - "status": 200, - "sha256": "b8b2af892915997b28e1d8a1067f3ffe35e0ba5ae97941b49e112edf98cfa254", - "cacheControl": "no-store", - "age": null, - "latencyMs": 115.36 - } - ], - "rawFeatures": [ - { - "id": "address.12686057", - "text": "Grunerstraße", - "place_name": "Grunerstraße 20, 10179 Berlin, Germany", - "place_type": ["address"], - "geometry": { - "type": "Point", - "coordinates": [13.41582100000005, 52.518307] - }, - "properties": { - "ref": "osm:w1025851956", - "wikidata": "Q1550809" - } - }, - { - "id": "address.10027702", - "text": "Groenerstraße", - "place_name": "Groenerstraße 20, 13585 Berlin, Germany", - "place_type": ["address"], - "geometry": { - "type": "Point", - "coordinates": [13.20358299999998, 52.543163] - }, - "properties": { - "ref": "osm:w1306242932" - } - }, - { - "id": "address.10343043", - "text": "Gründerstraße", - "place_name": "Gründerstraße 20, 12526 Berlin, Germany", - "place_type": ["address"], - "geometry": { - "type": "Point", - "coordinates": [13.574141999999938, 52.409928] - }, - "properties": { - "ref": "osm:w130868556" - } - }, - { - "id": "address.9410688", - "text": "Grünerstraße", - "place_name": "Grünerstraße 20, 95615 Marktredwitz, Germany", - "place_type": ["address"], - "geometry": { - "type": "Point", - "coordinates": [12.09223099999997, 50.005279] - }, - "properties": { - "ref": "osm:w147440163" - } - }, - { - "id": "address.5097698", - "text": "Grunerstraße", - "place_name": "Grunerstraße 20, 65510 Idstein, Germany", - "place_type": ["address"], - "geometry": { - "type": "Point", - "coordinates": [8.267456000000038, 50.216309] - }, - "properties": { - "ref": "osm:w11487422" - } - }, - { - "id": "place.4929509", - "text": "Colonia 20 de Noviembre", - "place_name": "Colonia 20 de Noviembre, Huaniqueo, Mexico", - "place_type": ["place"], - "geometry": { - "type": "Point", - "coordinates": [-101.58130947500467, 19.893160393441814] - }, - "properties": { - "ref": "osm:n4554041879", - "place_designation": "hamlet" + "raw": { + "id": "poi.32434263", + "text": "Edeka Möck", + "place_name": "Edeka Möck, Friedrich-Naumann-Straße 36, 72762 Reutlingen, Germany", + "place_type": ["poi"], + "geometry": { "type": "Point", "coordinates": [9.191001408020384, 48.48736248347219] }, + "properties": { + "ref": "osm:w62488816", + "categories": ["supermarket", "retail building"], + "feature_tags": { + "shop": "supermarket", + "addr:postcode": "72762", + "addr:city": "Reutlingen", + "addr:housenumber": "36", + "addr:street": "Friedrich-Naumann-Straße" } } - ], - "publicRows": [ - { - "id": "maptiler:address.12686057", - "ids": { - "wikidata": "Q1550809" - }, - "label": "Grunerstraße", - "sublabel": "Grunerstraße 20, 10179 Berlin, Germany", - "coordinates": [13.41582100000005, 52.518307], - "type": "address", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:address.10027702", - "label": "Groenerstraße", - "sublabel": "Groenerstraße 20, 13585 Berlin, Germany", - "coordinates": [13.20358299999998, 52.543163], - "type": "address", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:address.10343043", - "label": "Gründerstraße", - "sublabel": "Gründerstraße 20, 12526 Berlin, Germany", - "coordinates": [13.574141999999938, 52.409928], - "type": "address", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:address.9410688", - "label": "Grünerstraße", - "sublabel": "Grünerstraße 20, 95615 Marktredwitz, Germany", - "coordinates": [12.09223099999997, 50.005279], - "type": "address", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:address.5097698", - "label": "Grunerstraße", - "sublabel": "Grunerstraße 20, 65510 Idstein, Germany", - "coordinates": [8.267456000000038, 50.216309], - "type": "address", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:place.4929509", - "label": "Colonia 20 de Noviembre", - "sublabel": "Colonia 20 de Noviembre, Huaniqueo, Mexico", - "coordinates": [-101.58130947500467, 19.893160393441814], - "type": "region", - "rawCategory": "place/hamlet", - "provider": "geocoding-maptiler" - } - ], - "aggregate": { - "suggestions": [], - "attributions": [], - "partial": true + }, + "adapted": { + "id": "maptiler:poi.32434263", + "label": "Edeka Möck", + "sublabel": "Edeka Möck, Friedrich-Naumann-Straße 36, 72762 Reutlingen, Germany", + "coordinates": [9.191001408020384, 48.48736248347219], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" } }, { - "caseId": "edeka-address", - "captures": [ - { - "caseId": "edeka-address", - "layer": "raw", - "capturedAt": "2026-10-07T20:37:20.880122+00:00", - "parameters": { - "language": "en", - "limit": "6", - "autocomplete": "true", - "types": "poi,address,street,neighbourhood,municipality,municipal_district,locality,subregion,region,county,country,postal_code,place", - "proximity": "13.42,52.52" - }, - "cache": "uncontrolled", - "requests": 1, - "status": 200, - "sha256": "59370a7728687624c9b4ad73c60e63a0095ad9ae0ac76534b9c9e8d0d1bcf44c", - "cacheControl": "public, max-age=28800", - "age": null, - "latencyMs": 275.82 - }, - { - "caseId": "edeka-address", - "layer": "public", - "capturedAt": "2026-10-07T20:37:20.880818+00:00", - "parameters": { - "q": "EDEKA Grunerstraße 20 Berlin", - "lang": "en", - "lat": "52.5194", - "lng": "13.416", - "zoom": "15" - }, - "cache": "uncontrolled", - "requests": 1, - "status": 200, - "sha256": "718bbdca726d99b4bc37527147a36f724b592f603fdfeddc4f18f46d4ddc2600", - "cacheControl": "public, max-age=3600", - "age": null, - "latencyMs": 293.55 - }, - { - "caseId": "edeka-address", - "layer": "aggregate", - "capturedAt": "2026-10-07T20:37:20.881283+00:00", - "parameters": { - "q": "EDEKA Grunerstraße 20 Berlin", - "lang": "en", - "lat": "52.5194", - "lng": "13.416", - "limit": "8" - }, - "cache": "uncontrolled", - "requests": 1, - "status": 200, - "sha256": "b8b2af892915997b28e1d8a1067f3ffe35e0ba5ae97941b49e112edf98cfa254", - "cacheControl": "no-store", - "age": null, - "latencyMs": 109.86 - } - ], - "rawFeatures": [ - { - "id": "poi.39267497", - "text": "EDEKA", - "place_name": "EDEKA, Alexanderstraße 25, 10178 Berlin, Germany", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [13.416776409228078, 52.51855355456135] - }, - "properties": { - "ref": "osm:w1204762785", - "categories": ["supermarket"], - "feature_tags": { - "shop": "supermarket", - "level": "-1", - "addr:city": "Berlin" - } - } - }, - { - "id": "poi.15407240", - "text": "EDEKA", - "place_name": "EDEKA, Markt 11, 13597 Berlin, Germany", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [13.204706087708473, 52.53740364108829] - }, - "properties": { - "ref": "osm:n271738194", - "categories": ["supermarket"], - "feature_tags": { - "shop": "supermarket", - "addr:postcode": "13597", - "addr:city": "Berlin", - "addr:housenumber": "11", - "addr:street": "Markt" - } - } - }, - { - "id": "poi.15448214", - "text": "EDEKA", - "place_name": "EDEKA, Buntzelstraße 14, 12526 Berlin, Germany", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [13.57199840247631, 52.408887070774476] - }, - "properties": { - "ref": "osm:n471301175", - "categories": ["supermarket"], - "feature_tags": { - "shop": "supermarket", - "addr:postcode": "12526", - "addr:city": "Berlin", - "addr:housenumber": "14", - "addr:street": "Buntzelstraße" - } - } - }, - { - "id": "poi.30149398", - "text": "EDEKA", - "place_name": "EDEKA, Falkenseer Chaussee 266a, 13583 Berlin, Germany", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [13.186250478029251, 52.54698238754912] - }, - "properties": { - "ref": "osm:n1008550282", - "categories": ["supermarket"], - "feature_tags": { - "shop": "supermarket" - } - } - }, - { - "id": "address.12686057", - "text": "Grunerstraße", - "place_name": "Grunerstraße 20, 10179 Berlin, Germany", - "place_type": ["address"], - "geometry": { - "type": "Point", - "coordinates": [13.41582100000005, 52.518307] - }, - "properties": { - "ref": "osm:w1025851956", - "wikidata": "Q1550809" - } - }, - { - "id": "address.10027702", - "text": "Groenerstraße", - "place_name": "Groenerstraße 20, 13585 Berlin, Germany", - "place_type": ["address"], - "geometry": { - "type": "Point", - "coordinates": [13.20358299999998, 52.543163] - }, - "properties": { - "ref": "osm:w1306242932" + "raw": { + "id": "poi.31643808", + "text": "Edeka Möck", + "place_name": "Edeka Möck, 72810 Gomaringen, Germany", + "place_type": ["poi"], + "geometry": { "type": "Point", "coordinates": [9.102380722761154, 48.459401998661164] }, + "properties": { + "ref": "osm:n13314629571", + "categories": ["supermarket"], + "feature_tags": { + "shop": "supermarket", + "addr:postcode": "72810", + "addr:city": "Gomaringen", + "addr:housenumber": "15", + "addr:street": "Ohmenhäuser Straße" } } - ], - "publicRows": [ - { - "id": "maptiler:poi.39267497", - "label": "EDEKA", - "sublabel": "EDEKA, Alexanderstraße 25, 10178 Berlin, Germany", - "coordinates": [13.416776409228078, 52.51855355456135], - "type": "poi", - "rawCategory": "supermarket", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:poi.15407240", - "label": "EDEKA", - "sublabel": "EDEKA, Markt 11, 13597 Berlin, Germany", - "coordinates": [13.204706087708473, 52.53740364108829], - "type": "poi", - "rawCategory": "supermarket", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:poi.15448214", - "label": "EDEKA", - "sublabel": "EDEKA, Buntzelstraße 14, 12526 Berlin, Germany", - "coordinates": [13.57199840247631, 52.408887070774476], - "type": "poi", - "rawCategory": "supermarket", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:poi.30149398", - "label": "EDEKA", - "sublabel": "EDEKA, Falkenseer Chaussee 266a, 13583 Berlin, Germany", - "coordinates": [13.186250478029251, 52.54698238754912], - "type": "poi", - "rawCategory": "supermarket", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:address.12686057", - "ids": { - "wikidata": "Q1550809" - }, - "label": "Grunerstraße", - "sublabel": "Grunerstraße 20, 10179 Berlin, Germany", - "coordinates": [13.41582100000005, 52.518307], - "type": "address", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:address.10027702", - "label": "Groenerstraße", - "sublabel": "Groenerstraße 20, 13585 Berlin, Germany", - "coordinates": [13.20358299999998, 52.543163], - "type": "address", - "provider": "geocoding-maptiler" - } - ], - "aggregate": { - "suggestions": [], - "attributions": [], - "partial": true + }, + "adapted": { + "id": "maptiler:poi.31643808", + "label": "Edeka Möck", + "sublabel": "Edeka Möck, 72810 Gomaringen, Germany", + "coordinates": [9.102380722761154, 48.459401998661164], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" } }, { - "caseId": "edeka-alexa", - "captures": [ - { - "caseId": "edeka-alexa", - "layer": "raw", - "capturedAt": "2026-10-07T20:37:21.174953+00:00", - "parameters": { - "language": "en", - "limit": "6", - "autocomplete": "true", - "types": "poi,address,street,neighbourhood,municipality,municipal_district,locality,subregion,region,county,country,postal_code,place", - "proximity": "13.42,52.52" - }, - "cache": "uncontrolled", - "requests": 1, - "status": 200, - "sha256": "65030fdf1a6f03343e40a346b6ef71bb9fe80ff0c0b8c85f3e37009ccc022db1", - "cacheControl": "public, max-age=28800", - "age": null, - "latencyMs": 58.12 - }, - { - "caseId": "edeka-alexa", - "layer": "public", - "capturedAt": "2026-10-07T20:37:21.175677+00:00", - "parameters": { - "q": "EDEKA Alexa", - "lang": "en", - "lat": "52.5194", - "lng": "13.416", - "zoom": "15" - }, - "cache": "uncontrolled", - "requests": 1, - "status": 200, - "sha256": "2c73b1d516e02b6f8e42f22394a13d4d209512ce3148b59d2fc34582fa0de461", - "cacheControl": "public, max-age=3600", - "age": null, - "latencyMs": 102.36 - }, - { - "caseId": "edeka-alexa", - "layer": "aggregate", - "capturedAt": "2026-10-07T20:37:21.176078+00:00", - "parameters": { - "q": "EDEKA Alexa", - "lang": "en", - "lat": "52.5194", - "lng": "13.416", - "limit": "8" - }, - "cache": "uncontrolled", - "requests": 1, - "status": 200, - "sha256": "b8b2af892915997b28e1d8a1067f3ffe35e0ba5ae97941b49e112edf98cfa254", - "cacheControl": "no-store", - "age": null, - "latencyMs": 122.65 - } - ], - "rawFeatures": [ - { - "id": "poi.39267497", - "text": "EDEKA", - "place_name": "EDEKA, Alexanderstraße 25, 10178 Berlin, Germany", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [13.416776409228078, 52.51855355456135] - }, - "properties": { - "ref": "osm:w1204762785", - "categories": ["supermarket"], - "feature_tags": { - "shop": "supermarket", - "level": "-1", - "addr:city": "Berlin" - } - } - }, - { - "id": "poi.15445342", - "text": "EDEKA", - "place_name": "EDEKA, Barnimstraße 18, 10249 Berlin, Germany", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [13.42295877635479, 52.52607532450191] - }, - "properties": { - "ref": "osm:n448814806", - "categories": ["supermarket"], - "feature_tags": { - "shop": "supermarket", - "addr:postcode": "10249", - "addr:city": "Berlin", - "addr:housenumber": "18", - "addr:street": "Barnimstraße" - } - } - }, - { - "id": "poi.15632141", - "text": "EDEKA", - "place_name": "EDEKA, Straßburger Straße 9A-C, 10405 Berlin, Germany", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [13.41357808560133, 52.52919226436692] - }, - "properties": { - "ref": "osm:n3889187276", - "categories": ["supermarket"], - "feature_tags": { - "shop": "supermarket", - "addr:postcode": "10405", - "addr:city": "Berlin", - "addr:housenumber": "9A-C", - "addr:street": "Straßburger Straße" - } - } - }, - { - "id": "poi.15895501", - "text": "EDEKA", - "place_name": "EDEKA, Annenstraße 4a, 10179 Berlin, Germany", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [13.415483734242002, 52.50777084974184] - }, - "properties": { - "ref": "osm:w52092588", - "categories": ["supermarket", "commercial building"], - "feature_tags": { - "shop": "supermarket", - "addr:postcode": "10179", - "addr:city": "Berlin", - "addr:housenumber": "4a", - "addr:street": "Annenstraße" - } - } - }, - { - "id": "poi.32007491", - "text": "EDEKA", - "place_name": "EDEKA, Templiner Straße 13a, 10119 Berlin, Germany", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [13.40784888714552, 52.53201304601752] - }, - "properties": { - "ref": "osm:n6595730361", - "categories": ["supermarket"], - "feature_tags": { - "shop": "supermarket", - "level": "0", - "addr:postcode": "10119", - "addr:city": "Berlin", - "addr:housenumber": "12", - "addr:street": "Templiner Straße" - } - } - }, - { - "id": "poi.15469482", - "text": "EDEKA", - "place_name": "EDEKA, Ritterstraße 38-40, 10969 Berlin, Germany", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [13.403648883104324, 52.5035654379113] - }, - "properties": { - "ref": "osm:n652570198", - "categories": ["supermarket"], - "feature_tags": { - "shop": "supermarket", - "addr:postcode": "10969", - "addr:city": "Berlin", - "addr:housenumber": "38-40", - "addr:street": "Ritterstraße" - } + "raw": { + "id": "poi.14639240", + "text": "Edeka Möck", + "place_name": "Edeka Möck, Robert-Bosch-Straße 19, 72810 Gomaringen, Germany", + "place_type": ["poi"], + "geometry": { "type": "Point", "coordinates": [9.080636147370342, 48.455747733004614] }, + "properties": { + "ref": "osm:w27644197", + "categories": ["supermarket"], + "feature_tags": { + "shop": "supermarket", + "addr:postcode": "72810", + "addr:city": "Gomaringen", + "addr:housenumber": "19", + "addr:street": "Robert-Bosch-Straße" } } - ], - "publicRows": [ - { - "id": "maptiler:poi.39267497", - "label": "EDEKA", - "sublabel": "EDEKA, Alexanderstraße 25, 10178 Berlin, Germany", - "coordinates": [13.416776409228078, 52.51855355456135], - "type": "poi", - "rawCategory": "supermarket", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:poi.15445342", - "label": "EDEKA", - "sublabel": "EDEKA, Barnimstraße 18, 10249 Berlin, Germany", - "coordinates": [13.42295877635479, 52.52607532450191], - "type": "poi", - "rawCategory": "supermarket", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:poi.15632141", - "label": "EDEKA", - "sublabel": "EDEKA, Straßburger Straße 9A-C, 10405 Berlin, Germany", - "coordinates": [13.41357808560133, 52.52919226436692], - "type": "poi", - "rawCategory": "supermarket", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:poi.15895501", - "label": "EDEKA", - "sublabel": "EDEKA, Annenstraße 4a, 10179 Berlin, Germany", - "coordinates": [13.415483734242002, 52.50777084974184], - "type": "poi", - "rawCategory": "supermarket", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:poi.32007491", - "label": "EDEKA", - "sublabel": "EDEKA, Templiner Straße 13a, 10119 Berlin, Germany", - "coordinates": [13.40784888714552, 52.53201304601752], - "type": "poi", - "rawCategory": "supermarket", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:poi.15469482", - "label": "EDEKA", - "sublabel": "EDEKA, Ritterstraße 38-40, 10969 Berlin, Germany", - "coordinates": [13.403648883104324, 52.5035654379113], - "type": "poi", - "rawCategory": "supermarket", - "provider": "geocoding-maptiler" - } - ], - "aggregate": { - "suggestions": [], - "attributions": [], - "partial": true + }, + "adapted": { + "id": "maptiler:poi.14639240", + "label": "Edeka Möck", + "sublabel": "Edeka Möck, Robert-Bosch-Straße 19, 72810 Gomaringen, Germany", + "coordinates": [9.080636147370342, 48.455747733004614], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" } }, { - "caseId": "edeka-gruner", - "captures": [ - { - "caseId": "edeka-gruner", - "layer": "raw", - "capturedAt": "2026-10-07T20:37:21.299263+00:00", - "parameters": { - "language": "en", - "limit": "6", - "autocomplete": "true", - "types": "poi,address,street,neighbourhood,municipality,municipal_district,locality,subregion,region,county,country,postal_code,place", - "proximity": "13.42,52.52" - }, - "cache": "uncontrolled", - "requests": 1, - "status": 200, - "sha256": "df9f7962a16a2bd5b792fae793281fcaa49ee32d4c208776f1d6945619f43870", - "cacheControl": "public, max-age=28800", - "age": null, - "latencyMs": 73.66 - }, - { - "caseId": "edeka-gruner", - "layer": "public", - "capturedAt": "2026-10-07T20:37:21.299956+00:00", - "parameters": { - "q": "EDEKA Grunerstraße", - "lang": "en", - "lat": "52.5194", - "lng": "13.416", - "zoom": "15" - }, - "cache": "uncontrolled", - "requests": 1, - "status": 200, - "sha256": "da505f6bbd228d5c42b6ab9e5475e440fc88090fa44c470a03eb867cc15dae74", - "cacheControl": "public, max-age=3600", - "age": null, - "latencyMs": 114.39 - }, - { - "caseId": "edeka-gruner", - "layer": "aggregate", - "capturedAt": "2026-10-07T20:37:21.300560+00:00", - "parameters": { - "q": "EDEKA Grunerstraße", - "lang": "en", - "lat": "52.5194", - "lng": "13.416", - "limit": "8" - }, - "cache": "uncontrolled", - "requests": 1, - "status": 200, - "sha256": "b8b2af892915997b28e1d8a1067f3ffe35e0ba5ae97941b49e112edf98cfa254", - "cacheControl": "no-store", - "age": null, - "latencyMs": 113.85 - } - ], - "rawFeatures": [ - { - "id": "poi.39267497", - "text": "EDEKA", - "place_name": "EDEKA, Alexanderstraße 25, 10178 Berlin, Germany", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [13.416776409228078, 52.51855355456135] - }, - "properties": { - "ref": "osm:w1204762785", - "categories": ["supermarket"], - "feature_tags": { - "shop": "supermarket", - "level": "-1", - "addr:city": "Berlin" - } - } - }, - { - "id": "poi.15448214", - "text": "EDEKA", - "place_name": "EDEKA, Buntzelstraße 14, 12526 Berlin, Germany", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [13.57199840247631, 52.408887070774476] - }, - "properties": { - "ref": "osm:n471301175", - "categories": ["supermarket"], - "feature_tags": { - "shop": "supermarket", - "addr:postcode": "12526", - "addr:city": "Berlin", - "addr:housenumber": "14", - "addr:street": "Buntzelstraße" - } - } - }, - { - "id": "poi.15864452", - "text": "EDEKA", - "place_name": "EDEKA, Platz der Vereinten Nationen 14, 10249 Berlin, Germany", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [13.428411649527902, 52.52262534175838] - }, - "properties": { - "ref": "osm:w24035130", - "categories": ["supermarket", "retail building"], - "feature_tags": { - "shop": "supermarket", - "addr:postcode": "10249", - "addr:city": "Berlin", - "addr:housenumber": "14", - "addr:street": "Platz der Vereinten Nationen" - } - } - }, - { - "id": "poi.15445342", - "text": "EDEKA", - "place_name": "EDEKA, Barnimstraße 18, 10249 Berlin, Germany", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [13.42295877635479, 52.52607532450191] - }, - "properties": { - "ref": "osm:n448814806", - "categories": ["supermarket"], - "feature_tags": { - "shop": "supermarket", - "addr:postcode": "10249", - "addr:city": "Berlin", - "addr:housenumber": "18", - "addr:street": "Barnimstraße" - } - } - }, - { - "id": "poi.15632141", - "text": "EDEKA", - "place_name": "EDEKA, Straßburger Straße 9A-C, 10405 Berlin, Germany", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [13.41357808560133, 52.52919226436692] - }, - "properties": { - "ref": "osm:n3889187276", - "categories": ["supermarket"], - "feature_tags": { - "shop": "supermarket", - "addr:postcode": "10405", - "addr:city": "Berlin", - "addr:housenumber": "9A-C", - "addr:street": "Straßburger Straße" - } - } - }, - { - "id": "poi.15895501", - "text": "EDEKA", - "place_name": "EDEKA, Annenstraße 4a, 10179 Berlin, Germany", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [13.415483734242002, 52.50777084974184] - }, - "properties": { - "ref": "osm:w52092588", - "categories": ["supermarket", "commercial building"], - "feature_tags": { - "shop": "supermarket", - "addr:postcode": "10179", - "addr:city": "Berlin", - "addr:housenumber": "4a", - "addr:street": "Annenstraße" - } + "raw": { + "id": "poi.14883072", + "text": "Edeka Koch", + "place_name": "Edeka Koch, Im Grund 1, 72469 Meßstetten, Germany", + "place_type": ["poi"], + "geometry": { "type": "Point", "coordinates": [8.954309790404409, 48.1768506016719] }, + "properties": { + "ref": "osm:w922994590", + "categories": ["supermarket", "building"], + "feature_tags": { + "addr:housenumber": "1", + "shop": "supermarket", + "addr:street": "Im Grund", + "addr:postcode": "72469", + "addr:city": "Meßstetten" } } - ], - "publicRows": [ - { - "id": "maptiler:poi.39267497", - "label": "EDEKA", - "sublabel": "EDEKA, Alexanderstraße 25, 10178 Berlin, Germany", - "coordinates": [13.416776409228078, 52.51855355456135], - "type": "poi", - "rawCategory": "supermarket", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:poi.15448214", - "label": "EDEKA", - "sublabel": "EDEKA, Buntzelstraße 14, 12526 Berlin, Germany", - "coordinates": [13.57199840247631, 52.408887070774476], - "type": "poi", - "rawCategory": "supermarket", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:poi.15864452", - "label": "EDEKA", - "sublabel": "EDEKA, Platz der Vereinten Nationen 14, 10249 Berlin, Germany", - "coordinates": [13.428411649527902, 52.52262534175838], - "type": "poi", - "rawCategory": "supermarket", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:poi.15445342", - "label": "EDEKA", - "sublabel": "EDEKA, Barnimstraße 18, 10249 Berlin, Germany", - "coordinates": [13.42295877635479, 52.52607532450191], - "type": "poi", - "rawCategory": "supermarket", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:poi.15632141", - "label": "EDEKA", - "sublabel": "EDEKA, Straßburger Straße 9A-C, 10405 Berlin, Germany", - "coordinates": [13.41357808560133, 52.52919226436692], - "type": "poi", - "rawCategory": "supermarket", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:poi.15895501", - "label": "EDEKA", - "sublabel": "EDEKA, Annenstraße 4a, 10179 Berlin, Germany", - "coordinates": [13.415483734242002, 52.50777084974184], - "type": "poi", - "rawCategory": "supermarket", - "provider": "geocoding-maptiler" - } - ], - "aggregate": { - "suggestions": [], - "attributions": [], - "partial": true + }, + "adapted": { + "id": "maptiler:poi.14883072", + "label": "Edeka Koch", + "sublabel": "Edeka Koch, Im Grund 1, 72469 Meßstetten, Germany", + "coordinates": [8.954309790404409, 48.1768506016719], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" } }, { - "caseId": "edeka-alexander", - "captures": [ - { - "caseId": "edeka-alexander", - "layer": "raw", - "capturedAt": "2026-10-07T20:37:21.414677+00:00", - "parameters": { - "language": "en", - "limit": "6", - "autocomplete": "true", - "types": "poi,address,street,neighbourhood,municipality,municipal_district,locality,subregion,region,county,country,postal_code,place", - "proximity": "13.42,52.52" - }, - "cache": "uncontrolled", - "requests": 1, - "status": 200, - "sha256": "6ae6be3085ab9315c8fac4800ce955f9a9c6dd805622e095bc2c64ce90d0e26a", - "cacheControl": "public, max-age=28800", - "age": null, - "latencyMs": 380.2 - }, - { - "caseId": "edeka-alexander", - "layer": "public", - "capturedAt": "2026-10-07T20:37:21.414883+00:00", - "parameters": { - "q": "EDEKA Alexanderstraße 25 Berlin", - "lang": "en", - "lat": "52.5194", - "lng": "13.416", - "zoom": "15" - }, - "cache": "uncontrolled", - "requests": 1, - "status": 200, - "sha256": "e494003a80cb535257e463ca733a903e40f82f607993a718dc689820ee529500", - "cacheControl": "public, max-age=3600", - "age": null, - "latencyMs": 395.34 - }, - { - "caseId": "edeka-alexander", - "layer": "aggregate", - "capturedAt": "2026-10-07T20:37:21.415015+00:00", - "parameters": { - "q": "EDEKA Alexanderstraße 25 Berlin", - "lang": "en", - "lat": "52.5194", - "lng": "13.416", - "limit": "8" - }, - "cache": "uncontrolled", - "requests": 1, - "status": 200, - "sha256": "b8b2af892915997b28e1d8a1067f3ffe35e0ba5ae97941b49e112edf98cfa254", - "cacheControl": "no-store", - "age": null, - "latencyMs": 110.33 + "raw": { + "id": "address.12686057", + "text": "Grunerstraße", + "place_name": "Grunerstraße 20, 10179 Berlin, Germany", + "place_type": ["address"], + "geometry": { "type": "Point", "coordinates": [13.41582100000005, 52.518307] }, + "properties": { "ref": "osm:w1025851956", "wikidata": "Q1550809" } + }, + "adapted": { + "id": "maptiler:address.12686057", + "ids": { "wikidata": "Q1550809" }, + "label": "Grunerstraße", + "sublabel": "Grunerstraße 20, 10179 Berlin, Germany", + "coordinates": [13.41582100000005, 52.518307], + "type": "address", + "provider": "geocoding-maptiler" + } + }, + { + "raw": { + "id": "address.10027702", + "text": "Groenerstraße", + "place_name": "Groenerstraße 20, 13585 Berlin, Germany", + "place_type": ["address"], + "geometry": { "type": "Point", "coordinates": [13.20358299999998, 52.543163] }, + "properties": { "ref": "osm:w1306242932" } + }, + "adapted": { + "id": "maptiler:address.10027702", + "label": "Groenerstraße", + "sublabel": "Groenerstraße 20, 13585 Berlin, Germany", + "coordinates": [13.20358299999998, 52.543163], + "type": "address", + "provider": "geocoding-maptiler" + } + }, + { + "raw": { + "id": "address.10343043", + "text": "Gründerstraße", + "place_name": "Gründerstraße 20, 12526 Berlin, Germany", + "place_type": ["address"], + "geometry": { "type": "Point", "coordinates": [13.574141999999938, 52.409928] }, + "properties": { "ref": "osm:w130868556" } + }, + "adapted": { + "id": "maptiler:address.10343043", + "label": "Gründerstraße", + "sublabel": "Gründerstraße 20, 12526 Berlin, Germany", + "coordinates": [13.574141999999938, 52.409928], + "type": "address", + "provider": "geocoding-maptiler" + } + }, + { + "raw": { + "id": "address.9410688", + "text": "Grünerstraße", + "place_name": "Grünerstraße 20, 95615 Marktredwitz, Germany", + "place_type": ["address"], + "geometry": { "type": "Point", "coordinates": [12.09223099999997, 50.005279] }, + "properties": { "ref": "osm:w147440163" } + }, + "adapted": { + "id": "maptiler:address.9410688", + "label": "Grünerstraße", + "sublabel": "Grünerstraße 20, 95615 Marktredwitz, Germany", + "coordinates": [12.09223099999997, 50.005279], + "type": "address", + "provider": "geocoding-maptiler" + } + }, + { + "raw": { + "id": "address.5097698", + "text": "Grunerstraße", + "place_name": "Grunerstraße 20, 65510 Idstein, Germany", + "place_type": ["address"], + "geometry": { "type": "Point", "coordinates": [8.267456000000038, 50.216309] }, + "properties": { "ref": "osm:w11487422" } + }, + "adapted": { + "id": "maptiler:address.5097698", + "label": "Grunerstraße", + "sublabel": "Grunerstraße 20, 65510 Idstein, Germany", + "coordinates": [8.267456000000038, 50.216309], + "type": "address", + "provider": "geocoding-maptiler" + } + }, + { + "raw": { + "id": "place.4929509", + "text": "Colonia 20 de Noviembre", + "place_name": "Colonia 20 de Noviembre, Huaniqueo, Mexico", + "place_type": ["place"], + "geometry": { "type": "Point", "coordinates": [-101.58130947500467, 19.893160393441814] }, + "properties": { "ref": "osm:n4554041879", "place_designation": "hamlet" } + }, + "adapted": { + "id": "maptiler:place.4929509", + "label": "Colonia 20 de Noviembre", + "sublabel": "Colonia 20 de Noviembre, Huaniqueo, Mexico", + "coordinates": [-101.58130947500467, 19.893160393441814], + "type": "region", + "rawCategory": "place/hamlet", + "provider": "geocoding-maptiler" + } + }, + { + "raw": { + "id": "poi.39267497", + "text": "EDEKA", + "place_name": "EDEKA, Alexanderstraße 25, 10178 Berlin, Germany", + "place_type": ["poi"], + "geometry": { "type": "Point", "coordinates": [13.416776409228078, 52.51855355456135] }, + "properties": { + "ref": "osm:w1204762785", + "categories": ["supermarket"], + "feature_tags": { "shop": "supermarket", "level": "-1", "addr:city": "Berlin" } } - ], - "rawFeatures": [ - { - "id": "poi.39267497", - "text": "EDEKA", - "place_name": "EDEKA, Alexanderstraße 25, 10178 Berlin, Germany", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [13.416776409228078, 52.51855355456135] - }, - "properties": { - "ref": "osm:w1204762785", - "categories": ["supermarket"], - "feature_tags": { - "shop": "supermarket", - "level": "-1", - "addr:city": "Berlin" - } - } - }, - { - "id": "poi.15445342", - "text": "EDEKA", - "place_name": "EDEKA, Barnimstraße 18, 10249 Berlin, Germany", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [13.42295877635479, 52.52607532450191] - }, - "properties": { - "ref": "osm:n448814806", - "categories": ["supermarket"], - "feature_tags": { - "shop": "supermarket", - "addr:postcode": "10249", - "addr:city": "Berlin", - "addr:housenumber": "18", - "addr:street": "Barnimstraße" - } - } - }, - { - "id": "poi.15632141", - "text": "EDEKA", - "place_name": "EDEKA, Straßburger Straße 9A-C, 10405 Berlin, Germany", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [13.41357808560133, 52.52919226436692] - }, - "properties": { - "ref": "osm:n3889187276", - "categories": ["supermarket"], - "feature_tags": { - "shop": "supermarket", - "addr:postcode": "10405", - "addr:city": "Berlin", - "addr:housenumber": "9A-C", - "addr:street": "Straßburger Straße" - } - } - }, - { - "id": "poi.32007491", - "text": "EDEKA", - "place_name": "EDEKA, Templiner Straße 13a, 10119 Berlin, Germany", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [13.40784888714552, 52.53201304601752] - }, - "properties": { - "ref": "osm:n6595730361", - "categories": ["supermarket"], - "feature_tags": { - "shop": "supermarket", - "level": "0", - "addr:postcode": "10119", - "addr:city": "Berlin", - "addr:housenumber": "12", - "addr:street": "Templiner Straße" - } - } - }, - { - "id": "address.6574798", - "text": "Alexanderstraße", - "place_name": "Alexanderstraße 25, 10179 Berlin, Germany", - "place_type": ["address"], - "geometry": { - "type": "Point", - "coordinates": [13.41794200000004, 52.519004] - }, - "properties": { - "ref": "osm:w100405009", - "wikidata": "Q17486182" - } - }, - { - "id": "poi.15258278", - "text": "Edeka", - "place_name": "Edeka, Berliner Straße 96, 13507 Berlin, Germany", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [13.284847810864449, 52.589088279152] - }, - "properties": { - "ref": "osm:n316772479", - "categories": ["supermarket"], - "feature_tags": { - "shop": "supermarket", - "addr:postcode": "13507", - "addr:city": "Berlin", - "addr:housenumber": "96", - "addr:street": "Berliner Straße" - } + }, + "adapted": { + "id": "maptiler:poi.39267497", + "label": "EDEKA", + "sublabel": "EDEKA, Alexanderstraße 25, 10178 Berlin, Germany", + "coordinates": [13.416776409228078, 52.51855355456135], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" + } + }, + { + "raw": { + "id": "poi.15407240", + "text": "EDEKA", + "place_name": "EDEKA, Markt 11, 13597 Berlin, Germany", + "place_type": ["poi"], + "geometry": { "type": "Point", "coordinates": [13.204706087708473, 52.53740364108829] }, + "properties": { + "ref": "osm:n271738194", + "categories": ["supermarket"], + "feature_tags": { + "shop": "supermarket", + "addr:postcode": "13597", + "addr:city": "Berlin", + "addr:housenumber": "11", + "addr:street": "Markt" } } - ], - "publicRows": [ - { - "id": "maptiler:poi.39267497", - "label": "EDEKA", - "sublabel": "EDEKA, Alexanderstraße 25, 10178 Berlin, Germany", - "coordinates": [13.416776409228078, 52.51855355456135], - "type": "poi", - "rawCategory": "supermarket", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:poi.15445342", - "label": "EDEKA", - "sublabel": "EDEKA, Barnimstraße 18, 10249 Berlin, Germany", - "coordinates": [13.42295877635479, 52.52607532450191], - "type": "poi", - "rawCategory": "supermarket", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:poi.15632141", - "label": "EDEKA", - "sublabel": "EDEKA, Straßburger Straße 9A-C, 10405 Berlin, Germany", - "coordinates": [13.41357808560133, 52.52919226436692], - "type": "poi", - "rawCategory": "supermarket", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:poi.32007491", - "label": "EDEKA", - "sublabel": "EDEKA, Templiner Straße 13a, 10119 Berlin, Germany", - "coordinates": [13.40784888714552, 52.53201304601752], - "type": "poi", - "rawCategory": "supermarket", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:address.6574798", - "ids": { - "wikidata": "Q17486182" - }, - "label": "Alexanderstraße", - "sublabel": "Alexanderstraße 25, 10179 Berlin, Germany", - "coordinates": [13.41794200000004, 52.519004], - "type": "address", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:poi.15258278", - "label": "Edeka", - "sublabel": "Edeka, Berliner Straße 96, 13507 Berlin, Germany", - "coordinates": [13.284847810864449, 52.589088279152], - "type": "poi", - "rawCategory": "supermarket", - "provider": "geocoding-maptiler" - } - ], - "aggregate": { - "suggestions": [], - "attributions": [], - "partial": true + }, + "adapted": { + "id": "maptiler:poi.15407240", + "label": "EDEKA", + "sublabel": "EDEKA, Markt 11, 13597 Berlin, Germany", + "coordinates": [13.204706087708473, 52.53740364108829], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" } }, { - "caseId": "edeka-brand", - "captures": [ - { - "caseId": "edeka-brand", - "layer": "raw", - "capturedAt": "2026-10-07T20:37:21.811697+00:00", - "parameters": { - "language": "en", - "limit": "6", - "autocomplete": "true", - "types": "poi,address,street,neighbourhood,municipality,municipal_district,locality,subregion,region,county,country,postal_code,place", - "proximity": "13.42,52.52" - }, - "cache": "uncontrolled", - "requests": 1, - "status": 200, - "sha256": "0c28b49388c08526bcfd175580af9f19dcb9ba0de1d88615611323b22c2c3b2f", - "cacheControl": "public, max-age=28800", - "age": null, - "latencyMs": 52.47 - }, - { - "caseId": "edeka-brand", - "layer": "public", - "capturedAt": "2026-10-07T20:37:21.812402+00:00", - "parameters": { - "q": "EDEKA", - "lang": "en", - "lat": "52.5194", - "lng": "13.416", - "zoom": "15" - }, - "cache": "uncontrolled", - "requests": 1, - "status": 200, - "sha256": "25c4325737819e2daf8ae46221350c5032a62ff0c75e8b440648ed6a12a2f94d", - "cacheControl": "public, max-age=3600", - "age": null, - "latencyMs": 86.58 - }, - { - "caseId": "edeka-brand", - "layer": "aggregate", - "capturedAt": "2026-10-07T20:37:21.812631+00:00", - "parameters": { - "q": "EDEKA", - "lang": "en", - "lat": "52.5194", - "lng": "13.416", - "limit": "8" - }, - "cache": "uncontrolled", - "requests": 1, - "status": 200, - "sha256": "b8b2af892915997b28e1d8a1067f3ffe35e0ba5ae97941b49e112edf98cfa254", - "cacheControl": "no-store", - "age": null, - "latencyMs": 113.13 - } - ], - "rawFeatures": [ - { - "id": "poi.39267497", - "text": "EDEKA", - "place_name": "EDEKA, Alexanderstraße 25, 10178 Berlin, Germany", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [13.416776409228078, 52.51855355456135] - }, - "properties": { - "ref": "osm:w1204762785", - "categories": ["supermarket"], - "feature_tags": { - "shop": "supermarket", - "level": "-1", - "addr:city": "Berlin" - } - } - }, - { - "id": "poi.15864452", - "text": "EDEKA", - "place_name": "EDEKA, Platz der Vereinten Nationen 14, 10249 Berlin, Germany", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [13.428411649527902, 52.52262534175838] - }, - "properties": { - "ref": "osm:w24035130", - "categories": ["supermarket", "retail building"], - "feature_tags": { - "shop": "supermarket", - "addr:postcode": "10249", - "addr:city": "Berlin", - "addr:housenumber": "14", - "addr:street": "Platz der Vereinten Nationen" - } - } - }, - { - "id": "poi.15445342", - "text": "EDEKA", - "place_name": "EDEKA, Barnimstraße 18, 10249 Berlin, Germany", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [13.42295877635479, 52.52607532450191] - }, - "properties": { - "ref": "osm:n448814806", - "categories": ["supermarket"], - "feature_tags": { - "shop": "supermarket", - "addr:postcode": "10249", - "addr:city": "Berlin", - "addr:housenumber": "18", - "addr:street": "Barnimstraße" - } - } - }, - { - "id": "poi.15632141", - "text": "EDEKA", - "place_name": "EDEKA, Straßburger Straße 9A-C, 10405 Berlin, Germany", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [13.41357808560133, 52.52919226436692] - }, - "properties": { - "ref": "osm:n3889187276", - "categories": ["supermarket"], - "feature_tags": { - "shop": "supermarket", - "addr:postcode": "10405", - "addr:city": "Berlin", - "addr:housenumber": "9A-C", - "addr:street": "Straßburger Straße" - } - } - }, - { - "id": "poi.15895501", - "text": "EDEKA", - "place_name": "EDEKA, Annenstraße 4a, 10179 Berlin, Germany", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [13.415483734242002, 52.50777084974184] - }, - "properties": { - "ref": "osm:w52092588", - "categories": ["supermarket", "commercial building"], - "feature_tags": { - "shop": "supermarket", - "addr:postcode": "10179", - "addr:city": "Berlin", - "addr:housenumber": "4a", - "addr:street": "Annenstraße" - } - } - }, - { - "id": "poi.32007491", - "text": "EDEKA", - "place_name": "EDEKA, Templiner Straße 13a, 10119 Berlin, Germany", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [13.40784888714552, 52.53201304601752] - }, - "properties": { - "ref": "osm:n6595730361", - "categories": ["supermarket"], - "feature_tags": { - "shop": "supermarket", - "level": "0", - "addr:postcode": "10119", - "addr:city": "Berlin", - "addr:housenumber": "12", - "addr:street": "Templiner Straße" - } + "raw": { + "id": "poi.15448214", + "text": "EDEKA", + "place_name": "EDEKA, Buntzelstraße 14, 12526 Berlin, Germany", + "place_type": ["poi"], + "geometry": { "type": "Point", "coordinates": [13.57199840247631, 52.408887070774476] }, + "properties": { + "ref": "osm:n471301175", + "categories": ["supermarket"], + "feature_tags": { + "shop": "supermarket", + "addr:postcode": "12526", + "addr:city": "Berlin", + "addr:housenumber": "14", + "addr:street": "Buntzelstraße" } } - ], - "publicRows": [ - { - "id": "maptiler:poi.39267497", - "label": "EDEKA", - "sublabel": "EDEKA, Alexanderstraße 25, 10178 Berlin, Germany", - "coordinates": [13.416776409228078, 52.51855355456135], - "type": "poi", - "rawCategory": "supermarket", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:poi.15864452", - "label": "EDEKA", - "sublabel": "EDEKA, Platz der Vereinten Nationen 14, 10249 Berlin, Germany", - "coordinates": [13.428411649527902, 52.52262534175838], - "type": "poi", - "rawCategory": "supermarket", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:poi.15445342", - "label": "EDEKA", - "sublabel": "EDEKA, Barnimstraße 18, 10249 Berlin, Germany", - "coordinates": [13.42295877635479, 52.52607532450191], - "type": "poi", - "rawCategory": "supermarket", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:poi.15632141", - "label": "EDEKA", - "sublabel": "EDEKA, Straßburger Straße 9A-C, 10405 Berlin, Germany", - "coordinates": [13.41357808560133, 52.52919226436692], - "type": "poi", - "rawCategory": "supermarket", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:poi.15895501", - "label": "EDEKA", - "sublabel": "EDEKA, Annenstraße 4a, 10179 Berlin, Germany", - "coordinates": [13.415483734242002, 52.50777084974184], - "type": "poi", - "rawCategory": "supermarket", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:poi.32007491", - "label": "EDEKA", - "sublabel": "EDEKA, Templiner Straße 13a, 10119 Berlin, Germany", - "coordinates": [13.40784888714552, 52.53201304601752], - "type": "poi", - "rawCategory": "supermarket", - "provider": "geocoding-maptiler" - } - ], - "aggregate": { - "suggestions": [], - "attributions": [], - "partial": true + }, + "adapted": { + "id": "maptiler:poi.15448214", + "label": "EDEKA", + "sublabel": "EDEKA, Buntzelstraße 14, 12526 Berlin, Germany", + "coordinates": [13.57199840247631, 52.408887070774476], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" } }, { - "caseId": "media-alexa", - "captures": [ - { - "caseId": "media-alexa", - "layer": "raw", - "capturedAt": "2026-10-07T20:37:21.926437+00:00", - "parameters": { - "language": "en", - "limit": "6", - "autocomplete": "true", - "types": "poi,address,street,neighbourhood,municipality,municipal_district,locality,subregion,region,county,country,postal_code,place", - "proximity": "13.42,52.52" - }, - "cache": "uncontrolled", - "requests": 1, - "status": 200, - "sha256": "8f4c2dfd75dbae992ec0f0014cb6ff0da401b30f2202ead718751c3894f0e271", - "cacheControl": "public, max-age=28800", - "age": null, - "latencyMs": 61.11 - }, - { - "caseId": "media-alexa", - "layer": "public", - "capturedAt": "2026-10-07T20:37:21.927781+00:00", - "parameters": { - "q": "MediaMarkt Alexa", - "lang": "en", - "lat": "52.5194", - "lng": "13.416", - "zoom": "15" - }, - "cache": "uncontrolled", - "requests": 1, - "status": 200, - "sha256": "2689f023c52e128f95bc529f9088fa96926800b18e54211dac6322fcf33e812b", - "cacheControl": "public, max-age=3600", - "age": null, - "latencyMs": 96.67 - }, - { - "caseId": "media-alexa", - "layer": "aggregate", - "capturedAt": "2026-10-07T20:37:21.930101+00:00", - "parameters": { - "q": "MediaMarkt Alexa", - "lang": "en", - "lat": "52.5194", - "lng": "13.416", - "limit": "8" - }, - "cache": "uncontrolled", - "requests": 1, - "status": 200, - "sha256": "b8b2af892915997b28e1d8a1067f3ffe35e0ba5ae97941b49e112edf98cfa254", - "cacheControl": "no-store", - "age": null, - "latencyMs": 113.35 + "raw": { + "id": "poi.30149398", + "text": "EDEKA", + "place_name": "EDEKA, Falkenseer Chaussee 266a, 13583 Berlin, Germany", + "place_type": ["poi"], + "geometry": { "type": "Point", "coordinates": [13.186250478029251, 52.54698238754912] }, + "properties": { + "ref": "osm:n1008550282", + "categories": ["supermarket"], + "feature_tags": { "shop": "supermarket" } } - ], - "rawFeatures": [ - { - "id": "poi.15539884", - "text": "MediaMarkt", - "place_name": "MediaMarkt, Pr Willem Alexander Prom 69-83, 2284 DJ Rijswijk, Netherlands", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [4.316869229078293, 52.03636822992996] - }, - "properties": { - "ref": "osm:n1845949909", - "categories": ["electronics"], - "feature_tags": { - "shop": "electronics", - "level": "1", - "addr:postcode": "2284DJ", - "addr:city": "Rijswijk", - "addr:housenumber": "69-83", - "addr:street": "Pr Willem Alexander Prom" - } - } - }, - { - "id": "poi.15422100", - "text": "MediaMarkt", - "place_name": "MediaMarkt, Grunerstraße 20, 10179 Berlin, Germany", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [13.414790779352188, 52.51986159027454] - }, - "properties": { - "ref": "osm:n322490364", - "categories": ["electronics"], - "feature_tags": { - "shop": "electronics", - "level": "0", - "addr:postcode": "10179", - "addr:city": "Berlin", - "addr:housenumber": "20", - "addr:street": "Grunerstraße" - } - } - }, - { - "id": "poi.15388462", - "text": "MediaMarkt", - "place_name": "MediaMarkt, Äußere Schneeberger Straße 95, 08056 Zwickau, Germany", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [12.499412186443806, 50.70416170071806] - }, - "properties": { - "ref": "osm:n267485594", - "categories": ["electronics"], - "feature_tags": { - "shop": "electronics", - "addr:postcode": "08056", - "addr:city": "Zwickau", - "addr:housenumber": "95", - "addr:street": "Äußere Schneeberger Straße" - } - } - }, - { - "id": "poi.15513302", - "text": "MediaMarkt", - "place_name": "MediaMarkt, Waldershofer Straße 10, 95615 Marktredwitz, Germany", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [12.077845813448675, 49.99956173454102] - }, - "properties": { - "ref": "osm:w145348876", - "categories": ["electronics", "building"], - "feature_tags": { - "addr:housenumber": "10", - "shop": "electronics", - "addr:street": "Waldershofer Straße", - "addr:postcode": "95615", - "addr:city": "Marktredwitz" - } - } - }, - { - "id": "poi.27301831", - "text": "MediaMarkt", - "place_name": "MediaMarkt, Schloßplatz 8, 26122 Oldenburg, Germany", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [8.216576837003231, 53.13856416583732] - }, - "properties": { - "ref": "osm:n3555055573", - "categories": ["electronics"], - "feature_tags": { - "shop": "electronics", - "level": "-1", - "addr:postcode": "26122", - "addr:city": "Oldenburg", - "addr:housenumber": "3", - "addr:street": "Schloßplatz" - } - } - }, - { - "id": "poi.31290179", - "text": "MediaMarkt", - "place_name": "MediaMarkt, Posthalterweg 15, 26129 Oldenburg, Germany", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [8.172727230560895, 53.16099834226386] - }, - "properties": { - "ref": "osm:w1134980105", - "categories": ["electronics", "retail building"], - "feature_tags": { - "shop": "electronics", - "addr:postcode": "26129", - "addr:city": "Oldenburg", - "addr:housenumber": "15", - "addr:street": "Posthalterweg" - } + }, + "adapted": { + "id": "maptiler:poi.30149398", + "label": "EDEKA", + "sublabel": "EDEKA, Falkenseer Chaussee 266a, 13583 Berlin, Germany", + "coordinates": [13.186250478029251, 52.54698238754912], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" + } + }, + { + "raw": { + "id": "poi.15445342", + "text": "EDEKA", + "place_name": "EDEKA, Barnimstraße 18, 10249 Berlin, Germany", + "place_type": ["poi"], + "geometry": { "type": "Point", "coordinates": [13.42295877635479, 52.52607532450191] }, + "properties": { + "ref": "osm:n448814806", + "categories": ["supermarket"], + "feature_tags": { + "shop": "supermarket", + "addr:postcode": "10249", + "addr:city": "Berlin", + "addr:housenumber": "18", + "addr:street": "Barnimstraße" } } - ], - "publicRows": [ - { - "id": "maptiler:poi.15539884", - "label": "MediaMarkt", - "sublabel": "MediaMarkt, Pr Willem Alexander Prom 69-83, 2284 DJ Rijswijk, Netherlands", - "coordinates": [4.316869229078293, 52.03636822992996], - "type": "poi", - "rawCategory": "electronics", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:poi.15422100", - "label": "MediaMarkt", - "sublabel": "MediaMarkt, Grunerstraße 20, 10179 Berlin, Germany", - "coordinates": [13.414790779352188, 52.51986159027454], - "type": "poi", - "rawCategory": "electronics", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:poi.15388462", - "label": "MediaMarkt", - "sublabel": "MediaMarkt, Äußere Schneeberger Straße 95, 08056 Zwickau, Germany", - "coordinates": [12.499412186443806, 50.70416170071806], - "type": "poi", - "rawCategory": "electronics", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:poi.15513302", - "label": "MediaMarkt", - "sublabel": "MediaMarkt, Waldershofer Straße 10, 95615 Marktredwitz, Germany", - "coordinates": [12.077845813448675, 49.99956173454102], - "type": "poi", - "rawCategory": "electronics", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:poi.27301831", - "label": "MediaMarkt", - "sublabel": "MediaMarkt, Schloßplatz 8, 26122 Oldenburg, Germany", - "coordinates": [8.216576837003231, 53.13856416583732], - "type": "poi", - "rawCategory": "electronics", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:poi.31290179", - "label": "MediaMarkt", - "sublabel": "MediaMarkt, Posthalterweg 15, 26129 Oldenburg, Germany", - "coordinates": [8.172727230560895, 53.16099834226386], - "type": "poi", - "rawCategory": "electronics", - "provider": "geocoding-maptiler" - } - ], - "aggregate": { - "suggestions": [], - "attributions": [], - "partial": true + }, + "adapted": { + "id": "maptiler:poi.15445342", + "label": "EDEKA", + "sublabel": "EDEKA, Barnimstraße 18, 10249 Berlin, Germany", + "coordinates": [13.42295877635479, 52.52607532450191], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" } }, { - "caseId": "media-address", - "captures": [ - { - "caseId": "media-address", - "layer": "raw", - "capturedAt": "2026-10-07T20:37:22.043748+00:00", - "parameters": { - "language": "en", - "limit": "6", - "autocomplete": "true", - "types": "poi,address,street,neighbourhood,municipality,municipal_district,locality,subregion,region,county,country,postal_code,place", - "proximity": "13.42,52.52" - }, - "cache": "uncontrolled", - "requests": 1, - "status": 200, - "sha256": "e54136143c408403aa00a742989f3d6d9624012228d07b301e3fb99b97a6fe4b", - "cacheControl": "public, max-age=28800", - "age": null, - "latencyMs": 506.45 - }, - { - "caseId": "media-address", - "layer": "public", - "capturedAt": "2026-10-07T20:37:22.043936+00:00", - "parameters": { - "q": "MediaMarkt Grunerstraße 20 Berlin", - "lang": "en", - "lat": "52.5194", - "lng": "13.416", - "zoom": "15" - }, - "cache": "uncontrolled", - "requests": 1, - "status": 200, - "sha256": "5ff4e2cbdb84bda98fa212979f62d6a189888e8548709c19d3526799ce9472bb", - "cacheControl": "public, max-age=3600", - "age": null, - "latencyMs": 524.77 - }, - { - "caseId": "media-address", - "layer": "aggregate", - "capturedAt": "2026-10-07T20:37:22.044102+00:00", - "parameters": { - "q": "MediaMarkt Grunerstraße 20 Berlin", - "lang": "en", - "lat": "52.5194", - "lng": "13.416", - "limit": "8" - }, - "cache": "uncontrolled", - "requests": 1, - "status": 200, - "sha256": "b8b2af892915997b28e1d8a1067f3ffe35e0ba5ae97941b49e112edf98cfa254", - "cacheControl": "no-store", - "age": null, - "latencyMs": 130.63 - } - ], - "rawFeatures": [ - { - "id": "poi.15422100", - "text": "MediaMarkt", - "place_name": "MediaMarkt, Grunerstraße 20, 10179 Berlin, Germany", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [13.414790779352188, 52.51986159027454] - }, - "properties": { - "ref": "osm:n322490364", - "categories": ["electronics"], - "feature_tags": { - "shop": "electronics", - "level": "0", - "addr:postcode": "10179", - "addr:city": "Berlin", - "addr:housenumber": "20", - "addr:street": "Grunerstraße" - } - } - }, - { - "id": "address.12686057", - "text": "Grunerstraße", - "place_name": "Grunerstraße 20, 10179 Berlin, Germany", - "place_type": ["address"], - "geometry": { - "type": "Point", - "coordinates": [13.41582100000005, 52.518307] - }, - "properties": { - "ref": "osm:w1025851956", - "wikidata": "Q1550809" - } - }, - { - "id": "poi.34392614", - "text": "MediaMarkt", - "place_name": "MediaMarkt, Berliner Straße 15, 89250 Senden, Germany", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [10.039082317799625, 48.33283310114879] - }, - "properties": { - "ref": "osm:w100513761", - "categories": ["electronics", "retail building"], - "wikidata": "Q659320", - "feature_tags": { - "shop": "electronics", - "addr:postcode": "89250", - "addr:city": "Senden", - "addr:housenumber": "13", - "addr:street": "Berliner Straße" - } - } - }, - { - "id": "poi.30823762", - "text": "MediaMarkt", - "place_name": "MediaMarkt, Berliner Allee 34a, 22850 Norderstedt, Germany", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [9.985382588983953, 53.6835389749034] - }, - "properties": { - "ref": "osm:w907293928", - "categories": ["electronics"], - "feature_tags": { - "shop": "electronics", - "level": "1", - "addr:postcode": "22850", - "addr:city": "Norderstedt", - "addr:housenumber": "8", - "addr:street": "De-Gasperi-Passage" - } - } - }, - { - "id": "address.10027702", - "text": "Groenerstraße", - "place_name": "Groenerstraße 20, 13585 Berlin, Germany", - "place_type": ["address"], - "geometry": { - "type": "Point", - "coordinates": [13.20358299999998, 52.543163] - }, - "properties": { - "ref": "osm:w1306242932" - } - }, - { - "id": "address.10343043", - "text": "Gründerstraße", - "place_name": "Gründerstraße 20, 12526 Berlin, Germany", - "place_type": ["address"], - "geometry": { - "type": "Point", - "coordinates": [13.574141999999938, 52.409928] - }, - "properties": { - "ref": "osm:w130868556" + "raw": { + "id": "poi.15632141", + "text": "EDEKA", + "place_name": "EDEKA, Straßburger Straße 9A-C, 10405 Berlin, Germany", + "place_type": ["poi"], + "geometry": { "type": "Point", "coordinates": [13.41357808560133, 52.52919226436692] }, + "properties": { + "ref": "osm:n3889187276", + "categories": ["supermarket"], + "feature_tags": { + "shop": "supermarket", + "addr:postcode": "10405", + "addr:city": "Berlin", + "addr:housenumber": "9A-C", + "addr:street": "Straßburger Straße" } } - ], - "publicRows": [ - { - "id": "maptiler:poi.15422100", - "label": "MediaMarkt", - "sublabel": "MediaMarkt, Grunerstraße 20, 10179 Berlin, Germany", - "coordinates": [13.414790779352188, 52.51986159027454], - "type": "poi", - "rawCategory": "electronics", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:address.12686057", - "ids": { - "wikidata": "Q1550809" - }, - "label": "Grunerstraße", - "sublabel": "Grunerstraße 20, 10179 Berlin, Germany", - "coordinates": [13.41582100000005, 52.518307], - "type": "address", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:poi.34392614", - "ids": { - "wikidata": "Q659320" - }, - "label": "MediaMarkt", - "sublabel": "MediaMarkt, Berliner Straße 15, 89250 Senden, Germany", - "coordinates": [10.039082317799625, 48.33283310114879], - "type": "poi", - "rawCategory": "electronics", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:poi.30823762", - "label": "MediaMarkt", - "sublabel": "MediaMarkt, Berliner Allee 34a, 22850 Norderstedt, Germany", - "coordinates": [9.985382588983953, 53.6835389749034], - "type": "poi", - "rawCategory": "electronics", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:address.10027702", - "label": "Groenerstraße", - "sublabel": "Groenerstraße 20, 13585 Berlin, Germany", - "coordinates": [13.20358299999998, 52.543163], - "type": "address", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:address.10343043", - "label": "Gründerstraße", - "sublabel": "Gründerstraße 20, 12526 Berlin, Germany", - "coordinates": [13.574141999999938, 52.409928], - "type": "address", - "provider": "geocoding-maptiler" + }, + "adapted": { + "id": "maptiler:poi.15632141", + "label": "EDEKA", + "sublabel": "EDEKA, Straßburger Straße 9A-C, 10405 Berlin, Germany", + "coordinates": [13.41357808560133, 52.52919226436692], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" + } + }, + { + "raw": { + "id": "poi.15895501", + "text": "EDEKA", + "place_name": "EDEKA, Annenstraße 4a, 10179 Berlin, Germany", + "place_type": ["poi"], + "geometry": { "type": "Point", "coordinates": [13.415483734242002, 52.50777084974184] }, + "properties": { + "ref": "osm:w52092588", + "categories": ["supermarket", "commercial building"], + "feature_tags": { + "shop": "supermarket", + "addr:postcode": "10179", + "addr:city": "Berlin", + "addr:housenumber": "4a", + "addr:street": "Annenstraße" + } } - ], - "aggregate": { - "suggestions": [], - "attributions": [], - "partial": true + }, + "adapted": { + "id": "maptiler:poi.15895501", + "label": "EDEKA", + "sublabel": "EDEKA, Annenstraße 4a, 10179 Berlin, Germany", + "coordinates": [13.415483734242002, 52.50777084974184], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" } }, { - "caseId": "rewe-address", - "captures": [ - { - "caseId": "rewe-address", - "layer": "raw", - "capturedAt": "2026-10-07T20:37:22.569003+00:00", - "parameters": { - "language": "en", - "limit": "6", - "autocomplete": "true", - "types": "poi,address,street,neighbourhood,municipality,municipal_district,locality,subregion,region,county,country,postal_code,place", - "proximity": "13.42,52.52" - }, - "cache": "uncontrolled", - "requests": 1, - "status": 200, - "sha256": "3d9e69eacc830aecf24998911d31932ec4a04c4d0eaf32bb5c29aca9e5e0b55b", - "cacheControl": "public, max-age=28800", - "age": null, - "latencyMs": 320.83 - }, - { - "caseId": "rewe-address", - "layer": "public", - "capturedAt": "2026-10-07T20:37:22.569169+00:00", - "parameters": { - "q": "REWE Invalidenstraße 158 Berlin", - "lang": "en", - "lat": "52.5194", - "lng": "13.416", - "zoom": "15" - }, - "cache": "uncontrolled", - "requests": 1, - "status": 200, - "sha256": "0dd485db12cafb18b7b57011208f80d9320145453694ce740d1f0c62145444d7", - "cacheControl": "public, max-age=3600", - "age": null, - "latencyMs": 335.41 - }, - { - "caseId": "rewe-address", - "layer": "aggregate", - "capturedAt": "2026-10-07T20:37:22.569350+00:00", - "parameters": { - "q": "REWE Invalidenstraße 158 Berlin", - "lang": "en", - "lat": "52.5194", - "lng": "13.416", - "limit": "8" - }, - "cache": "uncontrolled", - "requests": 1, - "status": 200, - "sha256": "b8b2af892915997b28e1d8a1067f3ffe35e0ba5ae97941b49e112edf98cfa254", - "cacheControl": "no-store", - "age": null, - "latencyMs": 119.53 + "raw": { + "id": "poi.32007491", + "text": "EDEKA", + "place_name": "EDEKA, Templiner Straße 13a, 10119 Berlin, Germany", + "place_type": ["poi"], + "geometry": { "type": "Point", "coordinates": [13.40784888714552, 52.53201304601752] }, + "properties": { + "ref": "osm:n6595730361", + "categories": ["supermarket"], + "feature_tags": { + "shop": "supermarket", + "level": "0", + "addr:postcode": "10119", + "addr:city": "Berlin", + "addr:housenumber": "12", + "addr:street": "Templiner Straße" + } } - ], - "rawFeatures": [ - { - "id": "poi.15426609", - "text": "REWE", - "place_name": "REWE, Invalidenstraße 158, 10115 Berlin, Germany", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [13.397083505988121, 52.531980821191] - }, - "properties": { - "ref": "osm:n348000444", - "categories": ["supermarket"], - "feature_tags": { - "shop": "supermarket", - "level": "0", - "addr:postcode": "10115", - "addr:city": "Berlin", - "addr:housenumber": "158", - "addr:street": "Invalidenstraße" - } + }, + "adapted": { + "id": "maptiler:poi.32007491", + "label": "EDEKA", + "sublabel": "EDEKA, Templiner Straße 13a, 10119 Berlin, Germany", + "coordinates": [13.40784888714552, 52.53201304601752], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" + } + }, + { + "raw": { + "id": "poi.15469482", + "text": "EDEKA", + "place_name": "EDEKA, Ritterstraße 38-40, 10969 Berlin, Germany", + "place_type": ["poi"], + "geometry": { "type": "Point", "coordinates": [13.403648883104324, 52.5035654379113] }, + "properties": { + "ref": "osm:n652570198", + "categories": ["supermarket"], + "feature_tags": { + "shop": "supermarket", + "addr:postcode": "10969", + "addr:city": "Berlin", + "addr:housenumber": "38-40", + "addr:street": "Ritterstraße" } - }, - { - "id": "poi.15741076", - "text": "REWE", - "place_name": "REWE, Heidestraße 41, 10557 Berlin, Germany", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [13.3660389482975, 52.53228104144362] - }, - "properties": { - "ref": "osm:n8367158861", - "categories": ["supermarket"], - "feature_tags": { - "shop": "supermarket", - "addr:postcode": "10557", - "level": "0", - "addr:city": "Berlin", - "addr:housenumber": "41", - "addr:street": "Heidestraße" - } + } + }, + "adapted": { + "id": "maptiler:poi.15469482", + "label": "EDEKA", + "sublabel": "EDEKA, Ritterstraße 38-40, 10969 Berlin, Germany", + "coordinates": [13.403648883104324, 52.5035654379113], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" + } + }, + { + "raw": { + "id": "poi.15864452", + "text": "EDEKA", + "place_name": "EDEKA, Platz der Vereinten Nationen 14, 10249 Berlin, Germany", + "place_type": ["poi"], + "geometry": { "type": "Point", "coordinates": [13.428411649527902, 52.52262534175838] }, + "properties": { + "ref": "osm:w24035130", + "categories": ["supermarket", "retail building"], + "feature_tags": { + "shop": "supermarket", + "addr:postcode": "10249", + "addr:city": "Berlin", + "addr:housenumber": "14", + "addr:street": "Platz der Vereinten Nationen" } - }, - { - "id": "poi.34014416", - "text": "REWE", - "place_name": "REWE, Aaron-Bernstein-Platz 7, 10117 Berlin, Germany", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [13.389315493404865, 52.52533119149872] - }, - "properties": { - "ref": "osm:n11027556740", - "categories": ["supermarket"], - "feature_tags": { - "shop": "supermarket", - "level": "-1", - "addr:postcode": "10117", - "addr:city": "Berlin", - "addr:housenumber": "111", - "addr:street": "Friedrichstraße" - } + } + }, + "adapted": { + "id": "maptiler:poi.15864452", + "label": "EDEKA", + "sublabel": "EDEKA, Platz der Vereinten Nationen 14, 10249 Berlin, Germany", + "coordinates": [13.428411649527902, 52.52262534175838], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" + } + }, + { + "raw": { + "id": "address.6574798", + "text": "Alexanderstraße", + "place_name": "Alexanderstraße 25, 10179 Berlin, Germany", + "place_type": ["address"], + "geometry": { "type": "Point", "coordinates": [13.41794200000004, 52.519004] }, + "properties": { "ref": "osm:w100405009", "wikidata": "Q17486182" } + }, + "adapted": { + "id": "maptiler:address.6574798", + "ids": { "wikidata": "Q17486182" }, + "label": "Alexanderstraße", + "sublabel": "Alexanderstraße 25, 10179 Berlin, Germany", + "coordinates": [13.41794200000004, 52.519004], + "type": "address", + "provider": "geocoding-maptiler" + } + }, + { + "raw": { + "id": "poi.15258278", + "text": "Edeka", + "place_name": "Edeka, Berliner Straße 96, 13507 Berlin, Germany", + "place_type": ["poi"], + "geometry": { "type": "Point", "coordinates": [13.284847810864449, 52.589088279152] }, + "properties": { + "ref": "osm:n316772479", + "categories": ["supermarket"], + "feature_tags": { + "shop": "supermarket", + "addr:postcode": "13507", + "addr:city": "Berlin", + "addr:housenumber": "96", + "addr:street": "Berliner Straße" } - }, - { - "id": "poi.15509199", - "text": "REWE", - "place_name": "REWE, Chausseestraße 118-120, 10115 Berlin, Germany", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [13.383975215256214, 52.529563891805815] - }, - "properties": { - "ref": "osm:n1110843201", - "categories": ["supermarket"], - "feature_tags": { - "shop": "supermarket", - "addr:postcode": "10115", - "level": "0", - "addr:city": "Berlin", - "addr:housenumber": "118-120", - "addr:street": "Chausseestraße" - } + } + }, + "adapted": { + "id": "maptiler:poi.15258278", + "label": "Edeka", + "sublabel": "Edeka, Berliner Straße 96, 13507 Berlin, Germany", + "coordinates": [13.284847810864449, 52.589088279152], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" + } + }, + { + "raw": { + "id": "poi.15539884", + "text": "MediaMarkt", + "place_name": "MediaMarkt, Pr Willem Alexander Prom 69-83, 2284 DJ Rijswijk, Netherlands", + "place_type": ["poi"], + "geometry": { "type": "Point", "coordinates": [4.316869229078293, 52.03636822992996] }, + "properties": { + "ref": "osm:n1845949909", + "categories": ["electronics"], + "feature_tags": { + "shop": "electronics", + "level": "1", + "addr:postcode": "2284DJ", + "addr:city": "Rijswijk", + "addr:housenumber": "69-83", + "addr:street": "Pr Willem Alexander Prom" } - }, - { - "id": "poi.36656201", - "text": "Rewe To Go", - "place_name": "Rewe To Go, Europaplatz 2, 10557 Berlin, Germany", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [13.369845424343566, 52.52523409426698] - }, - "properties": { - "ref": "osm:w407684446", - "categories": ["supermarket"], - "feature_tags": { - "shop": "supermarket", - "level": "-1" - } + } + }, + "adapted": { + "id": "maptiler:poi.15539884", + "label": "MediaMarkt", + "sublabel": "MediaMarkt, Pr Willem Alexander Prom 69-83, 2284 DJ Rijswijk, Netherlands", + "coordinates": [4.316869229078293, 52.03636822992996], + "type": "poi", + "rawCategory": "electronics", + "provider": "geocoding-maptiler" + } + }, + { + "raw": { + "id": "poi.15422100", + "text": "MediaMarkt", + "place_name": "MediaMarkt, Grunerstraße 20, 10179 Berlin, Germany", + "place_type": ["poi"], + "geometry": { "type": "Point", "coordinates": [13.414790779352188, 52.51986159027454] }, + "properties": { + "ref": "osm:n322490364", + "categories": ["electronics"], + "feature_tags": { + "shop": "electronics", + "level": "0", + "addr:postcode": "10179", + "addr:city": "Berlin", + "addr:housenumber": "20", + "addr:street": "Grunerstraße" } - }, - { - "id": "address.8692633", - "text": "Invalidenstraße", - "place_name": "Invalidenstraße 158, 10115 Berlin, Germany", - "place_type": ["address"], - "geometry": { - "type": "Point", - "coordinates": [13.39708399999995, 52.531981] - }, - "properties": { - "ref": "osm:w1021196045", - "wikidata": "Q463414" + } + }, + "adapted": { + "id": "maptiler:poi.15422100", + "label": "MediaMarkt", + "sublabel": "MediaMarkt, Grunerstraße 20, 10179 Berlin, Germany", + "coordinates": [13.414790779352188, 52.51986159027454], + "type": "poi", + "rawCategory": "electronics", + "provider": "geocoding-maptiler" + } + }, + { + "raw": { + "id": "poi.15388462", + "text": "MediaMarkt", + "place_name": "MediaMarkt, Äußere Schneeberger Straße 95, 08056 Zwickau, Germany", + "place_type": ["poi"], + "geometry": { "type": "Point", "coordinates": [12.499412186443806, 50.70416170071806] }, + "properties": { + "ref": "osm:n267485594", + "categories": ["electronics"], + "feature_tags": { + "shop": "electronics", + "addr:postcode": "08056", + "addr:city": "Zwickau", + "addr:housenumber": "95", + "addr:street": "Äußere Schneeberger Straße" } } - ], - "publicRows": [ - { - "id": "maptiler:poi.15426609", - "label": "REWE", - "sublabel": "REWE, Invalidenstraße 158, 10115 Berlin, Germany", - "coordinates": [13.397083505988121, 52.531980821191], - "type": "poi", - "rawCategory": "supermarket", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:poi.15741076", - "label": "REWE", - "sublabel": "REWE, Heidestraße 41, 10557 Berlin, Germany", - "coordinates": [13.3660389482975, 52.53228104144362], - "type": "poi", - "rawCategory": "supermarket", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:poi.34014416", - "label": "REWE", - "sublabel": "REWE, Aaron-Bernstein-Platz 7, 10117 Berlin, Germany", - "coordinates": [13.389315493404865, 52.52533119149872], - "type": "poi", - "rawCategory": "supermarket", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:poi.15509199", - "label": "REWE", - "sublabel": "REWE, Chausseestraße 118-120, 10115 Berlin, Germany", - "coordinates": [13.383975215256214, 52.529563891805815], - "type": "poi", - "rawCategory": "supermarket", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:poi.36656201", - "label": "Rewe To Go", - "sublabel": "Rewe To Go, Europaplatz 2, 10557 Berlin, Germany", - "coordinates": [13.369845424343566, 52.52523409426698], - "type": "poi", - "rawCategory": "supermarket", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:address.8692633", - "ids": { - "wikidata": "Q463414" - }, - "label": "Invalidenstraße", - "sublabel": "Invalidenstraße 158, 10115 Berlin, Germany", - "coordinates": [13.39708399999995, 52.531981], - "type": "address", - "provider": "geocoding-maptiler" + }, + "adapted": { + "id": "maptiler:poi.15388462", + "label": "MediaMarkt", + "sublabel": "MediaMarkt, Äußere Schneeberger Straße 95, 08056 Zwickau, Germany", + "coordinates": [12.499412186443806, 50.70416170071806], + "type": "poi", + "rawCategory": "electronics", + "provider": "geocoding-maptiler" + } + }, + { + "raw": { + "id": "poi.15513302", + "text": "MediaMarkt", + "place_name": "MediaMarkt, Waldershofer Straße 10, 95615 Marktredwitz, Germany", + "place_type": ["poi"], + "geometry": { "type": "Point", "coordinates": [12.077845813448675, 49.99956173454102] }, + "properties": { + "ref": "osm:w145348876", + "categories": ["electronics", "building"], + "feature_tags": { + "addr:housenumber": "10", + "shop": "electronics", + "addr:street": "Waldershofer Straße", + "addr:postcode": "95615", + "addr:city": "Marktredwitz" + } } - ], - "aggregate": { - "suggestions": [], - "attributions": [], - "partial": true + }, + "adapted": { + "id": "maptiler:poi.15513302", + "label": "MediaMarkt", + "sublabel": "MediaMarkt, Waldershofer Straße 10, 95615 Marktredwitz, Germany", + "coordinates": [12.077845813448675, 49.99956173454102], + "type": "poi", + "rawCategory": "electronics", + "provider": "geocoding-maptiler" } }, { - "caseId": "wrong-address", - "captures": [ - { - "caseId": "wrong-address", - "layer": "raw", - "capturedAt": "2026-10-07T20:37:22.904844+00:00", - "parameters": { - "language": "en", - "limit": "6", - "autocomplete": "true", - "types": "poi,address,street,neighbourhood,municipality,municipal_district,locality,subregion,region,county,country,postal_code,place", - "proximity": "13.42,52.52" - }, - "cache": "uncontrolled", - "requests": 1, - "status": 200, - "sha256": "907710c12c285a35d06286a357d5c914dfef7e18ffc851557211a34426bb18ca", - "cacheControl": "public, max-age=28800", - "age": null, - "latencyMs": 236.0 - }, - { - "caseId": "wrong-address", - "layer": "public", - "capturedAt": "2026-10-07T20:37:22.905024+00:00", - "parameters": { - "q": "EDEKA Moch Grunerstraße 999 Berlin", - "lang": "en", - "lat": "52.5194", - "lng": "13.416", - "zoom": "15" - }, - "cache": "uncontrolled", - "requests": 1, - "status": 200, - "sha256": "65a17b4fca88bfddc5a2edc7db44e3fa75944ff3aba1774548f26bb6cdb4e956", - "cacheControl": "public, max-age=3600", - "age": null, - "latencyMs": 254.07 - }, - { - "caseId": "wrong-address", - "layer": "aggregate", - "capturedAt": "2026-10-07T20:37:22.905246+00:00", - "parameters": { - "q": "EDEKA Moch Grunerstraße 999 Berlin", - "lang": "en", - "lat": "52.5194", - "lng": "13.416", - "limit": "8" - }, - "cache": "uncontrolled", - "requests": 1, - "status": 200, - "sha256": "b8b2af892915997b28e1d8a1067f3ffe35e0ba5ae97941b49e112edf98cfa254", - "cacheControl": "no-store", - "age": null, - "latencyMs": 109.52 + "raw": { + "id": "poi.27301831", + "text": "MediaMarkt", + "place_name": "MediaMarkt, Schloßplatz 8, 26122 Oldenburg, Germany", + "place_type": ["poi"], + "geometry": { "type": "Point", "coordinates": [8.216576837003231, 53.13856416583732] }, + "properties": { + "ref": "osm:n3555055573", + "categories": ["electronics"], + "feature_tags": { + "shop": "electronics", + "level": "-1", + "addr:postcode": "26122", + "addr:city": "Oldenburg", + "addr:housenumber": "3", + "addr:street": "Schloßplatz" + } } - ], - "rawFeatures": [ - { - "id": "place.4795446", - "text": "Berlin Center", - "place_name": "Berlin Center, Berlin Township, United States", - "place_type": ["place"], - "geometry": { - "type": "Point", - "coordinates": [-85.13417344540358, 42.90058887898288] - }, - "properties": { - "ref": "osm:n153413103", - "place_designation": "hamlet" + }, + "adapted": { + "id": "maptiler:poi.27301831", + "label": "MediaMarkt", + "sublabel": "MediaMarkt, Schloßplatz 8, 26122 Oldenburg, Germany", + "coordinates": [8.216576837003231, 53.13856416583732], + "type": "poi", + "rawCategory": "electronics", + "provider": "geocoding-maptiler" + } + }, + { + "raw": { + "id": "poi.31290179", + "text": "MediaMarkt", + "place_name": "MediaMarkt, Posthalterweg 15, 26129 Oldenburg, Germany", + "place_type": ["poi"], + "geometry": { "type": "Point", "coordinates": [8.172727230560895, 53.16099834226386] }, + "properties": { + "ref": "osm:w1134980105", + "categories": ["electronics", "retail building"], + "feature_tags": { + "shop": "electronics", + "addr:postcode": "26129", + "addr:city": "Oldenburg", + "addr:housenumber": "15", + "addr:street": "Posthalterweg" } - }, - { - "id": "region.505", - "text": "Berlin", - "place_name": "Berlin, Germany", - "place_type": ["region"], - "geometry": { - "type": "Point", - "coordinates": [13.39513085782528, 52.51738870388956] - }, - "properties": { - "ref": "osm:r62422", - "wikidata": "Q64", - "place_designation": "city" + } + }, + "adapted": { + "id": "maptiler:poi.31290179", + "label": "MediaMarkt", + "sublabel": "MediaMarkt, Posthalterweg 15, 26129 Oldenburg, Germany", + "coordinates": [8.172727230560895, 53.16099834226386], + "type": "poi", + "rawCategory": "electronics", + "provider": "geocoding-maptiler" + } + }, + { + "raw": { + "id": "poi.34392614", + "text": "MediaMarkt", + "place_name": "MediaMarkt, Berliner Straße 15, 89250 Senden, Germany", + "place_type": ["poi"], + "geometry": { "type": "Point", "coordinates": [10.039082317799625, 48.33283310114879] }, + "properties": { + "ref": "osm:w100513761", + "categories": ["electronics", "retail building"], + "wikidata": "Q659320", + "feature_tags": { + "shop": "electronics", + "addr:postcode": "89250", + "addr:city": "Senden", + "addr:housenumber": "13", + "addr:street": "Berliner Straße" } - }, - { - "id": "locality.2701", - "text": "Neukölln", - "place_name": "Neukölln, Berlin, Germany", - "place_type": ["locality"], - "geometry": { - "type": "Point", - "coordinates": [13.43534991145134, 52.48114978975832] - }, - "properties": { - "ref": "osm:r409213", - "wikidata": "Q169492", - "place_designation": "suburb" + } + }, + "adapted": { + "id": "maptiler:poi.34392614", + "ids": { "wikidata": "Q659320" }, + "label": "MediaMarkt", + "sublabel": "MediaMarkt, Berliner Straße 15, 89250 Senden, Germany", + "coordinates": [10.039082317799625, 48.33283310114879], + "type": "poi", + "rawCategory": "electronics", + "provider": "geocoding-maptiler" + } + }, + { + "raw": { + "id": "poi.30823762", + "text": "MediaMarkt", + "place_name": "MediaMarkt, Berliner Allee 34a, 22850 Norderstedt, Germany", + "place_type": ["poi"], + "geometry": { "type": "Point", "coordinates": [9.985382588983953, 53.6835389749034] }, + "properties": { + "ref": "osm:w907293928", + "categories": ["electronics"], + "feature_tags": { + "shop": "electronics", + "level": "1", + "addr:postcode": "22850", + "addr:city": "Norderstedt", + "addr:housenumber": "8", + "addr:street": "De-Gasperi-Passage" } - }, - { - "id": "place.4534518", - "text": "Stone Pieces", - "place_name": "Stone Pieces, Berlin, Germany", - "place_type": ["place"], - "geometry": { - "type": "Point", - "coordinates": [13.129702471196651, 52.38950275667193] - }, - "properties": { - "ref": "osm:r14687142", - "wikidata": "Q515015", - "place_designation": "neighbourhood" + } + }, + "adapted": { + "id": "maptiler:poi.30823762", + "label": "MediaMarkt", + "sublabel": "MediaMarkt, Berliner Allee 34a, 22850 Norderstedt, Germany", + "coordinates": [9.985382588983953, 53.6835389749034], + "type": "poi", + "rawCategory": "electronics", + "provider": "geocoding-maptiler" + } + }, + { + "raw": { + "id": "poi.15426609", + "text": "REWE", + "place_name": "REWE, Invalidenstraße 158, 10115 Berlin, Germany", + "place_type": ["poi"], + "geometry": { "type": "Point", "coordinates": [13.397083505988121, 52.531980821191] }, + "properties": { + "ref": "osm:n348000444", + "categories": ["supermarket"], + "feature_tags": { + "shop": "supermarket", + "level": "0", + "addr:postcode": "10115", + "addr:city": "Berlin", + "addr:housenumber": "158", + "addr:street": "Invalidenstraße" } - }, - { - "id": "neighbourhood.20256", - "text": "Berliner Vorstadt", - "place_name": "Berliner Vorstadt, Potsdam, Germany", - "place_type": ["neighbourhood"], - "geometry": { - "type": "Point", - "coordinates": [13.079091534018517, 52.412128278186444] - }, - "properties": { - "ref": "osm:r6577655", - "wikidata": "Q48173386", - "place_designation": "suburb" + } + }, + "adapted": { + "id": "maptiler:poi.15426609", + "label": "REWE", + "sublabel": "REWE, Invalidenstraße 158, 10115 Berlin, Germany", + "coordinates": [13.397083505988121, 52.531980821191], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" + } + }, + { + "raw": { + "id": "poi.15741076", + "text": "REWE", + "place_name": "REWE, Heidestraße 41, 10557 Berlin, Germany", + "place_type": ["poi"], + "geometry": { "type": "Point", "coordinates": [13.3660389482975, 52.53228104144362] }, + "properties": { + "ref": "osm:n8367158861", + "categories": ["supermarket"], + "feature_tags": { + "shop": "supermarket", + "addr:postcode": "10557", + "level": "0", + "addr:city": "Berlin", + "addr:housenumber": "41", + "addr:street": "Heidestraße" } - }, - { - "id": "place.2470107", - "text": "Berliner Siedlung", - "place_name": "Berliner Siedlung, Treuenbrietzen, Germany", - "place_type": ["place"], - "geometry": { - "type": "Point", - "coordinates": [12.889782898128033, 52.10644753168435] - }, - "properties": { - "ref": "osm:n7678030785", - "wikidata": "Q113687898", - "place_designation": "neighbourhood" + } + }, + "adapted": { + "id": "maptiler:poi.15741076", + "label": "REWE", + "sublabel": "REWE, Heidestraße 41, 10557 Berlin, Germany", + "coordinates": [13.3660389482975, 52.53228104144362], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" + } + }, + { + "raw": { + "id": "poi.34014416", + "text": "REWE", + "place_name": "REWE, Aaron-Bernstein-Platz 7, 10117 Berlin, Germany", + "place_type": ["poi"], + "geometry": { "type": "Point", "coordinates": [13.389315493404865, 52.52533119149872] }, + "properties": { + "ref": "osm:n11027556740", + "categories": ["supermarket"], + "feature_tags": { + "shop": "supermarket", + "level": "-1", + "addr:postcode": "10117", + "addr:city": "Berlin", + "addr:housenumber": "111", + "addr:street": "Friedrichstraße" } } - ], - "publicRows": [ - { - "id": "maptiler:place.4795446", - "label": "Berlin Center", - "sublabel": "Berlin Center, Berlin Township, United States", - "coordinates": [-85.13417344540358, 42.90058887898288], - "type": "region", - "rawCategory": "place/hamlet", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:region.505", - "ids": { - "wikidata": "Q64" - }, - "label": "Berlin", - "sublabel": "Berlin, Germany", - "coordinates": [13.39513085782528, 52.51738870388956], - "type": "region", - "rawCategory": "place/city", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:locality.2701", - "ids": { - "wikidata": "Q169492" - }, - "label": "Neukölln", - "sublabel": "Neukölln, Berlin, Germany", - "coordinates": [13.43534991145134, 52.48114978975832], - "type": "region", - "rawCategory": "place/suburb", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:place.4534518", - "ids": { - "wikidata": "Q515015" - }, - "label": "Stone Pieces", - "sublabel": "Stone Pieces, Berlin, Germany", - "coordinates": [13.129702471196651, 52.38950275667193], - "type": "region", - "rawCategory": "place/neighbourhood", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:neighbourhood.20256", - "ids": { - "wikidata": "Q48173386" - }, - "label": "Berliner Vorstadt", - "sublabel": "Berliner Vorstadt, Potsdam, Germany", - "coordinates": [13.079091534018517, 52.412128278186444], - "type": "street", - "rawCategory": "place/suburb", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:place.2470107", - "ids": { - "wikidata": "Q113687898" - }, - "label": "Berliner Siedlung", - "sublabel": "Berliner Siedlung, Treuenbrietzen, Germany", - "coordinates": [12.889782898128033, 52.10644753168435], - "type": "region", - "rawCategory": "place/neighbourhood", - "provider": "geocoding-maptiler" + }, + "adapted": { + "id": "maptiler:poi.34014416", + "label": "REWE", + "sublabel": "REWE, Aaron-Bernstein-Platz 7, 10117 Berlin, Germany", + "coordinates": [13.389315493404865, 52.52533119149872], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" + } + }, + { + "raw": { + "id": "poi.15509199", + "text": "REWE", + "place_name": "REWE, Chausseestraße 118-120, 10115 Berlin, Germany", + "place_type": ["poi"], + "geometry": { "type": "Point", "coordinates": [13.383975215256214, 52.529563891805815] }, + "properties": { + "ref": "osm:n1110843201", + "categories": ["supermarket"], + "feature_tags": { + "shop": "supermarket", + "addr:postcode": "10115", + "level": "0", + "addr:city": "Berlin", + "addr:housenumber": "118-120", + "addr:street": "Chausseestraße" + } } - ], - "aggregate": { - "suggestions": [], - "attributions": [], - "partial": true + }, + "adapted": { + "id": "maptiler:poi.15509199", + "label": "REWE", + "sublabel": "REWE, Chausseestraße 118-120, 10115 Berlin, Germany", + "coordinates": [13.383975215256214, 52.529563891805815], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" } }, { - "caseId": "invented-name", - "captures": [ - { - "caseId": "invented-name", - "layer": "raw", - "capturedAt": "2026-10-07T20:37:23.159493+00:00", - "parameters": { - "language": "en", - "limit": "6", - "autocomplete": "true", - "types": "poi,address,street,neighbourhood,municipality,municipal_district,locality,subregion,region,county,country,postal_code,place", - "proximity": "13.42,52.52" - }, - "cache": "uncontrolled", - "requests": 1, - "status": 200, - "sha256": "16a728274f5c79e07b2aad47d26b0002d70bc2c1a945668f948b155704e8fa23", - "cacheControl": "public, max-age=28800", - "age": null, - "latencyMs": 362.39 - }, - { - "caseId": "invented-name", - "layer": "public", - "capturedAt": "2026-10-07T20:37:23.159813+00:00", - "parameters": { - "q": "Zzqxv430 Testladen Grunerstraße 20 Berlin", - "lang": "en", - "lat": "52.5194", - "lng": "13.416", - "zoom": "15" - }, - "cache": "uncontrolled", - "requests": 1, - "status": 200, - "sha256": "96825fc006a4723b0aab666b0c2daff67c7041d80eb8599bbda4c499978773d8", - "cacheControl": "public, max-age=3600", - "age": null, - "latencyMs": 379.33 - }, - { - "caseId": "invented-name", - "layer": "aggregate", - "capturedAt": "2026-10-07T20:37:23.160038+00:00", - "parameters": { - "q": "Zzqxv430 Testladen Grunerstraße 20 Berlin", - "lang": "en", - "lat": "52.5194", - "lng": "13.416", - "limit": "8" - }, - "cache": "uncontrolled", - "requests": 1, - "status": 200, - "sha256": "b8b2af892915997b28e1d8a1067f3ffe35e0ba5ae97941b49e112edf98cfa254", - "cacheControl": "no-store", - "age": null, - "latencyMs": 113.54 + "raw": { + "id": "poi.36656201", + "text": "Rewe To Go", + "place_name": "Rewe To Go, Europaplatz 2, 10557 Berlin, Germany", + "place_type": ["poi"], + "geometry": { "type": "Point", "coordinates": [13.369845424343566, 52.52523409426698] }, + "properties": { + "ref": "osm:w407684446", + "categories": ["supermarket"], + "feature_tags": { "shop": "supermarket", "level": "-1" } } - ], - "rawFeatures": [ - { - "id": "address.12686057", - "text": "Grunerstraße", - "place_name": "Grunerstraße 20, 10179 Berlin, Germany", - "place_type": ["address"], - "geometry": { - "type": "Point", - "coordinates": [13.41582100000005, 52.518307] - }, - "properties": { - "ref": "osm:w1025851956", - "wikidata": "Q1550809" - } - }, - { - "id": "address.10027702", - "text": "Groenerstraße", - "place_name": "Groenerstraße 20, 13585 Berlin, Germany", - "place_type": ["address"], - "geometry": { - "type": "Point", - "coordinates": [13.20358299999998, 52.543163] - }, - "properties": { - "ref": "osm:w1306242932" - } - }, - { - "id": "address.10343043", - "text": "Gründerstraße", - "place_name": "Gründerstraße 20, 12526 Berlin, Germany", - "place_type": ["address"], - "geometry": { - "type": "Point", - "coordinates": [13.574141999999938, 52.409928] - }, - "properties": { - "ref": "osm:w130868556" - } - }, - { - "id": "poi.2947497", - "text": "20", - "place_name": "20, Siemenssiedlung am Hohenzollernkanal III, Berlin, Germany", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [13.251579366624355, 52.55727716817165] - }, - "properties": { - "ref": "osm:n11165225437", - "categories": ["water well"] - } - }, - { - "id": "poi.2947574", - "text": "20", - "place_name": "20, Saatwinkel, Berlin, Germany", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [13.242084681987762, 52.55983688062971] - }, - "properties": { - "ref": "osm:n11165225465", - "categories": ["water well"] - } - }, - { - "id": "poi.6230752", - "text": "20", - "place_name": "20, Elisabeth-Schwarzhaupt-Platz, Berlin, Germany", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [13.383162542017772, 52.53501260472217] - }, - "properties": { - "ref": "osm:w372459506", - "categories": ["pitch", "beachvolleyball"] - } + }, + "adapted": { + "id": "maptiler:poi.36656201", + "label": "Rewe To Go", + "sublabel": "Rewe To Go, Europaplatz 2, 10557 Berlin, Germany", + "coordinates": [13.369845424343566, 52.52523409426698], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" + } + }, + { + "raw": { + "id": "address.8692633", + "text": "Invalidenstraße", + "place_name": "Invalidenstraße 158, 10115 Berlin, Germany", + "place_type": ["address"], + "geometry": { "type": "Point", "coordinates": [13.39708399999995, 52.531981] }, + "properties": { "ref": "osm:w1021196045", "wikidata": "Q463414" } + }, + "adapted": { + "id": "maptiler:address.8692633", + "ids": { "wikidata": "Q463414" }, + "label": "Invalidenstraße", + "sublabel": "Invalidenstraße 158, 10115 Berlin, Germany", + "coordinates": [13.39708399999995, 52.531981], + "type": "address", + "provider": "geocoding-maptiler" + } + }, + { + "raw": { + "id": "place.4795446", + "text": "Berlin Center", + "place_name": "Berlin Center, Berlin Township, United States", + "place_type": ["place"], + "geometry": { "type": "Point", "coordinates": [-85.13417344540358, 42.90058887898288] }, + "properties": { "ref": "osm:n153413103", "place_designation": "hamlet" } + }, + "adapted": { + "id": "maptiler:place.4795446", + "label": "Berlin Center", + "sublabel": "Berlin Center, Berlin Township, United States", + "coordinates": [-85.13417344540358, 42.90058887898288], + "type": "region", + "rawCategory": "place/hamlet", + "provider": "geocoding-maptiler" + } + }, + { + "raw": { + "id": "region.505", + "text": "Berlin", + "place_name": "Berlin, Germany", + "place_type": ["region"], + "geometry": { "type": "Point", "coordinates": [13.39513085782528, 52.51738870388956] }, + "properties": { "ref": "osm:r62422", "wikidata": "Q64", "place_designation": "city" } + }, + "adapted": { + "id": "maptiler:region.505", + "ids": { "wikidata": "Q64" }, + "label": "Berlin", + "sublabel": "Berlin, Germany", + "coordinates": [13.39513085782528, 52.51738870388956], + "type": "region", + "rawCategory": "place/city", + "provider": "geocoding-maptiler" + } + }, + { + "raw": { + "id": "locality.2701", + "text": "Neukölln", + "place_name": "Neukölln, Berlin, Germany", + "place_type": ["locality"], + "geometry": { "type": "Point", "coordinates": [13.43534991145134, 52.48114978975832] }, + "properties": { "ref": "osm:r409213", "wikidata": "Q169492", "place_designation": "suburb" } + }, + "adapted": { + "id": "maptiler:locality.2701", + "ids": { "wikidata": "Q169492" }, + "label": "Neukölln", + "sublabel": "Neukölln, Berlin, Germany", + "coordinates": [13.43534991145134, 52.48114978975832], + "type": "region", + "rawCategory": "place/suburb", + "provider": "geocoding-maptiler" + } + }, + { + "raw": { + "id": "place.4534518", + "text": "Stone Pieces", + "place_name": "Stone Pieces, Berlin, Germany", + "place_type": ["place"], + "geometry": { "type": "Point", "coordinates": [13.129702471196651, 52.38950275667193] }, + "properties": { + "ref": "osm:r14687142", + "wikidata": "Q515015", + "place_designation": "neighbourhood" } - ], - "publicRows": [ - { - "id": "maptiler:address.12686057", - "ids": { - "wikidata": "Q1550809" - }, - "label": "Grunerstraße", - "sublabel": "Grunerstraße 20, 10179 Berlin, Germany", - "coordinates": [13.41582100000005, 52.518307], - "type": "address", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:address.10027702", - "label": "Groenerstraße", - "sublabel": "Groenerstraße 20, 13585 Berlin, Germany", - "coordinates": [13.20358299999998, 52.543163], - "type": "address", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:address.10343043", - "label": "Gründerstraße", - "sublabel": "Gründerstraße 20, 12526 Berlin, Germany", - "coordinates": [13.574141999999938, 52.409928], - "type": "address", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:poi.2947497", - "label": "20", - "sublabel": "20, Siemenssiedlung am Hohenzollernkanal III, Berlin, Germany", - "coordinates": [13.251579366624355, 52.55727716817165], - "type": "poi", - "rawCategory": "water well", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:poi.2947574", - "label": "20", - "sublabel": "20, Saatwinkel, Berlin, Germany", - "coordinates": [13.242084681987762, 52.55983688062971], - "type": "poi", - "rawCategory": "water well", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:poi.6230752", - "label": "20", - "sublabel": "20, Elisabeth-Schwarzhaupt-Platz, Berlin, Germany", - "coordinates": [13.383162542017772, 52.53501260472217], - "type": "poi", - "rawCategory": "pitch", - "provider": "geocoding-maptiler" + }, + "adapted": { + "id": "maptiler:place.4534518", + "ids": { "wikidata": "Q515015" }, + "label": "Stone Pieces", + "sublabel": "Stone Pieces, Berlin, Germany", + "coordinates": [13.129702471196651, 52.38950275667193], + "type": "region", + "rawCategory": "place/neighbourhood", + "provider": "geocoding-maptiler" + } + }, + { + "raw": { + "id": "neighbourhood.20256", + "text": "Berliner Vorstadt", + "place_name": "Berliner Vorstadt, Potsdam, Germany", + "place_type": ["neighbourhood"], + "geometry": { "type": "Point", "coordinates": [13.079091534018517, 52.412128278186444] }, + "properties": { + "ref": "osm:r6577655", + "wikidata": "Q48173386", + "place_designation": "suburb" } - ], - "aggregate": { - "suggestions": [], - "attributions": [], - "partial": true + }, + "adapted": { + "id": "maptiler:neighbourhood.20256", + "ids": { "wikidata": "Q48173386" }, + "label": "Berliner Vorstadt", + "sublabel": "Berliner Vorstadt, Potsdam, Germany", + "coordinates": [13.079091534018517, 52.412128278186444], + "type": "street", + "rawCategory": "place/suburb", + "provider": "geocoding-maptiler" } }, { - "caseId": "schaaf-address", - "captures": [ - { - "caseId": "schaaf-address", - "layer": "raw", - "capturedAt": "2026-10-07T20:39:33.152677+00:00", - "parameters": { - "language": "en", - "limit": "6", - "autocomplete": "true", - "types": "poi,address,street,neighbourhood,municipality,municipal_district,locality,subregion,region,county,country,postal_code,place", - "proximity": "13.42,52.52" - }, - "cache": "uncontrolled", - "requests": 1, - "status": 200, - "sha256": "9ebb9c83fc922cd8eb36b382b51e42c9ef6ba011bc0a661783c699ca22dfe5f9", - "cacheControl": "public, max-age=28800", - "age": null, - "latencyMs": 331.17 - }, - { - "caseId": "schaaf-address", - "layer": "public", - "capturedAt": "2026-10-07T20:39:33.484051+00:00", - "parameters": { - "q": "EDEKA Schaaf Schillingstraße 2 Berlin", - "lang": "en", - "lat": "52.5194", - "lng": "13.416", - "zoom": "15" - }, - "cache": "uncontrolled", - "requests": 1, - "status": 200, - "sha256": "8a0b3375a5ec9b9ebe5a488dc2d1ce9cda1ab8e00f435b3d3cbacca7a5fcd506", - "cacheControl": "public, max-age=3600", - "age": null, - "latencyMs": 160.29 - }, - { - "caseId": "schaaf-address", - "layer": "aggregate", - "capturedAt": "2026-10-07T20:39:33.644676+00:00", - "parameters": { - "q": "EDEKA Schaaf Schillingstraße 2 Berlin", - "lang": "en", - "lat": "52.5194", - "lng": "13.416", - "limit": "8" - }, - "cache": "uncontrolled", - "requests": 1, - "status": 200, - "sha256": "b8b2af892915997b28e1d8a1067f3ffe35e0ba5ae97941b49e112edf98cfa254", - "cacheControl": "no-store", - "age": null, - "latencyMs": 113.6 + "raw": { + "id": "place.2470107", + "text": "Berliner Siedlung", + "place_name": "Berliner Siedlung, Treuenbrietzen, Germany", + "place_type": ["place"], + "geometry": { "type": "Point", "coordinates": [12.889782898128033, 52.10644753168435] }, + "properties": { + "ref": "osm:n7678030785", + "wikidata": "Q113687898", + "place_designation": "neighbourhood" } - ], - "rawFeatures": [ - { - "id": "poi.32879876", - "text": "Edeka Schaaf", - "place_name": "Edeka Schaaf, Singerstraße 121, 10179 Berlin, Germany", - "place_type": ["poi"], - "geometry": { - "type": "Point", - "coordinates": [13.420668505132198, 52.51747194496568] - }, - "properties": { - "ref": "osm:n9154787137", - "categories": ["supermarket"], - "feature_tags": { - "shop": "supermarket", - "level": "0", - "addr:postcode": "10179", - "addr:city": "Berlin", - "addr:housenumber": "2", - "addr:street": "Schillingstraße" - } - } - }, - { - "id": "address.4011014", - "text": "Schillingstraße", - "place_name": "Schillingstraße 2, 10179 Berlin, Germany", - "place_type": ["address"], - "geometry": { - "type": "Point", - "coordinates": [13.42051600000002, 52.517376] - }, - "properties": { - "ref": "osm:w1076055688" - } - }, - { - "id": "address.9975161", - "text": "Schillingstraße", - "place_name": "Schillingstraße 2, 13403 Berlin, Germany", - "place_type": ["address"], - "geometry": { - "type": "Point", - "coordinates": [13.320637000000033, 52.566285] - }, - "properties": { - "ref": "osm:w1156572743" - } - }, - { - "id": "address.18028993", - "text": "Schillingstrasse", - "place_name": "Schillingstrasse, 10179 Berlin, Germany", - "place_type": ["address"], - "geometry": { - "type": "Point", - "coordinates": [13.420090489089489, 52.51717590797079] - }, - "properties": { - "ref": "osm:n10188970798" - } - }, - { - "id": "address.6705156", - "text": "Schellingstraße", - "place_name": "Schellingstraße, 10785 Berlin, Germany", - "place_type": ["address"], - "geometry": { - "type": "Point", - "coordinates": [13.37306197732687, 52.505255650814135] - }, - "properties": { - "ref": "osm:w1472672676" - } - }, - { - "id": "region.505", - "text": "Berlin", - "place_name": "Berlin, Germany", - "place_type": ["region"], - "geometry": { - "type": "Point", - "coordinates": [13.39513085782528, 52.51738870388956] - }, - "properties": { - "ref": "osm:r62422", - "wikidata": "Q64", - "place_designation": "city" + }, + "adapted": { + "id": "maptiler:place.2470107", + "ids": { "wikidata": "Q113687898" }, + "label": "Berliner Siedlung", + "sublabel": "Berliner Siedlung, Treuenbrietzen, Germany", + "coordinates": [12.889782898128033, 52.10644753168435], + "type": "region", + "rawCategory": "place/neighbourhood", + "provider": "geocoding-maptiler" + } + }, + { + "raw": { + "id": "poi.2947497", + "text": "20", + "place_name": "20, Siemenssiedlung am Hohenzollernkanal III, Berlin, Germany", + "place_type": ["poi"], + "geometry": { "type": "Point", "coordinates": [13.251579366624355, 52.55727716817165] }, + "properties": { "ref": "osm:n11165225437", "categories": ["water well"] } + }, + "adapted": { + "id": "maptiler:poi.2947497", + "label": "20", + "sublabel": "20, Siemenssiedlung am Hohenzollernkanal III, Berlin, Germany", + "coordinates": [13.251579366624355, 52.55727716817165], + "type": "poi", + "rawCategory": "water well", + "provider": "geocoding-maptiler" + } + }, + { + "raw": { + "id": "poi.2947574", + "text": "20", + "place_name": "20, Saatwinkel, Berlin, Germany", + "place_type": ["poi"], + "geometry": { "type": "Point", "coordinates": [13.242084681987762, 52.55983688062971] }, + "properties": { "ref": "osm:n11165225465", "categories": ["water well"] } + }, + "adapted": { + "id": "maptiler:poi.2947574", + "label": "20", + "sublabel": "20, Saatwinkel, Berlin, Germany", + "coordinates": [13.242084681987762, 52.55983688062971], + "type": "poi", + "rawCategory": "water well", + "provider": "geocoding-maptiler" + } + }, + { + "raw": { + "id": "poi.6230752", + "text": "20", + "place_name": "20, Elisabeth-Schwarzhaupt-Platz, Berlin, Germany", + "place_type": ["poi"], + "geometry": { "type": "Point", "coordinates": [13.383162542017772, 52.53501260472217] }, + "properties": { "ref": "osm:w372459506", "categories": ["pitch", "beachvolleyball"] } + }, + "adapted": { + "id": "maptiler:poi.6230752", + "label": "20", + "sublabel": "20, Elisabeth-Schwarzhaupt-Platz, Berlin, Germany", + "coordinates": [13.383162542017772, 52.53501260472217], + "type": "poi", + "rawCategory": "pitch", + "provider": "geocoding-maptiler" + } + }, + { + "raw": { + "id": "poi.32879876", + "text": "Edeka Schaaf", + "place_name": "Edeka Schaaf, Singerstraße 121, 10179 Berlin, Germany", + "place_type": ["poi"], + "geometry": { "type": "Point", "coordinates": [13.420668505132198, 52.51747194496568] }, + "properties": { + "ref": "osm:n9154787137", + "categories": ["supermarket"], + "feature_tags": { + "shop": "supermarket", + "level": "0", + "addr:postcode": "10179", + "addr:city": "Berlin", + "addr:housenumber": "2", + "addr:street": "Schillingstraße" } } - ], - "publicRows": [ - { - "id": "maptiler:poi.32879876", - "label": "Edeka Schaaf", - "sublabel": "Edeka Schaaf, Singerstraße 121, 10179 Berlin, Germany", - "coordinates": [13.420668505132198, 52.51747194496568], - "type": "poi", - "rawCategory": "supermarket", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:address.4011014", - "label": "Schillingstraße", - "sublabel": "Schillingstraße 2, 10179 Berlin, Germany", - "coordinates": [13.42051600000002, 52.517376], - "type": "address", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:address.9975161", - "label": "Schillingstraße", - "sublabel": "Schillingstraße 2, 13403 Berlin, Germany", - "coordinates": [13.320637000000033, 52.566285], - "type": "address", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:address.18028993", - "label": "Schillingstrasse", - "sublabel": "Schillingstrasse, 10179 Berlin, Germany", - "coordinates": [13.420090489089489, 52.51717590797079], - "type": "address", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:address.6705156", - "label": "Schellingstraße", - "sublabel": "Schellingstraße, 10785 Berlin, Germany", - "coordinates": [13.37306197732687, 52.505255650814135], - "type": "address", - "provider": "geocoding-maptiler" - }, - { - "id": "maptiler:region.505", - "ids": { - "wikidata": "Q64" - }, - "label": "Berlin", - "sublabel": "Berlin, Germany", - "coordinates": [13.39513085782528, 52.51738870388956], - "type": "region", - "rawCategory": "place/city", - "provider": "geocoding-maptiler" - } - ], - "aggregate": { - "suggestions": [], - "attributions": [], - "partial": true + }, + "adapted": { + "id": "maptiler:poi.32879876", + "label": "Edeka Schaaf", + "sublabel": "Edeka Schaaf, Singerstraße 121, 10179 Berlin, Germany", + "coordinates": [13.420668505132198, 52.51747194496568], + "type": "poi", + "rawCategory": "supermarket", + "provider": "geocoding-maptiler" + } + }, + { + "raw": { + "id": "address.4011014", + "text": "Schillingstraße", + "place_name": "Schillingstraße 2, 10179 Berlin, Germany", + "place_type": ["address"], + "geometry": { "type": "Point", "coordinates": [13.42051600000002, 52.517376] }, + "properties": { "ref": "osm:w1076055688" } + }, + "adapted": { + "id": "maptiler:address.4011014", + "label": "Schillingstraße", + "sublabel": "Schillingstraße 2, 10179 Berlin, Germany", + "coordinates": [13.42051600000002, 52.517376], + "type": "address", + "provider": "geocoding-maptiler" + } + }, + { + "raw": { + "id": "address.9975161", + "text": "Schillingstraße", + "place_name": "Schillingstraße 2, 13403 Berlin, Germany", + "place_type": ["address"], + "geometry": { "type": "Point", "coordinates": [13.320637000000033, 52.566285] }, + "properties": { "ref": "osm:w1156572743" } + }, + "adapted": { + "id": "maptiler:address.9975161", + "label": "Schillingstraße", + "sublabel": "Schillingstraße 2, 13403 Berlin, Germany", + "coordinates": [13.320637000000033, 52.566285], + "type": "address", + "provider": "geocoding-maptiler" + } + }, + { + "raw": { + "id": "address.18028993", + "text": "Schillingstrasse", + "place_name": "Schillingstrasse, 10179 Berlin, Germany", + "place_type": ["address"], + "geometry": { "type": "Point", "coordinates": [13.420090489089489, 52.51717590797079] }, + "properties": { "ref": "osm:n10188970798" } + }, + "adapted": { + "id": "maptiler:address.18028993", + "label": "Schillingstrasse", + "sublabel": "Schillingstrasse, 10179 Berlin, Germany", + "coordinates": [13.420090489089489, 52.51717590797079], + "type": "address", + "provider": "geocoding-maptiler" + } + }, + { + "raw": { + "id": "address.6705156", + "text": "Schellingstraße", + "place_name": "Schellingstraße, 10785 Berlin, Germany", + "place_type": ["address"], + "geometry": { "type": "Point", "coordinates": [13.37306197732687, 52.505255650814135] }, + "properties": { "ref": "osm:w1472672676" } + }, + "adapted": { + "id": "maptiler:address.6705156", + "label": "Schellingstraße", + "sublabel": "Schellingstraße, 10785 Berlin, Germany", + "coordinates": [13.37306197732687, 52.505255650814135], + "type": "address", + "provider": "geocoding-maptiler" } } + ], + "cases": [ + { + "caseId": "moch-name", + "rawIds": [ + "poi.30456941", + "poi.27997147", + "poi.32434263", + "poi.31643808", + "poi.14639240", + "poi.14883072" + ] + }, + { + "caseId": "moch-address", + "rawIds": [ + "address.12686057", + "address.10027702", + "address.10343043", + "address.9410688", + "address.5097698", + "place.4929509" + ] + }, + { + "caseId": "edeka-address", + "rawIds": [ + "poi.39267497", + "poi.15407240", + "poi.15448214", + "poi.30149398", + "address.12686057", + "address.10027702" + ] + }, + { + "caseId": "edeka-alexa", + "rawIds": [ + "poi.39267497", + "poi.15445342", + "poi.15632141", + "poi.15895501", + "poi.32007491", + "poi.15469482" + ] + }, + { + "caseId": "edeka-gruner", + "rawIds": [ + "poi.39267497", + "poi.15448214", + "poi.15864452", + "poi.15445342", + "poi.15632141", + "poi.15895501" + ] + }, + { + "caseId": "edeka-alexander", + "rawIds": [ + "poi.39267497", + "poi.15445342", + "poi.15632141", + "poi.32007491", + "address.6574798", + "poi.15258278" + ] + }, + { + "caseId": "edeka-brand", + "rawIds": [ + "poi.39267497", + "poi.15864452", + "poi.15445342", + "poi.15632141", + "poi.15895501", + "poi.32007491" + ] + }, + { + "caseId": "media-alexa", + "rawIds": [ + "poi.15539884", + "poi.15422100", + "poi.15388462", + "poi.15513302", + "poi.27301831", + "poi.31290179" + ] + }, + { + "caseId": "media-address", + "rawIds": [ + "poi.15422100", + "address.12686057", + "poi.34392614", + "poi.30823762", + "address.10027702", + "address.10343043" + ] + }, + { + "caseId": "rewe-address", + "rawIds": [ + "poi.15426609", + "poi.15741076", + "poi.34014416", + "poi.15509199", + "poi.36656201", + "address.8692633" + ] + }, + { + "caseId": "wrong-address", + "rawIds": [ + "place.4795446", + "region.505", + "locality.2701", + "place.4534518", + "neighbourhood.20256", + "place.2470107" + ] + }, + { + "caseId": "invented-name", + "rawIds": [ + "address.12686057", + "address.10027702", + "address.10343043", + "poi.2947497", + "poi.2947574", + "poi.6230752" + ] + }, + { + "caseId": "schaaf-address", + "rawIds": [ + "poi.32879876", + "address.4011014", + "address.9975161", + "address.18028993", + "address.6705156", + "region.505" + ] + } ] } diff --git a/scripts/discovery-eval/business-name-address/sources-v1.json b/scripts/discovery-eval/business-name-address/sources-v1.json index 4561b7637..c94acbfbe 100644 --- a/scripts/discovery-eval/business-name-address/sources-v1.json +++ b/scripts/discovery-eval/business-name-address/sources-v1.json @@ -20,15 +20,11 @@ "addr:suburb": "Mitte", "brand": "MediaMarkt", "brand:wikidata": "Q2381223", - "brand:wikipedia": "en:Media Markt", "contact:phone": "+49 30 2408840", - "internet_access": "wlan", "level": "0", "name": "MediaMarkt", - "opening_hours": "Mo-Sa 10:00-20:00", "shop": "electronics", - "website": "https://www.mediamarkt.de/de/store/berlin-mitte-190", - "wheelchair": "yes" + "website": "https://www.mediamarkt.de/de/store/berlin-mitte-190" } }, { @@ -37,7 +33,6 @@ "timestamp": "2026-09-04T20:52:25Z", "tags": { "addr:city": "Berlin", - "addr:city:fa": "برلین", "addr:country": "DE", "addr:housename": "Alexa", "addr:housenumber": "20", @@ -45,25 +40,10 @@ "addr:street": "Grunerstraße", "addr:suburb": "Mitte", "alt_name": "Alexa Berlin", - "building": "retail", - "building:colour": "#b6434e", - "building:levels": "4", - "building:material": "concrete", "contact:website": "https://www.alexacentre.com/", - "fixme": "Indoor mapping with rooms started but not finished.\nIndoor corridors are missing.", - "internet_access": "wlan", "name": "Alexa", - "opening_hours": "Mo-Sa 10:00-21:00", "phone": "+49 30 269340121", - "roof:colour": "gray", - "roof:shape": "flat", - "shop": "mall", - "start_date": "2007-9-12", - "toilets": "yes", - "toilets:wheelchair": "yes", - "wheelchair": "yes", - "wikidata": "Q322847", - "wikipedia": "de:Alexa (Einkaufszentrum)" + "shop": "mall" } }, { @@ -74,16 +54,10 @@ "addr:city": "Berlin", "brand": "Edeka", "brand:wikidata": "Q701755", - "brand:wikipedia": "de:Edeka", "indoor": "room", "level": "-1", "name": "EDEKA", - "opening_hours": "Mo-Sa 08:00-21:00", - "payment:cash": "yes", - "payment:debit_cards": "yes", - "room": "shop", - "shop": "supermarket", - "wheelchair": "yes" + "shop": "supermarket" } }, { @@ -97,20 +71,11 @@ "addr:street": "Invalidenstraße", "brand": "Rewe", "brand:wikidata": "Q16968817", - "brand:wikipedia": "de:Rewe", - "check_date": "2024-06-16", - "check_date:opening_hours": "2022-06-10", "level": "0", "name": "REWE", - "opening_hours": "Mo-Sa 07:00-23:00", - "payment:cash": "yes", - "payment:credit_cards": "yes", - "payment:debit_cards": "yes", "phone": "+49 30 28390336", "shop": "supermarket", - "toilets:wheelchair": "yes", - "website": "https://www.rewe.de/marktseite/rewe-markt-berlin-invalidenstra%C3%9Fe-158/", - "wheelchair": "yes" + "website": "https://www.rewe.de/marktseite/rewe-markt-berlin-invalidenstra%C3%9Fe-158/" } }, { @@ -126,20 +91,10 @@ "addr:suburb": "Mitte", "brand": "Edeka", "brand:wikidata": "Q701755", - "check_date:opening_hours": "2026-08-18", "contact:website": "https://www.edeka.de/eh/minden-hannover/edeka-schaaf-schillingstr.-2/index.jsp", - "currency:EUR": "yes", - "diet:halal": "no", - "diet:kosher": "no", "level": "0", "name": "Edeka Schaaf", - "opening_hours": "Mo-Sa 07:00-22:00", - "organic": "yes", - "second_hand": "no", - "shop": "supermarket", - "stroller": "yes", - "wheelchair": "yes", - "wikimedia_commons": "File:Schillingstraße 2.jpg" + "shop": "supermarket" } } ] @@ -156,9 +111,7 @@ "id": "466267a9-58bc-48bd-9457-93e7eb90e2b8", "version": 10, "names": { - "primary": "EDEKA Barnimstraße", - "common": null, - "rules": null + "primary": "EDEKA Barnimstraße" }, "addresses": [ { @@ -171,14 +124,6 @@ ], "phones": ["+493024729176"], "websites": ["https://www.edeka.de/"], - "brand": { - "wikidata": null, - "names": { - "primary": "EDEKA", - "common": null, - "rules": null - } - }, "confidence": 0.999917788362503, "operating_status": null, "sources": [ @@ -187,24 +132,13 @@ "dataset": "meta", "license": "CDLA-Permissive-2.0", "record_id": "366295967427907", - "update_time": "2026-09-14T00:00:00.000Z", - "confidence": 0.9880852699279785, - "between": null, - "provider": "meta", - "resource": "meta", - "version": "2026-09-14" + "update_time": "2026-09-14T00:00:00.000Z" }, { "property": "/properties/confidence", "dataset": "Overture", "license": "CDLA-Permissive-2.0", - "record_id": null, - "update_time": "2026-09-17T22:52:12Z", - "confidence": null, - "between": null, - "provider": "overture", - "resource": "confidence_calculation", - "version": "2026-09-17" + "update_time": "2026-09-17T22:52:12Z" } ], "bbox": { @@ -218,9 +152,7 @@ "id": "bfbe5e1d-7db5-482e-8772-f53959dde008", "version": 9, "names": { - "primary": "MediaMarkt Berlin-Mitte (im Alexa)", - "common": null, - "rules": null + "primary": "MediaMarkt Berlin-Mitte (im Alexa)" }, "addresses": [ { @@ -235,14 +167,6 @@ "websites": [ "https://www.mediamarkt.de/de/store/berlin-mitte-190?utm_source=places+link&utm_medium=seo-places+link&utm_term=Media+Markt+Berlin-Mitte+StoreId+190" ], - "brand": { - "wikidata": null, - "names": { - "primary": "MediaMarktSaturn", - "common": null, - "rules": null - } - }, "confidence": 0.9999635516405105, "operating_status": null, "sources": [ @@ -251,24 +175,13 @@ "dataset": "meta", "license": "CDLA-Permissive-2.0", "record_id": "295733827232255", - "update_time": "2026-09-14T00:00:00.000Z", - "confidence": 0.9939252734184265, - "between": null, - "provider": "meta", - "resource": "meta", - "version": "2026-09-14" + "update_time": "2026-09-14T00:00:00.000Z" }, { "property": "/properties/confidence", "dataset": "Overture", "license": "CDLA-Permissive-2.0", - "record_id": null, - "update_time": "2026-09-17T22:52:12Z", - "confidence": null, - "between": null, - "provider": "overture", - "resource": "confidence_calculation", - "version": "2026-09-17" + "update_time": "2026-09-17T22:52:12Z" } ], "bbox": { @@ -282,9 +195,7 @@ "id": "035b544e-40f5-4ce0-a06f-1c9032ded028", "version": 13, "names": { - "primary": "EDEKA Moch Supermarket", - "common": null, - "rules": null + "primary": "EDEKA Moch Supermarket" }, "addresses": [ { @@ -297,14 +208,6 @@ ], "phones": ["+493024045625"], "websites": ["http://Edeka.de/"], - "brand": { - "wikidata": null, - "names": { - "primary": "EDEKA", - "common": null, - "rules": null - } - }, "confidence": 0.9999057413816452, "operating_status": null, "sources": [ @@ -313,24 +216,13 @@ "dataset": "meta", "license": "CDLA-Permissive-2.0", "record_id": "194804870560113", - "update_time": "2026-08-24T00:00:00.000Z", - "confidence": 0.9863393306732178, - "between": null, - "provider": "meta", - "resource": "meta", - "version": "2026-08-24" + "update_time": "2026-08-24T00:00:00.000Z" }, { "property": "/properties/confidence", "dataset": "Overture", "license": "CDLA-Permissive-2.0", - "record_id": null, - "update_time": "2026-09-17T22:52:12Z", - "confidence": null, - "between": null, - "provider": "overture", - "resource": "confidence_calculation", - "version": "2026-09-17" + "update_time": "2026-09-17T22:52:12Z" } ], "bbox": { @@ -344,9 +236,7 @@ "id": "81270f18-8f0b-48a9-ae69-31d4ef96cdd5", "version": 8, "names": { - "primary": "MediaMarkt", - "common": null, - "rules": null + "primary": "MediaMarkt" }, "addresses": [ { @@ -359,7 +249,6 @@ ], "phones": ["030 2408840"], "websites": ["https://www.mediamarkt.de/markt/berlin-mitte"], - "brand": null, "confidence": 0.77, "operating_status": null, "sources": [ @@ -368,24 +257,13 @@ "dataset": "Foursquare", "license": "Apache-2.0", "record_id": "4b1530cef964a5201da923e3", - "update_time": "2026-04-11T00:00:00.000", - "confidence": 0.77, - "between": null, - "provider": "foursquare", - "resource": "foursquare", - "version": "2026-04-14" + "update_time": "2026-04-11T00:00:00.000" }, { "property": "/properties/confidence", "dataset": "Overture", "license": "CDLA-Permissive-2.0", - "record_id": null, - "update_time": "2026-09-17T22:52:12Z", - "confidence": null, - "between": null, - "provider": "overture", - "resource": "confidence_calculation", - "version": "2026-09-17" + "update_time": "2026-09-17T22:52:12Z" } ], "bbox": { @@ -399,9 +277,7 @@ "id": "a56cd442-edcf-4d26-98c1-9c70de50f1d7", "version": 11, "names": { - "primary": "EDEKA Schaaf", - "common": null, - "rules": null + "primary": "EDEKA Schaaf" }, "addresses": [ { @@ -416,14 +292,6 @@ "websites": [ "https://www.edeka.de/eh/minden-hannover/edeka-schaaf-schillingstr.-2/index.jsp" ], - "brand": { - "wikidata": null, - "names": { - "primary": "EDEKA", - "common": null, - "rules": null - } - }, "confidence": 0.9999163304030895, "operating_status": null, "sources": [ @@ -432,24 +300,13 @@ "dataset": "meta", "license": "CDLA-Permissive-2.0", "record_id": "101877065539523", - "update_time": "2026-09-14T00:00:00.000Z", - "confidence": 0.9878739714622498, - "between": null, - "provider": "meta", - "resource": "meta", - "version": "2026-09-14" + "update_time": "2026-09-14T00:00:00.000Z" }, { "property": "/properties/confidence", "dataset": "Overture", "license": "CDLA-Permissive-2.0", - "record_id": null, - "update_time": "2026-09-17T22:52:12Z", - "confidence": null, - "between": null, - "provider": "overture", - "resource": "confidence_calculation", - "version": "2026-09-17" + "update_time": "2026-09-17T22:52:12Z" } ], "bbox": { @@ -460,5 +317,6 @@ } } ] - } + }, + "archive": "https://gist.github.com/Medformatik/c36d8b8f44c88971277659512a533a51/8b33cd9238ba743f54f3235f2831470cf3bb5972" } diff --git a/scripts/discovery-eval/business-name-address/ui-v1.json b/scripts/discovery-eval/business-name-address/ui-v1.json deleted file mode 100644 index 49259b160..000000000 --- a/scripts/discovery-eval/business-name-address/ui-v1.json +++ /dev/null @@ -1,849 +0,0 @@ -{ - "version": 1, - "deployment": null, - "deploymentUnknownReason": "Public UI exposes no deployment SHA", - "cache": "uncontrolled", - "viewport": [1280, 800], - "dpr": 1, - "theme": "dark", - "center": [13.416, 52.5194], - "zoom": 15, - "pitch": 0, - "bearing": 0, - "caseResults": [ - { - "capturedAt": "2026-10-07T20:41:38.831Z", - "caseId": "moch-name", - "query": "EDEKA Moch", - "requests": [ - { - "completed": true, - "lat": "52.52", - "lng": "13.42", - "path": "/api/integrations/geocoding/autocomplete", - "q": "EDEKA Moch", - "status": 200, - "zoom": "15", - "ids": [ - "maptiler:poi.30456941", - "maptiler:poi.27997147", - "maptiler:poi.32434263", - "maptiler:poi.31643808", - "maptiler:poi.14639240", - "maptiler:poi.14883072" - ], - "partial": null - }, - { - "completed": true, - "lat": "52.52", - "lng": "13.42", - "path": "/api/integrations/search-suggestions/search", - "q": "EDEKA Moch", - "status": 200, - "zoom": null, - "ids": [], - "partial": true - } - ], - "rows": [ - { - "id": "search-bar-option-0", - "text": "EDEKA Koch-SportparkPlace · Karl-Brandt-Weg 11, 44629 Herne, Germany · 438 km from map center" - }, - { - "id": "search-bar-option-1", - "text": "Edeka MöckPlace · August-Lämmle-Straße 17, 72766 Reutlingen, Germany · 537 km from map center" - }, - { - "id": "search-bar-option-2", - "text": "Edeka MöckPlace · Friedrich-Naumann-Straße 36, 72762 Reutlingen, Germany · 539 km from map center" - }, - { - "id": "search-bar-option-3", - "text": "Edeka MöckPlace · 72810 Gomaringen, Germany · 545 km from map center" - }, - { - "id": "search-bar-option-4", - "text": "Edeka MöckPlace · Robert-Bosch-Straße 19, 72810 Gomaringen, Germany · 546 km from map center" - }, - { - "id": "search-bar-option-5", - "text": "Edeka KochPlace · Im Grund 1, 72469 Meßstetten, Germany · 577 km from map center" - }, - { - "id": "search-bar-option-6", - "text": "Search \"EDEKA Moch\" in this area" - } - ], - "url": "https://openmapx.com/?map=52.5194%2C13.416%2C15%2C0%2C0" - }, - { - "capturedAt": "2026-10-07T20:41:39.786Z", - "caseId": "moch-address", - "query": "EDEKA Moch Grunerstraße 20", - "requests": [ - { - "completed": true, - "lat": "52.52", - "lng": "13.42", - "path": "/api/integrations/geocoding/autocomplete", - "q": "EDEKA Moch Grunerstraße 20", - "status": 200, - "zoom": "15", - "ids": [ - "maptiler:address.12686057", - "maptiler:address.10027702", - "maptiler:address.10343043", - "maptiler:address.9410688", - "maptiler:address.5097698", - "maptiler:place.4929509" - ], - "partial": null - }, - { - "completed": true, - "lat": "52.52", - "lng": "13.42", - "path": "/api/integrations/search-suggestions/search", - "q": "EDEKA Moch Grunerstraße 20", - "status": 200, - "zoom": null, - "ids": [], - "partial": true - } - ], - "rows": [ - { - "id": "search-bar-option-0", - "text": "GrunerstraßeAddress · Grunerstraße 20, 10179 Berlin, Germany · 122 m from map center" - }, - { - "id": "search-bar-option-1", - "text": "Colonia 20 de NoviembreArea · Huaniqueo, Mexico · 9828 km from map center" - }, - { - "id": "search-bar-option-2", - "text": "GroenerstraßeAddress · Groenerstraße 20, 13585 Berlin, Germany · 15 km from map center" - }, - { - "id": "search-bar-option-3", - "text": "GründerstraßeAddress · Gründerstraße 20, 12526 Berlin, Germany · 16 km from map center" - }, - { - "id": "search-bar-option-4", - "text": "GrünerstraßeAddress · Grünerstraße 20, 95615 Marktredwitz, Germany · 294 km from map center" - }, - { - "id": "search-bar-option-5", - "text": "GrunerstraßeAddress · Grunerstraße 20, 65510 Idstein, Germany · 440 km from map center" - }, - { - "id": "search-bar-option-6", - "text": "Search \"EDEKA Moch Grunerstraße 20\" in this area" - } - ], - "url": "https://openmapx.com/?map=52.5194%2C13.416%2C15%2C0%2C0" - }, - { - "capturedAt": "2026-10-07T20:41:40.797Z", - "caseId": "edeka-address", - "query": "EDEKA Grunerstraße 20 Berlin", - "requests": [ - { - "completed": true, - "lat": "52.52", - "lng": "13.42", - "path": "/api/integrations/geocoding/autocomplete", - "q": "EDEKA Grunerstraße 20 Berlin", - "status": 200, - "zoom": "15", - "ids": [ - "maptiler:poi.39267497", - "maptiler:poi.15407240", - "maptiler:poi.15448214", - "maptiler:poi.30149398", - "maptiler:address.12686057", - "maptiler:address.10027702" - ], - "partial": null - }, - { - "completed": true, - "lat": "52.52", - "lng": "13.42", - "path": "/api/integrations/search-suggestions/search", - "q": "EDEKA Grunerstraße 20 Berlin", - "status": 200, - "zoom": null, - "ids": [], - "partial": true - } - ], - "rows": [ - { - "id": "search-bar-option-0", - "text": "EDEKAPlace · Alexanderstraße 25, 10178 Berlin, Germany · 108 m from map center" - }, - { - "id": "search-bar-option-1", - "text": "GrunerstraßeAddress · Grunerstraße 20, 10179 Berlin, Germany · 122 m from map center" - }, - { - "id": "search-bar-option-2", - "text": "EDEKAPlace · Markt 11, 13597 Berlin, Germany · 14 km from map center" - }, - { - "id": "search-bar-option-3", - "text": "EDEKAPlace · Buntzelstraße 14, 12526 Berlin, Germany · 16 km from map center" - }, - { - "id": "search-bar-option-4", - "text": "GroenerstraßeAddress · Groenerstraße 20, 13585 Berlin, Germany · 15 km from map center" - }, - { - "id": "search-bar-option-5", - "text": "EDEKAPlace · Falkenseer Chaussee 266a, 13583 Berlin, Germany · 16 km from map center" - }, - { - "id": "search-bar-option-6", - "text": "Search \"EDEKA Grunerstraße 20 Berlin\" in this area" - } - ], - "url": "https://openmapx.com/?map=52.5194%2C13.416%2C15%2C0%2C0" - }, - { - "capturedAt": "2026-10-07T20:41:42.335Z", - "caseId": "edeka-alexa", - "query": "EDEKA Alexa", - "requests": [ - { - "completed": true, - "lat": "52.52", - "lng": "13.42", - "path": "/api/integrations/geocoding/autocomplete", - "q": "EDEKA Alexa", - "status": 200, - "zoom": "15", - "ids": [ - "maptiler:poi.39267497", - "maptiler:poi.15445342", - "maptiler:poi.15632141", - "maptiler:poi.15895501", - "maptiler:poi.32007491", - "maptiler:poi.15469482" - ], - "partial": null - }, - { - "completed": true, - "lat": "52.52", - "lng": "13.42", - "path": "/api/integrations/search-suggestions/search", - "q": "EDEKA Alexa", - "status": 200, - "zoom": null, - "ids": [], - "partial": true - } - ], - "rows": [ - { - "id": "search-bar-option-0", - "text": "EDEKAPlace · Alexanderstraße 25, 10178 Berlin, Germany · 108 m from map center" - }, - { - "id": "search-bar-option-1", - "text": "EDEKAPlace · Straßburger Straße 9A-C, 10405 Berlin, Germany · 1.1 km from map center" - }, - { - "id": "search-bar-option-2", - "text": "EDEKAPlace · Annenstraße 4a, 10179 Berlin, Germany · 1.3 km from map center" - }, - { - "id": "search-bar-option-3", - "text": "Search \"EDEKA Alexa\" in this area" - } - ], - "url": "https://openmapx.com/?map=52.5194%2C13.416%2C15%2C0%2C0" - }, - { - "capturedAt": "2026-10-07T20:41:43.365Z", - "caseId": "edeka-gruner", - "query": "EDEKA Grunerstraße", - "requests": [ - { - "completed": true, - "lat": "52.52", - "lng": "13.42", - "path": "/api/integrations/geocoding/autocomplete", - "q": "EDEKA Grunerstraße", - "status": 200, - "zoom": "15", - "ids": [ - "maptiler:poi.39267497", - "maptiler:poi.15448214", - "maptiler:poi.15864452", - "maptiler:poi.15445342", - "maptiler:poi.15632141", - "maptiler:poi.15895501" - ], - "partial": null - }, - { - "completed": true, - "lat": "52.52", - "lng": "13.42", - "path": "/api/integrations/search-suggestions/search", - "q": "EDEKA Grunerstraße", - "status": 200, - "zoom": null, - "ids": [], - "partial": true - } - ], - "rows": [ - { - "id": "search-bar-option-0", - "text": "EDEKAPlace · Alexanderstraße 25, 10178 Berlin, Germany · 108 m from map center" - }, - { - "id": "search-bar-option-1", - "text": "EDEKAPlace · Straßburger Straße 9A-C, 10405 Berlin, Germany · 1.1 km from map center" - }, - { - "id": "search-bar-option-2", - "text": "EDEKAPlace · Annenstraße 4a, 10179 Berlin, Germany · 1.3 km from map center" - }, - { - "id": "search-bar-option-3", - "text": "EDEKAPlace · Buntzelstraße 14, 12526 Berlin, Germany · 16 km from map center" - }, - { - "id": "search-bar-option-4", - "text": "Search \"EDEKA Grunerstraße\" in this area" - } - ], - "url": "https://openmapx.com/?map=52.5194%2C13.416%2C15%2C0%2C0" - }, - { - "capturedAt": "2026-10-07T20:41:44.434Z", - "caseId": "edeka-alexander", - "query": "EDEKA Alexanderstraße 25 Berlin", - "requests": [ - { - "completed": true, - "lat": "52.52", - "lng": "13.42", - "path": "/api/integrations/geocoding/autocomplete", - "q": "EDEKA Alexanderstraße 25 Berlin", - "status": 200, - "zoom": "15", - "ids": [ - "maptiler:poi.39267497", - "maptiler:poi.15445342", - "maptiler:poi.15632141", - "maptiler:poi.32007491", - "maptiler:address.6574798", - "maptiler:poi.15258278" - ], - "partial": null - }, - { - "completed": true, - "lat": "52.52", - "lng": "13.42", - "path": "/api/integrations/search-suggestions/search", - "q": "EDEKA Alexanderstraße 25 Berlin", - "status": 200, - "zoom": null, - "ids": [], - "partial": true - } - ], - "rows": [ - { - "id": "search-bar-option-0", - "text": "EDEKAPlace · Alexanderstraße 25, 10178 Berlin, Germany · 108 m from map center" - }, - { - "id": "search-bar-option-1", - "text": "AlexanderstraßeAddress · Alexanderstraße 25, 10179 Berlin, Germany · 139 m from map center" - }, - { - "id": "search-bar-option-2", - "text": "EDEKAPlace · Straßburger Straße 9A-C, 10405 Berlin, Germany · 1.1 km from map center" - }, - { - "id": "search-bar-option-3", - "text": "EdekaPlace · Berliner Straße 96, 13507 Berlin, Germany · 12 km from map center" - }, - { - "id": "search-bar-option-4", - "text": "Search \"EDEKA Alexanderstraße 25 Berlin\" in this area" - } - ], - "url": "https://openmapx.com/?map=52.5194%2C13.416%2C15%2C0%2C0" - }, - { - "capturedAt": "2026-10-07T20:41:45.631Z", - "caseId": "edeka-brand", - "query": "EDEKA", - "requests": [ - { - "completed": true, - "lat": "52.52", - "lng": "13.42", - "path": "/api/integrations/geocoding/autocomplete", - "q": "EDEKA", - "status": 200, - "zoom": "15", - "ids": [ - "maptiler:poi.39267497", - "maptiler:poi.15864452", - "maptiler:poi.15445342", - "maptiler:poi.15632141", - "maptiler:poi.15895501", - "maptiler:poi.32007491" - ], - "partial": null - }, - { - "completed": true, - "lat": "52.52", - "lng": "13.42", - "path": "/api/integrations/search-suggestions/search", - "q": "EDEKA", - "status": 200, - "zoom": null, - "ids": [], - "partial": true - } - ], - "rows": [ - { - "id": "search-bar-option-0", - "text": "EDEKAPlace · Alexanderstraße 25, 10178 Berlin, Germany · 108 m from map center" - }, - { - "id": "search-bar-option-1", - "text": "EDEKAPlace · Straßburger Straße 9A-C, 10405 Berlin, Germany · 1.1 km from map center" - }, - { - "id": "search-bar-option-2", - "text": "EDEKAPlace · Annenstraße 4a, 10179 Berlin, Germany · 1.3 km from map center" - }, - { - "id": "search-bar-option-3", - "text": "EdekaChain · German supermarket chain" - }, - { - "id": "search-bar-option-4", - "text": "Nextbikeedeka nextbikeChain · German bicycle-sharing company and franchise" - }, - { - "id": "search-bar-option-5", - "text": "Search \"EDEKA\" in this area" - } - ], - "url": "https://openmapx.com/?map=52.5194%2C13.416%2C15%2C0%2C0" - }, - { - "capturedAt": "2026-10-07T20:41:46.609Z", - "caseId": "media-alexa", - "query": "MediaMarkt Alexa", - "requests": [ - { - "completed": true, - "lat": "52.52", - "lng": "13.42", - "path": "/api/integrations/geocoding/autocomplete", - "q": "MediaMarkt Alexa", - "status": 200, - "zoom": "15", - "ids": [ - "maptiler:poi.15539884", - "maptiler:poi.15422100", - "maptiler:poi.15388462", - "maptiler:poi.15513302", - "maptiler:poi.27301831", - "maptiler:poi.31290179" - ], - "partial": null - }, - { - "completed": true, - "lat": "52.52", - "lng": "13.42", - "path": "/api/integrations/search-suggestions/search", - "q": "MediaMarkt Alexa", - "status": 200, - "zoom": null, - "ids": [], - "partial": true - } - ], - "rows": [ - { - "id": "search-bar-option-0", - "text": "MediaMarktPlace · Pr Willem Alexander Prom 69-83, 2284 DJ Rijswijk, Netherlands · 621 km from map center" - }, - { - "id": "search-bar-option-1", - "text": "MediaMarktPlace · Grunerstraße 20, 10179 Berlin, Germany · 97 m from map center" - }, - { - "id": "search-bar-option-2", - "text": "MediaMarktPlace · Äußere Schneeberger Straße 95, 08056 Zwickau, Germany · 212 km from map center" - }, - { - "id": "search-bar-option-3", - "text": "MediaMarktPlace · Waldershofer Straße 10, 95615 Marktredwitz, Germany · 295 km from map center" - }, - { - "id": "search-bar-option-4", - "text": "MediaMarktPlace · Schloßplatz 8, 26122 Oldenburg, Germany · 356 km from map center" - }, - { - "id": "search-bar-option-5", - "text": "MediaMarktPlace · Posthalterweg 15, 26129 Oldenburg, Germany · 359 km from map center" - }, - { - "id": "search-bar-option-6", - "text": "Search \"MediaMarkt Alexa\" in this area" - } - ], - "url": "https://openmapx.com/?map=52.5194%2C13.416%2C15%2C0%2C0" - }, - { - "capturedAt": "2026-10-07T20:41:47.644Z", - "caseId": "media-address", - "query": "MediaMarkt Grunerstraße 20 Berlin", - "requests": [ - { - "completed": true, - "lat": "52.52", - "lng": "13.42", - "path": "/api/integrations/geocoding/autocomplete", - "q": "MediaMarkt Grunerstraße 20 Berlin", - "status": 200, - "zoom": "15", - "ids": [ - "maptiler:poi.15422100", - "maptiler:address.12686057", - "maptiler:poi.34392614", - "maptiler:poi.30823762", - "maptiler:address.10027702", - "maptiler:address.10343043" - ], - "partial": null - }, - { - "completed": true, - "lat": "52.52", - "lng": "13.42", - "path": "/api/integrations/search-suggestions/search", - "q": "MediaMarkt Grunerstraße 20 Berlin", - "status": 200, - "zoom": null, - "ids": [], - "partial": true - } - ], - "rows": [ - { - "id": "search-bar-option-0", - "text": "MediaMarktPlace · Grunerstraße 20, 10179 Berlin, Germany · 97 m from map center" - }, - { - "id": "search-bar-option-1", - "text": "GrunerstraßeAddress · Grunerstraße 20, 10179 Berlin, Germany · 122 m from map center" - }, - { - "id": "search-bar-option-2", - "text": "GroenerstraßeAddress · Groenerstraße 20, 13585 Berlin, Germany · 15 km from map center" - }, - { - "id": "search-bar-option-3", - "text": "GründerstraßeAddress · Gründerstraße 20, 12526 Berlin, Germany · 16 km from map center" - }, - { - "id": "search-bar-option-4", - "text": "MediaMarktPlace · Berliner Straße 15, 89250 Senden, Germany · 523 km from map center" - }, - { - "id": "search-bar-option-5", - "text": "MediaMarktPlace · Berliner Allee 34a, 22850 Norderstedt, Germany · 263 km from map center" - }, - { - "id": "search-bar-option-6", - "text": "Search \"MediaMarkt Grunerstraße 20 Berlin\" in this area" - } - ], - "url": "https://openmapx.com/?map=52.5194%2C13.416%2C15%2C0%2C0" - }, - { - "capturedAt": "2026-10-07T20:41:48.565Z", - "caseId": "rewe-address", - "query": "REWE Invalidenstraße 158 Berlin", - "requests": [ - { - "completed": true, - "lat": "52.52", - "lng": "13.42", - "path": "/api/integrations/geocoding/autocomplete", - "q": "REWE Invalidenstraße 158 Berlin", - "status": 200, - "zoom": "15", - "ids": [ - "maptiler:poi.15426609", - "maptiler:poi.15741076", - "maptiler:poi.34014416", - "maptiler:poi.15509199", - "maptiler:poi.36656201", - "maptiler:address.8692633" - ], - "partial": null - } - ], - "rows": [ - { - "id": "search-bar-option-0", - "text": "REWEPlace · Invalidenstraße 158, 10115 Berlin, Germany · 1.9 km from map center" - }, - { - "id": "search-bar-option-1", - "text": "InvalidenstraßeAddress · Invalidenstraße 158, 10115 Berlin, Germany · 1.9 km from map center" - }, - { - "id": "search-bar-option-2", - "text": "Rewe To GoPlace · Europaplatz 2, 10557 Berlin, Germany · 3.2 km from map center" - }, - { - "id": "search-bar-option-3", - "text": "REWEPlace · Heidestraße 41, 10557 Berlin, Germany · 3.7 km from map center" - }, - { - "id": "search-bar-option-4", - "text": "Search \"REWE Invalidenstraße 158 Berlin\" in this area" - } - ], - "url": "https://openmapx.com/?map=52.5194%2C13.416%2C15%2C0%2C0" - }, - { - "capturedAt": "2026-10-07T20:41:50.165Z", - "caseId": "wrong-address", - "query": "EDEKA Moch Grunerstraße 999 Berlin", - "requests": [ - { - "completed": true, - "lat": "52.52", - "lng": "13.42", - "path": "/api/integrations/geocoding/autocomplete", - "q": "EDEKA Moch Grunerstraße 999 Berlin", - "status": 200, - "zoom": "15", - "ids": [ - "maptiler:place.4795446", - "maptiler:region.505", - "maptiler:locality.2701", - "maptiler:place.4534518", - "maptiler:neighbourhood.20256", - "maptiler:place.2470107" - ], - "partial": null - }, - { - "completed": true, - "lat": "52.52", - "lng": "13.42", - "path": "/api/integrations/search-suggestions/search", - "q": "EDEKA Moch Grunerstraße 999 Berlin", - "status": 200, - "zoom": null, - "ids": [], - "partial": true - } - ], - "rows": [ - { - "id": "search-bar-option-0", - "text": "BerlinArea · Germany · 1.4 km from map center" - }, - { - "id": "search-bar-option-1", - "text": "NeuköllnArea · Berlin, Germany · 4.5 km from map center" - }, - { - "id": "search-bar-option-2", - "text": "Stone PiecesArea · Berlin, Germany · 24 km from map center" - }, - { - "id": "search-bar-option-3", - "text": "Berlin CenterArea · Berlin Township, United States · 6862 km from map center" - }, - { - "id": "search-bar-option-4", - "text": "Berliner SiedlungArea · Treuenbrietzen, Germany · 58 km from map center" - }, - { - "id": "search-bar-option-5", - "text": "Berliner VorstadtStreet · Potsdam, Germany · 26 km from map center" - }, - { - "id": "search-bar-option-6", - "text": "Search \"EDEKA Moch Grunerstraße 999 Berlin\" in this area" - } - ], - "url": "https://openmapx.com/?map=52.5194%2C13.416%2C15%2C0%2C0" - }, - { - "capturedAt": "2026-10-07T20:41:51.194Z", - "caseId": "invented-name", - "query": "Zzqxv430 Testladen Grunerstraße 20 Berlin", - "requests": [ - { - "completed": true, - "lat": "52.52", - "lng": "13.42", - "path": "/api/integrations/geocoding/autocomplete", - "q": "Zzqxv430 Testladen Grunerstraße 20 Berlin", - "status": 200, - "zoom": "15", - "ids": [ - "maptiler:address.12686057", - "maptiler:address.10027702", - "maptiler:address.10343043", - "maptiler:poi.2947497", - "maptiler:poi.2947574", - "maptiler:poi.6230752" - ], - "partial": null - }, - { - "completed": true, - "lat": "52.52", - "lng": "13.42", - "path": "/api/integrations/search-suggestions/search", - "q": "Zzqxv430 Testladen Grunerstraße 20 Berlin", - "status": 200, - "zoom": null, - "ids": [], - "partial": true - } - ], - "rows": [ - { - "id": "search-bar-option-0", - "text": "GrunerstraßeAddress · Grunerstraße 20, 10179 Berlin, Germany · 122 m from map center" - }, - { - "id": "search-bar-option-1", - "text": "20Place · Elisabeth-Schwarzhaupt-Platz, Berlin, Germany · 2.8 km from map center" - }, - { - "id": "search-bar-option-2", - "text": "20Place · Siemenssiedlung am Hohenzollernkanal III, Berlin, Germany · 12 km from map center" - }, - { - "id": "search-bar-option-3", - "text": "GroenerstraßeAddress · Groenerstraße 20, 13585 Berlin, Germany · 15 km from map center" - }, - { - "id": "search-bar-option-4", - "text": "GründerstraßeAddress · Gründerstraße 20, 12526 Berlin, Germany · 16 km from map center" - }, - { - "id": "search-bar-option-5", - "text": "Search \"Zzqxv430 Testladen Grunerstraße 20 Berlin\" in this area" - } - ], - "url": "https://openmapx.com/?map=52.5194%2C13.416%2C15%2C0%2C0" - }, - { - "capturedAt": "2026-10-07T20:41:52.849Z", - "caseId": "schaaf-address", - "query": "EDEKA Schaaf Schillingstraße 2 Berlin", - "requests": [ - { - "completed": true, - "lat": "52.52", - "lng": "13.42", - "path": "/api/integrations/geocoding/autocomplete", - "q": "EDEKA Schaaf Schillingstraße 2 Berlin", - "status": 200, - "zoom": "15", - "ids": [ - "maptiler:poi.32879876", - "maptiler:address.4011014", - "maptiler:address.9975161", - "maptiler:address.18028993", - "maptiler:address.6705156", - "maptiler:region.505" - ], - "partial": null - }, - { - "completed": true, - "lat": "52.52", - "lng": "13.42", - "path": "/api/integrations/search-suggestions/search", - "q": "EDEKA Schaaf Schillingstraße 2 Berlin", - "status": 200, - "zoom": null, - "ids": [], - "partial": true - } - ], - "rows": [ - { - "id": "search-bar-option-0", - "text": "BerlinArea · Germany · 1.4 km from map center" - }, - { - "id": "search-bar-option-1", - "text": "Edeka SchaafPlace · Singerstraße 121, 10179 Berlin, Germany · 382 m from map center" - }, - { - "id": "search-bar-option-2", - "text": "SchillingstraßeAddress · Schillingstraße 2, 10179 Berlin, Germany · 380 m from map center" - }, - { - "id": "search-bar-option-3", - "text": "SchillingstrasseAddress · 10179 Berlin, Germany · 371 m from map center" - }, - { - "id": "search-bar-option-4", - "text": "SchellingstraßeAddress · 10785 Berlin, Germany · 3.3 km from map center" - }, - { - "id": "search-bar-option-5", - "text": "SchillingstraßeAddress · Schillingstraße 2, 13403 Berlin, Germany · 8.3 km from map center" - }, - { - "id": "search-bar-option-6", - "text": "Search \"EDEKA Schaaf Schillingstraße 2 Berlin\" in this area" - } - ], - "url": "https://openmapx.com/?map=52.5194%2C13.416%2C15%2C0%2C0" - } - ], - "selections": [ - { - "query": "EDEKA Moch Grunerstraße 20", - "action": "Enter", - "observed": "area search, 0 results", - "capturedAt": "2026-10-07T20:42:24.163Z", - "panel": "category", - "selectedId": null - }, - { - "query": "EDEKA Alexa", - "action": "Enter", - "observed": "opened EDEKA place sheet with Alexanderstraße address; same-tenant status unresolved", - "capturedAt": "2026-10-07T20:43:00.894Z", - "panel": "place", - "selectedId": "maptiler:poi.39267497" - } - ] -}