diff --git a/.gitignore b/.gitignore index 218c694..9dfcd49 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,33 @@ -# OS -.DS_Store -Thumbs.db +# Dependencies +node_modules/ + +# Build output +dist/ +dist-ssr/ + +# Vite +.vite/ + +# Environment variables +.env +.env.local +.env.*.local + +# Logs +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* # Editor .vscode/ .idea/ +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? -# XAMPP / PHP logs -*.log +# OS +.DS_Store +Thumbs.db \ No newline at end of file diff --git a/README.md b/README.md index 54864ba..68946fd 100644 --- a/README.md +++ b/README.md @@ -1,148 +1,99 @@ -# Tugas WebGIS — PHP & Leaflet +# WebGIS Portal — Pontianak -Kumpulan tugas WebGIS berbasis PHP + MySQL, dijalankan menggunakan **XAMPP** (Apache + MySQL). +Portal pemetaan interaktif berbasis React + Leaflet.js untuk empat proyek WebGIS: + +| # | Proyek | Fitur | +| --- | -------------------- | ------------------------------------- | +| 01 | SPBU Map | Tambah / hapus / geser marker SPBU | +| 02 | WebGIS Jalan & Tanah | Gambar polyline & polygon, CRUD penuh | +| 03 | Kepadatan Penduduk | Choropleth per kecamatan Pontianak | +| 04 | SPBU + Layer Control | Seperti P01 + toggle layer 24 jam | --- -## Cara Menjalankan +## Cara Deploy -### 1. Prasyarat - -- [XAMPP](https://www.apachefriends.org/) sudah terinstall -- Apache dan MySQL sudah aktif (buka XAMPP Control Panel → klik **Start** pada keduanya) - -### 2. Letakkan folder project - -Salin folder `tugas/` ke dalam direktori `htdocs` milik XAMPP: - -| OS | Path htdocs | -| ------- | ----------------------------------- | -| Windows | `C:\xampp\htdocs\tugas\` | -| Linux | `/opt/lampp/htdocs/tugas/` | -| macOS | `/Applications/XAMPP/htdocs/tugas/` | - -Struktur yang diharapkan: - -``` -htdocs/ -└── tugas/ - ├── 01/ - │ ├── index.php - │ └── spbu_map.sql - ├── 02/ - │ ├── index.php - │ └── webgis_db.sql - ├── 03/ - │ ├── index.php - │ ├── pontianak.js - │ ├── pontianak.json - │ └── us-states.js - └── 04/ - ├── index.php - └── spbu_map.sql -``` - -### 3. Import database (untuk tugas yang menggunakan database) - -Buka **phpMyAdmin** di `http://localhost/phpmyadmin`, lalu import file SQL: - -| Tugas | File SQL | Database | -| ----- | ------------------ | ----------- | -| 01 | `01/spbu_map.sql` | `spbu_map` | -| 02 | `02/webgis_db.sql` | `webgis_db` | -| 04 | `04/spbu_map.sql` | `spbu_map` | - -> Tugas 03 **tidak memerlukan database** — data sudah ada di file `.js` dan `.json`. - -Cara import via phpMyAdmin: - -1. Buka `http://localhost/phpmyadmin` -2. Klik tab **Import** di menu atas -3. Pilih file `.sql` yang sesuai -4. Klik **Go / Kirim** - -Atau bisa juga melalui MySQL CLI: +### 1 — Install & jalankan lokal ```bash -mysql -u root -p < tugas/01/spbu_map.sql -mysql -u root -p < tugas/02/webgis_db.sql +# Masuk ke folder project +cd semua-tugas + +# Install dependencies (Node.js ≥ 18 diperlukan) +npm install + +# Jalankan development server +npm run dev +# → Buka http://localhost:5173 +``` + +### 2 — Build untuk produksi + +```bash +npm run build +# Output ada di folder dist/ +``` + +### 3 — Deploy ke Vercel (gratis, paling mudah) + +```bash +npm install -g vercel +vercel # ikuti petunjuk, pilih "Vite" framework +``` + +### 4 — Deploy ke Netlify + +```bash +npm run build +# Drag-and-drop folder dist/ ke https://app.netlify.com/drop +``` + +### 5 — Deploy ke GitHub Pages + +```bash +# 1. Push project ini ke GitHub repository +# 2. Di vite.config.js tambahkan: base: '//' +# 3. npm run build +# 4. Deploy folder dist/ sebagai GitHub Pages ``` --- -## Daftar Tugas +## Database MySQL -### Tugas 01 — SPBU Map Pontianak +File `webgis-portal.sql` berisi schema lengkap untuk semua proyek. -**URL:** `http://localhost/tugas/01/index.php` -**Database:** `spbu_map` - -Peta interaktif SPBU di Pontianak menggunakan Leaflet.js. Fitur: - -- Tambah SPBU dengan klik pada peta (isi nama, nomor WA, status 24 jam) -- Marker berwarna: **hijau** = buka 24 jam, **merah** = tidak 24 jam -- Drag marker untuk pindah lokasi (otomatis tersimpan) -- Hapus data SPBU -- Popup dengan info detail dan link WhatsApp - ---- - -### Tugas 02 — WebGIS Jalan dan Parsil Tanah - -**URL:** `http://localhost/tugas/02/index.php` -**Database:** `webgis_db` - -WebGIS untuk manajemen data spasial jalan dan parsil tanah. Fitur: - -- Gambar **polyline** (jalan) dan **polygon** (parsil tanah) langsung di peta -- Undo titik saat menggambar -- CRUD atribut: nama, status jalan (Nasional/Provinsi/Kabupaten), status kepemilikan (SHM/HGB/HGU/HP) -- Edit geometri (seret titik untuk ubah bentuk) -- Kalkulasi otomatis panjang jalan (meter) dan luas tanah (m²) -- Legenda warna per status - ---- - -### Tugas 03 — Peta Kepadatan Penduduk Pontianak - -**URL:** `http://localhost/tugas/03/index.php` -**Database:** Tidak diperlukan - -Peta choropleth kepadatan penduduk per kecamatan di Pontianak menggunakan data GeoJSON lokal. Fitur: - -- Visualisasi gradasi warna berdasarkan kepadatan penduduk -- Data koordinat UTM (Zone 49N) dikonversi ke WGS84 via Proj4js -- Info panel saat hover kecamatan -- Legenda kepadatan - ---- - -### Tugas 04 — SPBU Map (Extended) - -**URL:** `http://localhost/tugas/04/index.php` -**Database:** `spbu_map` (sama dengan Tugas 01) - -Versi lanjutan dari Tugas 01 dengan fitur tambahan pada tampilan dan fungsionalitas peta SPBU Pontianak. - ---- - -## Konfigurasi Database - -Semua file PHP menggunakan koneksi default XAMPP: - -```php -$conn = new mysqli("localhost", "root", "", "nama_database"); +```bash +mysql -u root -p < webgis-portal.sql ``` -Jika password MySQL Anda berbeda dari default (kosong), ubah parameter ketiga sesuai password Anda pada masing-masing file `index.php`. +> **Catatan:** Versi front-end ini menggunakan data statis (embedded). +> Untuk menghubungkan ke MySQL nyata, tambahkan REST API (Express.js / Laravel) +> dan ganti data di `spbuDataRef` dengan fetch ke endpoint API Anda. --- -## Teknologi yang Digunakan +## Struktur File -- **PHP** — backend & CRUD database -- **MySQL** — penyimpanan data spasial -- **Leaflet.js** — library peta interaktif -- **Leaflet-Editable** — edit geometri di peta (Tugas 02) -- **Proj4js** — konversi proyeksi koordinat (Tugas 03) -- **OpenStreetMap** — tile layer peta dasar +``` +webgis-portal/ +├── index.html ← entry point HTML +├── vite.config.js ← konfigurasi Vite +├── package.json ← dependencies +├── public/ +│ └── favicon.svg +└── src/ + ├── main.jsx ← React root + └── App.jsx ← semua komponen (Landing + 4 proyek) +``` + +## Stack + +- **React 18** — UI framework +- **Vite 5** — build tool +- **Leaflet.js 1.9.4** — peta interaktif (dimuat via CDN) +- **OpenStreetMap** — tile basemap + +--- + +_Dikembangkan untuk Tugas WebGIS · Pontianak, Kalimantan Barat_ diff --git a/index.html b/index.html new file mode 100644 index 0000000..0cd24df --- /dev/null +++ b/index.html @@ -0,0 +1,14 @@ + + + + + + WebGIS Portal — Pontianak + + + + +
+ + + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..0638e39 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1719 @@ +{ + "name": "webgis-portal", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "webgis-portal", + "version": "1.0.0", + "dependencies": { + "react": "^18.3.1", + "react-dom": "^18.3.1" + }, + "devDependencies": { + "@vitejs/plugin-react": "^4.3.1", + "vite": "^5.4.2" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.29.7", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz", + "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", + "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.7" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.29.7.tgz", + "integrity": "sha512-TL0hMc9xzy86VD31nUiwzd5otRAcyEPcsegCxolO0PvcXuH1v0kECe/UIznYFihpkvU5wg/jk4v0TTEFfm53fw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.29.7.tgz", + "integrity": "sha512-06IyK09H3wi4cGbhDBwp5gUGo0IKtnYa8tyTiephirPCK6fbobVGiXMMI5zLQ4aKEYP3wZ3ArU44o+8KMrSG/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz", + "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", + "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.61.1.tgz", + "integrity": "sha512-JnBB8MdXj45cajvTuO5FmPlvFVJRQgvrz1uSEl3NwqFnReAPGwb8EanbGi4z2nRaqLzjJSv5/JmycoTKlRZxHA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.61.1.tgz", + "integrity": "sha512-Jx2g7iSjw4AOT0HDPHM9RV3GNjRXwybWtSFZiZAYUTjUwjVrYIwq3kBf+LnhqJlzXFAqTAh2F7IGI+O568exPw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.61.1.tgz", + "integrity": "sha512-0F1L/Z3Eqv8mT2n3dCpeO8GcTvHvVqkP5/t6DMsn0KzhYVcg+s7Ncl5DS8qjKYEeio6Az0Gt6nyBORay5qIlCA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.61.1.tgz", + "integrity": "sha512-qLttcH871ujY4YcVfUSShhOw+CsoTatYz8gRbHO7Bb92QH059/P0y5do1KMs41fY0BpD2x4AJH/gID0zFiqVKQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.61.1.tgz", + "integrity": "sha512-fUI4RapGE0Oh3mb8mgfvC1O2nU1RpDZUKnDQm3xB1Ipg7C2wTs5Kstz7G2uWK99a8S2yTMq8/P4uycwNa0nJyw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.61.1.tgz", + "integrity": "sha512-H5YrdvJaDtI/U9/emrD4b++xkvp3y/JvOe4rizHbxvkyMfRS/CiRYdji+Pl8D0brEaNFWUh1drQxgAGIl6Xudw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.61.1.tgz", + "integrity": "sha512-Q8CBCCQtDFrYtXoeUXSrnFXKOnyUhx6bz+SkL6A0E7V8kAiCJ5pamq1WtbfpVGhR5TSpXY6ak3avmDc5fHTyJA==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.61.1.tgz", + "integrity": "sha512-nwnhk1581l0FBVellGcVCAT0Oi06onEA3WB53sf01VO3I0UPBkMH9sXONYME2K0ovXcNayJfNtHfm6mpJElatQ==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.61.1.tgz", + "integrity": "sha512-x5Xr49hwt3hdW75UOZm3395YwwzPyauktslv29KpWL/T+vVAzoT3azLcTWv0eMciBNrx+DYjH4paehHoLpPvpg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.61.1.tgz", + "integrity": "sha512-unMS3H73DpaoPyyEVPjGKleM/s0mkmsauTENpw4INQY8y4+IuLNjkueQ5QCtC0D3N38Y38yhAU8OoZ20S2Tm6w==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.61.1.tgz", + "integrity": "sha512-zNZzGRnAhwjFEYmvphJRV5XaQGjs62cCmeYYHUT//NbvEnHauw+I85nGG+SiVg5ld4GX8D1IbKIX+ozITQnhMQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.61.1.tgz", + "integrity": "sha512-LdpWGL8X209B2SIvWjqlc8VZgM6PKfontSerGepuldQmHYrAOtnMCXeJkxXGbC+PPZVOuu5czJo7fNV6aeW8rQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.61.1.tgz", + "integrity": "sha512-EC5kTtNaNGOmbMGqar8dvJy6y/hg99GAwjfBz++pxZhQATXGcRjd6c5en5wcbru0vkRmiMGsQKdMJOOf6sza4g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.61.1.tgz", + "integrity": "sha512-8hiwp6D4acEcNK78I4rP0/XtS1sknWIAMJBPdR4l6zUtyTm5KiTDr5bXmWt4foY7nAN7AThDHgkLIEZOWKbzWw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.61.1.tgz", + "integrity": "sha512-10dh/h/BqA7DuMPWSxkR8uks18FRwnwOEqr5zOTEl+NOwP/OMzKX8OFR/Of9xxDA7D5qef1Nzar5WDD2kCCr1g==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.61.1.tgz", + "integrity": "sha512-YKJ5lg35DP17gcAOggnihe+APw9HLyj1Xn7gsmGumBJAUDa6NGXNixJzmkWLhcK9TOuuyQjdamzvJefkO7qHZQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.61.1.tgz", + "integrity": "sha512-Mlil5G2Jj6a7B3LWGctg+XPL9vdXYuzCtNXfxOQ0nPjc2m6ueUktocPGH9bnAM0bNRKb/bAWTujUU7IJQdQA+g==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.61.1.tgz", + "integrity": "sha512-bVWIOIk6pV01p4CdUbPP7CJ/434z+OooYjDuFcR+44N35YvKUC66G8MGnvcWx5mWKW3g61J+t74l3Kj15Kwn2Q==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.61.1.tgz", + "integrity": "sha512-qy5pBvZbqNFheBz61R1rzsezjm0J7O2oNGoWtGoY89SZYLUfxAJTBAqDChqAIdB4rCiIbi9nF7yZ83GnNiLwSw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.61.1.tgz", + "integrity": "sha512-E83TXjI4zm0+5f2qO+UOudaCYIhYwpJ5jq6YCZNIZ+6CbfhKrkAGezeiASBL9ElxAxFsRS9ZhESv8mfnj6TKeg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.61.1.tgz", + "integrity": "sha512-fbWnKqVkjrJN38vNe3ahkbk6iejS/3b0Nt7EEtPpE6RBacZcGXNKbzfHN3GUUlXOPghUg0j6XUGrtjX9z1sIvA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.61.1.tgz", + "integrity": "sha512-ArMl38iVAbk0New1ogihQNY6iphLi4ZaRsa037gUzv5yeKPY8TD3Dmy4x2RNC1VztU/uqm+G+/RwFrSka3Oy2g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.61.1.tgz", + "integrity": "sha512-0mYtjHS9ucAbcATycCNK9IGBk/cCe/ma7EmSLGZdsxnOA8cjRIyU04wDpVAD9NiOfLUR9KTxdiO53uOkherqjQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.61.1.tgz", + "integrity": "sha512-gK1iCEPfpoSG9wfBihXxvBMi8ZfcWffYkEsC/Eih+iFENTaewvNcrEQ69lIOWYO5pePHKLHHO7nq5AILGO/HQQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.61.1.tgz", + "integrity": "sha512-X+zaP2x+j4RXGfbp/seSoRHWnPxzApilDszisZxbYH5C/jTxFhCtDNdPGZb9lJyYPs24wGxruPF7Y+sIXt9Gzw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", + "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.0", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.27", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.17.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.35", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.35.tgz", + "integrity": "sha512-honAfLBde0HAFLdNyBEfuuENkF6zR+ozxqxa/2zJKHBe1qzLqyTSeRKpdPEHAP03rlDGyQOPnCSxnVpVqQo9Mg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/browserslist": { + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", + "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.10.12", + "caniuse-lite": "^1.0.30001782", + "electron-to-chromium": "^1.5.328", + "node-releases": "^2.0.36", + "update-browserslist-db": "^1.2.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001799", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001799.tgz", + "integrity": "sha512-hG1bReV+OUU+MOqK4t/ZWI0tZOyz3rqS9XuhOUz1cIcbwBKjOyJEJuw9ER5JuNyqxNk8u/JUVbGibBOL1yrjFw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.371", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.371.tgz", + "integrity": "sha512-e9htk9mAYL6AzmkEhSvVVw7IWGSBJ/Bqdn2eRyRLrj1g6sncN4WbFt5qnILYoCktktr45pyjIrOiRvBThQ808w==", + "dev": true, + "license": "ISC" + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", + "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.47", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.47.tgz", + "integrity": "sha512-Uzmd6LXpouKo8EUK68IjH4+E01w/hXyV3R3g/geCJo+rXLNfh1xucB+LOzYEOQPSiUK3h/xZf0cQGcSsmyL2Og==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/postcss": { + "version": "8.5.15", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz", + "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.12", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-refresh": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", + "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.61.1.tgz", + "integrity": "sha512-I4KW6iuRpuu2uHBLraZ1wNZe0DP7lnRha+VJ9tNaYVaVgKhW0aI3h4RYnoRPeql0flHm/Co55b7snEDcOfOJrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.9" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.61.1", + "@rollup/rollup-android-arm64": "4.61.1", + "@rollup/rollup-darwin-arm64": "4.61.1", + "@rollup/rollup-darwin-x64": "4.61.1", + "@rollup/rollup-freebsd-arm64": "4.61.1", + "@rollup/rollup-freebsd-x64": "4.61.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.61.1", + "@rollup/rollup-linux-arm-musleabihf": "4.61.1", + "@rollup/rollup-linux-arm64-gnu": "4.61.1", + "@rollup/rollup-linux-arm64-musl": "4.61.1", + "@rollup/rollup-linux-loong64-gnu": "4.61.1", + "@rollup/rollup-linux-loong64-musl": "4.61.1", + "@rollup/rollup-linux-ppc64-gnu": "4.61.1", + "@rollup/rollup-linux-ppc64-musl": "4.61.1", + "@rollup/rollup-linux-riscv64-gnu": "4.61.1", + "@rollup/rollup-linux-riscv64-musl": "4.61.1", + "@rollup/rollup-linux-s390x-gnu": "4.61.1", + "@rollup/rollup-linux-x64-gnu": "4.61.1", + "@rollup/rollup-linux-x64-musl": "4.61.1", + "@rollup/rollup-openbsd-x64": "4.61.1", + "@rollup/rollup-openharmony-arm64": "4.61.1", + "@rollup/rollup-win32-arm64-msvc": "4.61.1", + "@rollup/rollup-win32-ia32-msvc": "4.61.1", + "@rollup/rollup-win32-x64-gnu": "4.61.1", + "@rollup/rollup-win32-x64-msvc": "4.61.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/vite": { + "version": "5.4.21", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", + "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..c5f1bfc --- /dev/null +++ b/package.json @@ -0,0 +1,18 @@ +{ + "name": "webgis-portal", + "version": "1.0.0", + "private": true, + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "react": "^18.3.1", + "react-dom": "^18.3.1" + }, + "devDependencies": { + "@vitejs/plugin-react": "^4.3.1", + "vite": "^5.4.2" + } +} diff --git a/public/favicon.svg b/public/favicon.svg new file mode 100644 index 0000000..7685e89 --- /dev/null +++ b/public/favicon.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/App.jsx b/src/App.jsx new file mode 100644 index 0000000..b6a4f66 --- /dev/null +++ b/src/App.jsx @@ -0,0 +1,1797 @@ +import { useState, useEffect, useRef, useCallback } from "react"; + +// ─── Light Design Tokens (matches index.css) ───────────────────────────────── +const IOS = { + // Backgrounds + bg: "#f7f8f7", + bgElevated: "#ffffff", + bgGrouped: "#f2f2f7", + // Labels + label: "#1c1c1e", + labelSecondary: "#636366", + labelTertiary: "#aeaeb2", + // Fills + fill: "rgba(120,120,128,0.10)", + fillSecondary: "rgba(120,120,128,0.06)", + // Separators + separator: "rgba(60,60,67,0.12)", + // System colors + blue: "#007aff", + green: "#34c759", + orange: "#ff9500", + red: "#ff3b30", + indigo: "#5856d6", + teal: "#32ade6", + yellow: "#ffcc00", + // Radius + r6: "6px", + r10: "10px", + r12: "12px", + r14: "14px", + r16: "16px", +}; + +const css = ` + @import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@300;400;500;600;700&family=DM+Serif+Display&display=swap'); + + *, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; } + + html, body, #root { + height: 100%; + background: #f7f8f7; + color: #1c1c1e; + font-family: 'DM Sans', -apple-system, BlinkMacSystemFont, 'Helvetica Neue', sans-serif; + -webkit-font-smoothing: antialiased; + } + + ::-webkit-scrollbar { width: 4px; } + ::-webkit-scrollbar-track { background: transparent; } + ::-webkit-scrollbar-thumb { background: rgba(120,120,128,0.18); border-radius: 2px; } + + .leaflet-container { + font-family: 'DM Sans', -apple-system, BlinkMacSystemFont, sans-serif !important; + background: #e8eaed; + } + .leaflet-control-zoom { + border: none !important; + box-shadow: 0 8px 32px rgba(0,0,0,0.10), 0 1.5px 4px rgba(0,0,0,0.05) !important; + margin-top: 0 !important; + } + .leaflet-top.leaflet-left { + top: auto !important; + bottom: 50% !important; + left: 16px !important; + } + .leaflet-control-zoom a { + background: rgba(255,255,255,0.80) !important; + backdrop-filter: blur(20px) saturate(180%) !important; + -webkit-backdrop-filter: blur(20px) saturate(180%) !important; + color: #1c1c1e !important; + border: none !important; + border-bottom: 1px solid rgba(60,60,67,0.12) !important; + font-size: 16px !important; + font-weight: 300 !important; + width: 36px !important; + height: 36px !important; + line-height: 36px !important; + } + .leaflet-control-zoom a:hover { + background: #f2f2f7 !important; + color: #007aff !important; + } + .leaflet-control-zoom-in { border-radius: 12px 12px 0 0 !important; } + .leaflet-control-zoom-out { border-radius: 0 0 12px 12px !important; border-bottom: none !important; } + .leaflet-control-attribution { + background: rgba(255,255,255,.62) !important; + backdrop-filter: blur(8px) !important; + border-radius: 8px 0 0 0 !important; + font-size: 9px !important; + color: #aeaeb2 !important; + } + .leaflet-control-attribution a { color: #636366 !important; } + .leaflet-control-layers { + background: rgba(255,255,255,0.90) !important; + border: 1px solid rgba(0,0,0,0.08) !important; + border-radius: 12px !important; + color: #1c1c1e !important; + box-shadow: 0 8px 32px rgba(0,0,0,0.10) !important; + backdrop-filter: blur(20px) saturate(180%); + } + .leaflet-control-layers-list { padding: 4px 0; } + .leaflet-control-layers label { + color: #1c1c1e !important; + font-size: 13px; + padding: 4px 12px; + display: flex; + align-items: center; + gap: 8px; + } + + .leaflet-popup-content-wrapper { + background: #ffffff !important; + color: #1c1c1e !important; + border: 1px solid rgba(0,0,0,0.06) !important; + border-radius: 16px !important; + box-shadow: 0 12px 40px rgba(0,0,0,.18), 0 2px 6px rgba(0,0,0,.07) !important; + padding: 0 !important; + overflow: hidden; + min-width: 230px; + } + .leaflet-popup-content { margin: 0 !important; width: auto !important; } + .leaflet-popup-tip-container { display: none; } + .leaflet-popup-close-button { + color: rgba(255,255,255,.65) !important; + font-size: 18px !important; + top: 10px !important; + right: 10px !important; + z-index: 1; + } + .leaflet-popup-close-button:hover { color: #fff !important; } + + .pop-section-title { + font-size: 9px; + font-weight: 600; + letter-spacing: 0.12em; + text-transform: uppercase; + color: rgba(255,255,255,0.75); + margin-bottom: 3px; + } + .pop-title { + font-size: 15px; + font-weight: 700; + color: #ffffff; + letter-spacing: -0.3px; + } + .pop-row { + display: flex; + align-items: center; + gap: 8px; + font-size: 12.5px; + color: #1c1c1e; + padding: 3px 0; + } + .pop-badge { + display: inline-block; + padding: 2px 9px; + border-radius: 20px; + font-size: 11px; + font-weight: 500; + border: 1px solid; + } + .pop-footer { + display: flex; + gap: 6px; + padding: 10px 14px; + border-top: 0.5px solid rgba(60,60,67,0.12); + background: #fff; + } + .pop-btn { + flex: 1; + padding: 8px 10px; + border: none; + border-radius: 8px; + font-size: 13px; + font-weight: 500; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + gap: 5px; + transition: background 0.12s; + font-family: 'DM Sans', -apple-system, BlinkMacSystemFont, sans-serif; + background: #fff; + } + .pop-btn:hover { background: #f2f2f7; } + .pop-btn-primary { color: #007aff; } + .pop-btn-warn { color: #ff9500; } + .pop-btn-danger { color: #ff3b30; } + + .fp-label { + display: block; + font-size: 11px; + font-weight: 600; + color: #636366; + margin-bottom: 5px; + letter-spacing: 0.02em; + } + .fp-input, .fp-select { + width: 100%; + background: #f7f8f7; + border: 1px solid rgba(60,60,67,0.18); + border-radius: 8px; + padding: 9px 12px; + font-size: 14px; + font-family: 'DM Sans', -apple-system, BlinkMacSystemFont, sans-serif; + color: #1c1c1e; + outline: none; + transition: border-color 0.15s, background 0.15s; + -webkit-appearance: none; + } + .fp-input::placeholder { color: #aeaeb2; } + .fp-input:focus, .fp-select:focus { + border-color: #007aff; + background: rgba(0,122,255,0.04); + } + .fp-select option { background: #fff; color: #1c1c1e; } + .fp-submit { + width: 100%; + background: #007aff; + color: #fff; + border: none; + border-radius: 10px; + padding: 12px; + font-size: 15px; + font-weight: 600; + font-family: 'DM Sans', -apple-system, BlinkMacSystemFont, sans-serif; + cursor: pointer; + transition: opacity 0.15s; + margin-top: 4px; + } + .fp-submit:hover { opacity: 0.88; } + + .chip-bar { + position: absolute; + z-index: 1000; + background: rgba(255,255,255,0.80); + border: 1px solid rgba(0,0,0,0.08); + border-radius: 50px; + padding: 8px 16px; + display: flex; + align-items: center; + gap: 8px; + font-size: 13px; + color: #636366; + box-shadow: 0 8px 32px rgba(0,0,0,0.10), 0 1.5px 4px rgba(0,0,0,0.05); + backdrop-filter: blur(20px) saturate(180%); + -webkit-backdrop-filter: blur(20px) saturate(180%); + white-space: nowrap; + } + + .toast-bar { + position: absolute; + z-index: 3000; + background: rgba(28,28,30,0.86); + backdrop-filter: blur(12px); + -webkit-backdrop-filter: blur(12px); + border-radius: 50px; + padding: 9px 20px; + display: flex; + align-items: center; + gap: 8px; + font-size: 13px; + font-weight: 500; + color: #fff; + box-shadow: 0 4px 16px rgba(0,0,0,.2); + pointer-events: none; + left: 50%; + transform: translateX(-50%) translateY(-4px); + opacity: 0; + transition: opacity 0.22s, transform 0.2s; + white-space: nowrap; + } + .toast-bar.show { + opacity: 1; + transform: translateX(-50%) translateY(0); + } + + @keyframes fadeIn { + from { opacity: 0; transform: translateY(8px); } + to { opacity: 1; transform: translateY(0); } + } +`; + +// ─── SQL file content ───────────────────────────────────────────────────────── +const SQL_CONTENT = `-- ============================================================ +-- WebGIS Portal — Combined Database Schema +-- Covers: Project 01, 02, 03 (static), 04 +-- ============================================================ + +-- Database for SPBU Map (Projects 01 & 04) +CREATE DATABASE IF NOT EXISTS spbu_map + CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +USE spbu_map; + +CREATE TABLE IF NOT EXISTS spbu ( + id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, + nama_spbu VARCHAR(200) NOT NULL, + nomor_wa VARCHAR(20) NOT NULL DEFAULT '', + buka_24_jam TINYINT(1) NOT NULL DEFAULT 0 COMMENT '1 = buka 24 jam, 0 = tidak', + latitude DECIMAL(10, 7) NOT NULL, + longitude DECIMAL(10, 7) NOT NULL, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + + INDEX idx_buka_24_jam (buka_24_jam), + INDEX idx_coords (latitude, longitude) +) ENGINE=InnoDB; + +-- Sample SPBU data (Pontianak area) +INSERT INTO spbu (nama_spbu, nomor_wa, buka_24_jam, latitude, longitude) VALUES + ('Pertamina Ahmad Yani', '6281234567890', 1, -0.0500, 109.3450), + ('Pertamina Sungai Raya', '6281234567891', 0, -0.0870, 109.3620), + ('Shell Pontianak Tengah', '6281234567892', 1, -0.0320, 109.3300), + ('Pertamina Tanjung Raya', '6281234567893', 0, -0.0130, 109.3550), + ('Vivo Khatulistiwa', '6281234567894', 1, 0.0020, 109.3280); + +-- ============================================================ +-- Database for WebGIS Jalan & Tanah (Project 02) +-- ============================================================ + +CREATE DATABASE IF NOT EXISTS webgis_db + CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +USE webgis_db; + +CREATE TABLE IF NOT EXISTS jalan ( + id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, + nama_jalan VARCHAR(200) NOT NULL, + status_jalan ENUM('Nasional','Provinsi','Kabupaten') NOT NULL DEFAULT 'Kabupaten', + panjang_meter DECIMAL(12, 2) NOT NULL DEFAULT 0, + geojson MEDIUMTEXT NOT NULL COMMENT 'GeoJSON LineString geometry', + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + + INDEX idx_status (status_jalan) +) ENGINE=InnoDB; + +CREATE TABLE IF NOT EXISTS parsil_tanah ( + id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, + nama_parsil VARCHAR(200) NOT NULL, + status_kepemilikan ENUM('SHM','HGB','HGU','HP') NOT NULL DEFAULT 'SHM', + luas_m2 DECIMAL(14, 2) NOT NULL DEFAULT 0, + geojson MEDIUMTEXT NOT NULL COMMENT 'GeoJSON Polygon geometry', + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + + INDEX idx_status (status_kepemilikan) +) ENGINE=InnoDB; + +-- Sample jalan data (GeoJSON LineString, WGS84) +INSERT INTO jalan (nama_jalan, status_jalan, panjang_meter, geojson) VALUES +( + 'Jl. Ahmad Yani', + 'Nasional', + 4200, + '{"type":"LineString","coordinates":[[109.325,-0.045],[109.330,-0.042],[109.335,-0.038],[109.340,-0.034],[109.345,-0.030]]}' +), +( + 'Jl. Gajah Mada', + 'Provinsi', + 2800, + '{"type":"LineString","coordinates":[[109.330,-0.020],[109.333,-0.018],[109.336,-0.016],[109.340,-0.014]]}' +), +( + 'Jl. Teuku Umar', + 'Kabupaten', + 1900, + '{"type":"LineString","coordinates":[[109.315,-0.055],[109.318,-0.052],[109.322,-0.050],[109.326,-0.048]]}' +); + +-- Sample parsil data (GeoJSON Polygon, WGS84) +INSERT INTO parsil_tanah (nama_parsil, status_kepemilikan, luas_m2, geojson) VALUES +( + 'Kavling A-01', + 'SHM', + 2400, + '{"type":"Polygon","coordinates":[[[109.328,-0.038],[109.330,-0.038],[109.330,-0.040],[109.328,-0.040],[109.328,-0.038]]]}' +), +( + 'Kavling B-03', + 'HGB', + 3100, + '{"type":"Polygon","coordinates":[[[109.340,-0.025],[109.343,-0.025],[109.343,-0.028],[109.340,-0.028],[109.340,-0.025]]]}' +); + +-- ============================================================ +-- Database for Kepadatan Penduduk (Project 03) +-- Data is embedded statically in the app (UTM reprojection). +-- This table stores the reference data for completeness. +-- ============================================================ + +CREATE DATABASE IF NOT EXISTS kepadatan_db + CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +USE kepadatan_db; + +CREATE TABLE IF NOT EXISTS kecamatan ( + id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, + nama VARCHAR(100) NOT NULL, + density DECIMAL(6,3) NOT NULL COMMENT 'Kepadatan penduduk ribu jiwa per km2', + color_class VARCHAR(20) NOT NULL COMMENT 'rendah / sedang / tinggi', + geojson MEDIUMTEXT NOT NULL COMMENT 'GeoJSON Polygon geometry (WGS84)', + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP +) ENGINE=InnoDB; + +INSERT INTO kecamatan (nama, density, color_class, geojson) VALUES +('Pontianak Selatan', 5.673, 'sedang', '{}'), +('Pontianak Utara', 3.642, 'rendah', '{}'), +('Pontianak Timur', 9.196, 'tinggi', '{}'), +('Pontianak Tenggara', 3.103, 'rendah', '{}'), +('Pontianak Kota', 8.102, 'tinggi', '{}'), +('Pontianak Barat', 9.331, 'tinggi', '{}'); + +-- ============================================================ +-- End of schema +-- ============================================================ +`; + +// ─── Shared toast hook ──────────────────────────────────────────────────────── +function useToast() { + const [toast, setToast] = useState({ msg: "", color: IOS.green, visible: false }); + const timerRef = useRef(null); + const show = useCallback((msg, color = IOS.green) => { + clearTimeout(timerRef.current); + setToast({ msg, color, visible: true }); + timerRef.current = setTimeout(() => setToast(t => ({ ...t, visible: false })), 2600); + }, []); + return [toast, show]; +} + +// ─── Landing Page (redesigned) ──────────────────────────────────────────────── +const LP = { + bg: "#F5F6F8", + bgHero: "#FFFFFF", + surface: "#FFFFFF", + surfaceHover: "#F0F4FF", + border: "rgba(0,0,0,0.08)", + label: "#0F1724", + labelSub: "#5A6474", + labelMuted: "#9BA5B4", + accent: "#2563EB", + accentLight: "rgba(37,99,235,0.08)", + accentBorder: "rgba(37,99,235,0.2)", + amber: "#D97706", + amberLight: "rgba(217,119,6,0.08)", + blue: "#2563EB", + blueLight: "rgba(37,99,235,0.08)", + red: "#DC2626", + redLight: "rgba(220,38,38,0.08)", + green: "#059669", + greenLight: "rgba(5,150,105,0.08)", + separator: "rgba(0,0,0,0.06)", +}; + +// SVG icon components for each project +function IconPin() { + return ( + + + + + ); +} +function IconRoad() { + return ( + + + + ); +} +function IconUsers() { + return ( + + + + + + + ); +} +function IconLayers() { + return ( + + + + + + ); +} + +const projects = [ + { + id: "p01", + Icon: IconPin, + title: "SPBU Map", + subtitle: "Point Layer", + description: "Tambah, hapus, dan geser marker SPBU. Data tersimpan ke MySQL.", + accent: LP.amber, + accentLight: LP.amberLight, + }, + { + id: "p02", + Icon: IconRoad, + title: "WebGIS Jalan & Tanah", + subtitle: "Vector Edit", + description: "Gambar dan edit polyline jalan serta polygon parsil tanah. CRUD penuh.", + accent: LP.blue, + accentLight: LP.blueLight, + }, + { + id: "p03", + Icon: IconUsers, + title: "Kepadatan Penduduk", + subtitle: "Choropleth", + description: "Koropleth kepadatan per kecamatan dengan tiga kelas warna. Data BPS.", + accent: LP.red, + accentLight: LP.redLight, + }, + { + id: "p04", + Icon: IconLayers, + title: "SPBU + Layer Toggle", + subtitle: "Layer Control", + description: "Kontrol layer toggle untuk memisahkan SPBU berdasarkan jam operasi.", + accent: LP.green, + accentLight: LP.greenLight, + }, +]; + +const landingCss = ` + @import url('https://fonts.googleapis.com/css2?family=Playfair+Display:wght@700;800&family=DM+Sans:wght@300;400;500;600&display=swap'); + + @keyframes lpFadeUp { + from { opacity: 0; transform: translateY(12px); } + to { opacity: 1; transform: translateY(0); } + } + + .lp-root { + min-height: 100vh; + background: #F5F6F8; + font-family: 'DM Sans', -apple-system, sans-serif; + -webkit-font-smoothing: antialiased; + overflow-x: hidden; + } + + /* ── hero ── */ + .lp-hero { + background: #FFFFFF; + border-bottom: 1px solid rgba(0,0,0,0.06); + padding: 72px 24px 60px; + display: flex; + flex-direction: column; + align-items: center; + text-align: center; + position: relative; + overflow: hidden; + } + + /* Subtle dot grid — static, no animation */ + .lp-hero::before { + content: ''; + position: absolute; inset: 0; + background-image: radial-gradient(circle, rgba(37,99,235,0.08) 1px, transparent 1px); + background-size: 28px 28px; + pointer-events: none; + } + /* Soft vignette over dot grid */ + .lp-hero::after { + content: ''; + position: absolute; inset: 0; + background: radial-gradient(ellipse 70% 80% at 50% 50%, rgba(255,255,255,0.0) 40%, rgba(255,255,255,0.95) 100%); + pointer-events: none; + } + + /* All hero content sits above pseudo-elements */ + .lp-hero > * { position: relative; z-index: 1; } + + /* ── eyebrow ── */ + .lp-eyebrow { + display: inline-flex; + align-items: center; + gap: 7px; + background: rgba(37,99,235,0.06); + border: 1px solid rgba(37,99,235,0.18); + border-radius: 100px; + padding: 5px 14px; + font-size: 11px; + font-weight: 600; + letter-spacing: 0.11em; + text-transform: uppercase; + color: #2563EB; + margin-bottom: 22px; + animation: lpFadeUp 0.45s 0.05s both; + } + .lp-eyebrow-dot { + width: 6px; height: 6px; + border-radius: 50%; + background: #2563EB; + } + + /* ── headline ── */ + .lp-headline { + font-family: 'Playfair Display', Georgia, serif; + font-size: clamp(36px, 7vw, 64px); + font-weight: 800; + line-height: 1.05; + letter-spacing: -0.02em; + color: #0F1724; + margin-bottom: 16px; + animation: lpFadeUp 0.45s 0.12s both; + } + .lp-headline em { + font-style: normal; + color: #2563EB; + } + + /* ── subhead ── */ + .lp-sub { + font-size: 15px; + font-weight: 400; + color: #5A6474; + max-width: 360px; + line-height: 1.65; + margin-bottom: 28px; + animation: lpFadeUp 0.45s 0.18s both; + } + + /* ── coordinates strip ── */ + .lp-coords { + display: flex; + gap: 14px; + align-items: center; + animation: lpFadeUp 0.45s 0.24s both; + } + .lp-coord-item { + font-size: 11px; + font-weight: 500; + letter-spacing: 0.06em; + color: #9BA5B4; + font-variant-numeric: tabular-nums; + } + .lp-coord-sep { + width: 1px; height: 10px; + background: rgba(0,0,0,0.12); + } + + /* ── cards ── */ + .lp-cards { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 12px; + width: 100%; + max-width: 660px; + margin: 0 auto; + padding: 32px 20px 0; + animation: lpFadeUp 0.45s 0.28s both; + } + @media (max-width: 500px) { + .lp-cards { grid-template-columns: 1fr; } + } + + .lp-card { + position: relative; + background: #FFFFFF; + border: 1px solid rgba(0,0,0,0.08); + border-radius: 14px; + padding: 20px 18px 42px; + cursor: pointer; + transition: border-color 0.18s, transform 0.18s, box-shadow 0.18s, background 0.18s; + text-align: left; + overflow: hidden; + } + .lp-card:hover { + transform: translateY(-2px); + box-shadow: 0 8px 28px rgba(0,0,0,0.08); + } + + .lp-card-icon-wrap { + width: 40px; height: 40px; + border-radius: 10px; + display: flex; + align-items: center; + justify-content: center; + margin-bottom: 14px; + transition: background 0.18s; + } + + .lp-card-title { + font-size: 14px; + font-weight: 700; + color: #0F1724; + letter-spacing: -0.01em; + margin-bottom: 2px; + } + .lp-card-subtitle { + font-size: 10px; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.09em; + margin-bottom: 9px; + transition: color 0.18s; + } + .lp-card-desc { + font-size: 12.5px; + color: #5A6474; + line-height: 1.55; + } + + /* Arrow — bottom-right, slides in on hover */ + .lp-card-arrow { + position: absolute; + bottom: 16px; right: 16px; + opacity: 0; + transition: opacity 0.18s, transform 0.18s; + transform: translateX(-6px); + } + .lp-card:hover .lp-card-arrow { + opacity: 1; + transform: translateX(0); + } + + /* ── divider ── */ + .lp-divider { + width: 100%; + max-width: 660px; + margin: 28px auto 0; + padding: 0 20px; + display: flex; + align-items: center; + gap: 14px; + } + .lp-divider-line { + flex: 1; height: 1px; + background: rgba(0,0,0,0.07); + } + .lp-divider-text { + font-size: 10px; + font-weight: 500; + letter-spacing: 0.08em; + text-transform: uppercase; + color: #9BA5B4; + white-space: nowrap; + } + + /* ── footer ── */ + .lp-footer { + display: flex; + align-items: center; + justify-content: center; + gap: 10px; + padding: 20px 20px 40px; + } + .lp-footer-item { + font-size: 11px; + color: #9BA5B4; + letter-spacing: 0.03em; + } + .lp-footer-dot { + width: 3px; height: 3px; + border-radius: 50%; + background: #CBD2DC; + flex-shrink: 0; + } +`; + +function LandingPage({ onSelect }) { + return ( +
+ + + {/* ── Hero ── */} +
+
+
+ Tugas WebGIS · Pontianak +
+ +

+ Peta Kota
Pontianak +

+ +

+ Empat proyek pemetaan interaktif berbasis Leaflet.js — dari SPBU hingga kepadatan penduduk. +

+ +
+ 0°01′55″S +
+ 109°20′58″E +
+ Kalimantan Barat +
+
+ + {/* ── Cards ── */} +
+ {projects.map((p, i) => ( + + ))} +
+ + {/* ── Divider + Footer ── */} +
+
+ Leaflet.js · OpenStreetMap · MySQL +
+
+ +
+ Leaflet.js +
+ OpenStreetMap +
+ MySQL +
+ React +
+
+ ); +} + +function ProjectCard({ project: p, index, onSelect }) { + const [hovered, setHovered] = useState(false); + const { Icon } = p; + return ( +
onSelect(p.id)} + onMouseEnter={() => setHovered(true)} + onMouseLeave={() => setHovered(false)} + style={{ + borderColor: hovered ? p.accent + "44" : "rgba(0,0,0,0.08)", + }} + > + {/* Icon */} +
+ + + +
+ +
{p.title}
+
+ {p.subtitle} +
+
{p.description}
+ + {/* Arrow */} + + + +
+ ); +} + +// ─── Back button (shared) ───────────────────────────────────────────────────── +function BackButton({ onBack }) { + return ( + + ); +} + +// ─── Toast component ────────────────────────────────────────────────────────── +function Toast({ toast, top = 70 }) { + return ( +
+
+ {toast.msg} +
+ ); +} + +// ─── Map loader helper (inject Leaflet script once) ─────────────────────────── +function useLeaflet(onReady) { + useEffect(() => { + if (window.L) { onReady(); return; } + const link = document.createElement("link"); + link.rel = "stylesheet"; + link.href = "https://unpkg.com/leaflet@1.9.4/dist/leaflet.css"; + document.head.appendChild(link); + const script = document.createElement("script"); + script.src = "https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"; + script.onload = onReady; + document.head.appendChild(script); + }, []); +} + +// ─── PROJECT 01: SPBU Map (basic) ──────────────────────────────────────────── +function Project01({ onBack }) { + const mapRef = useRef(null); + const mapInstance = useRef(null); + const markerMap = useRef({}); + const [toast, showToast] = useToast(); + const [ready, setReady] = useState(false); + const spbuDataRef = useRef([ + { id: 1, nama_spbu: "Pertamina Ahmad Yani", nomor_wa: "6281234567890", buka_24_jam: 1, latitude: -0.0500, longitude: 109.3450 }, + { id: 2, nama_spbu: "Pertamina Sungai Raya", nomor_wa: "6281234567891", buka_24_jam: 0, latitude: -0.0870, longitude: 109.3620 }, + { id: 3, nama_spbu: "Shell Pontianak Tengah", nomor_wa: "6281234567892", buka_24_jam: 1, latitude: -0.0320, longitude: 109.3300 }, + ]); + const nextId = useRef(4); + + useLeaflet(() => setReady(true)); + + useEffect(() => { + if (!ready || mapInstance.current) return; + const L = window.L; + const map = L.map(mapRef.current).setView([-0.05538, 109.34947], 13); + L.tileLayer("https://tile.openstreetmap.org/{z}/{x}/{y}.png", { maxZoom: 19 }).addTo(map); + mapInstance.current = map; + + const greenIcon = makeIcon(L, "green"); + const redIcon = makeIcon(L, "red"); + + function buildPopup(d) { + const is24 = d.buka_24_jam == 1; + const hdrColor = is24 ? "#1c8a5f" : "#c84b0f"; + return ` +
+
Stasiun BBM
+
${d.nama_spbu}
+
+
+ +
+ + + ${is24 ? "Buka 24 Jam" : "Tidak 24 Jam"} + +
+
+ `; + } + + function addMarker(d) { + const is24 = d.buka_24_jam == 1; + const marker = L.marker([d.latitude, d.longitude], { + icon: is24 ? greenIcon : redIcon, + draggable: true, + }).addTo(map); + marker.bindPopup(buildPopup(d)); + markerMap.current[d.id] = marker; + marker.on("dragend", (e) => { + const { lat, lng } = e.target.getLatLng(); + d.latitude = lat; d.longitude = lng; + map.closePopup(); + showToast("Posisi diperbarui", IOS.orange); + }); + } + + spbuDataRef.current.forEach(addMarker); + + window._p01_delete = (id) => { + if (!window.confirm("Hapus SPBU ini?")) return; + map.closePopup(); + if (markerMap.current[id]) { map.removeLayer(markerMap.current[id]); delete markerMap.current[id]; } + spbuDataRef.current = spbuDataRef.current.filter(d => d.id !== id); + showToast("SPBU dihapus", IOS.red); + }; + + map.on("click", (e) => { + const { lat, lng } = e.latlng; + L.popup() + .setLatLng(e.latlng) + .setContent(` +
+
Tambah Titik
+
SPBU Baru
+
+
+
+
+
+ +
`) + .openOn(map); + }); + + window._p01_add = (lat, lng) => { + const nama = document.getElementById("p01_nama")?.value?.trim(); + const wa = document.getElementById("p01_wa")?.value?.trim(); + const buka = parseInt(document.getElementById("p01_buka")?.value || "0"); + if (!nama) { showToast("Nama SPBU wajib diisi", IOS.red); return; } + const d = { id: nextId.current++, nama_spbu: nama, nomor_wa: wa || "-", buka_24_jam: buka, latitude: lat, longitude: lng }; + spbuDataRef.current.push(d); + addMarker(d); + map.closePopup(); + showToast("SPBU berhasil disimpan", IOS.green); + }; + + return () => { + delete window._p01_delete; + delete window._p01_add; + if (mapInstance.current) { mapInstance.current.remove(); mapInstance.current = null; } + }; + }, [ready]); + + return ( +
+
+ + {/* Header pill */} +
+
+
+
SPBU Map
+
Pontianak · Klik peta untuk menambah
+
+
+ {/* Legend */} +
+
Keterangan
+
+
Buka 24 Jam +
+
+
Tidak 24 Jam +
+
+ +
+ ); +} + +// ─── PROJECT 02: WebGIS Jalan & Tanah ──────────────────────────────────────── +function Project02({ onBack }) { + const mapRef = useRef(null); + const mapInstance = useRef(null); + const [toast, showToast] = useToast(); + const [ready, setReady] = useState(false); + const [mode, setMode] = useState("view"); + const [modal, setModal] = useState(null); // { type: 'jalan'|'parsil', editId: null|id, luas|panjang, geojson } + const stateRef = useRef({ + drawPoints: [], + drawMarkers: [], + previewLayer: null, + jalanLayers: {}, + parsilLayers: {}, + geomEdit: null, + jalanData: {}, + parsilData: {}, + }); + const modeRef = useRef("view"); + + useLeaflet(() => setReady(true)); + + const JALAN_COLORS = { Nasional: "#ff3b30", Provinsi: "#ff9500", Kabupaten: "#34c759" }; + const PARSIL_COLORS = { SHM: "#007aff", HGB: "#5856d6", HGU: "#ff2d55", HP: "#32ade6" }; + + useEffect(() => { modeRef.current = mode; }, [mode]); + + useEffect(() => { + if (!ready || mapInstance.current) return; + const L = window.L; + const map = L.map(mapRef.current).setView([-0.05538, 109.34947], 14); + L.tileLayer("https://tile.openstreetmap.org/{z}/{x}/{y}.png", { maxZoom: 19 }).addTo(map); + mapInstance.current = map; + + const s = stateRef.current; + const jalanGroup = L.layerGroup().addTo(map); + const parsilGroup = L.layerGroup().addTo(map); + s.jalanGroup = jalanGroup; + s.parsilGroup = parsilGroup; + + function vertexIcon() { + return L.divIcon({ + html: `
`, + className: "", iconSize: [0, 0], + }); + } + + function clearDraw() { + s.drawPoints = []; + s.drawMarkers.forEach(m => map.removeLayer(m)); + s.drawMarkers = []; + if (s.previewLayer) { map.removeLayer(s.previewLayer); s.previewLayer = null; } + } + + s.clearDraw = clearDraw; + + map.on("click", (e) => { + const m = modeRef.current; + if (m === "view") return; + s.drawPoints.push(e.latlng); + const dot = L.marker(e.latlng, { icon: vertexIcon(), interactive: false }).addTo(map); + s.drawMarkers.push(dot); + if (s.previewLayer) { map.removeLayer(s.previewLayer); s.previewLayer = null; } + if (m === "jalan" && s.drawPoints.length > 1) { + s.previewLayer = L.polyline(s.drawPoints, { color: IOS.blue, weight: 3, dashArray: "6,4", opacity: 0.8 }).addTo(map); + } + if (m === "parsil" && s.drawPoints.length > 2) { + s.previewLayer = L.polygon(s.drawPoints, { color: IOS.indigo, fillColor: IOS.indigo, fillOpacity: 0.15, weight: 2, dashArray: "5,4" }).addTo(map); + } + }); + + window._p02_finish = () => { + const m = modeRef.current; + if (m === "jalan" && s.drawPoints.length < 2) { showToast("Minimal 2 titik untuk jalan", IOS.orange); return; } + if (m === "parsil" && s.drawPoints.length < 3) { showToast("Minimal 3 titik untuk parsil", IOS.orange); return; } + const pts = [...s.drawPoints]; + if (m === "jalan") { + let panjang = 0; + for (let i = 1; i < pts.length; i++) panjang += pts[i - 1].distanceTo(pts[i]); + const geojson = JSON.stringify({ type: "LineString", coordinates: pts.map(p => [p.lng, p.lat]) }); + clearDraw(); setMode("view"); + setModal({ type: "jalan", editId: null, metric: Math.round(panjang), geojson, pts }); + } else { + const R = 6371000; const pts2 = pts.map(ll => [ll.lat * Math.PI / 180, ll.lng * Math.PI / 180]); + let area = 0; + for (let i = 0; i < pts2.length; i++) { + const j = (i + 1) % pts2.length; + area += pts2[i][1] * pts2[j][0]; area -= pts2[j][1] * pts2[i][0]; + } + area = Math.abs(area) / 2 * R * R; + const geojson = JSON.stringify({ type: "Polygon", coordinates: [pts.map(p => [p.lng, p.lat]).concat([[pts[0].lng, pts[0].lat]])] }); + clearDraw(); setMode("view"); + setModal({ type: "parsil", editId: null, metric: Math.round(area), geojson, pts }); + } + }; + + window._p02_undo = () => { + if (s.drawPoints.length === 0) return; + s.drawPoints.pop(); + const last = s.drawMarkers.pop(); + if (last) map.removeLayer(last); + if (s.previewLayer) { map.removeLayer(s.previewLayer); s.previewLayer = null; } + const m = modeRef.current; + if (m === "jalan" && s.drawPoints.length > 1) + s.previewLayer = L.polyline(s.drawPoints, { color: IOS.blue, weight: 3, dashArray: "6,4", opacity: 0.8 }).addTo(map); + if (m === "parsil" && s.drawPoints.length > 2) + s.previewLayer = L.polygon(s.drawPoints, { color: IOS.indigo, fillColor: IOS.indigo, fillOpacity: 0.15, weight: 2, dashArray: "5,4" }).addTo(map); + }; + + s.addJalanLayer = (id, nama, status, panjang, geojsonStr) => { + const gj = JSON.parse(geojsonStr); + const latlngs = gj.coordinates.map(c => L.latLng(c[1], c[0])); + const color = JALAN_COLORS[status] || "#6b7280"; + s.jalanData[id] = { id, nama, status, panjang }; + const line = L.polyline(latlngs, { color, weight: 4, opacity: 0.9 }) + .bindPopup(buildJalanPopup(id, nama, status, panjang), { maxWidth: 270 }) + .addTo(jalanGroup); + s.jalanLayers[id] = line; + }; + + s.addParsilLayer = (id, nama, status, luas, geojsonStr) => { + const gj = JSON.parse(geojsonStr); + const latlngs = gj.coordinates[0].map(c => L.latLng(c[1], c[0])); + const color = PARSIL_COLORS[status] || "#6b7280"; + s.parsilData[id] = { id, nama, status, luas }; + const poly = L.polygon(latlngs, { color, fillColor: color, fillOpacity: 0.22, weight: 2 }) + .bindPopup(buildParsilPopup(id, nama, status, luas), { maxWidth: 270 }) + .addTo(parsilGroup); + s.parsilLayers[id] = poly; + }; + + function buildJalanPopup(id, nama, status, panjang) { + const color = JALAN_COLORS[status] || "#6b7280"; + return ` +
+
Jalan
+
${nama}
+
+
+
+ ${status} +
+
Panjang: ${parseInt(panjang).toLocaleString("id-ID")} m
+
+ `; + } + + function buildParsilPopup(id, nama, status, luas) { + const color = PARSIL_COLORS[status] || "#6b7280"; + return ` +
+
Parsil Tanah
+
${nama}
+
+
+
+ ${status} +
+
Luas: ${parseInt(luas).toLocaleString("id-ID")} m²
+
+ `; + } + + let nextIdJ = 10, nextIdP = 10; + + window._p02_saveJalan = (nama, status, metric, geojson, editId) => { + if (editId) { + s.jalanData[editId] = { ...s.jalanData[editId], nama, status }; + if (s.jalanLayers[editId]) { + s.jalanLayers[editId].setStyle({ color: JALAN_COLORS[status] || "#6b7280" }); + s.jalanLayers[editId].setPopupContent(buildJalanPopup(editId, nama, status, metric)); + } + showToast("Data jalan diperbarui", IOS.green); + } else { + const id = nextIdJ++; + s.addJalanLayer(id, nama, status, metric, geojson); + showToast("Jalan berhasil disimpan", IOS.green); + } + setModal(null); + }; + + window._p02_saveParsil = (nama, status, metric, geojson, editId) => { + if (editId) { + s.parsilData[editId] = { ...s.parsilData[editId], nama, status }; + if (s.parsilLayers[editId]) { + const color = PARSIL_COLORS[status] || "#6b7280"; + s.parsilLayers[editId].setStyle({ color, fillColor: color }); + s.parsilLayers[editId].setPopupContent(buildParsilPopup(editId, nama, status, metric)); + } + showToast("Data parsil diperbarui", IOS.green); + } else { + const id = nextIdP++; + s.addParsilLayer(id, nama, status, metric, geojson); + showToast("Parsil berhasil disimpan", IOS.green); + } + setModal(null); + }; + + window._p02_editJalan = (id) => { + map.closePopup(); + const d = s.jalanData[id]; + if (!d) return; + const layer = s.jalanLayers[id]; + let panjang = d.panjang; + if (layer) { + const pts = layer.getLatLngs(); + panjang = 0; + for (let i = 1; i < pts.length; i++) panjang += pts[i-1].distanceTo(pts[i]); + panjang = Math.round(panjang); + } + setModal({ type: "jalan", editId: id, metric: panjang, geojson: null, nama: d.nama, status: d.status }); + }; + + window._p02_editParsil = (id) => { + map.closePopup(); + const d = s.parsilData[id]; + if (!d) return; + setModal({ type: "parsil", editId: id, metric: d.luas, geojson: null, nama: d.nama, status: d.status }); + }; + + window._p02_deleteJalan = (id) => { + if (!window.confirm("Hapus data jalan ini?")) return; + map.closePopup(); + if (s.jalanLayers[id]) { jalanGroup.removeLayer(s.jalanLayers[id]); delete s.jalanLayers[id]; } + delete s.jalanData[id]; + showToast("Jalan dihapus", IOS.red); + }; + + window._p02_deleteParsil = (id) => { + if (!window.confirm("Hapus data parsil ini?")) return; + map.closePopup(); + if (s.parsilLayers[id]) { parsilGroup.removeLayer(s.parsilLayers[id]); delete s.parsilLayers[id]; } + delete s.parsilData[id]; + showToast("Parsil dihapus", IOS.red); + }; + + // Load sample data + s.addJalanLayer(1, "Jl. Ahmad Yani", "Nasional", 4200, + '{"type":"LineString","coordinates":[[109.325,-0.045],[109.335,-0.038],[109.345,-0.030]]}'); + s.addJalanLayer(2, "Jl. Gajah Mada", "Provinsi", 2800, + '{"type":"LineString","coordinates":[[109.330,-0.020],[109.336,-0.016],[109.340,-0.014]]}'); + s.addParsilLayer(1, "Kavling A-01", "SHM", 2400, + '{"type":"Polygon","coordinates":[[[109.328,-0.038],[109.330,-0.038],[109.330,-0.040],[109.328,-0.040],[109.328,-0.038]]]}'); + + return () => { + ["_p02_finish","_p02_undo","_p02_saveJalan","_p02_saveParsil", + "_p02_editJalan","_p02_editParsil","_p02_deleteJalan","_p02_deleteParsil"] + .forEach(k => delete window[k]); + if (mapInstance.current) { mapInstance.current.remove(); mapInstance.current = null; } + }; + }, [ready]); + + function handleModeChange(m) { + if (stateRef.current.clearDraw) stateRef.current.clearDraw(); + setMode(m); + if (mapInstance.current) { + mapInstance.current.getContainer().style.cursor = m === "view" ? "" : "crosshair"; + } + } + + return ( +
+
+ + + {/* Toolbar */} +
+ {[ + { id: "view", label: "Lihat", color: IOS.blue }, + { id: "jalan", label: "Tambah Jalan", color: IOS.red }, + { id: "parsil", label: "Tambah Parsil", color: IOS.indigo }, + ].map(btn => ( + + ))} + {mode !== "view" && ( + <> +
+ + + + )} +
+ + {/* Legend */} +
+
Status Jalan
+ {Object.entries({ Nasional: IOS.red, Provinsi: IOS.orange, Kabupaten: IOS.green }).map(([k, c]) => ( +
+
{k} +
+ ))} +
+
Kepemilikan Tanah
+ {Object.entries({ SHM: IOS.blue, HGB: IOS.indigo, HGU: "#FF375F", HP: IOS.teal }).map(([k, c]) => ( +
+
{k} +
+ ))} +
+ + + + {/* Modal */} + {modal && ( + setModal(null)} /> + )} +
+ ); +} + +function Project02Modal({ modal, onClose }) { + const [nama, setNama] = useState(modal.nama || ""); + const [status, setStatus] = useState(modal.status || (modal.type === "jalan" ? "Nasional" : "SHM")); + const isJalan = modal.type === "jalan"; + const options = isJalan + ? ["Nasional", "Provinsi", "Kabupaten"] + : ["SHM", "HGB", "HGU", "HP"]; + + function save() { + if (!nama.trim()) return; + if (isJalan) window._p02_saveJalan?.(nama, status, modal.metric, modal.geojson, modal.editId); + else window._p02_saveParsil?.(nama, status, modal.metric, modal.geojson, modal.editId); + } + + return ( +
e.target === e.currentTarget && onClose()}> +
+
+
+
+ {modal.editId ? "Edit" : "Tambah"} {isJalan ? "Jalan" : "Parsil"} +
+
{isJalan ? "Data Jalan" : "Parsil Tanah"}
+
+ +
+
+
+ + setNama(e.target.value)} placeholder={isJalan ? "Jl. Ahmad Yani" : "Kavling A-01"} /> +
+
+ + +
+
+ +
+ {modal.metric?.toLocaleString("id-ID")} {isJalan ? "m" : "m²"} +
+
+ +
+
+
+ ); +} + +// ─── PROJECT 03: Kepadatan Penduduk ────────────────────────────────────────── +const RAW_FEATURES = [ + { id: "1", name: "Pontianak Selatan", density: 5.673, coords: [[315791.7496880172,-2872.6773100267],[315493.9173600795,-3043.9080895001625],[315326.6521934429,-3151.333180362999],[315140.4188381387,-3281.935194921576],[315066.9918184001,-3327.8058926928916],[314996.8467820659,-3371.6262979517323],[314888.67104393616,-3478.080758171731],[314812.70706351567,-3552.7994604061805],[314746.1257071411,-3618.2893480278017],[314655.6433510417,-3707.2884260803185],[314606.10591966007,-3756.013789919325],[314454.0137261031,-3905.612734831022],[314344.4320643814,-3996.3010035972147],[314259.6778418068,-4066.4424268491857],[314085.032268201,-4210.976689869447],[313840.1791924136,-4413.613711391907],[313536.192724674,-4712.359024276697],[313300.8322324334,-4943.661570138169],[312916.42216176353,-5321.443869765168],[312612.50988089014,-5620.11627486908],[312370.45105957426,-5854.688712254208],[312057.7659053877,-6157.703154576355],[311585.92455374077,-6614.9514189124275],[311333.4393242495,-6891.340090787351],[313474.832878937,-8889.931704557468],[313757.1209584046,-8461.458752544078],[314215.6677178042,-7765.450320278544],[314471.81653076597,-7473.440609211619],[314877.1271904595,-7011.386355436478],[315170.0992892701,-6667.707583206353],[315565.04540335014,-6204.405459439875],[315762.9765556948,-5956.206301724727],[315946.9456108697,-5783.346926725002],[316115.1479424136,-5571.442019498811],[316233.71287194826,-5370.136871324419],[316413.0633267751,-5142.274731615995],[316588.3382888399,-4973.07120414943],[315803.17076956015,-2870.648806607189],[315791.7496880172,-2872.6773100267]] }, + { id: "2", name: "Pontianak Utara", density: 3.642, coords: [[309688.2266975902,951.2434479881485],[310155.9051329456,933.8867466094162],[310357.96077316906,885.1327602118836],[311332.6877226224,552.8154289115046],[312269.31459587533,306.7524367839651],[313016.67581282463,28.516046978937084],[313225.22203908674,-84.19626616407731],[313546.372705549,-322.5867385597503],[313720.9980547987,-448.5286571102988],[314170.79062105156,-811.0085487379129],[314504.16628780216,-895.1462170118866],[314775.1001630025,-1443.89314784007],[315291.5124306837,-1928.5005853951407],[315734.48124843184,-2324.9574099686342],[316159.40293160826,-2368.349163418803],[316654.17475448735,-2251.9322639187267],[317038.8796905633,-2161.4445829436972],[317913.59393999074,-2046.6151866172168],[318283.48217976745,-2054.023534766595],[318775.15660756174,-2147.859083549327],[319287.81429954246,-2395.9329130315673],[319416.881835456,-2033.8234388107558],[319526.1020538965,-1800.9896398106011],[319533.72206913494,-1723.0961506912936],[319510.86202341504,-1622.342615849966],[319574.3621504167,-1479.2556630090148],[319598.91553285625,-1507.1957188887664],[319482.0752991745,-1853.4830781301353],[319424.3083182946,-874.973119525288],[319320.91374074016,-644.5676602992062],[318847.9647948425,226.72111005606712],[318658.4169157464,989.0401346929066],[316567.76460495684,2999.9040346896763],[314562.85392847005,3541.7717850915287],[312083.8089703787,4381.666798215181],[309688.2266975902,951.2434479881485]] }, + { id: "3", name: "Pontianak Timur", density: 9.196, coords: [[319887.57044806925,-5373.344392278639],[319702.88422977563,-5132.534790727044],[319580.270434435,-4979.559484159208],[319416.78537397756,-4779.407060143594],[319288.3328264768,-4635.773757029033],[319063.0274988217,-4397.196101115128],[318712.6388119413,-4027.525809986318],[319240.45505877363,-3500.8371123406214],[319482.70326267194,-3416.1079811805625],[319930.7033710063,-3290.5899437818016],[320060.2158619128,-2885.3158597254237],[319668.47127330344,-2832.0761712812755],[319302.34583165945,-2724.1663001296456],[319016.246975861,-2582.2846226671395],[318611.86326987745,-2402.6633110638345],[318312.0934654712,-2349.9022867323624],[317831.7500457056,-2325.396742533832],[317450.6828969274,-2376.0793589098607],[316961.72475783527,-2448.1651844011494],[316290.7174679831,-2617.4144481542617],[315891.63306421525,-2646.1325691096436],[316108.6562515756,-3080.1789438243754],[316374.4062489303,-3648.9273296033716],[316666.3438568887,-4078.0756132950055],[316960.2915036416,-4459.3151686055135],[317511.1983193059,-4982.14799761562],[318003.96436076245,-5498.157720267835],[318525.46364961116,-6295.854170744091],[318997.8492128665,-6873.389132317587],[319200.2395574156,-6725.148423245205],[319464.4036415865,-6506.445073789114],[319929.8147521868,-6173.089029280636],[320230.3441586008,-5948.45374608942],[319892.69977100904,-5382.870277737669],[319887.57044806925,-5373.344392278639]] }, + { id: "4", name: "Pontianak Tenggara", density: 3.103, coords: [[316509.95719540527,-5101.833566810722],[316277.42321839795,-5368.326560621595],[315586.95250728936,-6227.493567962928],[314650.4343267438,-7312.870467518172],[313943.0478521116,-8266.304411587676],[313570.5827409144,-8808.522535934284],[314482.8144881896,-9756.429398367298],[315386.15532470803,-10595.173154648382],[315969.86388160125,-10324.183934093831],[316202.0711808827,-9921.28120289028],[316389.8178299225,-9632.15192111897],[316955.59155603434,-8811.299556391281],[317370.6954695009,-8105.002669764531],[318021.28465803474,-6941.185008999439],[318253.2629668124,-6576.773915689321],[318236.68267524854,-6280.690804057879],[317914.4077884978,-5744.010290518615],[317403.09039107355,-5217.314926254428],[316771.0250557211,-4765.816074840871],[316509.95719540527,-5101.833566810722]] }, + { id: "5", name: "Pontianak Kota", density: 8.102, coords: [[310276.47296142485,-3455.9797973638633],[309858.4304809589,-3797.2929687509313],[309527.70056152344,-4114.79357910133],[309256.67931494024,-4394.240588930203],[309517.11724853516,-4686.294799805153],[309900.76403808687,-5093.753967286088],[310421.994140625,-5638.796691895346],[310977.62023925874,-6427.256591796759],[311295.12091064546,-6863.819946288946],[311784.60089111235,-6451.0691528309835],[312297.8936767578,-5916.60974120989],[312922.31152343843,-5310.71270752023],[313407.04170880467,-4843.868031024118],[313851.00109863374,-4424.356750487466],[314247.8766479511,-4080.397766113165],[314713.5443115253,-3659.709350586054],[315263.87866211124,-3191.395935058943],[315803.6297607431,-2876.541137695778],[315533.75421142764,-2532.582153319032],[315086.40909403935,-2251.8851285779383],[314597.12731933594,-1876.4141235346906],[314187.02246093843,-2037.810302733793],[313546.7294311533,-2148.9354858405422],[312935.5408325214,-2270.64410400379],[312366.6854858408,-2413.519348145579],[311906.3095092783,-2564.3322143565165],[311385.0793457031,-2783.936767577892],[310773.8905639658,-3093.4998779299203],[310276.47296142485,-3455.9797973638633]] }, + { id: "6", name: "Pontianak Barat", density: 9.331, coords: [[314496.5855712909,-1831.4348754876992],[314333.6083123619,-1673.1813620609464],[313976.42009798624,-1469.4517879342893],[313709.19039686024,-1196.9304095584666],[313412.8564708587,-1024.9508989329915],[313156.21012423374,-776.2420681805816],[312690.5425262293,-424.3455310544232],[312129.62473772746,-204.74092517967802],[311526.37353122514,-96.26154155412223],[310896.6639384739,-149.17831405519973],[310303.9960864708,-154.46999130456243],[309732.49494346976,70.42629182199016],[309351.49418146536,70.42629182199016],[309319.74411796685,-400.5329834310105],[309364.7233745931,-715.3877798067406],[309351.49418146536,-974.679965057876],[309232.4314433411,-1506.493528684834],[309176.8688322166,-1879.5567748110043],[309205.97305709217,-2040.952930937754],[308552.45091671497,-2472.2246268143645],[308147.6376070874,-3011.9757063165307],[308430.74233996496,-3734.289650943014],[308827.6181337144,-4363.999243696919],[309142.47293009236,-4490.9994976965245],[309479.5459254207,-4168.759302856284],[310007.24186643306,-3657.238962248084],[310429.9315185547,-3344.854614257114],[310773.8905639658,-3093.4998779299203],[311336.9246401787,-2797.156559649622],[311906.3095092783,-2564.3322143565165],[312525.43572998233,-2360.602661131881],[313125.56844345294,-2227.800214529503],[313970.063720705,-2077.4978637696477],[314456.89801025484,-1908.1641845697304],[314496.5855712909,-1831.4348754876992]] }, +]; + +function utmToWgs(e, n) { + const a = 6378137.0, f = 1/298.257223563; + const b = a*(1-f), e2 = 1-(b*b)/(a*a), ep2 = (a*a-b*b)/(b*b); + const zone = 49, lon0 = (zone-1)*6-180+3; + const k0 = 0.9996, x = e-500000, y = n; + const M = y/k0; + const mu = M/(a*(1-e2/4-3*e2*e2/64-5*e2*e2*e2/256)); + const e1 = (1-Math.sqrt(1-e2))/(1+Math.sqrt(1-e2)); + const p1 = mu + (3*e1/2-27*e1*e1*e1/32)*Math.sin(2*mu) + + (21*e1*e1/16-55*e1*e1*e1*e1/32)*Math.sin(4*mu) + + (151*e1*e1*e1/96)*Math.sin(6*mu); + const N1 = a/Math.sqrt(1-e2*Math.sin(p1)*Math.sin(p1)); + const T1 = Math.tan(p1)*Math.tan(p1); + const C1 = ep2*Math.cos(p1)*Math.cos(p1); + const R1 = a*(1-e2)/Math.pow(1-e2*Math.sin(p1)*Math.sin(p1),1.5); + const D = x/(N1*k0); + const lat = p1-(N1*Math.tan(p1)/R1)*(D*D/2-(5+3*T1+10*C1-4*C1*C1-9*ep2)*D*D*D*D/24 + +(61+90*T1+298*C1+45*T1*T1-252*ep2-3*C1*C1)*D*D*D*D*D*D/720); + const lon = (D-(1+2*T1+C1)*D*D*D/6+(5-2*C1+28*T1-3*C1*C1+8*ep2+24*T1*T1)*D*D*D*D*D/120)/Math.cos(p1)+lon0*Math.PI/180; + return [lat*180/Math.PI, lon*180/Math.PI]; +} + +function Project03({ onBack }) { + const mapRef = useRef(null); + const mapInstance = useRef(null); + const [hoveredName, setHoveredName] = useState(null); + const [hoveredDensity, setHoveredDensity] = useState(null); + const [ready, setReady] = useState(false); + + useLeaflet(() => setReady(true)); + + function getDensityColor(d) { + return d > 7 ? IOS.red : d > 5 ? IOS.orange : IOS.yellow; + } + + useEffect(() => { + if (!ready || mapInstance.current) return; + const L = window.L; + const map = L.map(mapRef.current).setView([-0.03, 109.33], 12); + L.tileLayer("https://tile.openstreetmap.org/{z}/{x}/{y}.png", { maxZoom: 19 }).addTo(map); + mapInstance.current = map; + + const features = RAW_FEATURES.map(f => ({ + type: "Feature", + id: f.id, + properties: { name: f.name, density: f.density }, + geometry: { + type: "Polygon", + coordinates: [f.coords.map(([e, n]) => { const [lat, lng] = utmToWgs(e, n); return [lng, lat]; })], + }, + })); + + const geojson = L.geoJSON({ type: "FeatureCollection", features }, { + style: feat => ({ + weight: 2, opacity: 1, color: "rgba(255,255,255,0.3)", dashArray: "3", + fillOpacity: 0.65, fillColor: getDensityColor(feat.properties.density), + }), + onEachFeature: (feat, layer) => { + layer.on({ + mouseover: (e) => { + e.target.setStyle({ weight: 3, color: "#fff", fillOpacity: 0.8 }); + e.target.bringToFront(); + setHoveredName(feat.properties.name); + setHoveredDensity(feat.properties.density); + }, + mouseout: (e) => { + geojson.resetStyle(e.target); + setHoveredName(null); + setHoveredDensity(null); + }, + click: (e) => map.fitBounds(e.target.getBounds()), + }); + }, + }).addTo(map); + map.fitBounds(geojson.getBounds()); + return () => { + if (mapInstance.current) { mapInstance.current.remove(); mapInstance.current = null; } + }; + }, [ready]); + + return ( +
+
+ + + {/* Info box */} +
+
+ Kepadatan Penduduk +
+ {hoveredName ? ( + <> +
{hoveredName}
+
+ {hoveredDensity} ribu jiwa / km² +
+ + ) : ( +
Arahkan kursor ke kecamatan
+ )} +
+ + {/* Legend */} +
+
Kepadatan
+ {[ + { color: IOS.red, label: "> 7 (Tinggi)" }, + { color: IOS.orange, label: "5 – 7 (Sedang)" }, + { color: IOS.yellow, label: "\u2264 5 (Rendah)" }, + ].map(({ color, label }) => ( +
+
+ {label} +
+ ))} +
ribu jiwa / km²
+
+
+ ); +} + +// ─── PROJECT 04: SPBU with layer toggle ────────────────────────────────────── +function Project04({ onBack }) { + const mapRef = useRef(null); + const mapInstance = useRef(null); + const markerMap = useRef({}); + const layerRef = useRef({ l24: null, lNon: null }); + const [toast, showToast] = useToast(); + const [ready, setReady] = useState(false); + const spbuDataRef = useRef([ + { id: 1, nama_spbu: "Pertamina Ahmad Yani", nomor_wa: "6281234567890", buka_24_jam: 1, latitude: -0.0500, longitude: 109.3450 }, + { id: 2, nama_spbu: "Pertamina Sungai Raya", nomor_wa: "6281234567891", buka_24_jam: 0, latitude: -0.0870, longitude: 109.3620 }, + { id: 3, nama_spbu: "Shell Pontianak Tengah", nomor_wa: "6281234567892", buka_24_jam: 1, latitude: -0.0320, longitude: 109.3300 }, + { id: 4, nama_spbu: "Pertamina Tanjung Raya", nomor_wa: "6281234567893", buka_24_jam: 0, latitude: -0.0130, longitude: 109.3550 }, + { id: 5, nama_spbu: "Vivo Khatulistiwa", nomor_wa: "6281234567894", buka_24_jam: 1, latitude: 0.0020, longitude: 109.3280 }, + ]); + const nextId = useRef(6); + + useLeaflet(() => setReady(true)); + + useEffect(() => { + if (!ready || mapInstance.current) return; + const L = window.L; + const map = L.map(mapRef.current).setView([-0.05538, 109.34947], 13); + L.tileLayer("https://tile.openstreetmap.org/{z}/{x}/{y}.png", { maxZoom: 19 }).addTo(map); + mapInstance.current = map; + + const layer24 = L.layerGroup().addTo(map); + const layerNon24 = L.layerGroup().addTo(map); + layerRef.current = { l24: layer24, lNon: layerNon24 }; + + L.control.layers(null, { "SPBU 24 Jam": layer24, "SPBU Tidak 24 Jam": layerNon24 }, { collapsed: false }).addTo(map); + + const greenIcon = makeIcon(L, "green"); + const redIcon = makeIcon(L, "red"); + + function buildPopup(d) { + const is24 = d.buka_24_jam == 1; + return ` +
+
Stasiun BBM · ${is24 ? "24 Jam" : "Terbatas"}
+
${d.nama_spbu}
+
+
+ +
+ + ${is24 ? "Buka 24 Jam" : "Tidak 24 Jam"} + +
+
+ `; + } + + function addMarker(d) { + const is24 = d.buka_24_jam == 1; + const marker = L.marker([d.latitude, d.longitude], { + icon: is24 ? greenIcon : redIcon, draggable: true, + }); + marker.addTo(is24 ? layer24 : layerNon24); + marker.bindPopup(buildPopup(d)); + markerMap.current[d.id] = { marker, is24 }; + marker.on("dragend", (e) => { + const { lat, lng } = e.target.getLatLng(); + d.latitude = lat; d.longitude = lng; + map.closePopup(); + showToast("Posisi diperbarui", IOS.orange); + }); + } + + spbuDataRef.current.forEach(addMarker); + + window._p04_delete = (id) => { + if (!window.confirm("Hapus SPBU ini?")) return; + map.closePopup(); + const entry = markerMap.current[id]; + if (entry) { + layer24.removeLayer(entry.marker); + layerNon24.removeLayer(entry.marker); + delete markerMap.current[id]; + } + spbuDataRef.current = spbuDataRef.current.filter(d => d.id !== id); + showToast("SPBU dihapus", IOS.red); + }; + + map.on("click", (e) => { + const { lat, lng } = e.latlng; + L.popup() + .setLatLng(e.latlng) + .setContent(` +
+
Tambah Titik
+
SPBU Baru
+
+
+
+
+
+ +
`) + .openOn(map); + }); + + window._p04_add = (lat, lng) => { + const nama = document.getElementById("p04_nama")?.value?.trim(); + const wa = document.getElementById("p04_wa")?.value?.trim(); + const buka = parseInt(document.getElementById("p04_buka")?.value || "0"); + if (!nama) { showToast("Nama SPBU wajib diisi", IOS.red); return; } + const d = { id: nextId.current++, nama_spbu: nama, nomor_wa: wa || "-", buka_24_jam: buka, latitude: lat, longitude: lng }; + spbuDataRef.current.push(d); + addMarker(d); + map.closePopup(); + showToast("SPBU berhasil disimpan", IOS.green); + }; + + return () => { + delete window._p04_delete; + delete window._p04_add; + if (mapInstance.current) { mapInstance.current.remove(); mapInstance.current = null; } + }; + }, [ready]); + + return ( +
+
+ +
+
+
+
SPBU Map + Layer Control
+
Klik peta untuk menambah · Toggle di pojok kanan
+
+
+
+
Keterangan
+
+
Buka 24 Jam +
+
+
Tidak 24 Jam +
+
+ +
+ ); +} + +// ─── Shared icon factory ────────────────────────────────────────────────────── +function makeIcon(L, color) { + return new L.Icon({ + iconUrl: `https://raw.githubusercontent.com/pointhi/leaflet-color-markers/master/img/marker-icon-${color}.png`, + shadowUrl: "https://unpkg.com/leaflet@1.9.4/dist/images/marker-shadow.png", + iconSize: [25, 41], iconAnchor: [12, 41], + }); +} + +// ─── Root App ───────────────────────────────────────────────────────────────── +export default function App() { + const [active, setActive] = useState(null); + + // Clean up map instances when navigating back + const handleBack = useCallback(() => { + setActive(null); + // Small delay to allow unmount + setTimeout(() => { + document.querySelectorAll(".leaflet-container").forEach(el => { + if (el._leaflet_id) { el._leaflet_id = null; } + }); + }, 100); + }, []); + + return ( + <> + + {active === null && } + {active === "p01" && } + {active === "p02" && } + {active === "p03" && } + {active === "p04" && } + + ); +} \ No newline at end of file diff --git a/src/main.jsx b/src/main.jsx new file mode 100644 index 0000000..51a8c58 --- /dev/null +++ b/src/main.jsx @@ -0,0 +1,9 @@ +import React from 'react' +import ReactDOM from 'react-dom/client' +import App from './App.jsx' + +ReactDOM.createRoot(document.getElementById('root')).render( + + + , +) diff --git a/tugas/01/index.php b/tugas/01/index.php deleted file mode 100644 index 30435eb..0000000 --- a/tugas/01/index.php +++ /dev/null @@ -1,721 +0,0 @@ -query("INSERT INTO spbu (nama_spbu, nomor_wa, buka_24_jam, latitude, longitude) - VALUES ('$nama','$wa','$buka','$lat','$lng')"); - exit("success"); -} - -// HANDLE DELETE -if(isset($_POST['delete_id'])){ - $id = intval($_POST['delete_id']); - $conn->query("DELETE FROM spbu WHERE id = $id"); - exit("deleted"); -} - -// HANDLE MOVE (update lat/lng) -if(isset($_POST['move_id'])){ - $id = intval($_POST['move_id']); - $lat = $_POST['move_lat']; - $lng = $_POST['move_lng']; - $conn->query("UPDATE spbu SET latitude='$lat', longitude='$lng' WHERE id=$id"); - exit("moved"); -} - -// HANDLE GET DATA -if(isset($_GET['get'])){ - $result = $conn->query("SELECT * FROM spbu"); - $data = []; - while($row = $result->fetch_assoc()){ - $data[] = $row; - } - echo json_encode($data); - exit; -} -?> - - - - - - -SPBU Map — Pontianak - - - - - - - - - - - -
- - - -
-

Keterangan

-
Buka 24 Jam
-
Tidak 24 Jam
-
- -
-
- Klik peta untuk tambah SPBU -
- -
-
- -
- - - - - \ No newline at end of file diff --git a/tugas/01/spbu_map.sql b/tugas/01/spbu_map.sql deleted file mode 100644 index 3fde2f1..0000000 --- a/tugas/01/spbu_map.sql +++ /dev/null @@ -1,25 +0,0 @@ --- ============================================================ --- Database: spbu_map --- Digunakan oleh: tugas/01 dan tugas/04 --- ============================================================ - -CREATE DATABASE IF NOT EXISTS spbu_map - CHARACTER SET utf8mb4 - COLLATE utf8mb4_unicode_ci; - -USE spbu_map; - -CREATE TABLE IF NOT EXISTS spbu ( - id INT(11) NOT NULL AUTO_INCREMENT, - nama_spbu VARCHAR(255) NOT NULL, - nomor_wa VARCHAR(20) NOT NULL, - buka_24_jam TINYINT(1) NOT NULL DEFAULT 0, - latitude DECIMAL(10,7) NOT NULL, - longitude DECIMAL(10,7) NOT NULL, - PRIMARY KEY (id) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - --- Data contoh -INSERT INTO spbu (nama_spbu, nomor_wa, buka_24_jam, latitude, longitude) VALUES - ('SPBU Pertamina Sungai Raya', '6281234567890', 1, -0.0553800, 109.3494700), - ('SPBU Pertamina Ahmad Yani', '6289876543210', 0, -0.0621000, 109.3420000); diff --git a/tugas/02/index.php b/tugas/02/index.php deleted file mode 100644 index 7585428..0000000 --- a/tugas/02/index.php +++ /dev/null @@ -1,1468 +0,0 @@ -connect_error) die(json_encode(['error' => $conn->connect_error])); - -// ════════════════════════════════ -// JALAN (POLYLINE) — CRUD -// ════════════════════════════════ - -// INSERT jalan -if (isset($_POST['action']) && $_POST['action'] === 'insert_jalan') { - $nama = $conn->real_escape_string($_POST['nama']); - $status = $conn->real_escape_string($_POST['status']); - $panjang = floatval($_POST['panjang']); - $geojson = $conn->real_escape_string($_POST['geojson']); - $conn->query("INSERT INTO jalan (nama_jalan, status_jalan, panjang_meter, geojson) - VALUES ('$nama','$status','$panjang','$geojson')"); - echo json_encode(['id' => $conn->insert_id]); - exit; -} - -// UPDATE jalan -if (isset($_POST['action']) && $_POST['action'] === 'update_jalan') { - $id = intval($_POST['id']); - $nama = $conn->real_escape_string($_POST['nama']); - $status = $conn->real_escape_string($_POST['status']); - $panjang = floatval($_POST['panjang']); - $geojson = $conn->real_escape_string($_POST['geojson']); - $conn->query("UPDATE jalan SET nama_jalan='$nama', status_jalan='$status', - panjang_meter='$panjang', geojson='$geojson' WHERE id=$id"); - echo json_encode(['ok' => true]); - exit; -} - -// DELETE jalan -if (isset($_POST['action']) && $_POST['action'] === 'delete_jalan') { - $id = intval($_POST['id']); - $conn->query("DELETE FROM jalan WHERE id=$id"); - echo json_encode(['ok' => true]); - exit; -} - -// GET jalan -if (isset($_GET['get']) && $_GET['get'] === 'jalan') { - $result = $conn->query("SELECT * FROM jalan ORDER BY id DESC"); - $data = []; - while ($row = $result->fetch_assoc()) $data[] = $row; - echo json_encode($data); - exit; -} - -// ════════════════════════════════ -// PARSIL TANAH (POLYGON) — CRUD -// ════════════════════════════════ - -// INSERT parsil -if (isset($_POST['action']) && $_POST['action'] === 'insert_parsil') { - $nama = $conn->real_escape_string($_POST['nama']); - $status = $conn->real_escape_string($_POST['status']); - $luas = floatval($_POST['luas']); - $geojson = $conn->real_escape_string($_POST['geojson']); - $conn->query("INSERT INTO parsil_tanah (nama_parsil, status_kepemilikan, luas_m2, geojson) - VALUES ('$nama','$status','$luas','$geojson')"); - echo json_encode(['id' => $conn->insert_id]); - exit; -} - -// UPDATE parsil -if (isset($_POST['action']) && $_POST['action'] === 'update_parsil') { - $id = intval($_POST['id']); - $nama = $conn->real_escape_string($_POST['nama']); - $status = $conn->real_escape_string($_POST['status']); - $luas = floatval($_POST['luas']); - $geojson = $conn->real_escape_string($_POST['geojson']); - $conn->query("UPDATE parsil_tanah SET nama_parsil='$nama', status_kepemilikan='$status', - luas_m2='$luas', geojson='$geojson' WHERE id=$id"); - echo json_encode(['ok' => true]); - exit; -} - -// DELETE parsil -if (isset($_POST['action']) && $_POST['action'] === 'delete_parsil') { - $id = intval($_POST['id']); - $conn->query("DELETE FROM parsil_tanah WHERE id=$id"); - echo json_encode(['ok' => true]); - exit; -} - -// GET parsil -if (isset($_GET['get']) && $_GET['get'] === 'parsil') { - $result = $conn->query("SELECT * FROM parsil_tanah ORDER BY id DESC"); - $data = []; - while ($row = $result->fetch_assoc()) $data[] = $row; - echo json_encode($data); - exit; -} -?> - - - - - -WebGIS - Jalan dan Tanah - - - - - - - - - - - - -
- - - - - -
- -
- - -
- - -
-
- Klik peta untuk mulai menggambar... -
- - -
-
- - -
-
- Seret titik untuk mengubah bentuk - - -
- - -
-
- -
- - -
-
-
Status Jalan
-
Jalan Nasional
-
Jalan Provinsi
-
Jalan Kabupaten
-
-
-
Kepemilikan Tanah
-
SHM
-
HGB
-
HGU
-
HP
-
-
- - -
-
- Pilih tool di atas untuk menambah data -
- - - - - - - - - - \ No newline at end of file diff --git a/tugas/02/webgis_db.sql b/tugas/02/webgis_db.sql deleted file mode 100644 index 2e3ca95..0000000 --- a/tugas/02/webgis_db.sql +++ /dev/null @@ -1,30 +0,0 @@ --- ============================================================ --- Database: webgis_db --- Digunakan oleh: tugas/02 --- ============================================================ - -CREATE DATABASE IF NOT EXISTS webgis_db - CHARACTER SET utf8mb4 - COLLATE utf8mb4_unicode_ci; - -USE webgis_db; - --- Tabel Jalan (Polyline) -CREATE TABLE IF NOT EXISTS jalan ( - id INT(11) NOT NULL AUTO_INCREMENT, - nama_jalan VARCHAR(255) NOT NULL, - status_jalan ENUM('Nasional','Provinsi','Kabupaten') NOT NULL DEFAULT 'Kabupaten', - panjang_meter FLOAT NOT NULL DEFAULT 0, - geojson LONGTEXT NOT NULL, - PRIMARY KEY (id) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - --- Tabel Parsil Tanah (Polygon) -CREATE TABLE IF NOT EXISTS parsil_tanah ( - id INT(11) NOT NULL AUTO_INCREMENT, - nama_parsil VARCHAR(255) NOT NULL, - status_kepemilikan ENUM('SHM','HGB','HGU','HP') NOT NULL DEFAULT 'SHM', - luas_m2 FLOAT NOT NULL DEFAULT 0, - geojson LONGTEXT NOT NULL, - PRIMARY KEY (id) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; diff --git a/tugas/03/index.php b/tugas/03/index.php deleted file mode 100644 index 69ff6e1..0000000 --- a/tugas/03/index.php +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - - Kepadatan Penduduk Pontianak - - - - - - -
- - - \ No newline at end of file diff --git a/tugas/03/pontianak.js b/tugas/03/pontianak.js deleted file mode 100644 index 331a5c3..0000000 --- a/tugas/03/pontianak.js +++ /dev/null @@ -1,59 +0,0 @@ -var statesData = { - type: "FeatureCollection", - features: [ - { - type: "Feature", - id: "1", - properties: { name: "Pontianak Selatan", density: 5.673 }, - geometry: { - type: "Polygon", - coordinates: [[[315791.7496880172,-2872.6773100267],[315493.9173600795,-3043.9080895001625],[315326.6521934429,-3151.333180362999],[315140.4188381387,-3281.935194921576],[315066.9918184001,-3327.8058926928916],[314996.8467820659,-3371.6262979517323],[314888.67104393616,-3478.080758171731],[314812.70706351567,-3552.7994604061805],[314746.1257071411,-3618.2893480278017],[314655.6433510417,-3707.2884260803185],[314606.10591966007,-3756.013789919325],[314454.0137261031,-3905.612734831022],[314344.4320643814,-3996.3010035972147],[314259.6778418068,-4066.4424268491857],[314085.032268201,-4210.976689869447],[313840.1791924136,-4413.613711391907],[313536.192724674,-4712.359024276697],[313300.8322324334,-4943.661570138169],[312916.42216176353,-5321.443869765168],[312612.50988089014,-5620.11627486908],[312370.45105957426,-5854.688712254208],[312057.7659053877,-6157.703154576355],[311585.92455374077,-6614.9514189124275],[311333.4393242495,-6891.340090787351],[313474.832878937,-8889.931704557468],[313757.1209584046,-8461.458752544078],[314215.6677178042,-7765.450320278544],[314471.81653076597,-7473.440609211619],[314877.1271904595,-7011.386355436478],[315170.0992892701,-6667.707583206353],[315565.04540335014,-6204.405459439875],[315762.9765556948,-5956.206301724727],[315946.9456108697,-5783.346926725002],[316115.1479424136,-5571.442019498811],[316233.71287194826,-5370.136871324419],[316413.0633267751,-5142.274731615995],[316588.3382888399,-4973.07120414943],[315803.17076956015,-2870.648806607189],[315791.7496880172,-2872.6773100267]]] - } - }, - { - type: "Feature", - id: "2", - properties: { name: "Pontianak Utara", density: 3.642 }, - geometry: { - type: "Polygon", - coordinates: [[[309688.2266975902,951.2434479881485],[310155.9051329456,933.8867466094162],[310357.96077316906,885.1327602118836],[311332.6877226224,552.8154289115046],[312269.31459587533,306.7524367839651],[313016.67581282463,28.516046978937084],[313225.22203908674,-84.19626616407731],[313546.372705549,-322.5867385597503],[313720.9980547987,-448.5286571102988],[314170.79062105156,-811.0085487379129],[314504.16628780216,-895.1462170118866],[314775.1001630025,-1443.89314784007],[315291.5124306837,-1928.5005853951407],[315734.48124843184,-2324.9574099686342],[316159.40293160826,-2368.349163418803],[316654.17475448735,-2251.9322639187267],[317038.8796905633,-2161.4445829436972],[317913.59393999074,-2046.6151866172168],[318283.48217976745,-2054.023534766595],[318775.15660756174,-2147.859083549327],[319287.81429954246,-2395.9329130315673],[319416.881835456,-2033.8234388107558],[319526.1020538965,-1800.9896398106011],[319533.72206913494,-1723.0961506912936],[319510.86202341504,-1622.342615849966],[319574.3621504167,-1479.2556630090148],[319598.91553285625,-1507.1957188887664],[319482.0752991745,-1853.4830781301353],[319424.3083182946,-874.973119525288],[319320.91374074016,-644.5676602992062],[318847.9647948425,226.72111005606712],[318658.4169157464,989.0401346929066],[316567.76460495684,2999.9040346896763],[314562.85392847005,3541.7717850915287],[312083.8089703787,4381.666798215181],[309688.2266975902,951.2434479881485]]] - } - }, - { - type: "Feature", - id: "3", - properties: { name: "Pontianak Timur", density: 9.196 }, - geometry: { - type: "Polygon", - coordinates: [[[319887.57044806925,-5373.344392278639],[319702.88422977563,-5132.534790727044],[319580.270434435,-4979.559484159208],[319416.78537397756,-4779.407060143594],[319288.3328264768,-4635.773757029033],[319063.0274988217,-4397.196101115128],[318712.6388119413,-4027.525809986318],[319240.45505877363,-3500.8371123406214],[319482.70326267194,-3416.1079811805625],[319930.7033710063,-3290.5899437818016],[320060.2158619128,-2885.3158597254237],[319668.47127330344,-2832.0761712812755],[319302.34583165945,-2724.1663001296456],[319016.246975861,-2582.2846226671395],[318611.86326987745,-2402.6633110638345],[318312.0934654712,-2349.9022867323624],[317831.7500457056,-2325.396742533832],[317450.6828969274,-2376.0793589098607],[316961.72475783527,-2448.1651844011494],[316290.7174679831,-2617.4144481542617],[315891.63306421525,-2646.1325691096436],[316108.6562515756,-3080.1789438243754],[316374.4062489303,-3648.9273296033716],[316666.3438568887,-4078.0756132950055],[316960.2915036416,-4459.3151686055135],[317511.1983193059,-4982.14799761562],[318003.96436076245,-5498.157720267835],[318525.46364961116,-6295.854170744091],[318997.8492128665,-6873.389132317587],[319200.2395574156,-6725.148423245205],[319464.4036415865,-6506.445073789114],[319929.8147521868,-6173.089029280636],[320230.3441586008,-5948.45374608942],[319892.69977100904,-5382.870277737669],[319887.57044806925,-5373.344392278639]]] - } - }, - { - type: "Feature", - id: "4", - properties: { name: "Pontianak Tenggara", density: 3.103 }, - geometry: { - type: "Polygon", - coordinates: [[[316509.95719540527,-5101.833566810722],[316277.42321839795,-5368.326560621595],[315586.95250728936,-6227.493567962928],[314650.4343267438,-7312.870467518172],[313943.0478521116,-8266.304411587676],[313570.5827409144,-8808.522535934284],[314482.8144881896,-9756.429398367298],[315386.15532470803,-10595.173154648382],[315969.86388160125,-10324.183934093831],[316202.0711808827,-9921.28120289028],[316389.8178299225,-9632.15192111897],[316955.59155603434,-8811.299556391281],[317370.6954695009,-8105.002669764531],[318021.28465803474,-6941.185008999439],[318253.2629668124,-6576.773915689321],[318236.68267524854,-6280.690804057879],[317914.4077884978,-5744.010290518615],[317403.09039107355,-5217.314926254428],[316771.0250557211,-4765.816074840871],[316509.95719540527,-5101.833566810722]]] - } - }, - { - type: "Feature", - id: "5", - properties: { name: "Pontianak Kota", density: 8.102 }, - geometry: { - type: "Polygon", - coordinates: [[[310276.47296142485,-3455.9797973638633],[309858.4304809589,-3797.2929687509313],[309527.70056152344,-4114.79357910133],[309256.67931494024,-4394.240588930203],[309517.11724853516,-4686.294799805153],[309900.76403808687,-5093.753967286088],[310421.994140625,-5638.796691895346],[310977.62023925874,-6427.256591796759],[311295.12091064546,-6863.819946288946],[311784.60089111235,-6451.0691528309835],[312297.8936767578,-5916.60974120989],[312922.31152343843,-5310.71270752023],[313407.04170880467,-4843.868031024118],[313851.00109863374,-4424.356750487466],[314247.8766479511,-4080.397766113165],[314713.5443115253,-3659.709350586054],[315263.87866211124,-3191.395935058943],[315803.6297607431,-2876.541137695778],[315533.75421142764,-2532.582153319032],[315086.40909403935,-2251.8851285779383],[314597.12731933594,-1876.4141235346906],[314187.02246093843,-2037.810302733793],[313546.7294311533,-2148.9354858405422],[312935.5408325214,-2270.64410400379],[312366.6854858408,-2413.519348145579],[311906.3095092783,-2564.3322143565165],[311385.0793457031,-2783.936767577892],[310773.8905639658,-3093.4998779299203],[310276.47296142485,-3455.9797973638633]]] - } - }, - { - type: "Feature", - id: "6", - properties: { name: "Pontianak Barat", density: 9.331 }, - geometry: { - type: "Polygon", - coordinates: [[[314496.5855712909,-1831.4348754876992],[314333.6083123619,-1673.1813620609464],[313976.42009798624,-1469.4517879342893],[313709.19039686024,-1196.9304095584666],[313412.8564708587,-1024.9508989329915],[313156.21012423374,-776.2420681805816],[312690.5425262293,-424.3455310544232],[312129.62473772746,-204.74092517967802],[311526.37353122514,-96.26154155412223],[310896.6639384739,-149.17831405519973],[310303.9960864708,-154.46999130456243],[309732.49494346976,70.42629182199016],[309351.49418146536,70.42629182199016],[309319.74411796685,-400.5329834310105],[309364.7233745931,-715.3877798067406],[309351.49418146536,-974.679965057876],[309232.4314433411,-1506.493528684834],[309176.8688322166,-1879.5567748110043],[309205.97305709217,-2040.952930937754],[308552.45091671497,-2472.2246268143645],[308147.6376070874,-3011.9757063165307],[308430.74233996496,-3734.289650943014],[308827.6181337144,-4363.999243696919],[309142.47293009236,-4490.9994976965245],[309479.5459254207,-4168.759302856284],[310007.24186643306,-3657.238962248084],[310429.9315185547,-3344.854614257114],[310773.8905639658,-3093.4998779299203],[311336.9246401787,-2797.156559649622],[311906.3095092783,-2564.3322143565165],[312525.43572998233,-2360.602661131881],[313125.56844345294,-2227.800214529503],[313970.063720705,-2077.4978637696477],[314456.89801025484,-1908.1641845697304],[314496.5855712909,-1831.4348754876992]]] - } - } - ] -}; \ No newline at end of file diff --git a/tugas/03/pontianak.json b/tugas/03/pontianak.json deleted file mode 100644 index 5ec190c..0000000 --- a/tugas/03/pontianak.json +++ /dev/null @@ -1,8 +0,0 @@ -{"type":"FeatureCollection", "features": [ -{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[315791.7496880172,-2872.6773100267],[315493.9173600795,-3043.9080895001625],[315326.6521934429,-3151.333180362999],[315140.4188381387,-3281.935194921576],[315066.9918184001,-3327.8058926928916],[314996.8467820659,-3371.6262979517323],[314888.67104393616,-3478.080758171731],[314812.70706351567,-3552.7994604061805],[314746.1257071411,-3618.2893480278017],[314655.6433510417,-3707.2884260803185],[314606.10591966007,-3756.013789919325],[314454.0137261031,-3905.612734831022],[314344.4320643814,-3996.3010035972147],[314259.6778418068,-4066.4424268491857],[314085.032268201,-4210.976689869447],[313840.1791924136,-4413.613711391907],[313536.192724674,-4712.359024276697],[313300.8322324334,-4943.661570138169],[312916.42216176353,-5321.443869765168],[312612.50988089014,-5620.11627486908],[312370.45105957426,-5854.688712254208],[312057.7659053877,-6157.703154576355],[311585.92455374077,-6614.9514189124275],[311333.4393242495,-6891.340090787351],[311349.90300833154,-6902.971926725351],[311371.5987480767,-6925.461611782668],[311404.1888970034,-6960.523379361852],[311421.3977593072,-6976.292544400771],[311452.8170708306,-7006.871645962508],[311495.7740410464,-7052.635806119659],[311529.00988089014,-7091.601138149959],[311545.2208183883,-7107.547366177889],[311564.00658499077,-7126.026492155595],[311582.9525688775,-7144.663271940026],[312306.1403130181,-7871.188052213602],[312689.2579888003,-8220.438845670635],[313474.832878937,-8889.931704557468],[313757.1209584046,-8461.458752544078],[314215.6677178042,-7765.450320278544],[314471.81653076597,-7473.440609211619],[314877.1271904595,-7011.386355436478],[315170.0992892701,-6667.707583206353],[315565.04540335014,-6204.405459439875],[315762.9765556948,-5956.206301724727],[315946.9456108697,-5783.346926725002],[316115.1479424136,-5571.442019498811],[316233.71287194826,-5370.136871324419],[316413.0633267751,-5142.274731615995],[316588.3382888399,-4973.07120414943],[316562.62481477764,-4944.194633692106],[316673.55813834723,-4826.780624282608],[316813.89236564003,-4699.78719729204],[316848.5410874747,-4658.158080699761],[316695.5555569697,-4485.049627727178],[316572.88390432764,-4348.467104947824],[316475.2670220034,-4225.068423306027],[316443.7366264956,-4173.700991666048],[316414.5740898745,-4126.191226040231],[316414.41985403467,-4125.940066372697],[316377.99205862265,-4066.594180141925],[316347.419976105,-4016.7879667644283],[316308.4733818667,-3943.1278715497774],[316293.5168999322,-3918.198245083262],[316145.0217217095,-3674.7195463533626],[316072.2159966128,-3553.555850065626],[316013.2322319634,-3448.2597685219316],[315999.5084160464,-3358.123232878157],[315964.6694878228,-3266.509829556244],[315898.449621683,-3104.193594283126],[315803.17076956015,-2870.648806607189],[315791.7496880172,-2872.6773100267]]]},"properties":{"Id":0,"Kecamatan":"Pontianak Selatan"}}, -{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[309688.2266975902,951.2434479881485],[310155.9051329456,933.8867466094162],[310357.96077316906,885.1327602118836],[310911.47021352034,552.8154289115046],[311332.6877226224,552.8154289115046],[311608.91327507235,474.49860561108653],[311890.9596725013,437.45686485974875],[312050.7683254536,378.71924738555026],[312269.31459587533,306.7524367839651],[312450.8191255536,254.36483200859948],[312672.1876238454,162.395481404139],[313016.67581282463,28.516046978937084],[313134.15104777087,-2.175681071345025],[313225.22203908674,-84.19626616407731],[313257.97629542183,-141.34679274705377],[313291.2401063731,-166.3159329688442],[313376.5098658232,-207.49275837285495],[313431.01414149813,-257.763692247132],[313546.372705549,-322.5867385597503],[313633.6853801729,-379.2076851350812],[313720.9980547987,-448.5286571102988],[313751.1606151238,-493.5079137362882],[313825.77326434944,-557.5372084609971],[313842.9749822486,-590.9609248882916],[313906.1013929201,-642.7457594489806],[313982.9360786751,-682.4207915609986],[314082.4196109753,-771.3209693624322],[314170.79062105156,-811.0085487379129],[314252.8116184268,-879.800352987857],[314304.67005547695,-920.5462678116619],[314354.9409893509,-995.1589170373882],[314394.6285687266,-1025.3214773623986],[314415.77314684074,-1067.811862995084],[314448.25415333174,-1096.6891320695122],[314465.0078761522,-1062.892385839008],[314488.82042377815,-976.6380466639421],[314504.16628780216,-895.1462170118866],[314526.3913322529,-814.712722812601],[314528.508003152,-781.9043238612267],[314538.71590561327,-811.1396428356384],[314529.03717087954,-854.4003021880817],[314516.8663132023,-909.9629133128674],[314499.40377827734,-994.6297493121147],[314481.94124335237,-1087.2341011882363],[314478.2370692771,-1117.3966615132467],[314594.12480105273,-1234.8718964638701],[314660.79993440304,-1331.7095901399553],[314775.1001630025,-1443.89314784007],[314882.5212111799,-1457.6515086905038],[314922.20879055746,-1552.3725314654948],[314969.83388580475,-1603.1726330650436],[315025.39649693016,-1670.3769341413918],[315056.08822498005,-1687.8394690665136],[315076.1965985298,-1709.535345791599],[315090.4841271052,-1741.285409290207],[315132.28837737907,-1795.2605172413932],[315201.0801816294,-1863.5231537660657],[315291.5124306837,-1928.5005853951407],[315341.3096287558,-2007.9859426922812],[315384.17221448105,-2064.0777215423386],[315482.59741132986,-2142.394544842755],[315635.5268838564,-2261.457282969197],[315734.48124843184,-2324.9574099686342],[315913.3399394825,-2362.5283184430227],[316045.6318707345,-2371.5241697682195],[316159.40293160826,-2368.349163418803],[316330.8532745093,-2329.7199194938694],[316472.67022481,-2284.2114951426065],[316654.17475448735,-2251.9322639187267],[316703.3873529108,-2262.515618417521],[316795.9917047871,-2247.698922118765],[316851.5543159116,-2209.0696781938295],[316871.6626894614,-2209.0696781938295],[316878.54186988715,-2186.8446337434707],[317038.8796905633,-2161.4445829436972],[317253.7217869144,-2122.286171293488],[317396.0679049399,-2096.3569527684413],[317413.00127214007,-2106.411139541964],[317452.15968379006,-2107.4694749925093],[317479.14723776374,-2085.773598267424],[317599.26831134036,-2081.011088742189],[317762.78113836516,-2053.494367043544],[317913.59393999074,-2046.6151866172168],[317940.5814939663,-2051.377696142452],[318033.18584584165,-2054.023534766595],[318059.1150643667,-2049.790192966633],[318157.54026121926,-2050.8485284171784],[318232.1529104421,-2053.494367043544],[318283.48217976745,-2054.023534766595],[318307.82389511634,-2058.2568765665583],[318322.1890349593,-2040.7555360091665],[318341.66240723897,-2032.7121865881272],[318345.895749039,-2017.8954902893693],[318331.92572110053,-2017.4721561082624],[318328.115713479,-2006.465467428361],[318339.5457363399,-2003.925462348383],[318338.27573379874,-1986.5687609696488],[318350.12909083907,-1980.6420824497],[318347.58908575866,-2011.5454775883154],[318349.7057566596,-2045.4122119902368],[318390.76917211805,-2067.848923528927],[318458.50264091976,-2073.775602048874],[318567.72285935935,-2088.592298349853],[318694.29977918137,-2123.729035290653],[318775.15660756174,-2147.859083549327],[318834.4233927615,-2173.259134349102],[318920.78356548306,-2213.899215630963],[319078.26388044376,-2282.056018609246],[319287.81429954246,-2395.9329130315673],[319316.17768960353,-2402.706259911509],[319344.1177454833,-2393.816242130475],[319358.0877734246,-2376.8828749306267],[319372.67629703414,-2165.073878233925],[319416.881835456,-2033.8234388107558],[319482.49863335583,-1976.6733245123742],[319482.0752991745,-1853.4830781301353],[319526.1020538965,-1800.9896398106011],[319567.58880353626,-1771.3562472108642],[319566.74213517644,-1749.3428698510597],[319533.72206913494,-1723.0961506912936],[319461.55289573595,-1713.1931217828806],[319438.0485444553,-1703.6227784114672],[319430.42852921505,-1689.2294162893722],[319439.74188117497,-1654.516013529681],[319510.86202341504,-1622.342615849966],[319551.5021046968,-1619.802610769988],[319596.37552777585,-1552.0691419705909],[319598.91553285625,-1507.1957188887664],[319574.3621504167,-1479.2556630090148],[319539.6487476565,-1486.8756782489472],[319491.38865113445,-1526.6690911708156],[319474.4552839352,-1552.0691419705909],[319455.0665784916,-1551.7728080433699],[319443.3190549966,-1534.6277737529672],[319438.2390448358,-1505.4177153343371],[319448.7165657934,-1489.2251829480938],[319468.71910579596,-1469.222642942992],[319496.97666231263,-1457.4751194494856],[319529.3617270831,-1426.6775578528159],[319541.53258475754,-1417.787540074005],[319544.1784233814,-1395.562495623646],[319534.6534043336,-1353.7582453470732],[319515.0741985068,-1345.291561747148],[319467.9782709824,-1359.0499225975818],[319431.4656979563,-1362.224928949221],[319412.4156598579,-1341.0582199471864],[319412.9448275808,-1319.3623432221011],[319426.21315114107,-1294.72437715229],[319443.10738790594,-1252.1580421479757],[319490.732483156,-1226.2288236229288],[319496.02416040655,-1207.1787855219864],[319485.44080590736,-1199.2412696473348],[319477.5032900302,-1136.7994780962235],[319479.61996093206,-1105.578582322889],[319468.2340353811,-986.1983435617276],[319424.3083182946,-874.973119525288],[319361.55382202286,-683.9377390399677],[319320.91374074016,-644.5676602992062],[319308.10788179655,-575.3525218703762],[319294.3495209459,-557.360819219979],[319273.1828119466,-508.67738851930153],[319237.72857437097,-458.935622370298],[319270.00780559704,-400.1980048938749],[319246.72442569584,-352.5729096437426],[319235.61190347,-326.11452339342213],[319272.6536442209,-311.8269948199377],[319277.94532147143,-293.3061244442688],[319243.54941934627,-251.50187416769586],[319213.38685902115,-237.2143455942114],[319144.59505476896,-227.68932654374112],[319075.80325051956,-181.12256674415403],[319061.6427221997,-150.78714496085922],[319037.17400659434,-139.8474841928546],[319015.605130123,-107.92455923596208],[318993.3800856732,-99.66954272659132],[318968.615036143,-74.26949192681604],[318951.470001854,-42.519428425986916],[318947.02499296423,-32.04190747135726],[318947.34249359835,6.058168728302917],[318937.320562887,30.81097922148001],[318908.9249167638,87.65583192452323],[318887.33487358317,127.34341130000394],[318847.9647948425,226.72111005606712],[318834.94726880826,297.84125229543497],[318819.07596017234,368.5543802912907],[318807.64221419767,413.4114834355205],[318790.8146805437,454.36906535210073],[318772.0821430776,558.8267742658936],[318737.79207449686,756.3121692369168],[318712.3920236975,780.1247168630944],[318690.4844798818,802.3497613134532],[318685.40446972195,840.132336878396],[318658.4169157464,989.0401346929066],[318654.2894074926,1004.9151664444325],[318634.6043681223,1023.6477039084311],[318586.0267709661,1019.0439447016688],[318531.0991611127,1066.9865405865203],[318553.6417061975,1102.2291110714832],[318559.3567176275,1131.121668855394],[318554.59420810174,1162.8717323562232],[318580.6292601712,1233.9918745978139],[318596.0544876987,1337.2941559066749],[318582.21676334646,1369.247145108282],[318611.7443224024,1421.6347498836476],[318635.23936939146,1493.7073940271766],[318661.47021352034,1520.6208645209626],[318668.4552274905,1556.8159369123096],[318632.8951563714,1595.55101438141],[318648.7701881202,1669.8461629724152],[318633.5301576406,1740.3313039423447],[318611.94011445995,1762.5563483927035],[318637.3401652593,1815.8964550722303],[318664.0102185998,1846.37651603196],[318682.42525542993,1908.6066404925186],[318684.33025924023,1980.3617840035477],[318675.91649241187,2014.8238320936216],[318654.64394986816,2063.401429250138],[318695.6015317822,2127.2190568842925],[318711.0003125807,2287.7685446503674],[316567.76460495684,2999.9040346896763],[315538.2158791926,3269.1445731717286],[314562.85392847005,3541.7717850915287],[313811.01242478564,3790.6922829337636],[312083.8089703787,4381.666798215181],[310636.4294089526,3571.8002895927457],[309688.2266975902,951.2434479881485]]]},"properties":{"Id":0,"Kecamatan":"Pontianak Utara"}}, -{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[319887.57044806925,-5373.344392278639],[319852.1480175494,-5334.047633417942],[319824.3302746851,-5279.321020009685],[319765.94275309215,-5207.270818364535],[319702.88422977563,-5132.534790727044],[319658.50971336546,-5076.48277000174],[319619.9739491157,-5025.101751000274],[319580.270434435,-4979.559484159208],[319542.9024206165,-4932.849466887184],[319498.52790420625,-4884.971699184203],[319465.83089211734,-4845.268184497927],[319416.78537397756,-4779.407060143594],[319352.5591002298,-4709.342034235556],[319288.3328264768,-4635.773757029033],[319225.2743031599,-4554.031226800181],[319187.90628934116,-4517.830963418014],[319145.8672737929,-4466.449944416539],[319063.0274988217,-4397.196101115128],[318970.88635908754,-4296.678494137728],[318712.6388119413,-4027.525809986318],[318700.9543592722,-4015.3479525993157],[318709.1286122945,-4000.167196985628],[318735.98687222344,-3974.4766874876964],[318748.6007874913,-3981.081929000221],[318860.6800702028,-3865.50016869716],[318901.807433543,-3845.790589901753],[319240.45505877363,-3500.8371123406214],[319266.1455682717,-3477.4821037046086],[319289.5005769076,-3471.6433515442072],[319331.5395924557,-3463.469098521879],[319351.39134979894,-3456.462595930516],[319371.24310713634,-3449.4560933391535],[319482.70326267194,-3416.1079811805625],[319520.35719185916,-3409.191953374463],[319930.7033710063,-3290.5899437818016],[319943.6860081592,-3268.9522151919746],[320015.48383422254,-3021.857923483452],[320060.2158619128,-2885.3158597254237],[319883.885546709,-2863.1286015203736],[319668.47127330344,-2832.0761712812755],[319652.3563173439,-2826.704519296623],[319561.58642752306,-2810.5798320879417],[319495.9512724161,-2782.734618262236],[319437.8048817517,-2773.211818269202],[319386.4238627501,-2753.3600609260684],[319352.5591002298,-2744.018057472783],[319302.34583165945,-2724.1663001296456],[319253.30031352554,-2703.146792361161],[319197.24829279474,-2679.2079085040614],[319158.7125285447,-2655.852899868049],[319074.63449745404,-2611.4783834579434],[319016.246975861,-2582.2846226671395],[318963.69820642885,-2558.9296140255133],[318900.63968311204,-2523.8971010743035],[318844.5876623867,-2490.0323385484376],[318807.21964856813,-2469.012830779956],[318734.81912179245,-2447.99332300586],[318611.86326987745,-2402.6633110638345],[318583.62701797124,-2397.4343755243854],[318516.91807503824,-2390.405046367276],[318504.7722867252,-2373.257295368376],[318433.53951038065,-2367.4185432079735],[318312.0934654712,-2349.9022867323624],[318232.6864361098,-2337.057031980595],[318170.79566322424,-2338.2247824115543],[318057.52387133683,-2327.7150285273115],[317964.74622543866,-2332.2209782429454],[317831.7500457056,-2325.396742533832],[317741.86880649073,-2329.042727579637],[317686.3608840788,-2317.3415121922267],[317647.97358792066,-2308.309207210856],[317505.6042941964,-2324.772986872912],[317450.6828969274,-2376.0793589098607],[317409.8116318156,-2413.058122584948],[317378.67162030103,-2415.004373303215],[317335.8541044656,-2411.111871866686],[317285.25158575136,-2411.111871866686],[317254.1115742368,-2418.8968747453605],[317228.81031488266,-2440.3056326631036],[317168.47654257156,-2451.9831369783014],[317139.28278177505,-2444.198134099631],[317104.72691741184,-2419.374652909264],[317087.420740484,-2422.4884900167626],[317058.12484471785,-2427.759593370711],[317034.18524291,-2455.8756384204476],[316961.72475783527,-2448.1651844011494],[316428.7982628549,-2576.067543195995],[316333.48672879336,-2588.4994824231076],[316290.7174679831,-2617.4144481542617],[316242.0455030631,-2600.426598820278],[315891.63306421525,-2646.1325691096436],[316008.4081073952,-2879.6826554753757],[316108.6562515756,-3080.1789438243754],[316099.98489745276,-3117.600883118676],[316159.4345105,-3231.040450875527],[316189.5124305546,-3242.160929183013],[316190.9886346372,-3291.250871420696],[316290.7174679831,-3481.5497677091553],[316374.4062489303,-3648.9273296033716],[316444.0134850881,-3719.8079814207367],[316545.5733060347,-3907.303035476732],[316558.55100204103,-3931.8164612599344],[316606.0100845777,-3959.3543193966816],[316644.93509897124,-4039.1505989016505],[316666.3438568887,-4078.0756132950055],[316681.9138626461,-4115.054376970092],[316715.00012487906,-4165.656895684263],[316755.87138999073,-4216.259414398428],[316796.74265510804,-4264.915682388709],[316960.2915036416,-4459.3151686055135],[317452.8107977186,-4958.79298897961],[317511.1983193059,-4982.14799761562],[317808.17965152155,-5293.137883236935],[317835.3917891925,-5281.669495876021],[318003.96436076245,-5498.157720267835],[318130.1060481742,-5630.249487280383],[318171.5591498216,-5724.218836670152],[318250.0367624292,-5855.174064717857],[318287.71731286065,-5890.871428284679],[318410.35862713464,-6071.669822687934],[318416.5135193256,-6096.893941284323],[318525.46364961116,-6295.854170744091],[318579.68996443006,-6371.771011489196],[318696.4650076103,-6517.739815465671],[318715.4221102912,-6536.677846952076],[318826.0334055243,-6682.970014070402],[318863.0121691994,-6747.196287818035],[318901.9371835927,-6786.121302211386],[318997.8492128665,-6873.389132317587],[319075.9838979524,-6815.516175584639],[319200.2395574156,-6725.148423245205],[319191.9285408274,-6699.123895043224],[319226.9610537845,-6681.607638562008],[319297.0260796923,-6629.058869129576],[319372.92985776067,-6568.725096818472],[319464.4036415865,-6506.445073789114],[319602.58744269,-6399.401284205985],[319661.3713138188,-6377.600065466999],[319929.8147521868,-6173.089029280636],[319974.32133015344,-6121.087431286495],[320003.54130222456,-6130.8191405916805],[320230.3441586008,-5948.45374608942],[320248.2236814376,-5940.501314505677],[319892.69977100904,-5382.870277737669],[319887.57044806925,-5373.344392278639]]]},"properties":{"Id":0,"Kecamatan":"Pontianak Timur"}}, -{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[316509.95719540527,-5101.833566810722],[316408.1359365364,-5203.782315435412],[316325.09491560137,-5300.663506526331],[316277.42321839795,-5368.326560621595],[316132.8703301034,-5610.529538348923],[315586.95250728936,-6227.493567962928],[315093.3197717309,-6783.407069222814],[314650.4343267438,-7312.870467518172],[314313.65685295156,-7710.390910327802],[314055.3070100423,-8097.146776349532],[313943.0478521116,-8266.304411587676],[313840.0154742847,-8421.621876669971],[313570.5827409144,-8808.522535934284],[313532.4561374881,-8860.509050278746],[313764.6634367695,-9082.566891445913],[314482.8144881896,-9756.429398367298],[314735.8516364164,-9990.009694709013],[315386.15532470803,-10595.173154648382],[315549.6609377029,-10756.07413279045],[315603.95862415945,-10800.010729939153],[315969.86388160125,-10324.183934093831],[316070.2870470217,-10131.32280160789],[316112.765529194,-10080.348623001111],[316116.5469964496,-10075.810862294282],[316137.4837201553,-10024.313580717127],[316174.390840571,-9967.415103409774],[316202.0711808827,-9921.28120289028],[316223.60033445846,-9882.836285790694],[316235.945734366,-9895.932656358724],[316248.20508140215,-9842.85357200713],[316265.9526893499,-9844.492162100709],[316258.9696581901,-9821.324418431366],[316286.1432427033,-9809.879784923392],[316389.8178299225,-9632.15192111897],[316654.18340597366,-9238.807034538575],[316735.68663022487,-9121.934486555845],[316955.59155603434,-8811.299556391281],[316992.49867644993,-8749.787689031953],[317037.0947802855,-8663.209735723693],[317061.6995272292,-8632.453802044038],[317135.5137680604,-8501.741083905486],[317370.6954695009,-8105.002669764531],[317656.4423947597,-7665.102797984467],[317804.04443023715,-7394.499066275981],[318021.28465803474,-6941.185008999439],[318148.9217828052,-6663.612707540501],[318253.2629668124,-6576.773915689321],[318377.3450655272,-6449.340610034038],[318368.0578102728,-6434.481001627012],[318328.6360094514,-6401.958423098472],[318236.68267524854,-6280.690804057879],[318229.65610871447,-6226.878449289301],[318202.7446667446,-6188.433532189729],[318058.17540597706,-5987.5423710395135],[318014.0167324725,-5894.597844288705],[317949.0082138875,-5824.744616427738],[317914.4077884978,-5744.010290518615],[317749.0946449697,-5555.630196730686],[317606.8484517013,-5417.2284951722295],[317403.09039107355,-5217.314926254428],[317160.8874133462,-5009.712373916721],[317003.2632532378,-4852.08821380847],[316876.39502680924,-4698.308545410153],[316771.0250557211,-4765.816074840871],[316705.52283150854,-4850.123247204937],[316595.7471319823,-4943.1257775002705],[316584.9825551945,-4963.117134392062],[316606.39071400976,-4977.715075073957],[316509.95719540527,-5101.833566810722]]]},"properties":{"Id":0,"Kecamatan":"Pontianak Tenggara"}}, -{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[310276.47296142485,-3455.9797973638633],[310115.07678222656,-3564.4591674809344],[310030.4100341797,-3651.7719116217922],[309858.4304809589,-3797.2929687509313],[309718.20098876953,-3942.8141479482874],[309527.70056152344,-4114.79357910133],[309408.63787841797,-4241.793823241489],[309318.6794433603,-4321.169067383977],[309256.67931494024,-4394.240588930203],[309308.096130372,-4450.815063477261],[309427.1588134775,-4575.169494627626],[309517.11724853516,-4686.294799805153],[309657.3467407236,-4823.878417967586],[309784.3470458975,-4961.462036132463],[309900.76403808687,-5093.753967286088],[309982.78485107515,-5167.837402344332],[310128.30603027437,-5329.233581543318],[310313.51483154483,-5530.317321778275],[310421.994140625,-5638.796691895346],[310514.59857177734,-5739.338562011602],[310612.494567872,-5850.463745115907],[310662.76544189546,-5895.442993162898],[310713.03637695406,-5951.005615234608],[310752.72393799014,-5993.339050291921],[310792.4114379892,-6043.609985352494],[310829.4533081064,-6083.297546385904],[310855.91162109375,-6120.339294434525],[310877.07849121094,-6175.901855469565],[310929.9950561542,-6255.277099609608],[310967.03692627046,-6345.235595703591],[310977.62023925874,-6427.256591796759],[310990.8494873047,-6485.465026855702],[311004.0785522461,-6551.611022949684],[311017.30780029483,-6599.236083983909],[311041.12036132906,-6633.631958008744],[311101.9745483408,-6689.194641112117],[311154.89141845703,-6739.46551513602],[311231.6207885761,-6813.5490722649265],[311295.12091064546,-6863.819946288946],[311340.10015869327,-6892.924194336752],[311522.6629638681,-6707.71551513765],[311670.8298950214,-6548.965209960006],[311784.60089111235,-6451.0691528309835],[311893.08026123233,-6324.068847656716],[311963.8046613168,-6246.005156220752],[312048.4717145385,-6169.275725068059],[312139.14343261905,-6078.005920408876],[312223.8102416992,-5995.984863281599],[312297.8936767578,-5916.60974120989],[312411.6647338886,-5805.484436034807],[312554.53997802734,-5670.546752930386],[312710.6444702158,-5522.379760743352],[312805.8948364258,-5416.546203613514],[312922.31152343843,-5310.71270752023],[313032.6743180966,-5200.19580923568],[313126.9781824285,-5107.2787843161495],[313210.70800781157,-5030.253723145346],[313292.7290649414,-4950.878601073637],[313407.04170880467,-4843.868031024118],[313546.7294311533,-4699.523986817105],[313655.20898437593,-4588.398681639577],[313761.0424194345,-4503.731872559176],[313851.00109863374,-4424.356750487466],[313962.12615966983,-4334.398193359375],[314070.605529787,-4239.1480102542555],[314192.31414795015,-4130.668640137068],[314247.8766479511,-4080.397766113165],[314335.1893920889,-4014.2517089850735],[314419.85614013765,-3937.5223999030422],[314536.2731323242,-3821.1055297851562],[314713.5443115253,-3659.709350586054],[314837.89862060733,-3530.063232422108],[314898.7530517578,-3487.729858398903],[314959.60723877046,-3408.3547363271937],[315036.3366699228,-3339.5629272459773],[315165.98266601656,-3260.187744140043],[315263.87866211124,-3191.395935058943],[315364.4206542978,-3135.8333740237867],[315480.8374023456,-3053.8123168940656],[315610.4836425772,-2977.0830078120343],[315705.7337036142,-2921.5203857427696],[315803.6297607431,-2876.541137695778],[315750.7131958008,-2791.8742675788235],[315660.75451660156,-2667.5198364258977],[315602.54602050874,-2606.6656494138297],[315533.75421142764,-2532.582153319032],[315475.2679967545,-2490.8043564147083],[315440.3429269055,-2480.4855857777875],[315380.2956542969,-2442.6235961909406],[315361.77471924014,-2432.0402832027758],[315335.31640625,-2463.7903442378156],[315315.76680293214,-2453.978527038824],[315306.2121582022,-2461.144531250582],[315282.8626119448,-2459.4511687088525],[315324.5345702879,-2412.6198250451125],[315334.4564651316,-2415.3979556019185],[315338.8220988652,-2404.6823091722326],[315328.90020402055,-2395.1572901209584],[315349.53774529416,-2369.36036352627],[315337.234595689,-2363.0103508270113],[315309.35759323835,-2397.780018719379],[315314.2157996511,-2401.110427027452],[315296.35638893116,-2424.922974653309],[315289.545646254,-2422.4905240247026],[315265.0032012258,-2453.101156009594],[315213.60778808687,-2413.519348145579],[315141.9717051638,-2345.1509401076473],[315152.6873515928,-2323.322771453066],[315126.49354920536,-2304.2727333528455],[315089.25347900484,-2291.810852050665],[315081.3158569336,-2281.2274169918383],[315092.1835903358,-2270.359641807154],[315103.4747531684,-2278.078930965392],[315107.7744140625,-2267.99829101644],[315086.40909403935,-2251.8851285779383],[315065.44091796875,-2233.6023559576133],[315059.818415856,-2241.1694821458077],[315080.8528329255,-2260.219520246028],[315073.3121928433,-2269.7445392948575],[315054.85754394624,-2254.769042967935],[314984.8088908363,-2194.338138482184],[314922.56561279483,-2140.9979858397273],[314926.4681491554,-2125.6786261638626],[314840.1124732327,-2057.2045107540907],[314845.8362426758,-2061.6228637704626],[314665.9193725586,-1921.3934326183517],[314607.7108764658,-1873.768310547457],[314597.12731933594,-1876.4141235346906],[314636.814880372,-1908.1641845697304],[314615.64825439546,-1905.518371582497],[314594.48162841983,-1900.2266845713602],[314581.25231933687,-1905.518371582497],[314557.4397583008,-1889.643371580867],[314533.6273803711,-1879.0599365244852],[314523.0438842783,-1871.1224365236703],[314525.68981933594,-1852.601562500582],[314496.5855712909,-1831.4348754876992],[314456.89801025484,-1908.1641845697304],[314414.5645141611,-1961.0809936517617],[314348.41864013765,-1984.893493651878],[314271.68927001953,-2016.6435546868015],[314187.02246093843,-2037.810302733793],[314078.54309082124,-2053.6853027354227],[313970.063720705,-2077.4978637696477],[313784.85498046875,-2103.9562988276593],[313716.06317138765,-2114.539611815824],[313639.33380126953,-2130.414672851679],[313546.7294311533,-2148.9354858405422],[313464.7085571289,-2167.456420897739],[313316.5416259784,-2188.6230468740687],[313247.74987793155,-2204.4981689463602],[313126.0411987314,-2228.310729980585],[313049.3118286133,-2246.831542969565],[312935.5408325214,-2270.64410400379],[312850.87402343843,-2294.4566650378983],[312692.12359619234,-2326.2066650388297],[312586.29016113374,-2352.665039062733],[312525.43572998233,-2360.602661131881],[312414.31066894624,-2400.290222167736],[312366.6854858408,-2413.519348145579],[312237.0392456064,-2453.206909178989],[312091.5183105478,-2503.4779052736703],[311906.3095092783,-2564.3322143565165],[311781.95520019624,-2617.248962401878],[311641.7256469736,-2670.1657714839093],[311498.8504028311,-2725.7283935555024],[311385.0793457031,-2783.936767577892],[311258.07910156343,-2842.14526367106],[311141.66210937407,-2881.832824706915],[311043.7661132822,-2926.8121337880148],[310951.16168212984,-2977.0830078120343],[310773.8905639658,-3093.4998779299203],[310660.119506835,-3162.2916870111367],[310559.57775879,-3244.312744140858],[310429.9315185547,-3344.854614257114],[310276.47296142485,-3455.9797973638633]]]},"properties":{"Id":0,"Kecamatan":"Pontianak Kota"}}, -{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[314496.5855712909,-1831.4348754876992],[314473.8377594892,-1765.7857139359694],[314444.73353461176,-1736.6814890607493],[314402.40011661407,-1728.7439731854247],[314333.6083123619,-1673.1813620609464],[314272.75402398873,-1638.785459933919],[314203.96221973654,-1596.4520419340115],[314153.69128586166,-1559.4103011834668],[314092.8369974848,-1551.472785310587],[314031.98270911165,-1511.7852059341967],[313976.42009798624,-1469.4517879342893],[313997.5868069865,-1421.8266926850192],[313971.1284207348,-1392.7224678097991],[313918.211648236,-1347.7432111840462],[313867.94071436115,-1321.2848249346716],[313849.41984398477,-1355.6807270592544],[313820.3156191092,-1334.514018059359],[313820.3156191092,-1278.9514069323195],[313775.3363624858,-1241.909666184336],[313709.19039686024,-1196.9304095584666],[313680.0861719847,-1239.263827558374],[313637.7527539851,-1210.159602683154],[313510.7524999855,-1122.8469280574936],[313412.8564708587,-1024.9508989329915],[313309.66876448225,-940.2840629332932],[313246.16863748245,-882.075613182853],[313214.41857398394,-818.575486180489],[313156.21012423374,-776.2420681805816],[313053.0224178573,-651.8876528069377],[312973.64725910686,-612.2000734304311],[312883.6887458572,-572.5124940564856],[312801.66774848104,-514.3040443060454],[312690.5425262293,-424.3455310544232],[312529.14637010545,-331.7411791794002],[312418.0211478537,-307.9286315535428],[312253.9791531032,-247.0743431795854],[312129.62473772746,-204.74092517967802],[312042.3120631045,-188.86589342914522],[311875.62422972824,-157.1158299279632],[311745.9781371029,-130.65744367870502],[311526.37353122514,-96.26154155412223],[311333.2273116,-88.32402567879763],[311174.4769940991,-106.84489605284762],[311042.18506284803,-130.65744367870502],[310896.6639384739,-149.17831405519973],[310801.4137479728,-175.63670030445792],[310724.6844278481,-202.09508655383252],[310618.85088284593,-188.86589342914522],[310534.1840468468,-172.99086167861242],[310457.4547267221,-157.1158299279632],[310378.07956797164,-167.6991844291333],[310303.9960864708,-154.46999130456243],[310192.8708642218,-112.13657330465503],[310076.4539647205,-64.51147805294022],[309957.3912265934,-40.698930429527536],[309872.7243905943,6.926164822187275],[309806.5784249678,20.155357946874574],[309732.49494346976,70.42629182199016],[309629.30723709334,128.63474157243036],[309584.32798046805,128.63474157243036],[309489.07778996695,152.44728919828776],[309409.7026312165,144.50977332307957],[309359.4316973407,157.73896644765045],[309351.49418146536,70.42629182199016],[309343.5566655928,-38.05309180356562],[309322.3899565926,-154.46999130456243],[309319.74411796685,-281.4702453041682],[309319.74411796685,-400.5329834310105],[309343.5566655928,-535.4707533059409],[309364.7233745931,-715.3877798067406],[309362.07753596734,-842.3880338063464],[309351.49418146536,-974.679965057876],[309322.3899565926,-1051.4092851823661],[309277.4106999673,-1159.8886688080383],[309253.5981523413,-1252.4930206830613],[309224.49392746575,-1310.7014704335015],[309203.32721846644,-1368.9099201839417],[309208.61889571603,-1400.6599836851237],[309216.5564115904,-1442.9934016850311],[309232.4314433411,-1506.493528684834],[309237.72312059347,-1562.0561398094287],[309211.26473434176,-1649.368814435089],[309187.4521867158,-1765.7857139359694],[309176.8688322166,-1879.5567748110043],[309190.0980253415,-1929.8277086861199],[309200.6813798407,-1977.45280393539],[309205.97305709217,-2040.952930937754],[309145.1187687153,-2059.4738013116876],[309052.51441684086,-2093.8697034363868],[308838.2014882155,-2199.703248436097],[308711.20123421587,-2289.661761687603],[308613.30520508904,-2400.786983939237],[308552.45091671497,-2472.2246268143645],[308412.22146958765,-2668.016685063136],[308250.825313461,-2877.0379364391556],[308147.6376070874,-3011.9757063165307],[308182.03350921255,-3083.413349191658],[308256.1169907134,-3279.205407440546],[308356.65885846317,-3538.4975926916813],[308430.74233996496,-3734.289650943014],[308507.47166008875,-3922.1441933190217],[308645.05526859034,-4107.352897069184],[308827.6181337144,-4363.999243696919],[308949.3267104672,-4546.562108821119],[308983.72261259146,-4514.812045322382],[309031.3477078406,-4456.603595571942],[309094.8478348404,-4408.978500320227],[309142.47293009236,-4490.9994976965245],[309252.53297139704,-4394.184753706562],[309308.0955825215,-4329.097123530693],[309379.23520107474,-4256.687154644518],[309479.5459254207,-4168.759302856284],[309570.03360639606,-4076.6841187049868],[309677.82659467123,-3978.690493005095],[309759.4043367142,-3898.7716525178403],[309836.73413979914,-3819.5086043535266],[309916.1092985496,-3743.308451952762],[310007.24186643306,-3657.238962248084],[310088.79366058577,-3585.7746910545975],[310164.27525960375,-3523.3199474809226],[310276.47296142485,-3455.9797973638633],[310359.6303931121,-3382.223241257365],[310429.9315185547,-3344.854614257114],[310535.3784826426,-3261.3940289586317],[310601.91067015193,-3211.494888325804],[310641.45226506423,-3177.5202555787982],[310773.8905639658,-3093.4998779299203],[310854.72350444365,-3040.4155513329897],[310936.8738400778,-2986.069437475526],[311087.68664170336,-2906.69427872519],[311258.07910156343,-2842.14526367106],[311336.9246401787,-2797.156559649622],[311460.7498878287,-2741.593948525144],[311581.4001291292,-2690.7938469237415],[311709.98788630776,-2636.8187389753293],[311821.1131085567,-2593.9561532492517],[311906.3095092783,-2564.3322143565165],[311986.6975354152,-2525.010773507296],[312105.3024638882,-2483.766410747543],[312237.0392456064,-2453.206909178989],[312366.6854858408,-2413.519348145579],[312423.85736329015,-2387.87197934452],[312525.43572998233,-2360.602661131881],[312586.29016113374,-2352.665039062733],[312694.23985481076,-2312.968091271934],[312751.3899691114,-2301.8555690470384],[312852.99017231166,-2284.3930341228843],[312935.5408325214,-2270.64410400379],[313003.98220338486,-2251.9642615312478],[313125.56844345294,-2227.800214529503],[313194.53486581706,-2213.043585868436],[313263.3202168038,-2198.6979779073736],[313354.17315057106,-2184.5830654097954],[313443.7728642933,-2165.418490619166],[313551.7230801927,-2147.955955692567],[313589.624866033,-2140.5861640019575],[313691.4233595934,-2122.555904893088],[313764.44850564376,-2106.6808731425554],[313821.5986199444,-2098.7433572672307],[313910.2342138821,-2084.191244830843],[313970.063720705,-2077.4978637696477],[314039.88030650746,-2057.732858581585],[314112.6408686973,-2048.472423392115],[314166.88056050986,-2039.2119882050902],[314239.6411226969,-2024.6598757687025],[314348.41864013765,-1984.893493651878],[314405.0060367584,-1955.8680715169758],[314456.89801025484,-1908.1641845697304],[314496.5855712909,-1831.4348754876992]]]},"properties":{"Id":0,"Kecamatan":"Pontianak Barat"}} -]} \ No newline at end of file diff --git a/tugas/03/us-states.js b/tugas/03/us-states.js deleted file mode 100644 index 7965ee4..0000000 --- a/tugas/03/us-states.js +++ /dev/null @@ -1,4386 +0,0 @@ -var statesData = { - type: "FeatureCollection", - features: [ - { - type: "Feature", - id: "01", - properties: { name: "Alabama", density: 94.65 }, - geometry: { - type: "Polygon", - coordinates: [ - [ - [-87.359296, 35.00118], - [-85.606675, 34.984749], - [-85.431413, 34.124869], - [-85.184951, 32.859696], - [-85.069935, 32.580372], - [-84.960397, 32.421541], - [-85.004212, 32.322956], - [-84.889196, 32.262709], - [-85.058981, 32.13674], - [-85.053504, 32.01077], - [-85.141136, 31.840985], - [-85.042551, 31.539753], - [-85.113751, 31.27686], - [-85.004212, 31.003013], - [-85.497137, 30.997536], - [-87.600282, 30.997536], - [-87.633143, 30.86609], - [-87.408589, 30.674397], - [-87.446927, 30.510088], - [-87.37025, 30.427934], - [-87.518128, 30.280057], - [-87.655051, 30.247195], - [-87.90699, 30.411504], - [-87.934375, 30.657966], - [-88.011052, 30.685351], - [-88.10416, 30.499135], - [-88.137022, 30.318396], - [-88.394438, 30.367688], - [-88.471115, 31.895754], - [-88.241084, 33.796253], - [-88.098683, 34.891641], - [-88.202745, 34.995703], - [-87.359296, 35.00118], - ], - ], - }, - }, - { - type: "Feature", - id: "02", - properties: { name: "Alaska", density: 1.264 }, - geometry: { - type: "MultiPolygon", - coordinates: [ - [ - [ - [-131.602021, 55.117982], - [-131.569159, 55.28229], - [-131.355558, 55.183705], - [-131.38842, 55.01392], - [-131.645836, 55.035827], - [-131.602021, 55.117982], - ], - ], - [ - [ - [-131.832052, 55.42469], - [-131.645836, 55.304197], - [-131.749898, 55.128935], - [-131.832052, 55.189182], - [-131.832052, 55.42469], - ], - ], - [ - [ - [-132.976733, 56.437924], - [-132.735747, 56.459832], - [-132.631685, 56.421493], - [-132.664547, 56.273616], - [-132.878148, 56.240754], - [-133.069841, 56.333862], - [-132.976733, 56.437924], - ], - ], - [ - [ - [-133.595627, 56.350293], - [-133.162949, 56.317431], - [-133.05341, 56.125739], - [-132.620732, 55.912138], - [-132.472854, 55.780691], - [-132.4619, 55.671152], - [-132.357838, 55.649245], - [-132.341408, 55.506844], - [-132.166146, 55.364444], - [-132.144238, 55.238474], - [-132.029222, 55.276813], - [-131.97993, 55.178228], - [-131.958022, 54.789365], - [-132.029222, 54.701734], - [-132.308546, 54.718165], - [-132.385223, 54.915335], - [-132.483808, 54.898904], - [-132.686455, 55.046781], - [-132.746701, 54.997489], - [-132.916486, 55.046781], - [-132.889102, 54.898904], - [-132.73027, 54.937242], - [-132.626209, 54.882473], - [-132.675501, 54.679826], - [-132.867194, 54.701734], - [-133.157472, 54.95915], - [-133.239626, 55.090597], - [-133.223195, 55.22752], - [-133.453227, 55.216566], - [-133.453227, 55.320628], - [-133.277964, 55.331582], - [-133.102702, 55.42469], - [-133.17938, 55.588998], - [-133.387503, 55.62186], - [-133.420365, 55.884753], - [-133.497042, 56.0162], - [-133.639442, 55.923092], - [-133.694212, 56.070969], - [-133.546335, 56.142169], - [-133.666827, 56.311955], - [-133.595627, 56.350293], - ], - ], - [ - [ - [-133.738027, 55.556137], - [-133.546335, 55.490413], - [-133.414888, 55.572568], - [-133.283441, 55.534229], - [-133.420365, 55.386352], - [-133.633966, 55.430167], - [-133.738027, 55.556137], - ], - ], - [ - [ - [-133.907813, 56.930849], - [-134.050213, 57.029434], - [-133.885905, 57.095157], - [-133.343688, 57.002049], - [-133.102702, 57.007526], - [-132.932917, 56.82131], - [-132.620732, 56.667956], - [-132.653593, 56.55294], - [-132.817901, 56.492694], - [-133.042456, 56.520078], - [-133.201287, 56.448878], - [-133.420365, 56.492694], - [-133.66135, 56.448878], - [-133.710643, 56.684386], - [-133.688735, 56.837741], - [-133.869474, 56.843218], - [-133.907813, 56.930849], - ], - ], - [ - [ - [-134.115936, 56.48174], - [-134.25286, 56.558417], - [-134.400737, 56.722725], - [-134.417168, 56.848695], - [-134.296675, 56.908941], - [-134.170706, 56.848695], - [-134.143321, 56.952757], - [-133.748981, 56.772017], - [-133.710643, 56.596755], - [-133.847566, 56.574848], - [-133.935197, 56.377678], - [-133.836612, 56.322908], - [-133.957105, 56.092877], - [-134.110459, 56.142169], - [-134.132367, 55.999769], - [-134.230952, 56.070969], - [-134.291198, 56.350293], - [-134.115936, 56.48174], - ], - ], - [ - [ - [-134.636246, 56.28457], - [-134.669107, 56.169554], - [-134.806031, 56.235277], - [-135.178463, 56.67891], - [-135.413971, 56.810356], - [-135.331817, 56.914418], - [-135.424925, 57.166357], - [-135.687818, 57.369004], - [-135.419448, 57.566174], - [-135.298955, 57.48402], - [-135.063447, 57.418296], - [-134.849846, 57.407343], - [-134.844369, 57.248511], - [-134.636246, 56.728202], - [-134.636246, 56.28457], - ], - ], - [ - [ - [-134.712923, 58.223407], - [-134.373353, 58.14673], - [-134.176183, 58.157683], - [-134.187137, 58.081006], - [-133.902336, 57.807159], - [-134.099505, 57.850975], - [-134.148798, 57.757867], - [-133.935197, 57.615466], - [-133.869474, 57.363527], - [-134.083075, 57.297804], - [-134.154275, 57.210173], - [-134.499322, 57.029434], - [-134.603384, 57.034911], - [-134.6472, 57.226604], - [-134.575999, 57.341619], - [-134.608861, 57.511404], - [-134.729354, 57.719528], - [-134.707446, 57.829067], - [-134.784123, 58.097437], - [-134.91557, 58.212453], - [-134.953908, 58.409623], - [-134.712923, 58.223407], - ], - ], - [ - [ - [-135.857603, 57.330665], - [-135.715203, 57.330665], - [-135.567326, 57.149926], - [-135.633049, 57.023957], - [-135.857603, 56.996572], - [-135.824742, 57.193742], - [-135.857603, 57.330665], - ], - ], - [ - [ - [-136.279328, 58.206976], - [-135.978096, 58.201499], - [-135.780926, 58.28913], - [-135.496125, 58.168637], - [-135.64948, 58.037191], - [-135.59471, 57.987898], - [-135.45231, 58.135776], - [-135.107263, 58.086483], - [-134.91557, 57.976944], - [-135.025108, 57.779775], - [-134.937477, 57.763344], - [-134.822462, 57.500451], - [-135.085355, 57.462112], - [-135.572802, 57.675713], - [-135.556372, 57.456635], - [-135.709726, 57.369004], - [-135.890465, 57.407343], - [-136.000004, 57.544266], - [-136.208128, 57.637374], - [-136.366959, 57.829067], - [-136.569606, 57.916698], - [-136.558652, 58.075529], - [-136.421728, 58.130299], - [-136.377913, 58.267222], - [-136.279328, 58.206976], - ], - ], - [ - [ - [-147.079854, 60.200582], - [-147.501579, 59.948643], - [-147.53444, 59.850058], - [-147.874011, 59.784335], - [-147.80281, 59.937689], - [-147.435855, 60.09652], - [-147.205824, 60.271782], - [-147.079854, 60.200582], - ], - ], - [ - [ - [-147.561825, 60.578491], - [-147.616594, 60.370367], - [-147.758995, 60.156767], - [-147.956165, 60.227967], - [-147.791856, 60.474429], - [-147.561825, 60.578491], - ], - ], - [ - [ - [-147.786379, 70.245291], - [-147.682318, 70.201475], - [-147.162008, 70.15766], - [-146.888161, 70.185044], - [-146.510252, 70.185044], - [-146.099482, 70.146706], - [-145.858496, 70.168614], - [-145.622988, 70.08646], - [-145.195787, 69.993352], - [-144.620708, 69.971444], - [-144.461877, 70.026213], - [-144.078491, 70.059075], - [-143.914183, 70.130275], - [-143.497935, 70.141229], - [-143.503412, 70.091936], - [-143.25695, 70.119321], - [-142.747594, 70.042644], - [-142.402547, 69.916674], - [-142.079408, 69.856428], - [-142.008207, 69.801659], - [-141.712453, 69.790705], - [-141.433129, 69.697597], - [-141.378359, 69.63735], - [-141.208574, 69.686643], - [-141.00045, 69.648304], - [-141.00045, 60.304644], - [-140.53491, 60.22249], - [-140.474664, 60.310121], - [-139.987216, 60.184151], - [-139.696939, 60.342983], - [-139.088998, 60.359413], - [-139.198537, 60.091043], - [-139.045183, 59.997935], - [-138.700135, 59.910304], - [-138.623458, 59.767904], - [-137.604747, 59.242118], - [-137.445916, 58.908024], - [-137.265177, 59.001132], - [-136.827022, 59.159963], - [-136.580559, 59.16544], - [-136.465544, 59.285933], - [-136.476498, 59.466672], - [-136.301236, 59.466672], - [-136.25742, 59.625503], - [-135.945234, 59.663842], - [-135.479694, 59.800766], - [-135.025108, 59.565257], - [-135.068924, 59.422857], - [-134.959385, 59.280456], - [-134.701969, 59.247595], - [-134.378829, 59.033994], - [-134.400737, 58.973748], - [-134.25286, 58.858732], - [-133.842089, 58.727285], - [-133.173903, 58.152206], - [-133.075318, 57.998852], - [-132.867194, 57.845498], - [-132.560485, 57.505928], - [-132.253777, 57.21565], - [-132.368792, 57.095157], - [-132.05113, 57.051341], - [-132.127807, 56.876079], - [-131.870391, 56.804879], - [-131.837529, 56.602232], - [-131.580113, 56.613186], - [-131.087188, 56.405062], - [-130.78048, 56.366724], - [-130.621648, 56.268139], - [-130.468294, 56.240754], - [-130.424478, 56.142169], - [-130.101339, 56.114785], - [-130.002754, 55.994292], - [-130.150631, 55.769737], - [-130.128724, 55.583521], - [-129.986323, 55.276813], - [-130.095862, 55.200136], - [-130.336847, 54.920812], - [-130.687372, 54.718165], - [-130.785957, 54.822227], - [-130.917403, 54.789365], - [-131.010511, 54.997489], - [-130.983126, 55.08512], - [-131.092665, 55.189182], - [-130.862634, 55.298721], - [-130.928357, 55.337059], - [-131.158389, 55.200136], - [-131.284358, 55.287767], - [-131.426759, 55.238474], - [-131.843006, 55.457552], - [-131.700606, 55.698537], - [-131.963499, 55.616383], - [-131.974453, 55.49589], - [-132.182576, 55.588998], - [-132.226392, 55.704014], - [-132.083991, 55.829984], - [-132.127807, 55.955953], - [-132.324977, 55.851892], - [-132.522147, 56.076446], - [-132.642639, 56.032631], - [-132.719317, 56.218847], - [-132.527624, 56.339339], - [-132.341408, 56.339339], - [-132.396177, 56.487217], - [-132.297592, 56.67891], - [-132.450946, 56.673433], - [-132.768609, 56.837741], - [-132.993164, 57.034911], - [-133.51895, 57.177311], - [-133.507996, 57.577128], - [-133.677781, 57.62642], - [-133.639442, 57.790728], - [-133.814705, 57.834544], - [-134.072121, 58.053622], - [-134.143321, 58.168637], - [-134.586953, 58.206976], - [-135.074401, 58.502731], - [-135.282525, 59.192825], - [-135.38111, 59.033994], - [-135.337294, 58.891593], - [-135.140124, 58.617746], - [-135.189417, 58.573931], - [-135.05797, 58.349376], - [-135.085355, 58.201499], - [-135.277048, 58.234361], - [-135.430402, 58.398669], - [-135.633049, 58.426053], - [-135.91785, 58.382238], - [-135.912373, 58.617746], - [-136.087635, 58.814916], - [-136.246466, 58.75467], - [-136.876314, 58.962794], - [-136.931084, 58.902547], - [-136.586036, 58.836824], - [-136.317666, 58.672516], - [-136.213604, 58.667039], - [-136.180743, 58.535592], - [-136.043819, 58.382238], - [-136.388867, 58.294607], - [-136.591513, 58.349376], - [-136.59699, 58.212453], - [-136.859883, 58.316515], - [-136.947514, 58.393192], - [-137.111823, 58.393192], - [-137.566409, 58.590362], - [-137.900502, 58.765624], - [-137.933364, 58.869686], - [-138.11958, 59.02304], - [-138.634412, 59.132579], - [-138.919213, 59.247595], - [-139.417615, 59.379041], - [-139.746231, 59.505011], - [-139.718846, 59.641934], - [-139.625738, 59.598119], - [-139.5162, 59.68575], - [-139.625738, 59.88292], - [-139.488815, 59.992458], - [-139.554538, 60.041751], - [-139.801, 59.833627], - [-140.315833, 59.696704], - [-140.92925, 59.745996], - [-141.444083, 59.871966], - [-141.46599, 59.970551], - [-141.706976, 59.948643], - [-141.964392, 60.019843], - [-142.539471, 60.085566], - [-142.873564, 60.091043], - [-143.623905, 60.036274], - [-143.892275, 59.997935], - [-144.231845, 60.140336], - [-144.65357, 60.206059], - [-144.785016, 60.29369], - [-144.834309, 60.441568], - [-145.124586, 60.430614], - [-145.223171, 60.299167], - [-145.738004, 60.474429], - [-145.820158, 60.551106], - [-146.351421, 60.408706], - [-146.608837, 60.238921], - [-146.718376, 60.397752], - [-146.608837, 60.485383], - [-146.455483, 60.463475], - [-145.951604, 60.578491], - [-146.017328, 60.666122], - [-146.252836, 60.622307], - [-146.345944, 60.737322], - [-146.565022, 60.753753], - [-146.784099, 61.044031], - [-146.866253, 60.972831], - [-147.172962, 60.934492], - [-147.271547, 60.972831], - [-147.375609, 60.879723], - [-147.758995, 60.912584], - [-147.775426, 60.808523], - [-148.032842, 60.781138], - [-148.153334, 60.819476], - [-148.065703, 61.005692], - [-148.175242, 61.000215], - [-148.350504, 60.803046], - [-148.109519, 60.737322], - [-148.087611, 60.594922], - [-147.939734, 60.441568], - [-148.027365, 60.277259], - [-148.219058, 60.332029], - [-148.273827, 60.249875], - [-148.087611, 60.217013], - [-147.983549, 59.997935], - [-148.251919, 59.95412], - [-148.399797, 59.997935], - [-148.635305, 59.937689], - [-148.755798, 59.986981], - [-149.067984, 59.981505], - [-149.05703, 60.063659], - [-149.204907, 60.008889], - [-149.287061, 59.904827], - [-149.418508, 59.997935], - [-149.582816, 59.866489], - [-149.511616, 59.806242], - [-149.741647, 59.729565], - [-149.949771, 59.718611], - [-150.031925, 59.61455], - [-150.25648, 59.521442], - [-150.409834, 59.554303], - [-150.579619, 59.444764], - [-150.716543, 59.450241], - [-151.001343, 59.225687], - [-151.308052, 59.209256], - [-151.406637, 59.280456], - [-151.592853, 59.159963], - [-151.976239, 59.253071], - [-151.888608, 59.422857], - [-151.636669, 59.483103], - [-151.47236, 59.472149], - [-151.423068, 59.537872], - [-151.127313, 59.669319], - [-151.116359, 59.778858], - [-151.505222, 59.63098], - [-151.828361, 59.718611], - [-151.8667, 59.778858], - [-151.702392, 60.030797], - [-151.423068, 60.211536], - [-151.379252, 60.359413], - [-151.297098, 60.386798], - [-151.264237, 60.545629], - [-151.406637, 60.720892], - [-151.06159, 60.786615], - [-150.404357, 61.038554], - [-150.245526, 60.939969], - [-150.042879, 60.912584], - [-149.741647, 61.016646], - [-150.075741, 61.15357], - [-150.207187, 61.257632], - [-150.47008, 61.246678], - [-150.656296, 61.29597], - [-150.711066, 61.252155], - [-151.023251, 61.180954], - [-151.165652, 61.044031], - [-151.477837, 61.011169], - [-151.800977, 60.852338], - [-151.833838, 60.748276], - [-152.080301, 60.693507], - [-152.13507, 60.578491], - [-152.310332, 60.507291], - [-152.392486, 60.304644], - [-152.732057, 60.173197], - [-152.567748, 60.069136], - [-152.704672, 59.915781], - [-153.022334, 59.888397], - [-153.049719, 59.691227], - [-153.345474, 59.620026], - [-153.438582, 59.702181], - [-153.586459, 59.548826], - [-153.761721, 59.543349], - [-153.72886, 59.433811], - [-154.117723, 59.368087], - [-154.1944, 59.066856], - [-153.750768, 59.050425], - [-153.400243, 58.968271], - [-153.301658, 58.869686], - [-153.444059, 58.710854], - [-153.679567, 58.612269], - [-153.898645, 58.606793], - [-153.920553, 58.519161], - [-154.062953, 58.4863], - [-153.99723, 58.376761], - [-154.145107, 58.212453], - [-154.46277, 58.059098], - [-154.643509, 58.059098], - [-154.818771, 58.004329], - [-154.988556, 58.015283], - [-155.120003, 57.955037], - [-155.081664, 57.872883], - [-155.328126, 57.829067], - [-155.377419, 57.708574], - [-155.547204, 57.785251], - [-155.73342, 57.549743], - [-156.045606, 57.566174], - [-156.023698, 57.440204], - [-156.209914, 57.473066], - [-156.34136, 57.418296], - [-156.34136, 57.248511], - [-156.549484, 56.985618], - [-156.883577, 56.952757], - [-157.157424, 56.832264], - [-157.20124, 56.766541], - [-157.376502, 56.859649], - [-157.672257, 56.607709], - [-157.754411, 56.67891], - [-157.918719, 56.657002], - [-157.957058, 56.514601], - [-158.126843, 56.459832], - [-158.32949, 56.48174], - [-158.488321, 56.339339], - [-158.208997, 56.295524], - [-158.510229, 55.977861], - [-159.375585, 55.873799], - [-159.616571, 55.594475], - [-159.676817, 55.654722], - [-159.643955, 55.829984], - [-159.813741, 55.857368], - [-160.027341, 55.791645], - [-160.060203, 55.720445], - [-160.394296, 55.605429], - [-160.536697, 55.473983], - [-160.580512, 55.567091], - [-160.668143, 55.457552], - [-160.865313, 55.528752], - [-161.232268, 55.358967], - [-161.506115, 55.364444], - [-161.467776, 55.49589], - [-161.588269, 55.62186], - [-161.697808, 55.517798], - [-161.686854, 55.408259], - [-162.053809, 55.074166], - [-162.179779, 55.15632], - [-162.218117, 55.03035], - [-162.470057, 55.052258], - [-162.508395, 55.249428], - [-162.661749, 55.293244], - [-162.716519, 55.222043], - [-162.579595, 55.134412], - [-162.645319, 54.997489], - [-162.847965, 54.926289], - [-163.00132, 55.079643], - [-163.187536, 55.090597], - [-163.220397, 55.03035], - [-163.034181, 54.942719], - [-163.373752, 54.800319], - [-163.14372, 54.76198], - [-163.138243, 54.696257], - [-163.329936, 54.74555], - [-163.587352, 54.614103], - [-164.085754, 54.61958], - [-164.332216, 54.531949], - [-164.354124, 54.466226], - [-164.638925, 54.389548], - [-164.847049, 54.416933], - [-164.918249, 54.603149], - [-164.710125, 54.663395], - [-164.551294, 54.88795], - [-164.34317, 54.893427], - [-163.894061, 55.041304], - [-163.532583, 55.046781], - [-163.39566, 54.904381], - [-163.291598, 55.008443], - [-163.313505, 55.128935], - [-163.105382, 55.183705], - [-162.880827, 55.183705], - [-162.579595, 55.446598], - [-162.245502, 55.682106], - [-161.807347, 55.89023], - [-161.292514, 55.983338], - [-161.078914, 55.939523], - [-160.87079, 55.999769], - [-160.816021, 55.912138], - [-160.931036, 55.813553], - [-160.805067, 55.736876], - [-160.766728, 55.857368], - [-160.509312, 55.868322], - [-160.438112, 55.791645], - [-160.27928, 55.76426], - [-160.273803, 55.857368], - [-160.536697, 55.939523], - [-160.558604, 55.994292], - [-160.383342, 56.251708], - [-160.147834, 56.399586], - [-159.830171, 56.541986], - [-159.326293, 56.667956], - [-158.959338, 56.848695], - [-158.784076, 56.782971], - [-158.641675, 56.810356], - [-158.701922, 56.925372], - [-158.658106, 57.034911], - [-158.378782, 57.264942], - [-157.995396, 57.41282], - [-157.688688, 57.609989], - [-157.705118, 57.719528], - [-157.458656, 58.497254], - [-157.07527, 58.705377], - [-157.119086, 58.869686], - [-158.039212, 58.634177], - [-158.32949, 58.661562], - [-158.40069, 58.760147], - [-158.564998, 58.803962], - [-158.619768, 58.913501], - [-158.767645, 58.864209], - [-158.860753, 58.694424], - [-158.701922, 58.480823], - [-158.893615, 58.387715], - [-159.0634, 58.420577], - [-159.392016, 58.760147], - [-159.616571, 58.929932], - [-159.731586, 58.929932], - [-159.808264, 58.803962], - [-159.906848, 58.782055], - [-160.054726, 58.886116], - [-160.235465, 58.902547], - [-160.317619, 59.072332], - [-160.854359, 58.88064], - [-161.33633, 58.743716], - [-161.374669, 58.667039], - [-161.752577, 58.552023], - [-161.938793, 58.656085], - [-161.769008, 58.776578], - [-161.829255, 59.061379], - [-161.955224, 59.36261], - [-161.703285, 59.48858], - [-161.911409, 59.740519], - [-162.092148, 59.88292], - [-162.234548, 60.091043], - [-162.448149, 60.178674], - [-162.502918, 59.997935], - [-162.760334, 59.959597], - [-163.171105, 59.844581], - [-163.66403, 59.795289], - [-163.9324, 59.806242], - [-164.162431, 59.866489], - [-164.189816, 60.02532], - [-164.386986, 60.074613], - [-164.699171, 60.29369], - [-164.962064, 60.337506], - [-165.268773, 60.578491], - [-165.060649, 60.68803], - [-165.016834, 60.890677], - [-165.175665, 60.846861], - [-165.197573, 60.972831], - [-165.120896, 61.076893], - [-165.323543, 61.170001], - [-165.34545, 61.071416], - [-165.591913, 61.109754], - [-165.624774, 61.279539], - [-165.816467, 61.301447], - [-165.920529, 61.416463], - [-165.915052, 61.558863], - [-166.106745, 61.49314], - [-166.139607, 61.630064], - [-165.904098, 61.662925], - [-166.095791, 61.81628], - [-165.756221, 61.827233], - [-165.756221, 62.013449], - [-165.674067, 62.139419], - [-165.044219, 62.539236], - [-164.912772, 62.659728], - [-164.819664, 62.637821], - [-164.874433, 62.807606], - [-164.633448, 63.097884], - [-164.425324, 63.212899], - [-164.036462, 63.262192], - [-163.73523, 63.212899], - [-163.313505, 63.037637], - [-163.039658, 63.059545], - [-162.661749, 63.22933], - [-162.272887, 63.486746], - [-162.075717, 63.514131], - [-162.026424, 63.448408], - [-161.555408, 63.448408], - [-161.13916, 63.503177], - [-160.766728, 63.771547], - [-160.766728, 63.837271], - [-160.952944, 64.08921], - [-160.974852, 64.237087], - [-161.26513, 64.395918], - [-161.374669, 64.532842], - [-161.078914, 64.494503], - [-160.79959, 64.609519], - [-160.783159, 64.719058], - [-161.144637, 64.921705], - [-161.413007, 64.762873], - [-161.664946, 64.790258], - [-161.900455, 64.702627], - [-162.168825, 64.680719], - [-162.234548, 64.620473], - [-162.541257, 64.532842], - [-162.634365, 64.384965], - [-162.787719, 64.324718], - [-162.858919, 64.49998], - [-163.045135, 64.538319], - [-163.176582, 64.401395], - [-163.253259, 64.467119], - [-163.598306, 64.565704], - [-164.304832, 64.560227], - [-164.80871, 64.450688], - [-165.000403, 64.434257], - [-165.411174, 64.49998], - [-166.188899, 64.576658], - [-166.391546, 64.636904], - [-166.484654, 64.735489], - [-166.413454, 64.872412], - [-166.692778, 64.987428], - [-166.638008, 65.113398], - [-166.462746, 65.179121], - [-166.517516, 65.337952], - [-166.796839, 65.337952], - [-167.026871, 65.381768], - [-167.47598, 65.414629], - [-167.711489, 65.496784], - [-168.072967, 65.578938], - [-168.105828, 65.682999], - [-167.541703, 65.819923], - [-166.829701, 66.049954], - [-166.3313, 66.186878], - [-166.046499, 66.110201], - [-165.756221, 66.09377], - [-165.690498, 66.203309], - [-165.86576, 66.21974], - [-165.88219, 66.312848], - [-165.186619, 66.466202], - [-164.403417, 66.581218], - [-163.981692, 66.592172], - [-163.751661, 66.553833], - [-163.872153, 66.389525], - [-163.828338, 66.274509], - [-163.915969, 66.192355], - [-163.768091, 66.060908], - [-163.494244, 66.082816], - [-163.149197, 66.060908], - [-162.749381, 66.088293], - [-162.634365, 66.039001], - [-162.371472, 66.028047], - [-162.14144, 66.077339], - [-161.840208, 66.02257], - [-161.549931, 66.241647], - [-161.341807, 66.252601], - [-161.199406, 66.208786], - [-161.128206, 66.334755], - [-161.528023, 66.395002], - [-161.911409, 66.345709], - [-161.87307, 66.510017], - [-162.174302, 66.68528], - [-162.502918, 66.740049], - [-162.601503, 66.89888], - [-162.344087, 66.937219], - [-162.015471, 66.778388], - [-162.075717, 66.652418], - [-161.916886, 66.553833], - [-161.571838, 66.438817], - [-161.489684, 66.55931], - [-161.884024, 66.718141], - [-161.714239, 67.002942], - [-161.851162, 67.052235], - [-162.240025, 66.991988], - [-162.639842, 67.008419], - [-162.700088, 67.057712], - [-162.902735, 67.008419], - [-163.740707, 67.128912], - [-163.757138, 67.254881], - [-164.009077, 67.534205], - [-164.211724, 67.638267], - [-164.534863, 67.725898], - [-165.192096, 67.966884], - [-165.493328, 68.059992], - [-165.794559, 68.081899], - [-166.243668, 68.246208], - [-166.681824, 68.339316], - [-166.703731, 68.372177], - [-166.375115, 68.42147], - [-166.227238, 68.574824], - [-166.216284, 68.881533], - [-165.329019, 68.859625], - [-164.255539, 68.930825], - [-163.976215, 68.985595], - [-163.532583, 69.138949], - [-163.110859, 69.374457], - [-163.023228, 69.609966], - [-162.842489, 69.812613], - [-162.470057, 69.982398], - [-162.311225, 70.108367], - [-161.851162, 70.311014], - [-161.779962, 70.256245], - [-161.396576, 70.239814], - [-160.837928, 70.343876], - [-160.487404, 70.453415], - [-159.649432, 70.792985], - [-159.33177, 70.809416], - [-159.298908, 70.760123], - [-158.975769, 70.798462], - [-158.658106, 70.787508], - [-158.033735, 70.831323], - [-157.420318, 70.979201], - [-156.812377, 71.285909], - [-156.565915, 71.351633], - [-156.522099, 71.296863], - [-155.585543, 71.170894], - [-155.508865, 71.083263], - [-155.832005, 70.968247], - [-155.979882, 70.96277], - [-155.974405, 70.809416], - [-155.503388, 70.858708], - [-155.476004, 70.940862], - [-155.262403, 71.017539], - [-155.191203, 70.973724], - [-155.032372, 71.148986], - [-154.566832, 70.990155], - [-154.643509, 70.869662], - [-154.353231, 70.8368], - [-154.183446, 70.7656], - [-153.931507, 70.880616], - [-153.487874, 70.886093], - [-153.235935, 70.924431], - [-152.589656, 70.886093], - [-152.26104, 70.842277], - [-152.419871, 70.606769], - [-151.817408, 70.546523], - [-151.773592, 70.486276], - [-151.187559, 70.382214], - [-151.182082, 70.431507], - [-150.760358, 70.49723], - [-150.355064, 70.491753], - [-150.349588, 70.436984], - [-150.114079, 70.431507], - [-149.867617, 70.508184], - [-149.462323, 70.519138], - [-149.177522, 70.486276], - [-148.78866, 70.404122], - [-148.607921, 70.420553], - [-148.350504, 70.305537], - [-148.202627, 70.349353], - [-147.961642, 70.316491], - [-147.786379, 70.245291], - ], - ], - [ - [ - [-152.94018, 58.026237], - [-152.945657, 57.982421], - [-153.290705, 58.048145], - [-153.044242, 58.305561], - [-152.819688, 58.327469], - [-152.666333, 58.562977], - [-152.496548, 58.354853], - [-152.354148, 58.426053], - [-152.080301, 58.311038], - [-152.080301, 58.152206], - [-152.480117, 58.130299], - [-152.655379, 58.059098], - [-152.94018, 58.026237], - ], - ], - [ - [ - [-153.958891, 57.538789], - [-153.67409, 57.670236], - [-153.931507, 57.69762], - [-153.936983, 57.812636], - [-153.723383, 57.889313], - [-153.570028, 57.834544], - [-153.548121, 57.719528], - [-153.46049, 57.796205], - [-153.455013, 57.96599], - [-153.268797, 57.889313], - [-153.235935, 57.998852], - [-153.071627, 57.933129], - [-152.874457, 57.933129], - [-152.721103, 57.993375], - [-152.469163, 57.889313], - [-152.469163, 57.599035], - [-152.151501, 57.620943], - [-152.359625, 57.42925], - [-152.74301, 57.505928], - [-152.60061, 57.379958], - [-152.710149, 57.275896], - [-152.907319, 57.325188], - [-152.912796, 57.128019], - [-153.214027, 57.073249], - [-153.312612, 56.991095], - [-153.498828, 57.067772], - [-153.695998, 56.859649], - [-153.849352, 56.837741], - [-154.013661, 56.744633], - [-154.073907, 56.969187], - [-154.303938, 56.848695], - [-154.314892, 56.919895], - [-154.523016, 56.991095], - [-154.539447, 57.193742], - [-154.742094, 57.275896], - [-154.627078, 57.511404], - [-154.227261, 57.659282], - [-153.980799, 57.648328], - [-153.958891, 57.538789], - ], - ], - [ - [ - [-154.53397, 56.602232], - [-154.742094, 56.399586], - [-154.807817, 56.432447], - [-154.53397, 56.602232], - ], - ], - [ - [ - [-155.634835, 55.923092], - [-155.476004, 55.912138], - [-155.530773, 55.704014], - [-155.793666, 55.731399], - [-155.837482, 55.802599], - [-155.634835, 55.923092], - ], - ], - [ - [ - [-159.890418, 55.28229], - [-159.950664, 55.068689], - [-160.257373, 54.893427], - [-160.109495, 55.161797], - [-160.005433, 55.134412], - [-159.890418, 55.28229], - ], - ], - [ - [ - [-160.520266, 55.358967], - [-160.33405, 55.358967], - [-160.339527, 55.249428], - [-160.525743, 55.128935], - [-160.690051, 55.211089], - [-160.794113, 55.134412], - [-160.854359, 55.320628], - [-160.79959, 55.380875], - [-160.520266, 55.358967], - ], - ], - [ - [ - [-162.256456, 54.981058], - [-162.234548, 54.893427], - [-162.349564, 54.838658], - [-162.437195, 54.931766], - [-162.256456, 54.981058], - ], - ], - [ - [ - [-162.415287, 63.634624], - [-162.563165, 63.536039], - [-162.612457, 63.62367], - [-162.415287, 63.634624], - ], - ], - [ - [ - [-162.80415, 54.488133], - [-162.590549, 54.449795], - [-162.612457, 54.367641], - [-162.782242, 54.373118], - [-162.80415, 54.488133], - ], - ], - [ - [ - [-165.548097, 54.29644], - [-165.476897, 54.181425], - [-165.630251, 54.132132], - [-165.685021, 54.252625], - [-165.548097, 54.29644], - ], - ], - [ - [ - [-165.73979, 54.15404], - [-166.046499, 54.044501], - [-166.112222, 54.121178], - [-165.980775, 54.219763], - [-165.73979, 54.15404], - ], - ], - [ - [ - [-166.364161, 60.359413], - [-166.13413, 60.397752], - [-166.084837, 60.326552], - [-165.88219, 60.342983], - [-165.685021, 60.277259], - [-165.646682, 59.992458], - [-165.750744, 59.89935], - [-166.00816, 59.844581], - [-166.062929, 59.745996], - [-166.440838, 59.855535], - [-166.6161, 59.850058], - [-166.994009, 59.992458], - [-167.125456, 59.992458], - [-167.344534, 60.074613], - [-167.421211, 60.206059], - [-167.311672, 60.238921], - [-166.93924, 60.206059], - [-166.763978, 60.310121], - [-166.577762, 60.321075], - [-166.495608, 60.392275], - [-166.364161, 60.359413], - ], - ], - [ - [ - [-166.375115, 54.01164], - [-166.210807, 53.934962], - [-166.5449, 53.748746], - [-166.539423, 53.715885], - [-166.117699, 53.852808], - [-166.112222, 53.776131], - [-166.282007, 53.683023], - [-166.555854, 53.622777], - [-166.583239, 53.529669], - [-166.878994, 53.431084], - [-167.13641, 53.425607], - [-167.306195, 53.332499], - [-167.623857, 53.250345], - [-167.793643, 53.337976], - [-167.459549, 53.442038], - [-167.355487, 53.425607], - [-167.103548, 53.513238], - [-167.163794, 53.611823], - [-167.021394, 53.715885], - [-166.807793, 53.666592], - [-166.785886, 53.732316], - [-167.015917, 53.754223], - [-167.141887, 53.825424], - [-167.032348, 53.945916], - [-166.643485, 54.017116], - [-166.561331, 53.880193], - [-166.375115, 54.01164], - ], - ], - [ - [ - [-168.790446, 53.157237], - [-168.40706, 53.34893], - [-168.385152, 53.431084], - [-168.237275, 53.524192], - [-168.007243, 53.568007], - [-167.886751, 53.518715], - [-167.842935, 53.387268], - [-168.270136, 53.244868], - [-168.500168, 53.036744], - [-168.686384, 52.965544], - [-168.790446, 53.157237], - ], - ], - [ - [ - [-169.74891, 52.894344], - [-169.705095, 52.795759], - [-169.962511, 52.790282], - [-169.989896, 52.856005], - [-169.74891, 52.894344], - ], - ], - [ - [ - [-170.148727, 57.221127], - [-170.28565, 57.128019], - [-170.313035, 57.221127], - [-170.148727, 57.221127], - ], - ], - [ - [ - [-170.669036, 52.697174], - [-170.603313, 52.604066], - [-170.789529, 52.538343], - [-170.816914, 52.636928], - [-170.669036, 52.697174], - ], - ], - [ - [ - [-171.742517, 63.716778], - [-170.94836, 63.5689], - [-170.488297, 63.69487], - [-170.280174, 63.683916], - [-170.093958, 63.612716], - [-170.044665, 63.492223], - [-169.644848, 63.4265], - [-169.518879, 63.366254], - [-168.99857, 63.338869], - [-168.686384, 63.295053], - [-168.856169, 63.147176], - [-169.108108, 63.180038], - [-169.376478, 63.152653], - [-169.513402, 63.08693], - [-169.639372, 62.939052], - [-169.831064, 63.075976], - [-170.055619, 63.169084], - [-170.263743, 63.180038], - [-170.362328, 63.2841], - [-170.866206, 63.415546], - [-171.101715, 63.421023], - [-171.463193, 63.306007], - [-171.73704, 63.366254], - [-171.852055, 63.486746], - [-171.742517, 63.716778], - ], - ], - [ - [ - [-172.432611, 52.390465], - [-172.41618, 52.275449], - [-172.607873, 52.253542], - [-172.569535, 52.352127], - [-172.432611, 52.390465], - ], - ], - [ - [ - [-173.626584, 52.14948], - [-173.495138, 52.105664], - [-173.122706, 52.111141], - [-173.106275, 52.07828], - [-173.549907, 52.028987], - [-173.626584, 52.14948], - ], - ], - [ - [ - [-174.322156, 52.280926], - [-174.327632, 52.379511], - [-174.185232, 52.41785], - [-173.982585, 52.319265], - [-174.059262, 52.226157], - [-174.179755, 52.231634], - [-174.141417, 52.127572], - [-174.333109, 52.116618], - [-174.738403, 52.007079], - [-174.968435, 52.039941], - [-174.902711, 52.116618], - [-174.656249, 52.105664], - [-174.322156, 52.280926], - ], - ], - [ - [ - [-176.469116, 51.853725], - [-176.288377, 51.870156], - [-176.288377, 51.744186], - [-176.518409, 51.760617], - [-176.80321, 51.61274], - [-176.912748, 51.80991], - [-176.792256, 51.815386], - [-176.775825, 51.963264], - [-176.627947, 51.968741], - [-176.627947, 51.859202], - [-176.469116, 51.853725], - ], - ], - [ - [ - [-177.153734, 51.946833], - [-177.044195, 51.897541], - [-177.120872, 51.727755], - [-177.274226, 51.678463], - [-177.279703, 51.782525], - [-177.153734, 51.946833], - ], - ], - [ - [ - [-178.123152, 51.919448], - [-177.953367, 51.913971], - [-177.800013, 51.793479], - [-177.964321, 51.651078], - [-178.123152, 51.919448], - ], - ], - [ - [ - [-187.107557, 52.992929], - [-187.293773, 52.927205], - [-187.304726, 52.823143], - [-188.90491, 52.762897], - [-188.642017, 52.927205], - [-188.642017, 53.003883], - [-187.107557, 52.992929], - ], - ], - ], - }, - }, - { - type: "Feature", - id: "04", - properties: { name: "Arizona", density: 57.05 }, - geometry: { - type: "Polygon", - coordinates: [ - [ - [-109.042503, 37.000263], - [-109.04798, 31.331629], - [-111.074448, 31.331629], - [-112.246513, 31.704061], - [-114.815198, 32.492741], - [-114.72209, 32.717295], - [-114.524921, 32.755634], - [-114.470151, 32.843265], - [-114.524921, 33.029481], - [-114.661844, 33.034958], - [-114.727567, 33.40739], - [-114.524921, 33.54979], - [-114.497536, 33.697668], - [-114.535874, 33.933176], - [-114.415382, 34.108438], - [-114.256551, 34.174162], - [-114.136058, 34.305608], - [-114.333228, 34.448009], - [-114.470151, 34.710902], - [-114.634459, 34.87521], - [-114.634459, 35.00118], - [-114.574213, 35.138103], - [-114.596121, 35.324319], - [-114.678275, 35.516012], - [-114.738521, 36.102045], - [-114.371566, 36.140383], - [-114.251074, 36.01989], - [-114.152489, 36.025367], - [-114.048427, 36.195153], - [-114.048427, 37.000263], - [-110.499369, 37.00574], - [-109.042503, 37.000263], - ], - ], - }, - }, - { - type: "Feature", - id: "05", - properties: { name: "Arkansas", density: 56.43 }, - geometry: { - type: "Polygon", - coordinates: [ - [ - [-94.473842, 36.501861], - [-90.152536, 36.496384], - [-90.064905, 36.304691], - [-90.218259, 36.184199], - [-90.377091, 35.997983], - [-89.730812, 35.997983], - [-89.763673, 35.811767], - [-89.911551, 35.756997], - [-89.944412, 35.603643], - [-90.130628, 35.439335], - [-90.114197, 35.198349], - [-90.212782, 35.023087], - [-90.311367, 34.995703], - [-90.251121, 34.908072], - [-90.409952, 34.831394], - [-90.481152, 34.661609], - [-90.585214, 34.617794], - [-90.568783, 34.420624], - [-90.749522, 34.365854], - [-90.744046, 34.300131], - [-90.952169, 34.135823], - [-90.891923, 34.026284], - [-91.072662, 33.867453], - [-91.231493, 33.560744], - [-91.056231, 33.429298], - [-91.143862, 33.347144], - [-91.089093, 33.13902], - [-91.16577, 33.002096], - [-93.608485, 33.018527], - [-94.041164, 33.018527], - [-94.041164, 33.54979], - [-94.183564, 33.593606], - [-94.380734, 33.544313], - [-94.484796, 33.637421], - [-94.430026, 35.395519], - [-94.616242, 36.501861], - [-94.473842, 36.501861], - ], - ], - }, - }, - { - type: "Feature", - id: "06", - properties: { name: "California", density: 241.7 }, - geometry: { - type: "Polygon", - coordinates: [ - [ - [-123.233256, 42.006186], - [-122.378853, 42.011663], - [-121.037003, 41.995232], - [-120.001861, 41.995232], - [-119.996384, 40.264519], - [-120.001861, 38.999346], - [-118.71478, 38.101128], - [-117.498899, 37.21934], - [-116.540435, 36.501861], - [-115.85034, 35.970598], - [-114.634459, 35.00118], - [-114.634459, 34.87521], - [-114.470151, 34.710902], - [-114.333228, 34.448009], - [-114.136058, 34.305608], - [-114.256551, 34.174162], - [-114.415382, 34.108438], - [-114.535874, 33.933176], - [-114.497536, 33.697668], - [-114.524921, 33.54979], - [-114.727567, 33.40739], - [-114.661844, 33.034958], - [-114.524921, 33.029481], - [-114.470151, 32.843265], - [-114.524921, 32.755634], - [-114.72209, 32.717295], - [-116.04751, 32.624187], - [-117.126467, 32.536556], - [-117.24696, 32.668003], - [-117.252437, 32.876127], - [-117.329114, 33.122589], - [-117.471515, 33.297851], - [-117.7837, 33.538836], - [-118.183517, 33.763391], - [-118.260194, 33.703145], - [-118.413548, 33.741483], - [-118.391641, 33.840068], - [-118.566903, 34.042715], - [-118.802411, 33.998899], - [-119.218659, 34.146777], - [-119.278905, 34.26727], - [-119.558229, 34.415147], - [-119.875891, 34.40967], - [-120.138784, 34.475393], - [-120.472878, 34.448009], - [-120.64814, 34.579455], - [-120.609801, 34.858779], - [-120.670048, 34.902595], - [-120.631709, 35.099764], - [-120.894602, 35.247642], - [-120.905556, 35.450289], - [-121.004141, 35.461243], - [-121.168449, 35.636505], - [-121.283465, 35.674843], - [-121.332757, 35.784382], - [-121.716143, 36.195153], - [-121.896882, 36.315645], - [-121.935221, 36.638785], - [-121.858544, 36.6114], - [-121.787344, 36.803093], - [-121.929744, 36.978355], - [-122.105006, 36.956447], - [-122.335038, 37.115279], - [-122.417192, 37.241248], - [-122.400761, 37.361741], - [-122.515777, 37.520572], - [-122.515777, 37.783465], - [-122.329561, 37.783465], - [-122.406238, 38.15042], - [-122.488392, 38.112082], - [-122.504823, 37.931343], - [-122.701993, 37.893004], - [-122.937501, 38.029928], - [-122.97584, 38.265436], - [-123.129194, 38.451652], - [-123.331841, 38.566668], - [-123.44138, 38.698114], - [-123.737134, 38.95553], - [-123.687842, 39.032208], - [-123.824765, 39.366301], - [-123.764519, 39.552517], - [-123.85215, 39.831841], - [-124.109566, 40.105688], - [-124.361506, 40.259042], - [-124.410798, 40.439781], - [-124.158859, 40.877937], - [-124.109566, 41.025814], - [-124.158859, 41.14083], - [-124.065751, 41.442061], - [-124.147905, 41.715908], - [-124.257444, 41.781632], - [-124.213628, 42.000709], - [-123.233256, 42.006186], - ], - ], - }, - }, - { - type: "Feature", - id: "08", - properties: { name: "Colorado", density: 49.33 }, - geometry: { - type: "Polygon", - coordinates: [ - [ - [-107.919731, 41.003906], - [-105.728954, 40.998429], - [-104.053011, 41.003906], - [-102.053927, 41.003906], - [-102.053927, 40.001626], - [-102.042974, 36.994786], - [-103.001438, 37.000263], - [-104.337812, 36.994786], - [-106.868158, 36.994786], - [-107.421329, 37.000263], - [-109.042503, 37.000263], - [-109.042503, 38.166851], - [-109.058934, 38.27639], - [-109.053457, 39.125316], - [-109.04798, 40.998429], - [-107.919731, 41.003906], - ], - ], - }, - }, - { - type: "Feature", - id: "09", - properties: { name: "Connecticut", density: 739.1 }, - geometry: { - type: "Polygon", - coordinates: [ - [ - [-73.053528, 42.039048], - [-71.799309, 42.022617], - [-71.799309, 42.006186], - [-71.799309, 41.414677], - [-71.859555, 41.321569], - [-71.947186, 41.338], - [-72.385341, 41.261322], - [-72.905651, 41.28323], - [-73.130205, 41.146307], - [-73.371191, 41.102491], - [-73.655992, 40.987475], - [-73.727192, 41.102491], - [-73.48073, 41.21203], - [-73.55193, 41.294184], - [-73.486206, 42.050002], - [-73.053528, 42.039048], - ], - ], - }, - }, - { - type: "Feature", - id: "10", - properties: { name: "Delaware", density: 464.3 }, - geometry: { - type: "Polygon", - coordinates: [ - [ - [-75.414089, 39.804456], - [-75.507197, 39.683964], - [-75.611259, 39.61824], - [-75.589352, 39.459409], - [-75.441474, 39.311532], - [-75.403136, 39.065069], - [-75.189535, 38.807653], - [-75.09095, 38.796699], - [-75.047134, 38.451652], - [-75.693413, 38.462606], - [-75.786521, 39.722302], - [-75.616736, 39.831841], - [-75.414089, 39.804456], - ], - ], - }, - }, - { - type: "Feature", - id: "11", - properties: { name: "District of Columbia", density: 10065 }, - geometry: { - type: "Polygon", - coordinates: [ - [ - [-77.035264, 38.993869], - [-76.909294, 38.895284], - [-77.040741, 38.791222], - [-77.117418, 38.933623], - [-77.035264, 38.993869], - ], - ], - }, - }, - { - type: "Feature", - id: "12", - properties: { name: "Florida", density: 353.4 }, - geometry: { - type: "Polygon", - coordinates: [ - [ - [-85.497137, 30.997536], - [-85.004212, 31.003013], - [-84.867289, 30.712735], - [-83.498053, 30.647012], - [-82.216449, 30.570335], - [-82.167157, 30.356734], - [-82.046664, 30.362211], - [-82.002849, 30.564858], - [-82.041187, 30.751074], - [-81.948079, 30.827751], - [-81.718048, 30.745597], - [-81.444201, 30.707258], - [-81.383954, 30.27458], - [-81.257985, 29.787132], - [-80.967707, 29.14633], - [-80.524075, 28.461713], - [-80.589798, 28.41242], - [-80.56789, 28.094758], - [-80.381674, 27.738757], - [-80.091397, 27.021277], - [-80.03115, 26.796723], - [-80.036627, 26.566691], - [-80.146166, 25.739673], - [-80.239274, 25.723243], - [-80.337859, 25.465826], - [-80.304997, 25.383672], - [-80.49669, 25.197456], - [-80.573367, 25.241272], - [-80.759583, 25.164595], - [-81.077246, 25.120779], - [-81.170354, 25.224841], - [-81.126538, 25.378195], - [-81.351093, 25.821827], - [-81.526355, 25.903982], - [-81.679709, 25.843735], - [-81.800202, 26.090198], - [-81.833064, 26.292844], - [-82.041187, 26.517399], - [-82.09048, 26.665276], - [-82.057618, 26.878877], - [-82.172634, 26.917216], - [-82.145249, 26.791246], - [-82.249311, 26.758384], - [-82.566974, 27.300601], - [-82.692943, 27.437525], - [-82.391711, 27.837342], - [-82.588881, 27.815434], - [-82.720328, 27.689464], - [-82.851774, 27.886634], - [-82.676512, 28.434328], - [-82.643651, 28.888914], - [-82.764143, 28.998453], - [-82.802482, 29.14633], - [-82.994175, 29.179192], - [-83.218729, 29.420177], - [-83.399469, 29.518762], - [-83.410422, 29.66664], - [-83.536392, 29.721409], - [-83.640454, 29.885717], - [-84.02384, 30.104795], - [-84.357933, 30.055502], - [-84.341502, 29.902148], - [-84.451041, 29.929533], - [-84.867289, 29.743317], - [-85.310921, 29.699501], - [-85.299967, 29.80904], - [-85.404029, 29.940487], - [-85.924338, 30.236241], - [-86.29677, 30.362211], - [-86.630863, 30.395073], - [-86.910187, 30.373165], - [-87.518128, 30.280057], - [-87.37025, 30.427934], - [-87.446927, 30.510088], - [-87.408589, 30.674397], - [-87.633143, 30.86609], - [-87.600282, 30.997536], - [-85.497137, 30.997536], - ], - ], - }, - }, - { - type: "Feature", - id: "13", - properties: { name: "Georgia", density: 169.5 }, - geometry: { - type: "Polygon", - coordinates: [ - [ - [-83.109191, 35.00118], - [-83.322791, 34.787579], - [-83.339222, 34.683517], - [-83.005129, 34.469916], - [-82.901067, 34.486347], - [-82.747713, 34.26727], - [-82.714851, 34.152254], - [-82.55602, 33.94413], - [-82.325988, 33.81816], - [-82.194542, 33.631944], - [-81.926172, 33.462159], - [-81.937125, 33.347144], - [-81.761863, 33.160928], - [-81.493493, 33.007573], - [-81.42777, 32.843265], - [-81.416816, 32.629664], - [-81.279893, 32.558464], - [-81.121061, 32.290094], - [-81.115584, 32.120309], - [-80.885553, 32.032678], - [-81.132015, 31.693108], - [-81.175831, 31.517845], - [-81.279893, 31.364491], - [-81.290846, 31.20566], - [-81.400385, 31.13446], - [-81.444201, 30.707258], - [-81.718048, 30.745597], - [-81.948079, 30.827751], - [-82.041187, 30.751074], - [-82.002849, 30.564858], - [-82.046664, 30.362211], - [-82.167157, 30.356734], - [-82.216449, 30.570335], - [-83.498053, 30.647012], - [-84.867289, 30.712735], - [-85.004212, 31.003013], - [-85.113751, 31.27686], - [-85.042551, 31.539753], - [-85.141136, 31.840985], - [-85.053504, 32.01077], - [-85.058981, 32.13674], - [-84.889196, 32.262709], - [-85.004212, 32.322956], - [-84.960397, 32.421541], - [-85.069935, 32.580372], - [-85.184951, 32.859696], - [-85.431413, 34.124869], - [-85.606675, 34.984749], - [-84.319594, 34.990226], - [-83.618546, 34.984749], - [-83.109191, 35.00118], - ], - ], - }, - }, - { - type: "Feature", - id: "15", - properties: { name: "Hawaii", density: 214.1 }, - geometry: { - type: "MultiPolygon", - coordinates: [ - [ - [ - [-155.634835, 18.948267], - [-155.881297, 19.035898], - [-155.919636, 19.123529], - [-155.886774, 19.348084], - [-156.062036, 19.73147], - [-155.925113, 19.857439], - [-155.826528, 20.032702], - [-155.897728, 20.147717], - [-155.87582, 20.26821], - [-155.596496, 20.12581], - [-155.284311, 20.021748], - [-155.092618, 19.868393], - [-155.092618, 19.736947], - [-154.807817, 19.523346], - [-154.983079, 19.348084], - [-155.295265, 19.26593], - [-155.514342, 19.134483], - [-155.634835, 18.948267], - ], - ], - [ - [ - [-156.587823, 21.029505], - [-156.472807, 20.892581], - [-156.324929, 20.952827], - [-156.00179, 20.793996], - [-156.051082, 20.651596], - [-156.379699, 20.580396], - [-156.445422, 20.60778], - [-156.461853, 20.783042], - [-156.631638, 20.821381], - [-156.697361, 20.919966], - [-156.587823, 21.029505], - ], - ], - [ - [ - [-156.982162, 21.210244], - [-157.080747, 21.106182], - [-157.310779, 21.106182], - [-157.239579, 21.221198], - [-156.982162, 21.210244], - ], - ], - [ - [ - [-157.951581, 21.697691], - [-157.842042, 21.462183], - [-157.896811, 21.325259], - [-158.110412, 21.303352], - [-158.252813, 21.582676], - [-158.126843, 21.588153], - [-157.951581, 21.697691], - ], - ], - [ - [ - [-159.468693, 22.228955], - [-159.353678, 22.218001], - [-159.298908, 22.113939], - [-159.33177, 21.966061], - [-159.446786, 21.872953], - [-159.764448, 21.987969], - [-159.726109, 22.152277], - [-159.468693, 22.228955], - ], - ], - ], - }, - }, - { - type: "Feature", - id: "16", - properties: { name: "Idaho", density: 19.15 }, - geometry: { - type: "Polygon", - coordinates: [ - [ - [-116.04751, 49.000239], - [-116.04751, 47.976051], - [-115.724371, 47.696727], - [-115.718894, 47.42288], - [-115.527201, 47.302388], - [-115.324554, 47.258572], - [-115.302646, 47.187372], - [-114.930214, 46.919002], - [-114.886399, 46.809463], - [-114.623506, 46.705401], - [-114.612552, 46.639678], - [-114.322274, 46.645155], - [-114.464674, 46.272723], - [-114.492059, 46.037214], - [-114.387997, 45.88386], - [-114.568736, 45.774321], - [-114.497536, 45.670259], - [-114.546828, 45.560721], - [-114.333228, 45.456659], - [-114.086765, 45.593582], - [-113.98818, 45.703121], - [-113.807441, 45.604536], - [-113.834826, 45.522382], - [-113.736241, 45.330689], - [-113.571933, 45.128042], - [-113.45144, 45.056842], - [-113.456917, 44.865149], - [-113.341901, 44.782995], - [-113.133778, 44.772041], - [-113.002331, 44.448902], - [-112.887315, 44.394132], - [-112.783254, 44.48724], - [-112.471068, 44.481763], - [-112.241036, 44.569394], - [-112.104113, 44.520102], - [-111.868605, 44.563917], - [-111.819312, 44.509148], - [-111.616665, 44.547487], - [-111.386634, 44.75561], - [-111.227803, 44.580348], - [-111.047063, 44.476286], - [-111.047063, 42.000709], - [-112.164359, 41.995232], - [-114.04295, 41.995232], - [-117.027882, 42.000709], - [-117.027882, 43.830007], - [-116.896436, 44.158624], - [-116.97859, 44.240778], - [-117.170283, 44.257209], - [-117.241483, 44.394132], - [-117.038836, 44.750133], - [-116.934774, 44.782995], - [-116.830713, 44.930872], - [-116.847143, 45.02398], - [-116.732128, 45.144473], - [-116.671881, 45.319735], - [-116.463758, 45.61549], - [-116.545912, 45.752413], - [-116.78142, 45.823614], - [-116.918344, 45.993399], - [-116.92382, 46.168661], - [-117.055267, 46.343923], - [-117.038836, 46.426077], - [-117.044313, 47.762451], - [-117.033359, 49.000239], - [-116.04751, 49.000239], - ], - ], - }, - }, - { - type: "Feature", - id: "17", - properties: { name: "Illinois", density: 231.5 }, - geometry: { - type: "Polygon", - coordinates: [ - [ - [-90.639984, 42.510065], - [-88.788778, 42.493634], - [-87.802929, 42.493634], - [-87.83579, 42.301941], - [-87.682436, 42.077386], - [-87.523605, 41.710431], - [-87.529082, 39.34987], - [-87.63862, 39.169131], - [-87.512651, 38.95553], - [-87.49622, 38.780268], - [-87.62219, 38.637868], - [-87.655051, 38.506421], - [-87.83579, 38.292821], - [-87.950806, 38.27639], - [-87.923421, 38.15042], - [-88.000098, 38.101128], - [-88.060345, 37.865619], - [-88.027483, 37.799896], - [-88.15893, 37.657496], - [-88.065822, 37.482234], - [-88.476592, 37.389126], - [-88.514931, 37.285064], - [-88.421823, 37.153617], - [-88.547792, 37.071463], - [-88.914747, 37.224817], - [-89.029763, 37.213863], - [-89.183118, 37.038601], - [-89.133825, 36.983832], - [-89.292656, 36.994786], - [-89.517211, 37.279587], - [-89.435057, 37.34531], - [-89.517211, 37.537003], - [-89.517211, 37.690357], - [-89.84035, 37.903958], - [-89.949889, 37.88205], - [-90.059428, 38.013497], - [-90.355183, 38.216144], - [-90.349706, 38.374975], - [-90.179921, 38.632391], - [-90.207305, 38.725499], - [-90.10872, 38.845992], - [-90.251121, 38.917192], - [-90.470199, 38.961007], - [-90.585214, 38.867899], - [-90.661891, 38.928146], - [-90.727615, 39.256762], - [-91.061708, 39.470363], - [-91.368417, 39.727779], - [-91.494386, 40.034488], - [-91.50534, 40.237135], - [-91.417709, 40.379535], - [-91.401278, 40.560274], - [-91.121954, 40.669813], - [-91.09457, 40.823167], - [-90.963123, 40.921752], - [-90.946692, 41.097014], - [-91.111001, 41.239415], - [-91.045277, 41.414677], - [-90.656414, 41.463969], - [-90.344229, 41.589939], - [-90.311367, 41.743293], - [-90.179921, 41.809016], - [-90.141582, 42.000709], - [-90.168967, 42.126679], - [-90.393521, 42.225264], - [-90.420906, 42.329326], - [-90.639984, 42.510065], - ], - ], - }, - }, - { - type: "Feature", - id: "18", - properties: { name: "Indiana", density: 181.7 }, - geometry: { - type: "Polygon", - coordinates: [ - [ - [-85.990061, 41.759724], - [-84.807042, 41.759724], - [-84.807042, 41.694001], - [-84.801565, 40.500028], - [-84.817996, 39.103408], - [-84.894673, 39.059592], - [-84.812519, 38.785745], - [-84.987781, 38.780268], - [-85.173997, 38.68716], - [-85.431413, 38.730976], - [-85.42046, 38.533806], - [-85.590245, 38.451652], - [-85.655968, 38.325682], - [-85.83123, 38.27639], - [-85.924338, 38.024451], - [-86.039354, 37.958727], - [-86.263908, 38.051835], - [-86.302247, 38.166851], - [-86.521325, 38.040881], - [-86.504894, 37.931343], - [-86.729448, 37.893004], - [-86.795172, 37.991589], - [-87.047111, 37.893004], - [-87.129265, 37.788942], - [-87.381204, 37.93682], - [-87.512651, 37.903958], - [-87.600282, 37.975158], - [-87.682436, 37.903958], - [-87.934375, 37.893004], - [-88.027483, 37.799896], - [-88.060345, 37.865619], - [-88.000098, 38.101128], - [-87.923421, 38.15042], - [-87.950806, 38.27639], - [-87.83579, 38.292821], - [-87.655051, 38.506421], - [-87.62219, 38.637868], - [-87.49622, 38.780268], - [-87.512651, 38.95553], - [-87.63862, 39.169131], - [-87.529082, 39.34987], - [-87.523605, 41.710431], - [-87.42502, 41.644708], - [-87.118311, 41.644708], - [-86.822556, 41.759724], - [-85.990061, 41.759724], - ], - ], - }, - }, - { - type: "Feature", - id: "19", - properties: { name: "Iowa", density: 54.81 }, - geometry: { - type: "Polygon", - coordinates: [ - [ - [-91.368417, 43.501391], - [-91.215062, 43.501391], - [-91.204109, 43.353514], - [-91.056231, 43.254929], - [-91.176724, 43.134436], - [-91.143862, 42.909881], - [-91.067185, 42.75105], - [-90.711184, 42.636034], - [-90.639984, 42.510065], - [-90.420906, 42.329326], - [-90.393521, 42.225264], - [-90.168967, 42.126679], - [-90.141582, 42.000709], - [-90.179921, 41.809016], - [-90.311367, 41.743293], - [-90.344229, 41.589939], - [-90.656414, 41.463969], - [-91.045277, 41.414677], - [-91.111001, 41.239415], - [-90.946692, 41.097014], - [-90.963123, 40.921752], - [-91.09457, 40.823167], - [-91.121954, 40.669813], - [-91.401278, 40.560274], - [-91.417709, 40.379535], - [-91.527248, 40.412397], - [-91.729895, 40.615043], - [-91.833957, 40.609566], - [-93.257961, 40.582182], - [-94.632673, 40.571228], - [-95.7664, 40.587659], - [-95.881416, 40.719105], - [-95.826646, 40.976521], - [-95.925231, 41.201076], - [-95.919754, 41.453015], - [-96.095016, 41.540646], - [-96.122401, 41.67757], - [-96.062155, 41.798063], - [-96.127878, 41.973325], - [-96.264801, 42.039048], - [-96.44554, 42.488157], - [-96.631756, 42.707235], - [-96.544125, 42.855112], - [-96.511264, 43.052282], - [-96.434587, 43.123482], - [-96.560556, 43.222067], - [-96.527695, 43.397329], - [-96.582464, 43.479483], - [-96.451017, 43.501391], - [-91.368417, 43.501391], - ], - ], - }, - }, - { - type: "Feature", - id: "20", - properties: { name: "Kansas", density: 35.09 }, - geometry: { - type: "Polygon", - coordinates: [ - [ - [-101.90605, 40.001626], - [-95.306337, 40.001626], - [-95.207752, 39.908518], - [-94.884612, 39.831841], - [-95.109167, 39.541563], - [-94.983197, 39.442978], - [-94.824366, 39.20747], - [-94.610765, 39.158177], - [-94.616242, 37.000263], - [-100.087706, 37.000263], - [-102.042974, 36.994786], - [-102.053927, 40.001626], - [-101.90605, 40.001626], - ], - ], - }, - }, - { - type: "Feature", - id: "21", - properties: { name: "Kentucky", density: 110 }, - geometry: { - type: "Polygon", - coordinates: [ - [ - [-83.903347, 38.769315], - [-83.678792, 38.632391], - [-83.519961, 38.703591], - [-83.142052, 38.626914], - [-83.032514, 38.725499], - [-82.890113, 38.758361], - [-82.846298, 38.588575], - [-82.731282, 38.561191], - [-82.594358, 38.424267], - [-82.621743, 38.123036], - [-82.50125, 37.931343], - [-82.342419, 37.783465], - [-82.293127, 37.668449], - [-82.101434, 37.553434], - [-81.969987, 37.537003], - [-82.353373, 37.268633], - [-82.720328, 37.120755], - [-82.720328, 37.044078], - [-82.868205, 36.978355], - [-82.879159, 36.890724], - [-83.070852, 36.852385], - [-83.136575, 36.742847], - [-83.673316, 36.600446], - [-83.689746, 36.584015], - [-84.544149, 36.594969], - [-85.289013, 36.627831], - [-85.486183, 36.616877], - [-86.592525, 36.655216], - [-87.852221, 36.633308], - [-88.071299, 36.677123], - [-88.054868, 36.496384], - [-89.298133, 36.507338], - [-89.418626, 36.496384], - [-89.363857, 36.622354], - [-89.215979, 36.578538], - [-89.133825, 36.983832], - [-89.183118, 37.038601], - [-89.029763, 37.213863], - [-88.914747, 37.224817], - [-88.547792, 37.071463], - [-88.421823, 37.153617], - [-88.514931, 37.285064], - [-88.476592, 37.389126], - [-88.065822, 37.482234], - [-88.15893, 37.657496], - [-88.027483, 37.799896], - [-87.934375, 37.893004], - [-87.682436, 37.903958], - [-87.600282, 37.975158], - [-87.512651, 37.903958], - [-87.381204, 37.93682], - [-87.129265, 37.788942], - [-87.047111, 37.893004], - [-86.795172, 37.991589], - [-86.729448, 37.893004], - [-86.504894, 37.931343], - [-86.521325, 38.040881], - [-86.302247, 38.166851], - [-86.263908, 38.051835], - [-86.039354, 37.958727], - [-85.924338, 38.024451], - [-85.83123, 38.27639], - [-85.655968, 38.325682], - [-85.590245, 38.451652], - [-85.42046, 38.533806], - [-85.431413, 38.730976], - [-85.173997, 38.68716], - [-84.987781, 38.780268], - [-84.812519, 38.785745], - [-84.894673, 39.059592], - [-84.817996, 39.103408], - [-84.43461, 39.103408], - [-84.231963, 38.895284], - [-84.215533, 38.807653], - [-83.903347, 38.769315], - ], - ], - }, - }, - { - type: "Feature", - id: "22", - properties: { name: "Louisiana", density: 105 }, - geometry: { - type: "Polygon", - coordinates: [ - [ - [-93.608485, 33.018527], - [-91.16577, 33.002096], - [-91.072662, 32.887081], - [-91.143862, 32.843265], - [-91.154816, 32.640618], - [-91.006939, 32.514649], - [-90.985031, 32.218894], - [-91.105524, 31.988862], - [-91.341032, 31.846462], - [-91.401278, 31.621907], - [-91.499863, 31.643815], - [-91.516294, 31.27686], - [-91.636787, 31.265906], - [-91.565587, 31.068736], - [-91.636787, 30.997536], - [-89.747242, 30.997536], - [-89.845827, 30.66892], - [-89.681519, 30.449842], - [-89.643181, 30.285534], - [-89.522688, 30.181472], - [-89.818443, 30.044549], - [-89.84035, 29.945964], - [-89.599365, 29.88024], - [-89.495303, 30.039072], - [-89.287179, 29.88024], - [-89.30361, 29.754271], - [-89.424103, 29.699501], - [-89.648657, 29.748794], - [-89.621273, 29.655686], - [-89.69795, 29.513285], - [-89.506257, 29.387316], - [-89.199548, 29.348977], - [-89.09001, 29.2011], - [-89.002379, 29.179192], - [-89.16121, 29.009407], - [-89.336472, 29.042268], - [-89.484349, 29.217531], - [-89.851304, 29.310638], - [-89.851304, 29.480424], - [-90.032043, 29.425654], - [-90.021089, 29.283254], - [-90.103244, 29.151807], - [-90.23469, 29.129899], - [-90.333275, 29.277777], - [-90.563307, 29.283254], - [-90.645461, 29.129899], - [-90.798815, 29.086084], - [-90.963123, 29.179192], - [-91.09457, 29.190146], - [-91.220539, 29.436608], - [-91.445094, 29.546147], - [-91.532725, 29.529716], - [-91.620356, 29.73784], - [-91.883249, 29.710455], - [-91.888726, 29.836425], - [-92.146142, 29.715932], - [-92.113281, 29.622824], - [-92.31045, 29.535193], - [-92.617159, 29.579009], - [-92.97316, 29.715932], - [-93.2251, 29.776178], - [-93.767317, 29.726886], - [-93.838517, 29.688547], - [-93.926148, 29.787132], - [-93.690639, 30.143133], - [-93.767317, 30.334826], - [-93.696116, 30.438888], - [-93.728978, 30.575812], - [-93.630393, 30.679874], - [-93.526331, 30.93729], - [-93.542762, 31.15089], - [-93.816609, 31.556184], - [-93.822086, 31.775262], - [-94.041164, 31.994339], - [-94.041164, 33.018527], - [-93.608485, 33.018527], - ], - ], - }, - }, - { - type: "Feature", - id: "23", - properties: { name: "Maine", density: 43.04 }, - geometry: { - type: "Polygon", - coordinates: [ - [ - [-70.703921, 43.057759], - [-70.824413, 43.128959], - [-70.807983, 43.227544], - [-70.966814, 43.34256], - [-71.032537, 44.657025], - [-71.08183, 45.303304], - [-70.649151, 45.440228], - [-70.720352, 45.511428], - [-70.556043, 45.664782], - [-70.386258, 45.735983], - [-70.41912, 45.796229], - [-70.260289, 45.889337], - [-70.309581, 46.064599], - [-70.210996, 46.327492], - [-70.057642, 46.415123], - [-69.997395, 46.694447], - [-69.225147, 47.461219], - [-69.044408, 47.428357], - [-69.033454, 47.242141], - [-68.902007, 47.176418], - [-68.578868, 47.285957], - [-68.376221, 47.285957], - [-68.233821, 47.357157], - [-67.954497, 47.198326], - [-67.790188, 47.066879], - [-67.779235, 45.944106], - [-67.801142, 45.675736], - [-67.456095, 45.604536], - [-67.505388, 45.48952], - [-67.417757, 45.379982], - [-67.488957, 45.281397], - [-67.346556, 45.128042], - [-67.16034, 45.160904], - [-66.979601, 44.804903], - [-67.187725, 44.646072], - [-67.308218, 44.706318], - [-67.406803, 44.596779], - [-67.549203, 44.624164], - [-67.565634, 44.531056], - [-67.75185, 44.54201], - [-68.047605, 44.328409], - [-68.118805, 44.476286], - [-68.222867, 44.48724], - [-68.173574, 44.328409], - [-68.403606, 44.251732], - [-68.458375, 44.377701], - [-68.567914, 44.311978], - [-68.82533, 44.311978], - [-68.830807, 44.459856], - [-68.984161, 44.426994], - [-68.956777, 44.322932], - [-69.099177, 44.103854], - [-69.071793, 44.043608], - [-69.258008, 43.923115], - [-69.444224, 43.966931], - [-69.553763, 43.840961], - [-69.707118, 43.82453], - [-69.833087, 43.720469], - [-69.986442, 43.742376], - [-70.030257, 43.851915], - [-70.254812, 43.676653], - [-70.194565, 43.567114], - [-70.358873, 43.528776], - [-70.369827, 43.435668], - [-70.556043, 43.320652], - [-70.703921, 43.057759], - ], - ], - }, - }, - { - type: "Feature", - id: "24", - properties: { name: "Maryland", density: 596.3 }, - geometry: { - type: "MultiPolygon", - coordinates: [ - [ - [ - [-75.994645, 37.95325], - [-76.016553, 37.95325], - [-76.043938, 37.95325], - [-75.994645, 37.95325], - ], - ], - [ - [ - [-79.477979, 39.722302], - [-75.786521, 39.722302], - [-75.693413, 38.462606], - [-75.047134, 38.451652], - [-75.244304, 38.029928], - [-75.397659, 38.013497], - [-75.671506, 37.95325], - [-75.885106, 37.909435], - [-75.879629, 38.073743], - [-75.961783, 38.139466], - [-75.846768, 38.210667], - [-76.000122, 38.374975], - [-76.049415, 38.303775], - [-76.257538, 38.320205], - [-76.328738, 38.500944], - [-76.263015, 38.500944], - [-76.257538, 38.736453], - [-76.191815, 38.829561], - [-76.279446, 39.147223], - [-76.169907, 39.333439], - [-76.000122, 39.366301], - [-75.972737, 39.557994], - [-76.098707, 39.536086], - [-76.104184, 39.437501], - [-76.367077, 39.311532], - [-76.443754, 39.196516], - [-76.460185, 38.906238], - [-76.55877, 38.769315], - [-76.514954, 38.539283], - [-76.383508, 38.380452], - [-76.399939, 38.259959], - [-76.317785, 38.139466], - [-76.3616, 38.057312], - [-76.591632, 38.216144], - [-76.920248, 38.292821], - [-77.018833, 38.446175], - [-77.205049, 38.358544], - [-77.276249, 38.479037], - [-77.128372, 38.632391], - [-77.040741, 38.791222], - [-76.909294, 38.895284], - [-77.035264, 38.993869], - [-77.117418, 38.933623], - [-77.248864, 39.026731], - [-77.456988, 39.076023], - [-77.456988, 39.223901], - [-77.566527, 39.306055], - [-77.719881, 39.322485], - [-77.834897, 39.601809], - [-78.004682, 39.601809], - [-78.174467, 39.694917], - [-78.267575, 39.61824], - [-78.431884, 39.623717], - [-78.470222, 39.514178], - [-78.765977, 39.585379], - [-78.963147, 39.437501], - [-79.094593, 39.470363], - [-79.291763, 39.300578], - [-79.488933, 39.20747], - [-79.477979, 39.722302], - ], - ], - ], - }, - }, - { - type: "Feature", - id: "25", - properties: { name: "Massachusetts", density: 840.2 }, - geometry: { - type: "Polygon", - coordinates: [ - [ - [-70.917521, 42.887974], - [-70.818936, 42.871543], - [-70.780598, 42.696281], - [-70.824413, 42.55388], - [-70.983245, 42.422434], - [-70.988722, 42.269079], - [-70.769644, 42.247172], - [-70.638197, 42.08834], - [-70.660105, 41.962371], - [-70.550566, 41.929509], - [-70.539613, 41.814493], - [-70.260289, 41.715908], - [-69.937149, 41.809016], - [-70.008349, 41.672093], - [-70.484843, 41.5516], - [-70.660105, 41.546123], - [-70.764167, 41.639231], - [-70.928475, 41.611847], - [-70.933952, 41.540646], - [-71.120168, 41.496831], - [-71.196845, 41.67757], - [-71.22423, 41.710431], - [-71.328292, 41.781632], - [-71.383061, 42.01714], - [-71.530939, 42.01714], - [-71.799309, 42.006186], - [-71.799309, 42.022617], - [-73.053528, 42.039048], - [-73.486206, 42.050002], - [-73.508114, 42.08834], - [-73.267129, 42.745573], - [-72.456542, 42.729142], - [-71.29543, 42.696281], - [-71.185891, 42.789389], - [-70.917521, 42.887974], - ], - ], - }, - }, - { - type: "Feature", - id: "26", - properties: { name: "Michigan", density: 173.9 }, - geometry: { - type: "MultiPolygon", - coordinates: [ - [ - [ - [-83.454238, 41.732339], - [-84.807042, 41.694001], - [-84.807042, 41.759724], - [-85.990061, 41.759724], - [-86.822556, 41.759724], - [-86.619909, 41.891171], - [-86.482986, 42.115725], - [-86.357016, 42.252649], - [-86.263908, 42.444341], - [-86.209139, 42.718189], - [-86.231047, 43.013943], - [-86.526801, 43.594499], - [-86.433693, 43.813577], - [-86.499417, 44.07647], - [-86.269385, 44.34484], - [-86.220093, 44.569394], - [-86.252954, 44.689887], - [-86.088646, 44.73918], - [-86.066738, 44.903488], - [-85.809322, 44.947303], - [-85.612152, 45.128042], - [-85.628583, 44.766564], - [-85.524521, 44.750133], - [-85.393075, 44.930872], - [-85.387598, 45.237581], - [-85.305444, 45.314258], - [-85.031597, 45.363551], - [-85.119228, 45.577151], - [-84.938489, 45.75789], - [-84.713934, 45.768844], - [-84.461995, 45.653829], - [-84.215533, 45.637398], - [-84.09504, 45.494997], - [-83.908824, 45.484043], - [-83.596638, 45.352597], - [-83.4871, 45.358074], - [-83.317314, 45.144473], - [-83.454238, 45.029457], - [-83.322791, 44.88158], - [-83.273499, 44.711795], - [-83.333745, 44.339363], - [-83.536392, 44.246255], - [-83.585684, 44.054562], - [-83.82667, 43.988839], - [-83.958116, 43.758807], - [-83.908824, 43.671176], - [-83.667839, 43.589022], - [-83.481623, 43.714992], - [-83.262545, 43.972408], - [-82.917498, 44.070993], - [-82.747713, 43.994316], - [-82.643651, 43.851915], - [-82.539589, 43.435668], - [-82.523158, 43.227544], - [-82.413619, 42.975605], - [-82.517681, 42.614127], - [-82.681989, 42.559357], - [-82.687466, 42.690804], - [-82.797005, 42.652465], - [-82.922975, 42.351234], - [-83.125621, 42.236218], - [-83.185868, 42.006186], - [-83.437807, 41.814493], - [-83.454238, 41.732339], - ], - ], - [ - [ - [-85.508091, 45.730506], - [-85.49166, 45.610013], - [-85.623106, 45.588105], - [-85.568337, 45.75789], - [-85.508091, 45.730506], - ], - ], - [ - [ - [-87.589328, 45.095181], - [-87.742682, 45.199243], - [-87.649574, 45.341643], - [-87.885083, 45.363551], - [-87.791975, 45.500474], - [-87.781021, 45.675736], - [-87.989145, 45.796229], - [-88.10416, 45.922199], - [-88.531362, 46.020784], - [-88.662808, 45.987922], - [-89.09001, 46.135799], - [-90.119674, 46.338446], - [-90.229213, 46.508231], - [-90.415429, 46.568478], - [-90.026566, 46.672539], - [-89.851304, 46.793032], - [-89.413149, 46.842325], - [-89.128348, 46.990202], - [-88.996902, 46.995679], - [-88.887363, 47.099741], - [-88.575177, 47.247618], - [-88.416346, 47.373588], - [-88.180837, 47.455742], - [-87.956283, 47.384542], - [-88.350623, 47.077833], - [-88.443731, 46.973771], - [-88.438254, 46.787555], - [-88.246561, 46.929956], - [-87.901513, 46.908048], - [-87.633143, 46.809463], - [-87.392158, 46.535616], - [-87.260711, 46.486323], - [-87.008772, 46.530139], - [-86.948526, 46.469893], - [-86.696587, 46.437031], - [-86.159846, 46.667063], - [-85.880522, 46.68897], - [-85.508091, 46.678016], - [-85.256151, 46.754694], - [-85.064458, 46.760171], - [-85.02612, 46.480847], - [-84.82895, 46.442508], - [-84.63178, 46.486323], - [-84.549626, 46.4206], - [-84.418179, 46.502754], - [-84.127902, 46.530139], - [-84.122425, 46.179615], - [-83.990978, 46.031737], - [-83.793808, 45.993399], - [-83.7719, 46.091984], - [-83.580208, 46.091984], - [-83.476146, 45.987922], - [-83.563777, 45.911245], - [-84.111471, 45.976968], - [-84.374364, 45.933153], - [-84.659165, 46.053645], - [-84.741319, 45.944106], - [-84.70298, 45.850998], - [-84.82895, 45.872906], - [-85.015166, 46.00983], - [-85.338305, 46.091984], - [-85.502614, 46.097461], - [-85.661445, 45.966014], - [-85.924338, 45.933153], - [-86.209139, 45.960537], - [-86.324155, 45.905768], - [-86.351539, 45.796229], - [-86.663725, 45.703121], - [-86.647294, 45.834568], - [-86.784218, 45.861952], - [-86.838987, 45.725029], - [-87.069019, 45.719552], - [-87.17308, 45.659305], - [-87.326435, 45.423797], - [-87.611236, 45.122565], - [-87.589328, 45.095181], - ], - ], - [ - [ - [-88.805209, 47.976051], - [-89.057148, 47.850082], - [-89.188594, 47.833651], - [-89.177641, 47.937713], - [-88.547792, 48.173221], - [-88.668285, 48.008913], - [-88.805209, 47.976051], - ], - ], - ], - }, - }, - { - type: "Feature", - id: "27", - properties: { name: "Minnesota", density: 67.14 }, - geometry: { - type: "Polygon", - coordinates: [ - [ - [-92.014696, 46.705401], - [-92.091373, 46.749217], - [-92.29402, 46.667063], - [-92.29402, 46.075553], - [-92.354266, 46.015307], - [-92.639067, 45.933153], - [-92.869098, 45.719552], - [-92.885529, 45.577151], - [-92.770513, 45.566198], - [-92.644544, 45.440228], - [-92.75956, 45.286874], - [-92.737652, 45.117088], - [-92.808852, 44.750133], - [-92.545959, 44.569394], - [-92.337835, 44.552964], - [-92.233773, 44.443425], - [-91.927065, 44.333886], - [-91.877772, 44.202439], - [-91.592971, 44.032654], - [-91.43414, 43.994316], - [-91.242447, 43.775238], - [-91.269832, 43.616407], - [-91.215062, 43.501391], - [-91.368417, 43.501391], - [-96.451017, 43.501391], - [-96.451017, 45.297827], - [-96.681049, 45.412843], - [-96.856311, 45.604536], - [-96.582464, 45.818137], - [-96.560556, 45.933153], - [-96.598895, 46.332969], - [-96.719387, 46.437031], - [-96.801542, 46.656109], - [-96.785111, 46.924479], - [-96.823449, 46.968294], - [-96.856311, 47.609096], - [-97.053481, 47.948667], - [-97.130158, 48.140359], - [-97.16302, 48.545653], - [-97.097296, 48.682577], - [-97.228743, 49.000239], - [-95.152983, 49.000239], - [-95.152983, 49.383625], - [-94.955813, 49.372671], - [-94.824366, 49.295994], - [-94.69292, 48.775685], - [-94.588858, 48.715438], - [-94.260241, 48.699007], - [-94.221903, 48.649715], - [-93.838517, 48.627807], - [-93.794701, 48.518268], - [-93.466085, 48.545653], - [-93.466085, 48.589469], - [-93.208669, 48.644238], - [-92.984114, 48.62233], - [-92.726698, 48.540176], - [-92.655498, 48.436114], - [-92.50762, 48.447068], - [-92.370697, 48.222514], - [-92.304974, 48.315622], - [-92.053034, 48.359437], - [-92.009219, 48.266329], - [-91.713464, 48.200606], - [-91.713464, 48.112975], - [-91.565587, 48.041775], - [-91.264355, 48.080113], - [-91.083616, 48.178698], - [-90.837154, 48.238944], - [-90.749522, 48.091067], - [-90.579737, 48.123929], - [-90.377091, 48.091067], - [-90.141582, 48.112975], - [-89.873212, 47.987005], - [-89.615796, 48.008913], - [-89.637704, 47.954144], - [-89.971797, 47.828174], - [-90.437337, 47.729589], - [-90.738569, 47.625527], - [-91.171247, 47.368111], - [-91.357463, 47.20928], - [-91.642264, 47.028541], - [-92.091373, 46.787555], - [-92.014696, 46.705401], - ], - ], - }, - }, - { - type: "Feature", - id: "28", - properties: { name: "Mississippi", density: 63.5 }, - geometry: { - type: "Polygon", - coordinates: [ - [ - [-88.471115, 34.995703], - [-88.202745, 34.995703], - [-88.098683, 34.891641], - [-88.241084, 33.796253], - [-88.471115, 31.895754], - [-88.394438, 30.367688], - [-88.503977, 30.323872], - [-88.744962, 30.34578], - [-88.843547, 30.411504], - [-89.084533, 30.367688], - [-89.418626, 30.252672], - [-89.522688, 30.181472], - [-89.643181, 30.285534], - [-89.681519, 30.449842], - [-89.845827, 30.66892], - [-89.747242, 30.997536], - [-91.636787, 30.997536], - [-91.565587, 31.068736], - [-91.636787, 31.265906], - [-91.516294, 31.27686], - [-91.499863, 31.643815], - [-91.401278, 31.621907], - [-91.341032, 31.846462], - [-91.105524, 31.988862], - [-90.985031, 32.218894], - [-91.006939, 32.514649], - [-91.154816, 32.640618], - [-91.143862, 32.843265], - [-91.072662, 32.887081], - [-91.16577, 33.002096], - [-91.089093, 33.13902], - [-91.143862, 33.347144], - [-91.056231, 33.429298], - [-91.231493, 33.560744], - [-91.072662, 33.867453], - [-90.891923, 34.026284], - [-90.952169, 34.135823], - [-90.744046, 34.300131], - [-90.749522, 34.365854], - [-90.568783, 34.420624], - [-90.585214, 34.617794], - [-90.481152, 34.661609], - [-90.409952, 34.831394], - [-90.251121, 34.908072], - [-90.311367, 34.995703], - [-88.471115, 34.995703], - ], - ], - }, - }, - { - type: "Feature", - id: "29", - properties: { name: "Missouri", density: 87.26 }, - geometry: { - type: "Polygon", - coordinates: [ - [ - [-91.833957, 40.609566], - [-91.729895, 40.615043], - [-91.527248, 40.412397], - [-91.417709, 40.379535], - [-91.50534, 40.237135], - [-91.494386, 40.034488], - [-91.368417, 39.727779], - [-91.061708, 39.470363], - [-90.727615, 39.256762], - [-90.661891, 38.928146], - [-90.585214, 38.867899], - [-90.470199, 38.961007], - [-90.251121, 38.917192], - [-90.10872, 38.845992], - [-90.207305, 38.725499], - [-90.179921, 38.632391], - [-90.349706, 38.374975], - [-90.355183, 38.216144], - [-90.059428, 38.013497], - [-89.949889, 37.88205], - [-89.84035, 37.903958], - [-89.517211, 37.690357], - [-89.517211, 37.537003], - [-89.435057, 37.34531], - [-89.517211, 37.279587], - [-89.292656, 36.994786], - [-89.133825, 36.983832], - [-89.215979, 36.578538], - [-89.363857, 36.622354], - [-89.418626, 36.496384], - [-89.484349, 36.496384], - [-89.539119, 36.496384], - [-89.533642, 36.249922], - [-89.730812, 35.997983], - [-90.377091, 35.997983], - [-90.218259, 36.184199], - [-90.064905, 36.304691], - [-90.152536, 36.496384], - [-94.473842, 36.501861], - [-94.616242, 36.501861], - [-94.616242, 37.000263], - [-94.610765, 39.158177], - [-94.824366, 39.20747], - [-94.983197, 39.442978], - [-95.109167, 39.541563], - [-94.884612, 39.831841], - [-95.207752, 39.908518], - [-95.306337, 40.001626], - [-95.552799, 40.264519], - [-95.7664, 40.587659], - [-94.632673, 40.571228], - [-93.257961, 40.582182], - [-91.833957, 40.609566], - ], - ], - }, - }, - { - type: "Feature", - id: "30", - properties: { name: "Montana", density: 6.858 }, - geometry: { - type: "Polygon", - coordinates: [ - [ - [-104.047534, 49.000239], - [-104.042057, 47.861036], - [-104.047534, 45.944106], - [-104.042057, 44.996596], - [-104.058488, 44.996596], - [-105.91517, 45.002073], - [-109.080842, 45.002073], - [-111.05254, 45.002073], - [-111.047063, 44.476286], - [-111.227803, 44.580348], - [-111.386634, 44.75561], - [-111.616665, 44.547487], - [-111.819312, 44.509148], - [-111.868605, 44.563917], - [-112.104113, 44.520102], - [-112.241036, 44.569394], - [-112.471068, 44.481763], - [-112.783254, 44.48724], - [-112.887315, 44.394132], - [-113.002331, 44.448902], - [-113.133778, 44.772041], - [-113.341901, 44.782995], - [-113.456917, 44.865149], - [-113.45144, 45.056842], - [-113.571933, 45.128042], - [-113.736241, 45.330689], - [-113.834826, 45.522382], - [-113.807441, 45.604536], - [-113.98818, 45.703121], - [-114.086765, 45.593582], - [-114.333228, 45.456659], - [-114.546828, 45.560721], - [-114.497536, 45.670259], - [-114.568736, 45.774321], - [-114.387997, 45.88386], - [-114.492059, 46.037214], - [-114.464674, 46.272723], - [-114.322274, 46.645155], - [-114.612552, 46.639678], - [-114.623506, 46.705401], - [-114.886399, 46.809463], - [-114.930214, 46.919002], - [-115.302646, 47.187372], - [-115.324554, 47.258572], - [-115.527201, 47.302388], - [-115.718894, 47.42288], - [-115.724371, 47.696727], - [-116.04751, 47.976051], - [-116.04751, 49.000239], - [-111.50165, 48.994762], - [-109.453274, 49.000239], - [-104.047534, 49.000239], - ], - ], - }, - }, - { - type: "Feature", - id: "31", - properties: { name: "Nebraska", density: 23.97 }, - geometry: { - type: "Polygon", - coordinates: [ - [ - [-103.324578, 43.002989], - [-101.626726, 42.997512], - [-98.499393, 42.997512], - [-98.466531, 42.94822], - [-97.951699, 42.767481], - [-97.831206, 42.866066], - [-97.688806, 42.844158], - [-97.217789, 42.844158], - [-96.692003, 42.657942], - [-96.626279, 42.515542], - [-96.44554, 42.488157], - [-96.264801, 42.039048], - [-96.127878, 41.973325], - [-96.062155, 41.798063], - [-96.122401, 41.67757], - [-96.095016, 41.540646], - [-95.919754, 41.453015], - [-95.925231, 41.201076], - [-95.826646, 40.976521], - [-95.881416, 40.719105], - [-95.7664, 40.587659], - [-95.552799, 40.264519], - [-95.306337, 40.001626], - [-101.90605, 40.001626], - [-102.053927, 40.001626], - [-102.053927, 41.003906], - [-104.053011, 41.003906], - [-104.053011, 43.002989], - [-103.324578, 43.002989], - ], - ], - }, - }, - { - type: "Feature", - id: "32", - properties: { name: "Nevada", density: 24.8 }, - geometry: { - type: "Polygon", - coordinates: [ - [ - [-117.027882, 42.000709], - [-114.04295, 41.995232], - [-114.048427, 37.000263], - [-114.048427, 36.195153], - [-114.152489, 36.025367], - [-114.251074, 36.01989], - [-114.371566, 36.140383], - [-114.738521, 36.102045], - [-114.678275, 35.516012], - [-114.596121, 35.324319], - [-114.574213, 35.138103], - [-114.634459, 35.00118], - [-115.85034, 35.970598], - [-116.540435, 36.501861], - [-117.498899, 37.21934], - [-118.71478, 38.101128], - [-120.001861, 38.999346], - [-119.996384, 40.264519], - [-120.001861, 41.995232], - [-118.698349, 41.989755], - [-117.027882, 42.000709], - ], - ], - }, - }, - { - type: "Feature", - id: "33", - properties: { name: "New Hampshire", density: 147 }, - geometry: { - type: "Polygon", - coordinates: [ - [ - [-71.08183, 45.303304], - [-71.032537, 44.657025], - [-70.966814, 43.34256], - [-70.807983, 43.227544], - [-70.824413, 43.128959], - [-70.703921, 43.057759], - [-70.818936, 42.871543], - [-70.917521, 42.887974], - [-71.185891, 42.789389], - [-71.29543, 42.696281], - [-72.456542, 42.729142], - [-72.544173, 42.80582], - [-72.533219, 42.953697], - [-72.445588, 43.008466], - [-72.456542, 43.150867], - [-72.379864, 43.572591], - [-72.204602, 43.769761], - [-72.116971, 43.994316], - [-72.02934, 44.07647], - [-72.034817, 44.322932], - [-71.700724, 44.41604], - [-71.536416, 44.585825], - [-71.629524, 44.750133], - [-71.4926, 44.914442], - [-71.503554, 45.013027], - [-71.361154, 45.270443], - [-71.131122, 45.243058], - [-71.08183, 45.303304], - ], - ], - }, - }, - { - type: "Feature", - id: "34", - properties: { name: "New Jersey", density: 1189 }, - geometry: { - type: "Polygon", - coordinates: [ - [ - [-74.236547, 41.14083], - [-73.902454, 40.998429], - [-74.022947, 40.708151], - [-74.187255, 40.642428], - [-74.274886, 40.489074], - [-74.001039, 40.412397], - [-73.979131, 40.297381], - [-74.099624, 39.760641], - [-74.411809, 39.360824], - [-74.614456, 39.245808], - [-74.795195, 38.993869], - [-74.888303, 39.158177], - [-75.178581, 39.240331], - [-75.534582, 39.459409], - [-75.55649, 39.607286], - [-75.561967, 39.629194], - [-75.507197, 39.683964], - [-75.414089, 39.804456], - [-75.145719, 39.88661], - [-75.129289, 39.963288], - [-74.82258, 40.127596], - [-74.773287, 40.215227], - [-75.058088, 40.417874], - [-75.069042, 40.543843], - [-75.195012, 40.576705], - [-75.205966, 40.691721], - [-75.052611, 40.866983], - [-75.134765, 40.971045], - [-74.882826, 41.179168], - [-74.828057, 41.288707], - [-74.69661, 41.359907], - [-74.236547, 41.14083], - ], - ], - }, - }, - { - type: "Feature", - id: "35", - properties: { name: "New Mexico", density: 17.16 }, - geometry: { - type: "Polygon", - coordinates: [ - [ - [-107.421329, 37.000263], - [-106.868158, 36.994786], - [-104.337812, 36.994786], - [-103.001438, 37.000263], - [-103.001438, 36.501861], - [-103.039777, 36.501861], - [-103.045254, 34.01533], - [-103.067161, 33.002096], - [-103.067161, 31.999816], - [-106.616219, 31.999816], - [-106.643603, 31.901231], - [-106.528588, 31.786216], - [-108.210008, 31.786216], - [-108.210008, 31.331629], - [-109.04798, 31.331629], - [-109.042503, 37.000263], - [-107.421329, 37.000263], - ], - ], - }, - }, - { - type: "Feature", - id: "36", - properties: { name: "New York", density: 412.3 }, - geometry: { - type: "Polygon", - coordinates: [ - [ - [-73.343806, 45.013027], - [-73.332852, 44.804903], - [-73.387622, 44.618687], - [-73.294514, 44.437948], - [-73.321898, 44.246255], - [-73.436914, 44.043608], - [-73.349283, 43.769761], - [-73.404052, 43.687607], - [-73.245221, 43.523299], - [-73.278083, 42.833204], - [-73.267129, 42.745573], - [-73.508114, 42.08834], - [-73.486206, 42.050002], - [-73.55193, 41.294184], - [-73.48073, 41.21203], - [-73.727192, 41.102491], - [-73.655992, 40.987475], - [-73.22879, 40.905321], - [-73.141159, 40.965568], - [-72.774204, 40.965568], - [-72.587988, 40.998429], - [-72.28128, 41.157261], - [-72.259372, 41.042245], - [-72.100541, 40.992952], - [-72.467496, 40.845075], - [-73.239744, 40.625997], - [-73.562884, 40.582182], - [-73.776484, 40.593136], - [-73.935316, 40.543843], - [-74.022947, 40.708151], - [-73.902454, 40.998429], - [-74.236547, 41.14083], - [-74.69661, 41.359907], - [-74.740426, 41.431108], - [-74.89378, 41.436584], - [-75.074519, 41.60637], - [-75.052611, 41.754247], - [-75.173104, 41.869263], - [-75.249781, 41.863786], - [-75.35932, 42.000709], - [-79.76278, 42.000709], - [-79.76278, 42.252649], - [-79.76278, 42.269079], - [-79.149363, 42.55388], - [-79.050778, 42.690804], - [-78.853608, 42.783912], - [-78.930285, 42.953697], - [-79.012439, 42.986559], - [-79.072686, 43.260406], - [-78.486653, 43.375421], - [-77.966344, 43.369944], - [-77.75822, 43.34256], - [-77.533665, 43.233021], - [-77.391265, 43.276836], - [-76.958587, 43.271359], - [-76.695693, 43.34256], - [-76.41637, 43.523299], - [-76.235631, 43.528776], - [-76.230154, 43.802623], - [-76.137046, 43.961454], - [-76.3616, 44.070993], - [-76.312308, 44.196962], - [-75.912491, 44.366748], - [-75.764614, 44.514625], - [-75.282643, 44.848718], - [-74.828057, 45.018503], - [-74.148916, 44.991119], - [-73.343806, 45.013027], - ], - ], - }, - }, - { - type: "Feature", - id: "37", - properties: { name: "North Carolina", density: 198.2 }, - geometry: { - type: "Polygon", - coordinates: [ - [ - [-80.978661, 36.562108], - [-80.294043, 36.545677], - [-79.510841, 36.5402], - [-75.868676, 36.551154], - [-75.75366, 36.151337], - [-76.032984, 36.189676], - [-76.071322, 36.140383], - [-76.410893, 36.080137], - [-76.460185, 36.025367], - [-76.68474, 36.008937], - [-76.673786, 35.937736], - [-76.399939, 35.987029], - [-76.3616, 35.943213], - [-76.060368, 35.992506], - [-75.961783, 35.899398], - [-75.781044, 35.937736], - [-75.715321, 35.696751], - [-75.775568, 35.581735], - [-75.89606, 35.570781], - [-76.147999, 35.324319], - [-76.482093, 35.313365], - [-76.536862, 35.14358], - [-76.394462, 34.973795], - [-76.279446, 34.940933], - [-76.493047, 34.661609], - [-76.673786, 34.694471], - [-76.991448, 34.667086], - [-77.210526, 34.60684], - [-77.555573, 34.415147], - [-77.82942, 34.163208], - [-77.971821, 33.845545], - [-78.179944, 33.916745], - [-78.541422, 33.851022], - [-79.675149, 34.80401], - [-80.797922, 34.820441], - [-80.781491, 34.935456], - [-80.934845, 35.105241], - [-81.038907, 35.044995], - [-81.044384, 35.149057], - [-82.276696, 35.198349], - [-82.550543, 35.160011], - [-82.764143, 35.066903], - [-83.109191, 35.00118], - [-83.618546, 34.984749], - [-84.319594, 34.990226], - [-84.29221, 35.225734], - [-84.09504, 35.247642], - [-84.018363, 35.41195], - [-83.7719, 35.559827], - [-83.498053, 35.565304], - [-83.251591, 35.718659], - [-82.994175, 35.773428], - [-82.775097, 35.997983], - [-82.638174, 36.063706], - [-82.610789, 35.965121], - [-82.216449, 36.156814], - [-82.03571, 36.118475], - [-81.909741, 36.304691], - [-81.723525, 36.353984], - [-81.679709, 36.589492], - [-80.978661, 36.562108], - ], - ], - }, - }, - { - type: "Feature", - id: "38", - properties: { name: "North Dakota", density: 9.916 }, - geometry: { - type: "Polygon", - coordinates: [ - [ - [-97.228743, 49.000239], - [-97.097296, 48.682577], - [-97.16302, 48.545653], - [-97.130158, 48.140359], - [-97.053481, 47.948667], - [-96.856311, 47.609096], - [-96.823449, 46.968294], - [-96.785111, 46.924479], - [-96.801542, 46.656109], - [-96.719387, 46.437031], - [-96.598895, 46.332969], - [-96.560556, 45.933153], - [-104.047534, 45.944106], - [-104.042057, 47.861036], - [-104.047534, 49.000239], - [-97.228743, 49.000239], - ], - ], - }, - }, - { - type: "Feature", - id: "39", - properties: { name: "Ohio", density: 281.9 }, - geometry: { - type: "Polygon", - coordinates: [ - [ - [-80.518598, 41.978802], - [-80.518598, 40.636951], - [-80.666475, 40.582182], - [-80.595275, 40.472643], - [-80.600752, 40.319289], - [-80.737675, 40.078303], - [-80.830783, 39.711348], - [-81.219646, 39.388209], - [-81.345616, 39.344393], - [-81.455155, 39.410117], - [-81.57017, 39.267716], - [-81.685186, 39.273193], - [-81.811156, 39.0815], - [-81.783771, 38.966484], - [-81.887833, 38.873376], - [-82.03571, 39.026731], - [-82.221926, 38.785745], - [-82.172634, 38.632391], - [-82.293127, 38.577622], - [-82.331465, 38.446175], - [-82.594358, 38.424267], - [-82.731282, 38.561191], - [-82.846298, 38.588575], - [-82.890113, 38.758361], - [-83.032514, 38.725499], - [-83.142052, 38.626914], - [-83.519961, 38.703591], - [-83.678792, 38.632391], - [-83.903347, 38.769315], - [-84.215533, 38.807653], - [-84.231963, 38.895284], - [-84.43461, 39.103408], - [-84.817996, 39.103408], - [-84.801565, 40.500028], - [-84.807042, 41.694001], - [-83.454238, 41.732339], - [-83.065375, 41.595416], - [-82.933929, 41.513262], - [-82.835344, 41.589939], - [-82.616266, 41.431108], - [-82.479343, 41.381815], - [-82.013803, 41.513262], - [-81.739956, 41.485877], - [-81.444201, 41.672093], - [-81.011523, 41.852832], - [-80.518598, 41.978802], - [-80.518598, 41.978802], - ], - ], - }, - }, - { - type: "Feature", - id: "40", - properties: { name: "Oklahoma", density: 55.22 }, - geometry: { - type: "Polygon", - coordinates: [ - [ - [-100.087706, 37.000263], - [-94.616242, 37.000263], - [-94.616242, 36.501861], - [-94.430026, 35.395519], - [-94.484796, 33.637421], - [-94.868182, 33.74696], - [-94.966767, 33.861976], - [-95.224183, 33.960561], - [-95.289906, 33.87293], - [-95.547322, 33.878407], - [-95.602092, 33.933176], - [-95.8376, 33.834591], - [-95.936185, 33.889361], - [-96.149786, 33.840068], - [-96.346956, 33.686714], - [-96.423633, 33.774345], - [-96.631756, 33.845545], - [-96.850834, 33.845545], - [-96.922034, 33.960561], - [-97.173974, 33.736006], - [-97.256128, 33.861976], - [-97.371143, 33.823637], - [-97.458774, 33.905791], - [-97.694283, 33.982469], - [-97.869545, 33.851022], - [-97.946222, 33.987946], - [-98.088623, 34.004376], - [-98.170777, 34.113915], - [-98.36247, 34.157731], - [-98.488439, 34.064623], - [-98.570593, 34.146777], - [-98.767763, 34.135823], - [-98.986841, 34.223454], - [-99.189488, 34.2125], - [-99.260688, 34.404193], - [-99.57835, 34.415147], - [-99.698843, 34.382285], - [-99.923398, 34.573978], - [-100.000075, 34.563024], - [-100.000075, 36.501861], - [-101.812942, 36.501861], - [-103.001438, 36.501861], - [-103.001438, 37.000263], - [-102.042974, 36.994786], - [-100.087706, 37.000263], - ], - ], - }, - }, - { - type: "Feature", - id: "41", - properties: { name: "Oregon", density: 40.33 }, - geometry: { - type: "Polygon", - coordinates: [ - [ - [-123.211348, 46.174138], - [-123.11824, 46.185092], - [-122.904639, 46.08103], - [-122.811531, 45.960537], - [-122.762239, 45.659305], - [-122.247407, 45.549767], - [-121.809251, 45.708598], - [-121.535404, 45.725029], - [-121.217742, 45.670259], - [-121.18488, 45.604536], - [-120.637186, 45.746937], - [-120.505739, 45.697644], - [-120.209985, 45.725029], - [-119.963522, 45.823614], - [-119.525367, 45.911245], - [-119.125551, 45.933153], - [-118.988627, 45.998876], - [-116.918344, 45.993399], - [-116.78142, 45.823614], - [-116.545912, 45.752413], - [-116.463758, 45.61549], - [-116.671881, 45.319735], - [-116.732128, 45.144473], - [-116.847143, 45.02398], - [-116.830713, 44.930872], - [-116.934774, 44.782995], - [-117.038836, 44.750133], - [-117.241483, 44.394132], - [-117.170283, 44.257209], - [-116.97859, 44.240778], - [-116.896436, 44.158624], - [-117.027882, 43.830007], - [-117.027882, 42.000709], - [-118.698349, 41.989755], - [-120.001861, 41.995232], - [-121.037003, 41.995232], - [-122.378853, 42.011663], - [-123.233256, 42.006186], - [-124.213628, 42.000709], - [-124.356029, 42.115725], - [-124.432706, 42.438865], - [-124.416275, 42.663419], - [-124.553198, 42.838681], - [-124.454613, 43.002989], - [-124.383413, 43.271359], - [-124.235536, 43.55616], - [-124.169813, 43.8081], - [-124.060274, 44.657025], - [-124.076705, 44.772041], - [-123.97812, 45.144473], - [-123.939781, 45.659305], - [-123.994551, 45.944106], - [-123.945258, 46.113892], - [-123.545441, 46.261769], - [-123.370179, 46.146753], - [-123.211348, 46.174138], - ], - ], - }, - }, - { - type: "Feature", - id: "42", - properties: { name: "Pennsylvania", density: 284.3 }, - geometry: { - type: "Polygon", - coordinates: [ - [ - [-79.76278, 42.252649], - [-79.76278, 42.000709], - [-75.35932, 42.000709], - [-75.249781, 41.863786], - [-75.173104, 41.869263], - [-75.052611, 41.754247], - [-75.074519, 41.60637], - [-74.89378, 41.436584], - [-74.740426, 41.431108], - [-74.69661, 41.359907], - [-74.828057, 41.288707], - [-74.882826, 41.179168], - [-75.134765, 40.971045], - [-75.052611, 40.866983], - [-75.205966, 40.691721], - [-75.195012, 40.576705], - [-75.069042, 40.543843], - [-75.058088, 40.417874], - [-74.773287, 40.215227], - [-74.82258, 40.127596], - [-75.129289, 39.963288], - [-75.145719, 39.88661], - [-75.414089, 39.804456], - [-75.616736, 39.831841], - [-75.786521, 39.722302], - [-79.477979, 39.722302], - [-80.518598, 39.722302], - [-80.518598, 40.636951], - [-80.518598, 41.978802], - [-80.518598, 41.978802], - [-80.332382, 42.033571], - [-79.76278, 42.269079], - [-79.76278, 42.252649], - ], - ], - }, - }, - { - type: "Feature", - id: "44", - properties: { name: "Rhode Island", density: 1006 }, - geometry: { - type: "MultiPolygon", - coordinates: [ - [ - [ - [-71.196845, 41.67757], - [-71.120168, 41.496831], - [-71.317338, 41.474923], - [-71.196845, 41.67757], - ], - ], - [ - [ - [-71.530939, 42.01714], - [-71.383061, 42.01714], - [-71.328292, 41.781632], - [-71.22423, 41.710431], - [-71.344723, 41.726862], - [-71.448785, 41.578985], - [-71.481646, 41.370861], - [-71.859555, 41.321569], - [-71.799309, 41.414677], - [-71.799309, 42.006186], - [-71.530939, 42.01714], - ], - ], - ], - }, - }, - { - type: "Feature", - id: "45", - properties: { name: "South Carolina", density: 155.4 }, - geometry: { - type: "Polygon", - coordinates: [ - [ - [-82.764143, 35.066903], - [-82.550543, 35.160011], - [-82.276696, 35.198349], - [-81.044384, 35.149057], - [-81.038907, 35.044995], - [-80.934845, 35.105241], - [-80.781491, 34.935456], - [-80.797922, 34.820441], - [-79.675149, 34.80401], - [-78.541422, 33.851022], - [-78.716684, 33.80173], - [-78.935762, 33.637421], - [-79.149363, 33.380005], - [-79.187701, 33.171881], - [-79.357487, 33.007573], - [-79.582041, 33.007573], - [-79.631334, 32.887081], - [-79.866842, 32.755634], - [-79.998289, 32.613234], - [-80.206412, 32.552987], - [-80.430967, 32.399633], - [-80.452875, 32.328433], - [-80.660998, 32.246279], - [-80.885553, 32.032678], - [-81.115584, 32.120309], - [-81.121061, 32.290094], - [-81.279893, 32.558464], - [-81.416816, 32.629664], - [-81.42777, 32.843265], - [-81.493493, 33.007573], - [-81.761863, 33.160928], - [-81.937125, 33.347144], - [-81.926172, 33.462159], - [-82.194542, 33.631944], - [-82.325988, 33.81816], - [-82.55602, 33.94413], - [-82.714851, 34.152254], - [-82.747713, 34.26727], - [-82.901067, 34.486347], - [-83.005129, 34.469916], - [-83.339222, 34.683517], - [-83.322791, 34.787579], - [-83.109191, 35.00118], - [-82.764143, 35.066903], - ], - ], - }, - }, - { - type: "Feature", - id: "46", - properties: { name: "South Dakota", density: 98.07 }, - geometry: { - type: "Polygon", - coordinates: [ - [ - [-104.047534, 45.944106], - [-96.560556, 45.933153], - [-96.582464, 45.818137], - [-96.856311, 45.604536], - [-96.681049, 45.412843], - [-96.451017, 45.297827], - [-96.451017, 43.501391], - [-96.582464, 43.479483], - [-96.527695, 43.397329], - [-96.560556, 43.222067], - [-96.434587, 43.123482], - [-96.511264, 43.052282], - [-96.544125, 42.855112], - [-96.631756, 42.707235], - [-96.44554, 42.488157], - [-96.626279, 42.515542], - [-96.692003, 42.657942], - [-97.217789, 42.844158], - [-97.688806, 42.844158], - [-97.831206, 42.866066], - [-97.951699, 42.767481], - [-98.466531, 42.94822], - [-98.499393, 42.997512], - [-101.626726, 42.997512], - [-103.324578, 43.002989], - [-104.053011, 43.002989], - [-104.058488, 44.996596], - [-104.042057, 44.996596], - [-104.047534, 45.944106], - ], - ], - }, - }, - { - type: "Feature", - id: "47", - properties: { name: "Tennessee", density: 88.08 }, - geometry: { - type: "Polygon", - coordinates: [ - [ - [-88.054868, 36.496384], - [-88.071299, 36.677123], - [-87.852221, 36.633308], - [-86.592525, 36.655216], - [-85.486183, 36.616877], - [-85.289013, 36.627831], - [-84.544149, 36.594969], - [-83.689746, 36.584015], - [-83.673316, 36.600446], - [-81.679709, 36.589492], - [-81.723525, 36.353984], - [-81.909741, 36.304691], - [-82.03571, 36.118475], - [-82.216449, 36.156814], - [-82.610789, 35.965121], - [-82.638174, 36.063706], - [-82.775097, 35.997983], - [-82.994175, 35.773428], - [-83.251591, 35.718659], - [-83.498053, 35.565304], - [-83.7719, 35.559827], - [-84.018363, 35.41195], - [-84.09504, 35.247642], - [-84.29221, 35.225734], - [-84.319594, 34.990226], - [-85.606675, 34.984749], - [-87.359296, 35.00118], - [-88.202745, 34.995703], - [-88.471115, 34.995703], - [-90.311367, 34.995703], - [-90.212782, 35.023087], - [-90.114197, 35.198349], - [-90.130628, 35.439335], - [-89.944412, 35.603643], - [-89.911551, 35.756997], - [-89.763673, 35.811767], - [-89.730812, 35.997983], - [-89.533642, 36.249922], - [-89.539119, 36.496384], - [-89.484349, 36.496384], - [-89.418626, 36.496384], - [-89.298133, 36.507338], - [-88.054868, 36.496384], - ], - ], - }, - }, - { - type: "Feature", - id: "48", - properties: { name: "Texas", density: 98.07 }, - geometry: { - type: "Polygon", - coordinates: [ - [ - [-101.812942, 36.501861], - [-100.000075, 36.501861], - [-100.000075, 34.563024], - [-99.923398, 34.573978], - [-99.698843, 34.382285], - [-99.57835, 34.415147], - [-99.260688, 34.404193], - [-99.189488, 34.2125], - [-98.986841, 34.223454], - [-98.767763, 34.135823], - [-98.570593, 34.146777], - [-98.488439, 34.064623], - [-98.36247, 34.157731], - [-98.170777, 34.113915], - [-98.088623, 34.004376], - [-97.946222, 33.987946], - [-97.869545, 33.851022], - [-97.694283, 33.982469], - [-97.458774, 33.905791], - [-97.371143, 33.823637], - [-97.256128, 33.861976], - [-97.173974, 33.736006], - [-96.922034, 33.960561], - [-96.850834, 33.845545], - [-96.631756, 33.845545], - [-96.423633, 33.774345], - [-96.346956, 33.686714], - [-96.149786, 33.840068], - [-95.936185, 33.889361], - [-95.8376, 33.834591], - [-95.602092, 33.933176], - [-95.547322, 33.878407], - [-95.289906, 33.87293], - [-95.224183, 33.960561], - [-94.966767, 33.861976], - [-94.868182, 33.74696], - [-94.484796, 33.637421], - [-94.380734, 33.544313], - [-94.183564, 33.593606], - [-94.041164, 33.54979], - [-94.041164, 33.018527], - [-94.041164, 31.994339], - [-93.822086, 31.775262], - [-93.816609, 31.556184], - [-93.542762, 31.15089], - [-93.526331, 30.93729], - [-93.630393, 30.679874], - [-93.728978, 30.575812], - [-93.696116, 30.438888], - [-93.767317, 30.334826], - [-93.690639, 30.143133], - [-93.926148, 29.787132], - [-93.838517, 29.688547], - [-94.002825, 29.68307], - [-94.523134, 29.546147], - [-94.70935, 29.622824], - [-94.742212, 29.787132], - [-94.873659, 29.672117], - [-94.966767, 29.699501], - [-95.016059, 29.557101], - [-94.911997, 29.496854], - [-94.895566, 29.310638], - [-95.081782, 29.113469], - [-95.383014, 28.867006], - [-95.985477, 28.604113], - [-96.045724, 28.647929], - [-96.226463, 28.582205], - [-96.23194, 28.642452], - [-96.478402, 28.598636], - [-96.593418, 28.724606], - [-96.664618, 28.697221], - [-96.401725, 28.439805], - [-96.593418, 28.357651], - [-96.774157, 28.406943], - [-96.801542, 28.226204], - [-97.026096, 28.039988], - [-97.256128, 27.694941], - [-97.404005, 27.333463], - [-97.513544, 27.360848], - [-97.540929, 27.229401], - [-97.425913, 27.262263], - [-97.480682, 26.99937], - [-97.557359, 26.988416], - [-97.562836, 26.840538], - [-97.469728, 26.758384], - [-97.442344, 26.457153], - [-97.332805, 26.353091], - [-97.30542, 26.161398], - [-97.217789, 25.991613], - [-97.524498, 25.887551], - [-97.650467, 26.018997], - [-97.885976, 26.06829], - [-98.198161, 26.057336], - [-98.466531, 26.221644], - [-98.669178, 26.238075], - [-98.822533, 26.369522], - [-99.030656, 26.413337], - [-99.173057, 26.539307], - [-99.266165, 26.840538], - [-99.446904, 27.021277], - [-99.424996, 27.174632], - [-99.50715, 27.33894], - [-99.479765, 27.48134], - [-99.605735, 27.640172], - [-99.709797, 27.656603], - [-99.879582, 27.799003], - [-99.934351, 27.979742], - [-100.082229, 28.14405], - [-100.29583, 28.280974], - [-100.399891, 28.582205], - [-100.498476, 28.66436], - [-100.629923, 28.905345], - [-100.673738, 29.102515], - [-100.799708, 29.244915], - [-101.013309, 29.370885], - [-101.062601, 29.458516], - [-101.259771, 29.535193], - [-101.413125, 29.754271], - [-101.851281, 29.803563], - [-102.114174, 29.792609], - [-102.338728, 29.869286], - [-102.388021, 29.765225], - [-102.629006, 29.732363], - [-102.809745, 29.524239], - [-102.919284, 29.190146], - [-102.97953, 29.184669], - [-103.116454, 28.987499], - [-103.280762, 28.982022], - [-103.527224, 29.135376], - [-104.146119, 29.381839], - [-104.266611, 29.513285], - [-104.507597, 29.639255], - [-104.677382, 29.924056], - [-104.688336, 30.181472], - [-104.858121, 30.389596], - [-104.896459, 30.570335], - [-105.005998, 30.685351], - [-105.394861, 30.855136], - [-105.602985, 31.085167], - [-105.77277, 31.167321], - [-105.953509, 31.364491], - [-106.205448, 31.468553], - [-106.38071, 31.731446], - [-106.528588, 31.786216], - [-106.643603, 31.901231], - [-106.616219, 31.999816], - [-103.067161, 31.999816], - [-103.067161, 33.002096], - [-103.045254, 34.01533], - [-103.039777, 36.501861], - [-103.001438, 36.501861], - [-101.812942, 36.501861], - ], - ], - }, - }, - { - type: "Feature", - id: "49", - properties: { name: "Utah", density: 34.3 }, - geometry: { - type: "Polygon", - coordinates: [ - [ - [-112.164359, 41.995232], - [-111.047063, 42.000709], - [-111.047063, 40.998429], - [-109.04798, 40.998429], - [-109.053457, 39.125316], - [-109.058934, 38.27639], - [-109.042503, 38.166851], - [-109.042503, 37.000263], - [-110.499369, 37.00574], - [-114.048427, 37.000263], - [-114.04295, 41.995232], - [-112.164359, 41.995232], - ], - ], - }, - }, - { - type: "Feature", - id: "50", - properties: { name: "Vermont", density: 67.73 }, - geometry: { - type: "Polygon", - coordinates: [ - [ - [-71.503554, 45.013027], - [-71.4926, 44.914442], - [-71.629524, 44.750133], - [-71.536416, 44.585825], - [-71.700724, 44.41604], - [-72.034817, 44.322932], - [-72.02934, 44.07647], - [-72.116971, 43.994316], - [-72.204602, 43.769761], - [-72.379864, 43.572591], - [-72.456542, 43.150867], - [-72.445588, 43.008466], - [-72.533219, 42.953697], - [-72.544173, 42.80582], - [-72.456542, 42.729142], - [-73.267129, 42.745573], - [-73.278083, 42.833204], - [-73.245221, 43.523299], - [-73.404052, 43.687607], - [-73.349283, 43.769761], - [-73.436914, 44.043608], - [-73.321898, 44.246255], - [-73.294514, 44.437948], - [-73.387622, 44.618687], - [-73.332852, 44.804903], - [-73.343806, 45.013027], - [-72.308664, 45.002073], - [-71.503554, 45.013027], - ], - ], - }, - }, - { - type: "Feature", - id: "51", - properties: { name: "Virginia", density: 204.5 }, - geometry: { - type: "MultiPolygon", - coordinates: [ - [ - [ - [-75.397659, 38.013497], - [-75.244304, 38.029928], - [-75.375751, 37.860142], - [-75.512674, 37.799896], - [-75.594828, 37.569865], - [-75.802952, 37.197433], - [-75.972737, 37.120755], - [-76.027507, 37.257679], - [-75.939876, 37.564388], - [-75.671506, 37.95325], - [-75.397659, 38.013497], - ], - ], - [ - [ - [-76.016553, 37.95325], - [-75.994645, 37.95325], - [-76.043938, 37.95325], - [-76.016553, 37.95325], - ], - ], - [ - [ - [-78.349729, 39.464886], - [-77.82942, 39.130793], - [-77.719881, 39.322485], - [-77.566527, 39.306055], - [-77.456988, 39.223901], - [-77.456988, 39.076023], - [-77.248864, 39.026731], - [-77.117418, 38.933623], - [-77.040741, 38.791222], - [-77.128372, 38.632391], - [-77.248864, 38.588575], - [-77.325542, 38.446175], - [-77.281726, 38.342113], - [-77.013356, 38.374975], - [-76.964064, 38.216144], - [-76.613539, 38.15042], - [-76.514954, 38.024451], - [-76.235631, 37.887527], - [-76.3616, 37.608203], - [-76.246584, 37.389126], - [-76.383508, 37.285064], - [-76.399939, 37.159094], - [-76.273969, 37.082417], - [-76.410893, 36.961924], - [-76.619016, 37.120755], - [-76.668309, 37.065986], - [-76.48757, 36.95097], - [-75.994645, 36.923586], - [-75.868676, 36.551154], - [-79.510841, 36.5402], - [-80.294043, 36.545677], - [-80.978661, 36.562108], - [-81.679709, 36.589492], - [-83.673316, 36.600446], - [-83.136575, 36.742847], - [-83.070852, 36.852385], - [-82.879159, 36.890724], - [-82.868205, 36.978355], - [-82.720328, 37.044078], - [-82.720328, 37.120755], - [-82.353373, 37.268633], - [-81.969987, 37.537003], - [-81.986418, 37.454849], - [-81.849494, 37.285064], - [-81.679709, 37.20291], - [-81.55374, 37.208387], - [-81.362047, 37.339833], - [-81.225123, 37.235771], - [-80.967707, 37.290541], - [-80.513121, 37.482234], - [-80.474782, 37.421987], - [-80.29952, 37.509618], - [-80.294043, 37.690357], - [-80.184505, 37.849189], - [-79.998289, 37.997066], - [-79.921611, 38.177805], - [-79.724442, 38.364021], - [-79.647764, 38.594052], - [-79.477979, 38.457129], - [-79.313671, 38.413313], - [-79.209609, 38.495467], - [-78.996008, 38.851469], - [-78.870039, 38.763838], - [-78.404499, 39.169131], - [-78.349729, 39.464886], - ], - ], - ], - }, - }, - { - type: "Feature", - id: "53", - properties: { name: "Washington", density: 102.6 }, - geometry: { - type: "MultiPolygon", - coordinates: [ - [ - [ - [-117.033359, 49.000239], - [-117.044313, 47.762451], - [-117.038836, 46.426077], - [-117.055267, 46.343923], - [-116.92382, 46.168661], - [-116.918344, 45.993399], - [-118.988627, 45.998876], - [-119.125551, 45.933153], - [-119.525367, 45.911245], - [-119.963522, 45.823614], - [-120.209985, 45.725029], - [-120.505739, 45.697644], - [-120.637186, 45.746937], - [-121.18488, 45.604536], - [-121.217742, 45.670259], - [-121.535404, 45.725029], - [-121.809251, 45.708598], - [-122.247407, 45.549767], - [-122.762239, 45.659305], - [-122.811531, 45.960537], - [-122.904639, 46.08103], - [-123.11824, 46.185092], - [-123.211348, 46.174138], - [-123.370179, 46.146753], - [-123.545441, 46.261769], - [-123.72618, 46.300108], - [-123.874058, 46.239861], - [-124.065751, 46.327492], - [-124.027412, 46.464416], - [-123.895966, 46.535616], - [-124.098612, 46.74374], - [-124.235536, 47.285957], - [-124.31769, 47.357157], - [-124.427229, 47.740543], - [-124.624399, 47.88842], - [-124.706553, 48.184175], - [-124.597014, 48.381345], - [-124.394367, 48.288237], - [-123.983597, 48.162267], - [-123.704273, 48.167744], - [-123.424949, 48.118452], - [-123.162056, 48.167744], - [-123.036086, 48.080113], - [-122.800578, 48.08559], - [-122.636269, 47.866512], - [-122.515777, 47.882943], - [-122.493869, 47.587189], - [-122.422669, 47.318818], - [-122.324084, 47.346203], - [-122.422669, 47.576235], - [-122.395284, 47.800789], - [-122.230976, 48.030821], - [-122.362422, 48.123929], - [-122.373376, 48.288237], - [-122.471961, 48.468976], - [-122.422669, 48.600422], - [-122.488392, 48.753777], - [-122.647223, 48.775685], - [-122.795101, 48.8907], - [-122.756762, 49.000239], - [-117.033359, 49.000239], - ], - ], - [ - [ - [-122.718423, 48.310145], - [-122.586977, 48.35396], - [-122.608885, 48.151313], - [-122.767716, 48.227991], - [-122.718423, 48.310145], - ], - ], - [ - [ - [-123.025132, 48.583992], - [-122.915593, 48.715438], - [-122.767716, 48.556607], - [-122.811531, 48.419683], - [-123.041563, 48.458022], - [-123.025132, 48.583992], - ], - ], - ], - }, - }, - { - type: "Feature", - id: "54", - properties: { name: "West Virginia", density: 77.06 }, - geometry: { - type: "Polygon", - coordinates: [ - [ - [-80.518598, 40.636951], - [-80.518598, 39.722302], - [-79.477979, 39.722302], - [-79.488933, 39.20747], - [-79.291763, 39.300578], - [-79.094593, 39.470363], - [-78.963147, 39.437501], - [-78.765977, 39.585379], - [-78.470222, 39.514178], - [-78.431884, 39.623717], - [-78.267575, 39.61824], - [-78.174467, 39.694917], - [-78.004682, 39.601809], - [-77.834897, 39.601809], - [-77.719881, 39.322485], - [-77.82942, 39.130793], - [-78.349729, 39.464886], - [-78.404499, 39.169131], - [-78.870039, 38.763838], - [-78.996008, 38.851469], - [-79.209609, 38.495467], - [-79.313671, 38.413313], - [-79.477979, 38.457129], - [-79.647764, 38.594052], - [-79.724442, 38.364021], - [-79.921611, 38.177805], - [-79.998289, 37.997066], - [-80.184505, 37.849189], - [-80.294043, 37.690357], - [-80.29952, 37.509618], - [-80.474782, 37.421987], - [-80.513121, 37.482234], - [-80.967707, 37.290541], - [-81.225123, 37.235771], - [-81.362047, 37.339833], - [-81.55374, 37.208387], - [-81.679709, 37.20291], - [-81.849494, 37.285064], - [-81.986418, 37.454849], - [-81.969987, 37.537003], - [-82.101434, 37.553434], - [-82.293127, 37.668449], - [-82.342419, 37.783465], - [-82.50125, 37.931343], - [-82.621743, 38.123036], - [-82.594358, 38.424267], - [-82.331465, 38.446175], - [-82.293127, 38.577622], - [-82.172634, 38.632391], - [-82.221926, 38.785745], - [-82.03571, 39.026731], - [-81.887833, 38.873376], - [-81.783771, 38.966484], - [-81.811156, 39.0815], - [-81.685186, 39.273193], - [-81.57017, 39.267716], - [-81.455155, 39.410117], - [-81.345616, 39.344393], - [-81.219646, 39.388209], - [-80.830783, 39.711348], - [-80.737675, 40.078303], - [-80.600752, 40.319289], - [-80.595275, 40.472643], - [-80.666475, 40.582182], - [-80.518598, 40.636951], - ], - ], - }, - }, - { - type: "Feature", - id: "55", - properties: { name: "Wisconsin", density: 105.2 }, - geometry: { - type: "Polygon", - coordinates: [ - [ - [-90.415429, 46.568478], - [-90.229213, 46.508231], - [-90.119674, 46.338446], - [-89.09001, 46.135799], - [-88.662808, 45.987922], - [-88.531362, 46.020784], - [-88.10416, 45.922199], - [-87.989145, 45.796229], - [-87.781021, 45.675736], - [-87.791975, 45.500474], - [-87.885083, 45.363551], - [-87.649574, 45.341643], - [-87.742682, 45.199243], - [-87.589328, 45.095181], - [-87.627666, 44.974688], - [-87.819359, 44.95278], - [-87.983668, 44.722749], - [-88.043914, 44.563917], - [-87.928898, 44.536533], - [-87.775544, 44.640595], - [-87.611236, 44.837764], - [-87.403112, 44.914442], - [-87.238804, 45.166381], - [-87.03068, 45.22115], - [-87.047111, 45.089704], - [-87.189511, 44.969211], - [-87.468835, 44.552964], - [-87.545512, 44.322932], - [-87.540035, 44.158624], - [-87.644097, 44.103854], - [-87.737205, 43.8793], - [-87.704344, 43.687607], - [-87.791975, 43.561637], - [-87.912467, 43.249452], - [-87.885083, 43.002989], - [-87.76459, 42.783912], - [-87.802929, 42.493634], - [-88.788778, 42.493634], - [-90.639984, 42.510065], - [-90.711184, 42.636034], - [-91.067185, 42.75105], - [-91.143862, 42.909881], - [-91.176724, 43.134436], - [-91.056231, 43.254929], - [-91.204109, 43.353514], - [-91.215062, 43.501391], - [-91.269832, 43.616407], - [-91.242447, 43.775238], - [-91.43414, 43.994316], - [-91.592971, 44.032654], - [-91.877772, 44.202439], - [-91.927065, 44.333886], - [-92.233773, 44.443425], - [-92.337835, 44.552964], - [-92.545959, 44.569394], - [-92.808852, 44.750133], - [-92.737652, 45.117088], - [-92.75956, 45.286874], - [-92.644544, 45.440228], - [-92.770513, 45.566198], - [-92.885529, 45.577151], - [-92.869098, 45.719552], - [-92.639067, 45.933153], - [-92.354266, 46.015307], - [-92.29402, 46.075553], - [-92.29402, 46.667063], - [-92.091373, 46.749217], - [-92.014696, 46.705401], - [-91.790141, 46.694447], - [-91.09457, 46.864232], - [-90.837154, 46.95734], - [-90.749522, 46.88614], - [-90.886446, 46.754694], - [-90.55783, 46.584908], - [-90.415429, 46.568478], - ], - ], - }, - }, - { - type: "Feature", - id: "56", - properties: { name: "Wyoming", density: 5.851 }, - geometry: { - type: "Polygon", - coordinates: [ - [ - [-109.080842, 45.002073], - [-105.91517, 45.002073], - [-104.058488, 44.996596], - [-104.053011, 43.002989], - [-104.053011, 41.003906], - [-105.728954, 40.998429], - [-107.919731, 41.003906], - [-109.04798, 40.998429], - [-111.047063, 40.998429], - [-111.047063, 42.000709], - [-111.047063, 44.476286], - [-111.05254, 45.002073], - [-109.080842, 45.002073], - ], - ], - }, - }, - { - type: "Feature", - id: "72", - properties: { name: "Puerto Rico", density: 1082 }, - geometry: { - type: "Polygon", - coordinates: [ - [ - [-66.448338, 17.984326], - [-66.771478, 18.006234], - [-66.924832, 17.929556], - [-66.985078, 17.973372], - [-67.209633, 17.956941], - [-67.154863, 18.19245], - [-67.269879, 18.362235], - [-67.094617, 18.515589], - [-66.957694, 18.488204], - [-66.409999, 18.488204], - [-65.840398, 18.433435], - [-65.632274, 18.367712], - [-65.626797, 18.203403], - [-65.730859, 18.186973], - [-65.834921, 18.017187], - [-66.234737, 17.929556], - [-66.448338, 17.984326], - ], - ], - }, - }, - ], -}; diff --git a/tugas/04/index.php b/tugas/04/index.php deleted file mode 100644 index f9fdbf0..0000000 --- a/tugas/04/index.php +++ /dev/null @@ -1,750 +0,0 @@ -query("INSERT INTO spbu (nama_spbu, nomor_wa, buka_24_jam, latitude, longitude) - VALUES ('$nama','$wa','$buka','$lat','$lng')"); - exit("success"); -} - -// HANDLE DELETE -if(isset($_POST['delete_id'])){ - $id = intval($_POST['delete_id']); - $conn->query("DELETE FROM spbu WHERE id = $id"); - exit("deleted"); -} - -// HANDLE MOVE (update lat/lng) -if(isset($_POST['move_id'])){ - $id = intval($_POST['move_id']); - $lat = $_POST['move_lat']; - $lng = $_POST['move_lng']; - $conn->query("UPDATE spbu SET latitude='$lat', longitude='$lng' WHERE id=$id"); - exit("moved"); -} - -// HANDLE GET DATA -if(isset($_GET['get'])){ - $result = $conn->query("SELECT * FROM spbu"); - $data = []; - while($row = $result->fetch_assoc()){ - $data[] = $row; - } - echo json_encode($data); - exit; -} -?> - - - - - - -SPBU Map — Pontianak - - - - - - - - - - - -
- - - -
-

Keterangan

-
Buka 24 Jam
-
Tidak 24 Jam
-
- -
-
- Klik peta untuk tambah SPBU -
- -
-
- -
- - - - - \ No newline at end of file diff --git a/tugas/04/spbu_map.sql b/tugas/04/spbu_map.sql deleted file mode 100644 index 3fde2f1..0000000 --- a/tugas/04/spbu_map.sql +++ /dev/null @@ -1,25 +0,0 @@ --- ============================================================ --- Database: spbu_map --- Digunakan oleh: tugas/01 dan tugas/04 --- ============================================================ - -CREATE DATABASE IF NOT EXISTS spbu_map - CHARACTER SET utf8mb4 - COLLATE utf8mb4_unicode_ci; - -USE spbu_map; - -CREATE TABLE IF NOT EXISTS spbu ( - id INT(11) NOT NULL AUTO_INCREMENT, - nama_spbu VARCHAR(255) NOT NULL, - nomor_wa VARCHAR(20) NOT NULL, - buka_24_jam TINYINT(1) NOT NULL DEFAULT 0, - latitude DECIMAL(10,7) NOT NULL, - longitude DECIMAL(10,7) NOT NULL, - PRIMARY KEY (id) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - --- Data contoh -INSERT INTO spbu (nama_spbu, nomor_wa, buka_24_jam, latitude, longitude) VALUES - ('SPBU Pertamina Sungai Raya', '6281234567890', 1, -0.0553800, 109.3494700), - ('SPBU Pertamina Ahmad Yani', '6289876543210', 0, -0.0621000, 109.3420000); diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 0000000..9ffcc67 --- /dev/null +++ b/vite.config.js @@ -0,0 +1,6 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +export default defineConfig({ + plugins: [react()], +}) diff --git a/webgis-portal.sql b/webgis-portal.sql new file mode 100644 index 0000000..e006359 --- /dev/null +++ b/webgis-portal.sql @@ -0,0 +1,209 @@ +-- ============================================================ +-- WebGIS Portal — Combined Database Schema +-- Covers: Project 01 (SPBU Map), 02 (WebGIS Jalan & Tanah), +-- 03 (Kepadatan Penduduk — reference), 04 (SPBU + Layer) +-- +-- Usage: +-- mysql -u root -p < webgis-portal.sql +-- ============================================================ + +-- ============================================================ +-- 1. spbu_map — used by Project 01 and Project 04 +-- ============================================================ + +CREATE DATABASE IF NOT EXISTS spbu_map + CHARACTER SET utf8mb4 + COLLATE utf8mb4_unicode_ci; + +USE spbu_map; + +DROP TABLE IF EXISTS spbu; + +CREATE TABLE spbu ( + id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, + nama_spbu VARCHAR(200) NOT NULL, + nomor_wa VARCHAR(20) NOT NULL DEFAULT '', + buka_24_jam TINYINT(1) NOT NULL DEFAULT 0 + COMMENT '1 = buka 24 jam, 0 = tidak buka 24 jam', + latitude DECIMAL(10, 7) NOT NULL, + longitude DECIMAL(10, 7) NOT NULL, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP + ON UPDATE CURRENT_TIMESTAMP, + + INDEX idx_buka (buka_24_jam), + INDEX idx_coords (latitude, longitude) +) ENGINE = InnoDB + DEFAULT CHARSET = utf8mb4 + COLLATE = utf8mb4_unicode_ci; + +-- Sample data — SPBU di area Pontianak +INSERT INTO spbu (nama_spbu, nomor_wa, buka_24_jam, latitude, longitude) VALUES + ('Pertamina Ahmad Yani', '6281234567890', 1, -0.0500000, 109.3450000), + ('Pertamina Sungai Raya', '6281234567891', 0, -0.0870000, 109.3620000), + ('Shell Pontianak Tengah', '6281234567892', 1, -0.0320000, 109.3300000), + ('Pertamina Tanjung Raya', '6281234567893', 0, -0.0130000, 109.3550000), + ('Vivo Khatulistiwa', '6281234567894', 1, 0.0020000, 109.3280000), + ('Pertamina Khatulistiwa', '6281234567895', 0, -0.0650000, 109.3400000), + ('SPBU Gajah Mada', '6281234567896', 1, -0.0210000, 109.3350000); + + +-- ============================================================ +-- 2. webgis_db — used by Project 02 (Jalan & Tanah) +-- ============================================================ + +CREATE DATABASE IF NOT EXISTS webgis_db + CHARACTER SET utf8mb4 + COLLATE utf8mb4_unicode_ci; + +USE webgis_db; + +-- ── 2a. Jalan (polylines) ────────────────────────────────── + +DROP TABLE IF EXISTS jalan; + +CREATE TABLE jalan ( + id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, + nama_jalan VARCHAR(200) NOT NULL, + status_jalan ENUM('Nasional','Provinsi','Kabupaten') + NOT NULL DEFAULT 'Kabupaten', + panjang_meter DECIMAL(12, 2) NOT NULL DEFAULT 0.00 + COMMENT 'Panjang jalan dalam meter, dihitung otomatis', + geojson MEDIUMTEXT NOT NULL + COMMENT 'GeoJSON LineString geometry (WGS84)', + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP + ON UPDATE CURRENT_TIMESTAMP, + + INDEX idx_status (status_jalan) +) ENGINE = InnoDB + DEFAULT CHARSET = utf8mb4 + COLLATE = utf8mb4_unicode_ci; + +-- Sample jalan data +INSERT INTO jalan (nama_jalan, status_jalan, panjang_meter, geojson) VALUES +( + 'Jl. Ahmad Yani', + 'Nasional', + 4200.00, + '{"type":"LineString","coordinates":[[109.325,-0.045],[109.330,-0.042],[109.335,-0.038],[109.340,-0.034],[109.345,-0.030]]}' +), +( + 'Jl. Gajah Mada', + 'Provinsi', + 2800.00, + '{"type":"LineString","coordinates":[[109.330,-0.020],[109.333,-0.018],[109.336,-0.016],[109.340,-0.014]]}' +), +( + 'Jl. Teuku Umar', + 'Kabupaten', + 1900.00, + '{"type":"LineString","coordinates":[[109.315,-0.055],[109.318,-0.052],[109.322,-0.050],[109.326,-0.048]]}' +), +( + 'Jl. Sultan Abdurrahman', + 'Provinsi', + 3300.00, + '{"type":"LineString","coordinates":[[109.320,-0.028],[109.323,-0.025],[109.327,-0.022],[109.331,-0.019]]}' +), +( + 'Jl. Tanjungpura', + 'Nasional', + 5100.00, + '{"type":"LineString","coordinates":[[109.310,-0.035],[109.315,-0.033],[109.320,-0.031],[109.326,-0.029],[109.333,-0.027]]}' +); + +-- ── 2b. Parsil Tanah (polygons) ──────────────────────────── + +DROP TABLE IF EXISTS parsil_tanah; + +CREATE TABLE parsil_tanah ( + id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, + nama_parsil VARCHAR(200) NOT NULL, + status_kepemilikan ENUM('SHM','HGB','HGU','HP') + NOT NULL DEFAULT 'SHM', + luas_m2 DECIMAL(14, 2) NOT NULL DEFAULT 0.00 + COMMENT 'Luas parsil dalam meter persegi, dihitung otomatis', + geojson MEDIUMTEXT NOT NULL + COMMENT 'GeoJSON Polygon geometry (WGS84)', + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP + ON UPDATE CURRENT_TIMESTAMP, + + INDEX idx_status (status_kepemilikan) +) ENGINE = InnoDB + DEFAULT CHARSET = utf8mb4 + COLLATE = utf8mb4_unicode_ci; + +-- Sample parsil data +INSERT INTO parsil_tanah (nama_parsil, status_kepemilikan, luas_m2, geojson) VALUES +( + 'Kavling A-01', + 'SHM', + 2400.00, + '{"type":"Polygon","coordinates":[[[109.328,-0.038],[109.330,-0.038],[109.330,-0.040],[109.328,-0.040],[109.328,-0.038]]]}' +), +( + 'Kavling B-03', + 'HGB', + 3100.00, + '{"type":"Polygon","coordinates":[[[109.340,-0.025],[109.343,-0.025],[109.343,-0.028],[109.340,-0.028],[109.340,-0.025]]]}' +), +( + 'Kavling C-07', + 'HGU', + 4800.00, + '{"type":"Polygon","coordinates":[[[109.318,-0.050],[109.322,-0.050],[109.322,-0.054],[109.318,-0.054],[109.318,-0.050]]]}' +), +( + 'Kavling D-02', + 'HP', + 1750.00, + '{"type":"Polygon","coordinates":[[[109.335,-0.016],[109.337,-0.016],[109.337,-0.018],[109.335,-0.018],[109.335,-0.016]]]}' +); + + +-- ============================================================ +-- 3. kepadatan_db — reference for Project 03 +-- (geometry is embedded statically in the front-end via +-- UTM reprojection; this table stores the attribute data) +-- ============================================================ + +CREATE DATABASE IF NOT EXISTS kepadatan_db + CHARACTER SET utf8mb4 + COLLATE utf8mb4_unicode_ci; + +USE kepadatan_db; + +DROP TABLE IF EXISTS kecamatan; + +CREATE TABLE kecamatan ( + id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, + nama VARCHAR(100) NOT NULL, + density DECIMAL(6, 3) NOT NULL + COMMENT 'Kepadatan penduduk: ribu jiwa per km²', + color_class ENUM('rendah','sedang','tinggi') + NOT NULL + COMMENT 'rendah ≤5, sedang 5-7, tinggi >7', + geojson MEDIUMTEXT NOT NULL DEFAULT '' + COMMENT 'GeoJSON Polygon geometry (WGS84); populasi via front-end UTM reprojection', + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + + INDEX idx_class (color_class) +) ENGINE = InnoDB + DEFAULT CHARSET = utf8mb4 + COLLATE = utf8mb4_unicode_ci; + +-- Data kepadatan dari BPS Kota Pontianak +INSERT INTO kecamatan (nama, density, color_class) VALUES + ('Pontianak Selatan', 5.673, 'sedang'), + ('Pontianak Utara', 3.642, 'rendah'), + ('Pontianak Timur', 9.196, 'tinggi'), + ('Pontianak Tenggara', 3.103, 'rendah'), + ('Pontianak Kota', 8.102, 'tinggi'), + ('Pontianak Barat', 9.331, 'tinggi'); + + +-- ============================================================ +-- End of schema +-- ============================================================