Busabase
Busabase는 AI 에이전트를 위한 오픈소스(MIT) 데이터베이스 및 작업 공간입니다
마드리드에 대한 공식 자료와 증거 한계를 중심으로 도시 개발을 조명하는 장소‑중심 시각을 제공합니다
A place-first, source-disciplined lens for Madrid: read what official sources document about the city and the limits of that evidence. Urban development is the authorized next organising frame; touris
데이터JavaScript · PythonGitHub @soroushkarahrodi79-oss온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Interactive geospatial workspace for official urban development, tourism, mobility and bounded heat evidence in Madrid.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A place-first, source-disciplined geospatial workspace for reading what official sources document about urban development in Madrid — and what that evidence does not permit you to conclude. The next architecture (Gate K / #64) formalizes scope, freshness and interpretation ceiling as explicit, uniform properties of every evidence object; today they are documented per source rather than guaranteed on every value.
Open the live Madrid lens · Current scope and limits
See the full evidence demonstration, with screenshots, limits and capture provenance →
It starts from a place and a question about it, not from a dataset. For a point on the map it is built to answer, in plain terms:
The reading is designed for two audiences over the same evidence: a Madrid
resident or local stakeholder as the primary reader, and a planner, researcher
or assessor who verifies it. A citizen reading may omit detail; it never makes a
different claim. The vocabulary that keeps those two readings honest is defined
in docs/PRODUCT_SEMANTICS.md.
Currently shipped is the tourism-and-context evidence the sections below describe in full: a draggable spatial lens over central Madrid that recalculates local counts of museums, tourist information, accommodation and mobility nodes; optional observed pedestrian-counter activity and bounded HATI thermal research; the whole-barrio Area Profile, licensed-VUT and city hotel-demand context; and the comparison, halo and sensitivity machinery. None of that changes with this reframing.
The authorized next direction, set by Gate K, is to make urban-development evidence the organising frame, with tourism retained as one documented domain rather than the headline. That is a change of emphasis and vocabulary, not of data in itself. K6 (#68) reads the current official edition for the planning ámbito that contains a Lens centre, and K7 (#69) adds a two-edition comparison for the named 2025-07 and 2026-01 publications. K9 (#71) adds the opt-in granted urban-licence layer — an administrative address-point register read inside the Lens by licence family and grant date, where a grant is not construction. See Planning-ámbito evidence V1 and Official edition change detection V1. The spatial lens itself solves a real problem the next direction keeps: static maps force you to look at a whole city at once, or at one predefined zone, while the lens lets you ask a local, comparative question — "what is represented within this exact spatial window, given the evidence currently loaded?" — and move it around the map, including comparing two places at once.
Move Lens A (always on) by dragging it or clicking the map.
Enable Lens B to compare two locations side by side.
Read the Radial Halo V3 quantitative perimeter bars around each circle:
Tourism POIs at 12, Hotels & stays at 2, Mobility nodes at 6, and mean HATI
UTCI at 9 o'clock. Each bar points outward and prints its own raw value, and for the three count
metrics its length is that lens's density (count per km²) relative to a fixed
Madrid reference, so the map shows which lens is denser — comparably even when
the two lenses have different radii, in single-lens and Compare mode.
Bar lengths compare within a metric only, never across metrics. The panel
Focusing a metric highlights that same slot on both lenses and its comparison
row. The panel stays authoritative for exact values, provenance and interpretation; Pedestrian
activity is panel-only. See
docs/radial-halo-v3.md.
Use the Comparison Bridge in the Lens A ↔ Lens B panel: focus (hover /
keyboard) or lock (click / Enter) one of the four canonical metrics — from a
halo mark or from the metric name in the table — to read Lens A, Lens B and the
observed B − A in one place, with both radii shown. Unequal windows compare
by represented-record density or are explicitly withheld (e.g. mobility
under different window sizes); zero, N/A and OFF stay distinct and never become
a delta. It is a focused reading, not a score or ranking. See
docs/COMPARISON_BRIDGE_V1.md.
Check spatial sensitivity of that reading: freeze the current comparison as a baseline window, then change the Lens radii to make the live configuration a scenario window. Each canonical metric reports whether its relationship stayed the same, changed B − A direction, changed comparison basis (raw counts → represented-record density, where the numeric change is withheld because the two are not comparable), became withheld (mobility under different window sizes) or became available. Changing a radius changes which geography each Lens includes — it is not a forecast and not a causal effect, and there is no score or ranking. Moving a Lens centre or changing the evidence configuration invalidates the baseline rather than posing as radius sensitivity. See .
docs/HOSPITALITY_COMMERCIAL_METHOD_GATE.md.On GitHub Pages, operational POI layers are deployment-snapshot first so
the map renders immediately and does not wait on cross-origin APIs. The latest
successful public-source snapshot is generated during the Pages build. A small
curated repository sample is the final packaged fallback where a deployment
source is unavailable. Direct live requests are only attempted when no packaged
data exists. No coordinates are invented. See
docs/DATA_PROVENANCE.md.
HATI-Madrid
is a separate, independent research repository studying heat exposure at 28
tourism-relevant assets in central Madrid. This project reads 14 of its
outdoor assets' UTCI values (one modelled pilot day, three times of day) in a
read-only, provenance-labelled way — it never modifies HATI, never
extrapolates its values beyond the sampled points, and never carries forward
HATI's own feasibility/recommendation labels. Full extraction details,
including the exact source commit, are in
data/hati_provenance.json.
It does not establish tourist pressure, overtourism, carrying capacity,
tourist behaviour, tourist-specific footfall, safety outcomes, tourism quality,
economic impact, causal heat effects, real-time conditions, city-wide HATI
coverage, or a complete inventory of Madrid green space. The hotel-demand series
is not total tourism demand, not all accommodation and not a count of
unique visitors, and nothing explains why a figure moved. Full list in
docs/CLAIMS_AND_LIMITATIONS.md.
The Radial Halo V3 makes the Lens itself a compact quantitative display. Its
screen-space bars attach just outside, but do not enlarge, the analytical Lens
boundary, and follow it through pan, zoom, radius and Compare-mode changes. The
printed number is always the raw count inside the Lens (12, 1,284, or
31.6°C for UTCI). For the three count metrics the bar length is a density —
clamp((rawCount / circleAreaKm2(radius)) / referenceDensity, 0..1) — against a
deterministic Madrid reference density (the p95 of per-feature local density in a
fixed 900 m window); UTCI's bar is the mean's position in a model-derived Celsius
band and is never area-normalized. Encoding density (not a raw count) keeps
unequal A/B radii comparable: a bigger window no longer buys a longer bar, and
counts that scale with area give equal bars. The same reference density drives
Lens A and Lens B, and the identical rule applies in single-lens, equal-radius
and unequal-radius modes. Bar lengths are comparable within a metric only, never
across metrics. The circle boundary is quieter than the bars; A and B differ by
hue and structure (B's fill is dashed). Densities above the reference saturate
the bar while the raw number keeps its real magnitude. Exact values stay
panel-authoritative; the scale is not a Madrid benchmark, percentage, score, or
ranking. Unavailable data reads N/A, off reads OFF, both distinct from a
genuine observed 0. Full contract:
docs/radial-halo-v3.md.
No build step, no dependencies. Any static file server works:
python3 -m http.server 8000
# then open http://localhost:8000
A GitHub Actions workflow (.github/workflows/deploy-pages.yml) deploys the
static site to GitHub Pages on every push to main. GitHub Pages must
first be enabled in the repository settings (Settings → Pages → Source:
GitHub Actions) — this is an admin action the repository owner needs to take
once; it is not done automatically by this PR.
The CARTO basemap key is injected at deploy time from the repository secret
CARTO_BASEMAP_KEY; the key is not committed to git. Because this is a
browser-side static app, the deployed key is still visible to visitors, so
restrict it in the CARTO Basemaps dashboard to the GitHub Pages host
soroushkarahrodi79-oss.github.io.
A local checkout (or fork, or PR preview) has no CARTO key, so it renders OpenStreetMap tiles
instead of CARTO Positron/Dark Matter; the base-map selector says so, logs one console
warning, and exposes data-effective-provider on #basemapSelect. Account for this when
measuring marker contrast, which depends on the basemap.
Gate G formalizes what the current product can and cannot support as a management aid. Today Lens can support three bounded descriptive questions: same-radius local comparison, whole-barrio administrative context, and municipality-wide hotel-demand monitoring. It cannot rank barrios, measure tourism pressure, infer causality, allocate citywide demand to local areas, or recommend investment/restriction/promotion from the current evidence.
See Gate G — Decision utility and next evidence increment.
Gate K has closed and set the next product direction. Gates H, I and J are closed and shipped (Destination Origin Context, the spatial comparison contract and the independent-radius contract). Gate K — Madrid Urban Decision Workspace decided the product boundary: this becomes an urban development evidence lens for Madrid, with tourism retained as one documented domain rather than the organising frame. The first authorized production increment is an ámbito evidence layer at ámbito scope — official geometry, the four published development phases (Planeamiento / Gestión / Urbanización / Edificación) and remaining buildability in m² by use class — and it is gated behind Gate L (official urban-planning source contract) plus the spatial-scope and source-freshness contracts that precede it. K6 and K7 ship the bounded tabular evidence and two-edition comparison, and add no geometry history; K9 (#71) ships the opt-in granted urban-licence address-point layer, read inside the Lens by licence family and grant date (granted ≠ built; see Granted urban licences V1). The panel's reading architecture (PLACE / COMPARE / CITY modes, the scope-and-freshness rail and the evidence drawer) is described in Information architecture V2; it reorganizes existing evidence and does not add planning evidence.
index.html entry point
css/app.css styling
js/lens.js pure lens geometry + POI statistics (tested)
js/radial-halo.js pure Radial Halo V3 model: within-metric references, bar magnitudes, glyph specs (tested)
js/evidence.js pure HATI evidence statistics (tested)
js/evidence-scope.js pure scope & freshness contract: analytical scopes, five-field freshness (tested)
js/modes.js pure PLACE / COMPARE / CITY mode state and transition plans (tested)
js/scope-rail.js pure scope-and-freshness rail model, evidence-drawer records, citizen/analyst projections (tested)
js/shell-copy.js ES/EN dictionaries for the shell, rail and drawer (tested)
js/legacy-copy.js product-copy catalogue (ES) for surfaces built before the shared i18n layer (tested)
js/geography.js pure administrative containment / point-in-polygon (tested)
js/area-profile.js pure Area Profile model: place, residents, licensed VUT, states (tested)
js/destination-context.js pure citywide hotel-demand model: period, YoY, trend, states (tested)
js/domestic-origin-context.js pure municipality-level domestic-origin model (tested)
js/extraction-bounds.js CRTM rail extraction rectangle (single definition) + pure whole-circle Lens eligibility for the combined Mobility count (tested)
js/data.js deployment-snapshot-first + bounded live fallback loading
js/app.js Leaflet map + UI wiring
data/ HATI evidence extract + POI snapshot + provenance
scripts/ source builders (geography, population, VUT, destination) + deployment validator
docs/ methodology, data provenance, claims & limitations
tests/ Node built-in test runner, no framework
The MIT license in LICENSE covers this repository's original code and documentation only. It does not relicense any third-party data or software this project reads or bundles:
assets/leaflet/) keeps its own upstream license
— see assets/leaflet/LICENSE.data/hati_assets.json, data/hati_provenance.json)
remains subject to the source repository's own terms and governance
(RELEASE_LOCKED / RESEARCH_FROZEN layers) — see
DATA_PROVENANCE.md.Adjust one active-Lens radius (100 m – 5 km); Lens A and Lens B keep independent radii, and both are shown in Compare mode. Lens B copies A's current radius on its first enable in a session and remembers its own radius after later disable/re-enable cycles.
Compare equal-radius POI and stay windows with eligible raw represented-count deltas. For unequal radii, retain both raw counts and compare represented records/km² only when both full circles fit inside Madrid's official municipality polygon and source states are compatible. The single active radius slider never changes the inactive Lens.
Read the panel in one of three modes (the control at the top of the panel): Place (what the evidence says about this place: the barrio the Lens sits in, the four Lens-circle figures, and a Detail disclosure), Compare (Lens A against Lens B: the Comparison Bridge, Decision Insight, Spatial Window Sensitivity and the comparison table) and City (municipality-wide hotel demand and domestic-origin context). A mode changes how existing evidence is read; it never flies the camera, switches a layer or moves a Lens. Entering Compare enables Lens B and leaving it follows the previous cleanup.
Compare two official planning ámbitos in Compare mode (same surfaces, a second scope): the four published phases read as same/different with no direction, available buildability and surface read as a B − A m² difference, cross-scope (ámbito vs Lens circle) and cross-edition pairs are refused or withheld with a stated reason, and radius sensitivity is replaced by an explicit edition sensitivity because an ámbito's geometry is fixed. See Ámbito Comparison V1.
Check, at any width, what the evidence on screen describes and how old it is: the always-visible scope and freshness rail names the scope (glyph and label) and the oldest contributing reference date, or says the date is not published. The Evidence & limits drawer shows, for any value, its source, authority, scope, unit, the five date and state fields and the interpretation ceiling verbatim, in a citizen or an analyst reading.
Share and export a reading. From the Evidence & limits drawer, copy a versioned, human-inspectable URL that reproduces the exact reading on another device (or states precisely what it could not restore), and export a five-file bundle — displayed values, official geometry (EPSG:4326), contributing sources with their freshness and licences, a plain-text README, and the shareable URL — for QGIS, GeoLibre or a spreadsheet. The export is a transcript of what is on screen, never a recomputation. See Evidence export.
Switch the document language (English / Español) with one control; the shell, rail, drawer, comparison reading, hospitality and domestic-origin surfaces follow it.
Toggle each operational data layer on/off.
Opt into observed pedestrian activity from Madrid's permanent counters; the lens reports the mean published hourly count for counters inside the lens, explicitly labelled as pedestrian rather than tourist activity.
Optionally show the official Principal parks context layer; it is map context only and never enters lens metrics.
Opt into Hospitality & Commercial Context as one administrative barrio selector over the 131 official barrios, and switch among the five exact Gate F indicators. Only the hospitality membership share shades the polygons (five quantile classes with a class legend); the other four stay on HOLD (docs/HOSPITALITY_CHOROPLETH_HOLD.md); values are read in the administrative context card. It remains separate from the Lens circle and A/B compare.
Opt into the bounded HATI research-evidence layer, then switch its modelled time-of-day (12:00 / 15:00 / 18:00).
Filter the accommodation layer by accommodation type where the Madrid Destino catalogue provides that classification.
Read descriptive counts, category mix, and the 5 nearest features inside the active lens.
Read the Area Profile: the official barrio and district containing the active lens's centre, and that barrio's registered residents with their Padrón reference date. The barrio is a different geometry from the circle, and the interface keeps the two apart — the resident figure describes the whole barrio, never the part of it the circle covers.
Read the licensed VUT context for that same whole barrio: the licensed tourist-dwelling units the Ayuntamiento's Agencia de Actividades documents there, the granted activity licences they come from, and a descriptive per 1,000 registered residents figure shown only alongside both raw counts. These are licences granted, not dwellings in operation, and the figure is descriptive administrative supply context — never a pressure, saturation or capacity reading, and never ranked or scored.
Read the Destination Context: how hotel demand in the whole city is changing month by month — hotel travellers and overnight stays for the latest published month, their residence composition, a same-month-previous-year comparison and a 24-month trend. This surface is deliberately independent of the Lens: it describes the municipality of Madrid, and moving either Lens cannot change a single figure on it. Hotel demand is not total tourism demand.
Read Domestic origins within that same Destination Context: published origin municipalities for residents travelling to Madrid municipality from another Spanish province in a selected source month. Same-province travel is outside the source universe; within it, INE publishes only crossings above 30 tourists, so an absent origin is not zero and the list is not a complete domestic-tourism distribution. It is also independent of the Lens.
Read the planning ámbito that contains the active Lens centre: its official
denomination and exact official code (labelled a planning ámbito - not the
barrio, not the district, not the Lens circle), the four independent published
development-phase values verbatim, the characteristic use, the published
surface, and the available buildability by use class in m² edificable,
each figure carrying its unit, its whole-ámbito scope and the edition's
reference date next to it. No Necesita keeps its own label and the note that
the publisher never defines it; PGOUM-85/PGOUM-97 stay verbatim as
plan-of-origin markers. There is no overall stage, no percentage and no
progress. A point outside every ámbito says so explicitly. A secondary
Official edition comparison names the 2025-07 and 2026-01 reference dates
and compares only their published tabular evidence. The PLACE detail also lists
which ámbitos the Lens circle touches - membership only, with no share of
their quantities. See Planning-ámbito evidence V1
and Official edition change detection V1.
Opt into the granted urban-licence layer (off by default, under Administrative register in the layer rail): the official register of urban licences the Ayuntamiento has granted, placed at their official address point and read inside the active Lens by licence family — building / urbanistic, activity and temporary activity, counted separately and never summed into one total — and a bounded grant-date window you set. Each point opens a popup with its family, grant date, official licence type and address-point provenance. A granted licence is an administrative step, not evidence that work started or anything was built, and because the register is granted-only there is no approval, rejection or refusal rate. The mapped points are the resolved subset (97.97%) of a known register; the unresolved rows are reported, never dropped or approximated. See Granted urban licences V1.
Optionally overlay the full lattice of district or barrio outlines; the containing barrio is always outlined, the lattice defaults to off.
Madrid,
which INE defines as a municipality and publishes under municipality code
28079 — the same code as the canonical geography