BIR zonal values per sqm for 7,000 barangays in Metro Manila, Bulacan, Pampanga, Zambales, Rizal, Cavite, Laguna, Batangas and Quezon. Tap any barangay for its values.
翻译准备中
金融Python · TypeScriptGitHub @AndrewConcejero在线运营者未确认
试用过了吗? 点一下就好,无需登录。
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Barangay-level map of BIR residential zonal values for Metro Manila, Cavite, Laguna, Rizal and Bulacan
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗A free, public map of BIR residential zonal values (₱ per square meter of land) for Metro Manila and the provinces around it: Bulacan, Pampanga (with Angeles), Zambales (with Olongapo), Rizal, Cavite, Laguna, Batangas and Quezon (with Lucena). Bicol is next. Values are shown per barangay where the data allows. Every area carries a flag saying how good its number is.
Zonal values are BIR tax floors, not market prices. Read the map as a ranking. Check with the BIR Revenue District Office (RDO) before any transaction.
| What | Source | Where in repo |
|---|---|---|
| Zonal value schedules (primary) | BIR Department Orders, published per RDO at bir.gov.ph | raw/bir/RDO-<code>/*.xls(x) |
| Zonal values (fallback, until raw files exist) | BIR schedules as indexed by REN.PH | data/ncr_barangays.csv, data/pasay_barangays.txt, data/city_medians.csv |
| Barangay and city boundaries | PSA / NAMRIA, PSGC Dec 2023 release, via faeldon/philippines-json-maps | fetched into cache/ (not committed) |
Every map feature has one of these flags:
barangay_data: computed from that barangay's own schedule rowscity_median: no barangay detail, so it shows the city's median residential value (hatched on the map)estimated: no data, so it shows the median of the neighbouring barangays it shares a border with (hatched and muted on the map)no_data: nothing usable (grey)raw/bir/_inbox/ drop new BIR workbooks here; make data files them
raw/bir/RDO-<code>/ BIR workbooks filed by RDO, each holding every revision for that RDO
raw/bir/inventory.csv one row per Department Order found in the workbooks
data/ fallback CSVs (REN.PH-indexed)
pipeline/ Python 3.11+ data pipeline
aliases.csv hand fixes: source barangay name -> PSGC name
review/ generated: unmatched.csv, match report, parse errors
tests/ pytest; fixtures/ holds sample BIR layouts
public/data/ pipeline output served by the site (zonal.geojson, cities.geojson, meta.json)
public/og.png social preview, regenerated by `make data`
src/ Vite + TypeScript + MapLibre frontend
prototype/ v0 d3 prototype, kept for reference only
Needs Node 20+ and Python 3.11+.
make venv # one-time: creates .venv and installs pipeline/requirements.txt
make data # fetches boundaries (cached), parses raw/ + data/, writes public/data/
make test # pytest on the parser and name normalizer
npm install
npm run dev # local site at http://localhost:5173
make data writes review files to pipeline/review/. If a barangay lands in unmatched.csv, add a row to pipeline/aliases.csv and run make data again.
Zoom in on any Metro Manila city, the Cavite and Laguna cities listed in streets.SOUTH, or any town in Batangas, Pampanga, Zambales or Quezon (streets.PROVINCE_SETS) to see BIR's street and subdivision values on the map: villages filled, streets as
lines (dashed where BIR's stretch could not be pinned down, so the whole street is drawn). pipeline/streets.py
matches each residential row of the current schedule to OpenStreetMap shapes in its own barangay; 62% of priced
rows place. One cached OSM request per city (cache/osm/); one GeoJSON per city in public/data/streets/,
loaded only when you zoom in. A city name used in two provinces (Rosario, San Juan) gets the province in its file
name (rosario-batangas). Review files: pipeline/review/streets_<city>.csv. Method and limits:
docs/pilot-muntinlupa-streets.md.
| Layer | Source | Pipeline |
|---|---|---|
| Roads & rail (current, under construction, proposed) | OpenStreetMap | pipeline/transport.py |
| Condominium values per building | BIR RC/CC rows on named OSM buildings (31% of rows place) | pipeline/condos.py, review pipeline/review/condos.csv |
| Flood hazard (share of barangay in medium/high hazard, 100-year rain) | UP NOAH / DREAM via LiPAD WFS (ODbL); NCR, Bulacan and Pampanga fully; Cavite, Laguna, Rizal and Batangas partly (Batangas 779 of 1,075 barangays; none for Mabini and Tingloy) | pipeline/factors.py flood |
| Elevation | Copernicus GLO-30 (surface model) | pipeline/factors.py elevation |
| Surface heat (dry-season afternoon land surface temperature) | Landsat 8/9 C2 L2 via Planetary Computer | pipeline/factors.py heat |
| Distance to rail station / expressway | OpenStreetMap | pipeline/factors.py access |
| Vacancy by submarket | hand-entered from broker reports: fill data/vacancy_submarkets.csv (with source and period); barangays per submarket in data/vacancy_submarket_barangays.csv. The option appears once a row has a number. | pipeline/build.py |
python -m pipeline.factors all refreshes the factors (slow; downloads are cached in cache/factors/). After adding an area, python -m pipeline.factors <factor> --new computes a factor only for barangays that lack it, leaving existing values as they were.
The Satellite button puts imagery under the colours. With no configuration it uses Sentinel-2 cloudless 2016 by EOX (CC BY 4.0, 10 m per pixel: good for context, too coarse to see individual villages). For sharp imagery, add an Esri World Imagery key:
https://ph-zonal-map.vercel.app (and http://localhost:5173 for development).VITE_ESRI_KEY with the key, then redeploy. Locally, put it in .env.local (see .env.example).The key ends up in the browser by design; the referrer restriction is what keeps others from using it.
raw/bir/_inbox/ (subfolders and odd file names are fine).make data. It reads each workbook's NOTICE sheet and Department Order headers, files it under raw/bir/RDO-<code>/ (for example RDO-027, RDO-53A), skips exact duplicates, and rewrites raw/bir/inventory.csv: one row per Department Order with its effectivity date and the cities it covers.raw/bir/inventory_log.txt: anything that needed judgment while reading the workbookspipeline/review/unmatched.csv: BIR barangay names that matched no PSGC barangay. Add a row to pipeline/aliases.csv and run make data again. Columns: city, source_name (as BIR writes it), psgc_name (a; b when one BIR block covers several barangays, (ignore) for sections that are not barangays), psgc_city (only when BIR filed it under another city), valid_before (only apply to schedules effective before this date, e.g. Bacoor's pre-merger names before 2023-07-29), note (evidence).pipeline/review/plausibility.csv: values worth a second lookpipeline/review/parse_errors.csv.gz: every sheet row the parser could not use, with the reason (local only)main.RR) count. Condominium rows (RC) are priced per sqm of floor area, not land, so they are left out.estimated, hatched on the map). Only real values are used, never other estimates. With no such neighbour, it shows the city median (flagged city_median). A city with no values of its own (Pampanga today) is never estimated from a neighbouring city: it stays no_data.pipeline/review/growth_by_rdo.csv; the summary is in docs/staleness-report.md.Code: MIT. Data: BIR schedules are public records; boundary data is under the terms of its upstream repo.