Skip to main content

Core spatial analytics, spatial statistics, and urban resilience engines for the PlanX ecosystem.

Project description

PlanX SDK (Software Development Kit)

PyPI version Python version support License: MIT GitHub Code Formatting

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ı:

  1. 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,
  2. Hızlı Test Edebilme: pytest ile hızlı ve headless bir şekilde tüm analitik modülleri test edebilir,
  3. 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

planx_sdk-0.1.5.tar.gz (38.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

planx_sdk-0.1.5-py3-none-any.whl (35.8 kB view details)

Uploaded Python 3

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

Hashes for planx_sdk-0.1.5.tar.gz
Algorithm Hash digest
SHA256 eadf035b617f9911535215ac51bc4ec5c65a57db5f07c8c978b57369e25003f1
MD5 5b820e112cf8539eb8c5abfb196e5286
BLAKE2b-256 223b8635664c1d37d3739b883d87aa86521d5888b7819cdf9d90a8a1aac0e184

See more details on using hashes here.

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

Hashes for planx_sdk-0.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 dcf6c9b3ae49f133267f56b0304cbf2875166d727a6c23d7c3d390481e6c76a0
MD5 0304cbca8683f281d5f9864eaa9873fb
BLAKE2b-256 09906b7b380636ef9e683c7b9abf08421e6157cdee9b964bc10525368e8f5423

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page