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.