|
1 | | -# 🏠 Negev Shelter Access Analysis |
| 1 | +# Negev Shelter Access Analysis |
2 | 2 |
|
3 | | -A real-time web-based tool for analyzing and optimizing shelter accessibility for Bedouin communities in the Negev region. This application provides instant feedback on optimal shelter placement using precalculated DBSCAN clustering and greedy optimization algorithms. The tool was covered in an [article](https://www.ynet.co.il/architecture/article/ry9tp9gtxe) by Yediot Ahronot. |
| 3 | +Interactive map for analyzing bomb shelter accessibility for Bedouin communities in the Eastern Negev. The app identifies underserved areas and proposes optimal new shelter locations using precomputed DBSCAN + K-means clustering. Covered in [Yediot Ahronot / Ynet](https://www.ynet.co.il/architecture/article/ry9tp9gtxe). |
4 | 4 |
|
| 5 | +**Live demo:** [negevurbanresearch.github.io/shelter_access](https://negevurbanresearch.github.io/shelter_access/) |
5 | 6 |
|
6 | | -## 📊 Data & Analysis |
| 7 | +## How to cite |
7 | 8 |
|
8 | | -### **Input Data** |
9 | | -- **📍 Shelters**: |
10 | | - - Distributed mobile shelter locations and permanent shelters in educational institutes supplied by [Eshkol Negev Mizrach](https://eastnegev.org/) |
11 | | - - Other formal and informal shelter locations collected by [Bimkom](https://bimkom.org/eng/home-mobile/) field workers and through community submissions, including requests for shelters by community members |
12 | | -- **🏘️ Buildings**: Footprint data from [MS Planetary Computer](https://planetarycomputer.microsoft.com/) |
| 9 | +If you use this software or its methods, please cite it. GitHub also exposes citation metadata via the **Cite this repository** button (from [`CITATION.cff`](./CITATION.cff)). |
13 | 10 |
|
14 | | -## 🛠️ Technical Architecture |
| 11 | +After the first Zenodo-archived release, replace the placeholder below with the minted DOI. |
15 | 12 |
|
16 | | -### **Frontend Stack (JS)** |
17 | | -- **deck.gl**: High-performance WebGL visualization |
18 | | -- **Turf.js**: Spatial operations (buffering, distance calculations) |
19 | | -- **Vanilla JavaScript**: No framework dependencies |
20 | | -- **Real-time data loading**: JSON files with precalculated results for quick updates |
| 13 | +```bibtex |
| 14 | +@software{gal_negev_shelter_access_2026, |
| 15 | + author = {Gal, Noam J. and Nikitin, Artem and Drogochinsky, Michael and Cohen, Yonatan and Battat, Merav and Kaufmann, Talia and Noyman, Ariel}, |
| 16 | + title = {Negev Shelter Access Analysis}, |
| 17 | + year = {2026}, |
| 18 | + version = {1.0.0}, |
| 19 | + url = {https://github.com/NegevUrbanResearch/shelter_access}, |
| 20 | + note = {DOI to be added after Zenodo archive} |
| 21 | +} |
| 22 | +``` |
| 23 | + |
| 24 | +## License |
| 25 | + |
| 26 | +This project is released under the [MIT License](./LICENSE). |
| 27 | + |
| 28 | +## Authors |
| 29 | + |
| 30 | +1. **Noam J. Gal** (corresponding) — Department of Geography, The Hebrew University of Jerusalem |
| 31 | +2. **Artem Nikitin** — The Center for Urban Innovation, The Hebrew University of Jerusalem |
| 32 | +3. **Michael Drogochinsky** — The Center for Urban Innovation, The Hebrew University of Jerusalem |
| 33 | +4. **Yonatan Cohen** — Negev Urban Research Lab, Ben Gurion University |
| 34 | +5. **Merav Battat** — Negev Urban Research Lab, Ben Gurion University |
| 35 | +6. **Talia Kaufmann** — The Center for Urban Innovation, The Hebrew University of Jerusalem |
| 36 | +7. **Ariel Noyman** — Media Lab, Massachusetts Institute of Technology |
| 37 | + |
| 38 | +Project partners also include [Bimkom](https://bimkom.org/eng/home-mobile/) and East Negev / Civix. |
| 39 | + |
| 40 | +## Data & analysis |
| 41 | + |
| 42 | +### Input data |
| 43 | + |
| 44 | +- **Shelters** |
| 45 | + - Distributed mobile shelters and permanent shelters in educational institutes from [Eshkol Negev Mizrach](https://eastnegev.org/) |
| 46 | + - Formal and informal shelter locations collected by [Bimkom](https://bimkom.org/eng/home-mobile/) field workers and community submissions |
| 47 | +- **Buildings**: footprints from [MS Planetary Computer](https://planetarycomputer.microsoft.com/) |
| 48 | + |
| 49 | +Precomputed optimizer outputs ship under `data/optimal_locations/`. Building and administrative GeoJSON used by the map are included in `data/`. |
| 50 | + |
| 51 | +### Site optimization algorithm (Python) |
| 52 | + |
| 53 | +`scripts/shelter_optimizer_ensemble.py` runs an offline DBSCAN + K-means ensemble: |
| 54 | + |
| 55 | +1. **DBSCAN**: natural building clusters across 10 `eps` multipliers (0.1–1.0) relative to coverage radius |
| 56 | +2. **K-means**: systematic centroids at `k=750` and `k=1500` (2 seeds each) |
| 57 | +3. **Selection**: choose non-overlapping candidates that maximize coverage, accounting for existing shelters |
| 58 | + |
| 59 | +Assumptions encoded in the optimizer include ~7 people per building footprint and a 500-shelter planning target (see constants at the top of the script). |
21 | 60 |
|
22 | | -### **Site Optimization Algorithm (Python)** |
23 | | -```python |
24 | | -DBSCAN + Kmeans Ensemble in shelter_optimizer.py |
| 61 | +## Quick start (web app) |
25 | 62 |
|
26 | | -Algorithm: |
27 | | -1. DBSCAN Clustering: Find natural building clusters using 10 eps values (0.1-1.0) |
28 | | -2. K-means Clustering: Find systematic centroids using k=750,1500 with 2 seeds each |
29 | | -3. Combined Analysis: Calculate centroids and coverage for each cluster |
30 | | -4. Optimal Selection: Choose clusters with most that maximize coverage while ensuring clusters don't overlap |
| 63 | +```bash |
| 64 | +npm install |
| 65 | +npm start |
| 66 | +``` |
| 67 | + |
| 68 | +Then open [http://localhost:3000](http://localhost:3000). For a live-reload server: `npm run dev`. |
| 69 | + |
| 70 | +The site is static (HTML/CSS/JS + GeoJSON). No backend is required at runtime. |
| 71 | + |
| 72 | +## Reproducing the analysis (Python) |
31 | 73 |
|
| 74 | +Scripts under `scripts/` are one-off preprocessing jobs; outputs are already stored in `data/`. Re-run only when updating source assets. |
| 75 | + |
| 76 | +```bash |
| 77 | +python -m pip install -r requirements.txt |
| 78 | +python scripts/shelter_optimizer_ensemble.py |
32 | 79 | ``` |
33 | | -## Deployment |
34 | | -Deployed through Github Pages at [https://negevurbanresearch.github.io/shelter_access/](https://negevurbanresearch.github.io/shelter_access/) |
35 | 80 |
|
36 | | -## 📁 Project Structure |
| 81 | +Other utilities: |
| 82 | + |
| 83 | +| Script | Role | |
| 84 | +|---|---| |
| 85 | +| `shelter_optimizer_ensemble.py` | DBSCAN + K-means shelter siting | |
| 86 | +| `create_lightweight_data.py` | Lightweight buildings GeoJSON for the map | |
| 87 | +| `calculate_accessibility_heatmap.py` | Accessibility heatmap JSON | |
| 88 | +| `generate_shelter_statistics.py` | Summary charts (writes to `output/`) | |
| 89 | +| `filter_geospatial_data.py` | Spatial filters for study area | |
| 90 | +| `simplify_statistical_areas.py` | Simplify statistical-area polygons | |
| 91 | + |
| 92 | +### Alert analysis submodule |
| 93 | + |
| 94 | +`alert-analysis/` scrapes and filters historical rocket-alert places. Large alert GeoJSON files are gitignored; regenerate with the Node export/filter scripts documented in [`alert-analysis/README.md`](./alert-analysis/README.md). |
| 95 | + |
| 96 | +## Technical architecture |
| 97 | + |
| 98 | +| Layer | Stack | |
| 99 | +|---|---| |
| 100 | +| Visualization | deck.gl (WebGL), Turf.js, vanilla JS | |
| 101 | +| Analysis | Python (`numpy`, `scikit-learn`, `geopandas`, `shapely`) | |
| 102 | +| Deploy | GitHub Pages (static site) | |
| 103 | + |
| 104 | +## Project structure |
37 | 105 |
|
38 | 106 | ``` |
39 | 107 | shelter_access/ |
40 | | -├── index.html # Main application |
41 | | -├── css/styles.css # Styling with new color scheme |
| 108 | +├── index.html # Main application |
| 109 | +├── css/styles.css |
42 | 110 | ├── js/ |
43 | | -│ ├── spatial-analysis-simple.js # Data loading & analysis logic |
44 | | -│ └── app.js # Real-time UI controller |
45 | | -├── data/ |
46 | | -│ ├── buildings_light.geojson # Building footprints (lightweight) |
47 | | -│ ├── shelters.geojson # Existing + requested shelter |
48 | | -│ └── optimal_locations/ # Precalculated optimization results |
49 | | -├── scripts/ # all scripts should be run only once and outputs are already stored in data folder, only use if needed to update data assets |
50 | | -│ ├── shelter_optimizer.py # DBSCAN + KMeans Ensemble |
51 | | -│ ├── convert_to_geojson.py # Shapefile conversion |
52 | | -│ └── create_lightweight_data.py # Data preprocessing |
53 | | -└── README.md |
| 111 | +│ ├── app.js # UI / map controller |
| 112 | +│ └── spatial-analysis-simple.js |
| 113 | +├── data/ # GeoJSON + precomputed optimizer outputs |
| 114 | +├── scripts/ # Offline Python analysis (run once to refresh data) |
| 115 | +├── alert-analysis/ # Optional alert scrape / filter tooling |
| 116 | +├── CITATION.cff # Citation metadata (GitHub + Zenodo) |
| 117 | +├── LICENSE # MIT |
| 118 | +├── requirements.txt # Python deps for scripts/ |
| 119 | +└── package.json |
54 | 120 | ``` |
55 | 121 |
|
| 122 | +## Zenodo archive |
| 123 | + |
| 124 | +To mint a DOI via GitHub ↔ Zenodo: |
| 125 | + |
| 126 | +1. Merge this citation-ready metadata to `main`. |
| 127 | +2. On [Zenodo](https://zenodo.org/), enable GitHub integration for `NegevUrbanResearch/shelter_access`. |
| 128 | +3. Create a GitHub Release (e.g. tag `v1.0.0`). Zenodo will archive the release and mint a DOI, using fields from `CITATION.cff`. |
| 129 | +4. Add the DOI under `identifiers` in `CITATION.cff` and update the BibTeX block above (and optionally a DOI badge in this README). |
| 130 | + |
| 131 | +Do **not** add a competing `.zenodo.json` unless you need Zenodo-only fields; if both exist, Zenodo prefers `.zenodo.json` and ignores `CITATION.cff` for deposit metadata. |
0 commit comments