vccs
Vue 3용 차트 컴포넌트 모음, Recharts에서 포팅
인도네시아 행정 구역 인터랙티브 지도: 38도, 514시·군, 7,285구, 83,762마을·동, 무료 오픈소스 REST API 제공
Peta interaktif batas administrasi Indonesia: 38 provinsi, 514 kabupaten/kota, 7.285 kecamatan, 83.762 desa/kelurahan. API REST gratis & open source.
데이터TypeScript · PythonGitHub @dhanyyudi온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Free REST API for Indonesia administrative boundaries, region codes (Kemendagri), and postal codes
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
🇮🇩 wilayah-id — API Batas Administrasi Indonesia REST API & Webmap interaktif untuk batas administrasi Indonesia: 38 provinsi, 514 kabupaten/kota, 7.285 kecamatan, 83.762 desa/kelurahan.README 전문 보기 ↗
API dan webmap batas administrasi Indonesia: 38 provinsi, 514 kabupaten/kota, 7.282 kecamatan, 83.529 desa/kelurahan, lengkap dengan geometri, kode Kemendagri, kode pos, dan data penduduk. Tersedia sebagai REST, OGC (API Features, WFS, WMS), vector tiles, dan server MCP untuk agent LLM.
| Layanan | URL | Akses |
|---|---|---|
| Webmap dan dokumentasi | https://wilayah-id-web.gislabs.workers.dev | Anonim |
| REST dan OGC API | https://wilayah-id-api.dhanypedia.com/api/v1 | Anonim, API key opsional |
| Vector tiles | https://tiles.dhanypedia.com/{layer}/{z}/{x}/{y}.pbf | Anonim |
| MCP (Streamable HTTP) | https://wilayah-id-mcp.dhanypedia.com/mcp | Header X-API-Key |
curl "https://wilayah-id-api.dhanypedia.com/api/v1/regions/provinces?limit=1"
curl "https://wilayah-id-api.dhanypedia.com/api/v1/boundaries/reverse?lat=-6.1754&lng=106.8272"
| Komponen | Sumber | Edisi |
|---|---|---|
| Geometri batas | Badan Informasi Geospasial (BIG), BATASWILAYAH | 2026-06-12 |
| Kode dan nama wilayah | Kepmendagri 2025 via region-id v1.0.2, dengan koreksi di data-region-id/name-corrections.csv | 2025 |
| Penduduk, KK, kepadatan, luas resmi | Ditjen Dukcapil Kemendagri | 2024 Semester 1 |
| Kode pos | postal-code-id |
status_batas dari BIG. Sebagian besar berstatus
Batas Indikatif, artinya bukan batas definitif dan tidak bisa menjadi
dasar hukum.area_tidak_terdefinisi.docs/BIG_2026_MIGRATION.md.Base URL /api/v1. Respons berbentuk { "data": ..., "meta": { "total", "source", "snapshot", "attribution" } }.
| Endpoint | Isi |
|---|---|
GET /regions/provinces | Daftar provinsi |
GET /regions/regencies?province_code= | Kab/kota dalam satu provinsi |
GET /regions/districts?regency_code= | Kecamatan dalam satu kab/kota |
GET /regions/villages?district_code= | Desa/kelurahan dalam satu kecamatan |
GET /regions/{level}/{kode} | Detail satu wilayah beserta hierarkinya |
GET /regions/search?q=&level= | Cari wilayah di semua level |
GET /boundaries/{level}?...&geometry=true | Batas wilayah sebagai GeoJSON |
GET /boundaries/{level}/{kode}?geometry=true | Batas satu wilayah |
GET /boundaries/reverse?lat=&lng=&level= | Koordinat ke wilayah (reverse geocoding) |
GET /postal-codes?village_code=|postal_code=|district_code= | Kode pos |
GET /postal-codes/lookup?q= | Cari kode pos berdasarkan awalan |
GET /api/health | Health check (di luar /api/v1) |
{level} adalah provinces, regencies, districts, atau villages.
Respons desa memuat status_batas dan edisi_geometri (YYYY-MM-DD).
Koleksi di semua protokol: provinces, regencies, districts, villages.
| Protokol | Endpoint | Catatan |
|---|---|---|
| OGC API Features (Core, GeoJSON) | /ogc/features | bbox CRS84, limit (maks 1.000), offset, properties, f=json|geojson|html |
| WFS 2.0 | /ogc/wfs?SERVICE=WFS&REQUEST=GetCapabilities | GetFeature sebagai GeoJSON atau GML 3.2, DescribeFeatureType |
| WMS 1.3.0 | /ogc/wms?SERVICE=WMS&REQUEST=GetCapabilities | GetMap PNG/JPEG maks 2.048×2.048 px, GetFeatureInfo |
Parameter yang tidak didukung ditolak dengan exception standar OGC, tidak
diabaikan diam-diam. WFS FILTER dan datetime belum didukung. Geometri
disajikan dalam CRS84 (lon, lat) dengan 6 desimal.
API bisa dipakai tanpa key. Key gratis dibuat di halaman
/keys tanpa akun, lalu
dikirim lewat header X-API-Key atau parameter api_key.
| Akses | Umum | Endpoint berat | Harian |
|---|---|---|---|
| Tanpa key (per IP) | 60/menit | 10/menit | tidak dibatasi |
| Key gratis | 300/menit | 60/menit | 20.000 |
| Key pemilik | 3.000/menit | 3.000/menit | tidak dibatasi |
Yang termasuk endpoint berat: WMS GetMap, WFS GetFeature, OGC items, dan
geometry=true. Vector tiles dan health tidak dibatasi. Bila batas terlampaui,
server menjawab 429 dengan Retry-After; key yang tidak valid dijawab 401. Key
gratis berlaku 365 hari dan hanya ditampilkan sekali.
| Layer | Zoom | Fitur |
|---|---|---|
provinsi | 3 sampai 9 | 38 |
kabupaten | 7 sampai 11 | 514 |
kecamatan | 10 sampai 12 | 7.282 |
desa | 12 sampai 14 | 83.529 |
Tile berformat MVT tanpa kompresi, dengan CORS terbuka.
Server MCP membuka data ini ke agent LLM (Claude Desktop, Cursor, dan klien MCP lain) dengan kosakata spasial generik. Semua akses bersifat read-only, dan nama tabel tidak terlihat oleh klien.
| Tool | Fungsi |
|---|---|
describe_spatial_service | Dataset, layer, atribut, operasi, snapshot, dan batas pemakaian |
resolve_spatial_entity | Nama atau kode ke kandidat wilayah, dengan penanda ambigu |
get_spatial_entity | Atribut, hierarki, bbox, dan geometri (opsional) |
locate_coordinates | Wilayah yang memuat suatu koordinat |
relate_spatial_entities | Topologi, jarak, dan arah antara dua wilayah |
find_related_spatial_entities | Parent, children, tetangga, within, nearest |
extract_spatial_subset | Potong wilayah per bbox, GeoJSON, atau wilayah, lalu unduh GeoJSON/GeoPackage |
Ada juga lima tool lama untuk kompatibilitas (search_regions,
get_region_details, reverse_geocode, get_top_populated_regions,
get_demographic_summary). Setiap respons memakai envelope status, data,
meta dengan snapshot big-2026-06-12+kepmendagri-2025+dukcapil-2024-s1,
CRS, provenance, dan kode error yang stabil.
Endpoint publik butuh key: key gratis dari /keys mendapat 120 request dan 10
unduhan artefak per menit. Contoh konfigurasi klien:
{
"mcpServers": {
"wilayah-id": {
"url": "https://wilayah-id-mcp.dhanypedia.com/mcp",
"headers": { "X-API-Key": "<key dari /keys>" }
}
}
}
Untuk lokal, jalankan docker compose up mcp-server lalu pakai
http://127.0.0.1:8000/mcp. Konfigurasi dan deployment ada di
docs/MCP_DEPLOYMENT.md.
Image web dipublikasikan otomatis ke
ghcr.io/dhanyyudi/wilayah-id:latest setiap ada perubahan di main.
docker-compose.yml menjalankan PostGIS, web, dan MCP sekaligus.
git clone https://github.com/dhanyyudi/wilayah-id.git
cd wilayah-id
cp .env.example .env.local # isi DATABASE_URL
pnpm install
pnpm dev # http://localhost:3000
Database bisa diisi dengan dua cara:
docs/BIG_2026_MIGRATION.md:
etl/big_boundaries.py prepare, scripts/load-big-stage.sh, lalu
sql/migrations/20261015_big2026_boundaries.sql. Tiles dibuat dengan
etl/generate_tiles_dukcapil.py (butuh tippecanoe dan mb-util).Saat menguji server lokal, set WILAYAH_RUNTIME_ROLE=origin supaya /api/*
dijawab oleh database lokal. Tanpa itu, request diteruskan ke API publik.
pnpm lint && pnpm typecheck && pnpm test && pnpm build # web
pnpm build:cf && pnpm exec wrangler deploy --dry-run # bundle Cloudflare
cd mcp && python -m unittest discover -s tests -v # MCP
python -m unittest discover -s etl/tests -v # ETL
BASE_URL=http://127.0.0.1:3000 bash scripts/smoke-public-geospatial.sh
| Bagian | Teknologi |
|---|---|
| Web | Next.js 16 (App Router), React 19, Tailwind CSS v4, shadcn/ui |
| Peta | MapLibre GL JS v5 via mapcn |
| Database | PostGIS 3.5 (PostgreSQL 16 di produksi, 17 di compose lokal) |
| MCP | Python 3.11, FastMCP, GDAL untuk GeoPackage |
| ETL | Python, GeoPandas, Shapely 2.1 (coverage_simplify) |
| Hosting | Web di Cloudflare Workers (OpenNext); API, tiles, dan MCP di homeserver lewat Cloudflare Tunnel |
src/app/ halaman (peta, docs, keys, self-host) dan route API /api/v1
src/lib/ akses database, OGC, validasi, provenance, API key
src/components/ komponen peta dan UI
mcp/ server MCP (FastMCP) dan adapter PostGIS
etl/ persiapan data BIG, nama wilayah, kode pos, tiles
sql/ migrasi dan update data
scripts/ smoke test, staging, dan release data
deploy/ konfigurasi Nginx tiles dan override homeserver
docs/ migrasi BIG 2026 dan deployment MCP
Kode berlisensi MIT. Geometri batas bersumber dari Badan Informasi Geospasial (BIG) dan tunduk pada ketentuan BIG; cantumkan atribusi BIG saat memakai atau mendistribusikan ulang geometri. Nama wilayah dari Kepmendagri 2025, data penduduk dari Ditjen Dukcapil Kemendagri 2024 Semester 1.