Core spatial analytics, spatial statistics, and urban resilience engines for the PlanX ecosystem.
Project description
PlanX SDK (Software Development Kit)
PlanX QGIS eklenti ekosisteminin çekirdek mekansal analiz, istatistik, ağ analizleri ve kentsel dirençlilik hesaplama motorlarını barındıran, QGIS arayüzünden bağımsız, saf Python, NumPy ve SciPy tabanlı resmi kütüphanesidir.
Bu kütüphane sayesinde, QGIS eklentilerindeki karmaşık algoritmaları:
- Headless & Bağımsız Çalıştırma: QGIS'i başlatmadan (örneğin Jupyter Notebooks, bağımsız komut dosyaları, sunucular veya web uygulamalarında) çalıştırabilir,
- Hızlı Test Edebilme:
pytestile hızlı ve headless bir şekilde tüm analitik modülleri test edebilir, - Merkezi Yönetim: Tek bir merkezden güncelleyerek (PyPI üzerinden
pip install planx-sdk) tüm eklentilerinizde ve araç setlerinizde tutarlı bir şekilde kullanabilirsiniz.
📂 Proje Yapısı (Directory Structure)
planx_sdk/
├── .github/workflows/ # GitHub Actions (PyPI otomatik yayınlama entegrasyonu)
├── pyproject.toml # Modern paket tanımı, bağımlılıklar ve metadata (PEP 517/621)
├── README.md # Bu dökümantasyon dosyası
├── LICENSE # Lisans dosyası
├── .gitignore # Önbellek ve build dosyalarını yoksayan Git kuralları
├── src/ # Kaynak kodlar (Standard src-layout)
│ └── planx/ # Ana paket dizini
│ ├── __init__.py # Versiyon ve paket tanımı
│ ├── spatial/ # Çekirdek mekansal ağ analizi ve space syntax motoru
│ │ ├── __init__.py
│ │ ├── paths.py # En kısa yol algoritmaları (Dijkstra, SciPy entegrasyonu)
│ │ ├── centrality.py # Yakınlık, Arasılık (Betweenness), Özdeğer (Eigenvector) ve Kritiklik
│ │ └── accessibility.py# Çekim (Hansen) ve Kümülatif Fırsatlar erişilebilirlik modelleri
│ ├── geostats/ # Mekansal istatistik ve otokorelasyon motorları
│ │ ├── __init__.py
│ │ └── stats_engines.py# Getis-Ord Gi*, Local/Global Moran's I, OLS, GWR, SDE, k-means
│ ├── suitability/ # Raster tabanlı MCDA (Multi-Criteria Decision Analysis) motoru
│ │ ├── __init__.py
│ │ ├── mcda.py # Normalizasyon metotları (Sigmoid, Gaussian, Min-Max) ve WLC
│ │ └── facility.py # Greedy MCLP (Maximal Covering Location Problem) tesis yerleşimi
│ └── resilience/ # Kentsel dirençlilik, afet ve risk simülasyon motorları
│ ├── __init__.py
│ ├── seismic.py # Monte Carlo sismik yapısal hasar ve enkaz yayılım simülasyonu
│ ├── flood.py # DEM tabanlı plüvyal (yüzey suyu) taşkın duyarlılık analizi
│ └── social.py # Sosyal kırılganlık endeksi (SVI) tarama ve analizi
└── tests/ # Birim testler (Unit Tests)
💡 Temel Özellikler ve Kullanım Örnekleri
1. Kentsel Erişilebilirlik Analizleri (planx.spatial)
Köken noktalarından (örn: konutlar) varış noktalarına (örn: hastaneler) olan mesafeleri kullanarak çekim veya kümülatif fırsat modelleriyle erişilebilirliği hesaplar.
import numpy as np
from planx.spatial import gravity_accessibility
# Mesafe Matrisi (O x D): 2 köken noktasının 3 varış noktasına uzaklıkları (m)
dists = np.array([
[150.0, 300.0, 900.0],
[500.0, 100.0, 1200.0]
])
# Varış noktalarının kapasite/cazibe ağırlıkları (örn. hastane yatak sayısı)
weights = np.array([50.0, 100.0, 250.0])
# Üstel (exponential) azalım fonksiyonu ile çekim tabanlı erişilebilirlik (Hansen Index)
accessibility = gravity_accessibility(
dists, weights, decay_method="exponential", beta=0.002, cutoff=1000.0
)
print("Erişilebilirlik Skorları:", accessibility)
2. Tesis Konumu Optimizasyonu (planx.suitability)
Belirli sayıda acil toplanma alanı veya sığınağı, maksimum kapsama mesafesini ve nüfusu gözeterek en optimum şekilde yerleştirmek için MCLP çözümünü uygular.
import numpy as np
from planx.suitability import greedy_mclp
candidates = np.array([[0.0, 0.0], [10.0, 10.0], [20.0, 20.0]]) # Sığınak aday koordinatları
demands = np.array([[1.0, 1.0], [11.0, 11.0], [25.0, 25.0]]) # Bina koordinatları
populations = np.array([100.0, 250.0, 500.0]) # Bina nüfusları
# K=2 sığınak seç, maksimum yürüme mesafesi 5.0 birim olsun
selected, added_pop, cum_pop = greedy_mclp(candidates, demands, populations, max_distance=5.0, k=2)
print("Seçilen Tesis İndisleri:", selected) # [1, 0]
3. Sismik Hasar ve Enkaz Yayılımı (planx.resilience)
Monte Carlo simülasyonu yardımıyla, bir bölgedeki binaların inşa yılı, kat sayısı ve deprem büyüklüğüne göre yıkılma olasılıklarını stokastik olarak simüle eder. Oluşacak enkazın yatay yayılma yarıçapını ve hafriyat hacmini hesaplar.
import numpy as np
from planx.resilience import simulate_seismic_debris
areas = np.array([120.0, 200.0, 80.0]) # Bina taban alanları (m2)
floors = np.array([4.0, 8.0, 2.0]) # Kat sayıları
years = np.array([1990, 2005, 2021]) # İnşa yılları
# 7.2 Mw deprem senaryosu
probs, collapsed, radii, volumes = simulate_seismic_debris(
areas, floors, years, magnitude=7.2, seed=42
)
print("Bina Yıkım Durumları (0: Ayakta, 1: Yıkık):", collapsed)
print("Enkaz Yarıçapları (m):", radii)
4. Sosyal Kırılganlık Endeksi (SVI) (planx.resilience)
Nüfus yoğunluğu, yaşlılık oranı, çocuk nüfus oranı, düşük gelir seviyesi ve engellilik durumu gibi çeşitli demografik göstergeleri normalize ederek mekansal birimler için sosyal kırılganlık skorunu oluşturur.
import numpy as np
from planx.resilience import social_vulnerability_index
# Gösterge verileri (örneğin 3 farklı mahalle için)
indicators = {
"elderly": np.array([10.0, 50.0, 100.0]),
"low_income": np.array([200.0, 100.0, 50.0])
}
# Gösterge ağırlıkları
weights = {
"elderly": 0.5,
"low_income": 0.5
}
scores, classes = social_vulnerability_index(indicators, weights)
print("Sosyal Kırılganlık Skorları:", scores)
print("Sınıflar:", classes) # ['Moderate', 'Moderate', 'Moderate']
🛠️ Kurulum ve Geliştirme (Installation & Development)
1. Standart Kurulum
Kütüphaneyi doğrudan PyPI üzerinden kurabilirsiniz:
pip install planx-sdk
2. Geliştirici Modunda Kurulum (Editable Install)
SDK kodlarında yaptığınız değişikliklerin anında çalışma ortamınıza yansıması için:
git clone https://github.com/YusufEminoglu/planx_sdk.git
cd planx_sdk
pip install -e .[dev]
🧪 Testler ve Kod Standartları
Kütüphanedeki tüm modüllerin matematiksel doğruluğu pytest birim testleri ile güvence altına alınmıştır. Testleri koşturmak için:
pytest
Kod kalitesi ve standartları ruff ve black araçları ile denetlenmektedir. Commit öncesi kodunuzu formatlamak ve denetlemek için:
black .
ruff check .
📝 Lisans (License)
Bu proje MIT Lisansı ile lisanslanmıştır. Detaylar için LICENSE dosyasına göz atabilirsiniz.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file planx_sdk-0.1.5.tar.gz.
File metadata
- Download URL: planx_sdk-0.1.5.tar.gz
- Upload date:
- Size: 38.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eadf035b617f9911535215ac51bc4ec5c65a57db5f07c8c978b57369e25003f1
|
|
| MD5 |
5b820e112cf8539eb8c5abfb196e5286
|
|
| BLAKE2b-256 |
223b8635664c1d37d3739b883d87aa86521d5888b7819cdf9d90a8a1aac0e184
|
File details
Details for the file planx_sdk-0.1.5-py3-none-any.whl.
File metadata
- Download URL: planx_sdk-0.1.5-py3-none-any.whl
- Upload date:
- Size: 35.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dcf6c9b3ae49f133267f56b0304cbf2875166d727a6c23d7c3d390481e6c76a0
|
|
| MD5 |
0304cbca8683f281d5f9864eaa9873fb
|
|
| BLAKE2b-256 |
09906b7b380636ef9e683c7b9abf08421e6157cdee9b964bc10525368e8f5423
|