PRISM-INSIGHT
13개의 특화 AI 에이전트가 한국·미국 주식을 실시간 분석합니다. 오픈소스, 무료
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를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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.