Skip to main content

tr-imar

CI PyPI Python License: MIT

English summary. tr-imar is a dependency-free Python library and CLI for Turkish zoning (imar) calculations under the Planlı Alanlar İmar Yönetmeliği (Planned Areas Zoning Regulation, 2017, amended up to 1 July 2026) and the Otopark Yönetmeliği (Parking Regulation, 2018, amended up to 27 December 2025): TAKS/KAKS (footprint and floor-area ratios), the 30 % cap on areas excluded from the floor-area ratio, floor count and building height, height-dependent setbacks, the buildable envelope of rectangular or polygon parcels, and parking requirements. A compliance check returns a structured report whose messages and CLI output are in Turkish; national thresholds and local plan notes are kept strictly separate.


Türkçe. tr-imar, şehir plancıları ve mimarlar için Planlı Alanlar İmar Yönetmeliği (PAİY) ve Otopark Yönetmeliği hesaplarını yapan, bağımlılığı olmayan bir Python kütüphanesi ve komut satırı aracıdır:

  • Yoğunluk: TAKS/KAKS'tan azami taban alanı ve emsale esas katlar alanı; planda TAKS veya KAKS verilmediğinde PAİY m.5/6 (%40 / %60) kuralları.
  • Emsal dışı alanlar: m.22'deki kalem sınırları (kapıcı dairesi 70 m², balkon %20 ...) ve m.5/8'deki %30 tavanı ile bu tavana girmeyen alanlar (bodrumda zorunlu otoparkın 2 katı, mescidin 150/300 m²'si ...).
  • Kat adedi ve bina yüksekliği: m.28 azami kat yükseklikleriyle Hmax, eski planlarda yol genişliğine göre kat adedi (m.9), yüksek yapı sınıfı (m.4).
  • Bahçe mesafeleri: ön 5 / yan 3 / arka 3 m, 4 katın üzerindeki her kat için yan ve arka +0,50 m, yükseklikten kat adedi (m.23/1-d), 60,50 m ve üzeri binalarda 15 m + kat başına 0,50 m, aynı parseldeki yüksek binalar arası mesafe.
  • Yapılaşma zarfı: dikdörtgen veya poligon parselde çekme sonrası alan; saf Python paralel yapı yaklaşma sınırları, istenirse shapely ile Öklid mesafesine göre kesin zarf. GeoJSON çıktısı.
  • Otopark: güncel Ek-1 tablosunun tamamı (53 kullanım satırı; meskenlerde daire büyüklüğü bantları), yerel artırma katsayısı, küçük parsel azaltması; tablo JSON ile değiştirilebilir.
  • Uyum kontrolü: önerilen proje için her satırı dayanağıyla (“Plan notu”, “PAİY m.23/1-a” ...) belirtilen Türkçe rapor; metin ve JSON çıktı.
pip install tr-imar              # yalnızca standart kütüphane
pip install "tr-imar[shapely]"   # + kesin (Öklid) zarf hesabı

Python 3.9 veya üstü gerekir.

Uyarı. Bu paket bir ön kontrol aracıdır. Ruhsat esas olarak uygulama imar planına, plan notlarına, varsa büyükşehir/il belediyesinin imar yönetmeliğine ve ilgili idarenin yorumuna göre verilir. Sonuçları resmi bir karar yerine kullanmayın.

Hızlı başlangıç (komut satırı)

# Yoğunluk: 1000 m² net parsel, TAKS 0.35, KAKS 1.40
tr-imar yogunluk --parsel 1000 --taks 0.35 --kaks 1.40
Net parsel alanı        : 1.000,00 m²
Azami taban alanı       : 350,00 m²  (TAKS 0.3500; Plan notu)
Azami emsal alanı       : 1.400,00 m²  (KAKS 1.4000; Plan notu)
Emsal dışı %30 tavanı   : 420,00 m²  (PAİY m.5/8)
tr-imar cekme --kat 6                    # ön 5,00 / yan 4,00 / arka 4,00 m
tr-imar cekme --yukseklik 72.5           # 60,50 m üstü: tüm bahçeler 17,00 m
tr-imar yukseklik --kat 5 --bolge konut  # Hmax = 5 x 3,60 = 18,00 m
tr-imar yukseklik --yol 12               # eski planlarda en çok 4 kat (m.9)
tr-imar zarf --dikdortgen 20x30 --kat 5  # zarf 13,00 x 21,50 = 279,50 m²
tr-imar zarf --poligon "0,0;30,0;30,15;15,15;15,30;0,30" --on-kenar 0 --kat 4 --cikti zarf.geojson
tr-imar otopark --daire 95,95,95,95,95,95 --kullanim dukkan=120   # 3 + 2,4 -> 6
tr-imar otopark --liste                  # Ek-1 tablosu ve anahtarlar
tr-imar kontrol examples/proje.json      # uyum raporu (aykırılık varsa çıkış kodu 1)
tr-imar yapilandirma --kaynaklar         # tüm eşikler, dayanak maddeleri

Tüm komutlar --json ile makine okunur çıktı verir; --config yerel.json ile ulusal varsayılanlar (ör. büyükşehir imar yönetmeliğindeki farklı ön bahçe) değiştirilir.

Proje dosyası (tr-imar kontrol)

{
  "plan": {"taks": 0.40, "kaks": 1.60, "kat": 4, "nizam": "ayrik", "bolge": "konut",
           "plan_notlari": ["Bina cephesi yola paralel olacaktır."]},
  "proje": {
    "parsel": [[0, 0], [20, 0], [20, 30], [0, 30]],
    "on_kenarlar": [0],
    "taban_alani": 235, "emsal_alani": 950, "kat": 4, "bina_yuksekligi": 14.20,
    "kat_yukseklikleri": [3.6, 3.6, 3.5, 3.5], "subasman": 0.90,
    "cekme": {"on": 5.0, "yan": 3.0, "arka": 3.5},
    "bb_net_alan": 800,
    "emsal_disi": [{"kategori": "balkon", "alan": 120},
                   {"kategori": "bodrum_zorunlu_otopark", "alan": 300}],
    "otopark": [{"kullanim": "mesken", "daireler": [110, 110, 110, 110, 110, 110, 110, 110]}],
    "otopark_mevcut": 4, "asansor": true
  },
  "yapilandirma": {"front_setback": 5.0},
  "otopark_tablosu": {"dukkan": {"per": 60}}
}

Çıktı (kısaltılmış):

İMAR UYGUNLUK ÖN KONTROL RAPORU
================================
[UYGUN]   Kat adedi (bodrum hariç): Önerilen 4 kat, izin verilen en çok 4 kat
          Dayanak: Plan notu; PAİY m.5/11
[UYGUN]   Bina yüksekliği: Önerilen 14,20 m, izin verilen en çok 14,40 m
          Dayanak: PAİY m.28/2 (kat adedi x azami kat yüksekliği)
[UYGUN]   Yan bahçe: Önerilen 3,00 m, gereken en az 3,00 m
          Dayanak: PAİY m.23/1-b
[BILGI]   Yapılaşma zarfı: Çekme mesafeleri sonrası zarf alanı 308,00 m² (parallel yöntemi)
[UYGUN]   Taban alanı (TAKS): Önerilen 235,00 m², izin verilen en çok 240,00 m²
[UYGUN]   Emsal dışı alanlar (%30 hesabına girenler): Önerilen 260,00 m², izin verilen en çok 288,00 m²
...
Sonuç: UYGUN (10 uygun, 0 aykırı, 0 uyarı, 2 bilgi)

Python API

from tr_imar import (
    PlanConditions, Project, EmsalDisiItem, ParkingDemand,
    required_setbacks, buildable_envelope, resolve_density,
    max_building_height, parking_requirement, check_compliance,
)

plan = PlanConditions(taks=0.40, kaks=1.60, floors=4, nizam="ayrik", zone="konut")

cekme = required_setbacks(floors=4, plan=plan)            # 5 / 3 / 3 m
zarf = buildable_envelope([(0, 0), (20, 0), (20, 30), (0, 30)], cekme, front_edges=[0])
zarf.area                                                 # 308.0
zarf.to_geojson()                                         # GeoJSON Feature

yog = resolve_density(600, plan, envelope_area=zarf.area)
yog.max_footprint, yog.max_floor_area, yog.emsal_disi_cap # 240.0, 960.0, 288.0

max_building_height(4, "konut")                           # 14.4  (4 x 3.60)
parking_requirement([ParkingDemand("mesken", unit_areas=[110] * 8)]).total   # 4

rapor = check_compliance(Project(parcel_area=600, footprint=250, floors=4), plan)
rapor.ok, [v.message for v in rapor.violations]
print(rapor.to_text())      # Türkçe rapor
rapor.to_dict()             # JSON'a yazılabilir sözlük
Fonksiyon / sınıf Ne yapar
PlanConditions Plan notları / imar durumu: TAKS, KAKS, kat, Hmax, nizam, bölge, plan çekme mesafeleri, yol genişliği, otopark katsayısı
ImarConfig, NATIONAL, load_config Ulusal yönetmelik eşiklerinin tamamı (tek yapılandırma); FIELD_SOURCES her alanın dayanağını ve değiştirilemez olup olmadığını verir
resolve_density Azami taban alanı, emsal alanı, %30 tavanı (m.5/6, m.20/3, m.21/4)
evaluate_emsal_disi, EmsalDisiItem Emsal dışı kalemler, kalem sınırları, %30 tavanı (m.5/8, m.22)
required_setbacks, tower_spacing Ön/yan/arka bahçe, yükseğe bağlı artışlar (m.23)
floors_for_setbacks, floors_by_road_width, floor_height_limits, max_building_height, classify_height Kat-yükseklik ilişkileri (m.4, m.9, m.23/1-d, m.28)
rectangle_envelope, buildable_envelope, offset_polygon, classify_edges, polygon_area Parsel geometrisi ve yapılaşma zarfı
parking_requirement, ParkingDemand, ParkingTable, DEFAULT_PARKING_TABLE Otopark Yönetmeliği Ek-1
check_compliance, Project, ComplianceReport Uyum kontrolü ve rapor

Türkçe takma adlar: uygunluk_kontrolu, bahce_mesafeleri, yapilasma_zarfi, otopark_ihtiyaci, yogunluk.

Ulusal yönetmelik ile plan notlarının ayrımı

PAİY m.69/2'ye göre yönetmeliğin 1., 2., 6., 7., 8., 9. bölümleri, geçici maddeleri ile 19. ve 20. maddeleri planlarla ve idarelerin imar yönetmelikleriyle değiştirilemez. Diğer hükümlerin çoğu “uygulama imar planında aksine hüküm yoksa” uygulanır; plan notları ve (m.69/3) büyükşehir/il imar yönetmelikleri bunları değiştirebilir. Paket bu ayrımı üç katmanda tutar:

Katman Nesne Örnek
Parsel bazında plan kararı / plan notu PlanConditions TAKS 0.40, KAKS 1.60, 4 kat, ön bahçe 7 m
Yerel imar yönetmeliği ImarConfig.replace(...) / --config Büyükşehirde farklı kat yüksekliği
Ulusal varsayılan NATIONAL Ön 5 m, yan 3 m, %30 tavanı

Değiştirilemez bir eşiği (ör. emsal_disi_cap_ratio, taks_cap_absolute) yapılandırmada değiştirirseniz uyum raporu bunu uyarı olarak gösterir.

Konu Dayanak Plan/yerel yönetmelik değiştirebilir mi?
Taban alanı ve emsal net parsel üzerinden m.5/5 Hayır
Ayrık/blok nizamda TAKS ≤ %40 (planda açıkça verilmemişse) m.5/6 Plan TAKS verebilir; tavanın kendisi değiştirilemez
KAKS/TAKS verilmemişse TAKS ≤ %60 m.5/6 Hayır
Emsal dışı toplam ≤ emsale esas alanın %30'u m.5/8 Hayır
Emsal dışı kalemler ve sınırları m.22 Evet (yerel yönetmelik ek kalem getirebilir; yine %30'a tabi)
Bahçe mesafeleri ve artışlar m.23 Evet (“planda aksine hüküm yoksa”)
Azami kat yükseklikleri m.28 Evet (“planda daha fazla belirlenmemiş ise”)
Yol genişliğine göre kat m.9 Yalnız planında kat/yükseklik olmayan eski planlar
Kat adedi / bina yüksekliği aşılamaz m.5/11 Planın verdiği değer esastır
Asansör zorunluluğu m.5/27 Hayır
Otopark miktarları Otopark Yön. m.8/2 Yalnız artırılabilir (meclis kararı)

Yöntem ve kaynaklar

Birincil kaynaklar 9 Kasım 2026'da indirilip madde madde karşılaştırılmıştır:

Kullanılan başlıca hükümler:

Hesap Dayanak Kural
TAKS, KAKS tanımı m.4/1-cccc, m.4/1 KAKS taban alanı / parsel; katlar alanı / parsel
Yoğunluk m.5/5, m.5/6, m.20/3, m.21/4 net parsel; %40 / %60; min(TAKS, zarf); TAKS x kat
Emsal dışı m.5/8, m.22/1 %30 tavanı ve muafiyetler; kalem sınırları
Bahçeler m.23/1-a…ğ 5 / 3 / 3 m; +0,50 m/kat (4 kat üstü); H/3 (artık > 2,50 → +1 kat); ≥ 60,50 m: 15 m + 0,50 m/kat; binalar arası 20 m + 0,50 m / 3 m
Kat yüksekliği m.28/1-2 konut 3,60 (≤ 3 kat: 4,00); ticaret zemin 4,50 / asma katlı 5,50 / diğer 4,00; karma; zemini ticari konut
Yol genişliği - kat m.9/1-a ≤7: 2, ≤10: 3, ≤12: 4, ≤15: 5, ≤20: 6, ≤25: 8, ≤35: 10, ≤50: 14, >50: 18
Yüksek yapı m.4/1-aaaaa bina H > 21,50 veya yapı H > 30,50; çok yüksek > 51,50 / 60,50
Subasman m.4/1-yyy, m.9/1-c 0,00 ile +1,20 arası
Asansör m.5/27 3 katta yer, ≥ 4 katta tesis
Mahya m.40/4 ≤ 5,00 m
Otopark Otopark Yön. m.4/1-ç, m.8, Ek-1 birim park alanı 20 m²; kesir yukarı yuvarlanır

Zarf geometrisi. parallel yöntemi her parsel kenarına kendi mesafesinde paralel bir yapı yaklaşma sınırı çizer ve komşu sınırları kesiştirir (vaziyet planlarındaki pratik). Dışbükey parsellerde yarı-düzlem kırpma (Sutherland–Hodgman) ile kesindir; içbükey parsellerde çöken kısa kenarlar ayıklanır ve sonuç geçerlilik testinden geçirilir. İçbükey köşelerde paralel çizgilerin kesişimi, köşeye olan Öklid mesafesinden fazla pay bırakır (fark d²(1 − π/4)); sonuç güvenli taraftadır. exact yöntemi (shapely) parselden her kenarın mesafe kadar tamponunu çıkarır ve birden çok parçaya bölünen zarfları da döndürür.

Sınırlamalar ve yorumlar

  • Plan notları önceliklidir. Plan notunda yan/arka bahçe verilmişse, m.23/1-ç kat artışı varsayılan olarak yine eklenir (güvenli taraf); PlanConditions(setback_increments=False) ile kapatılabilir.
  • %30 tabanı. “Parselin toplam emsale esas alanı” azami emsal alanı (KAKS x net parsel) olarak yorumlanmıştır; proje emsal alanını esas almak için evaluate_emsal_disi(..., base_area=...) kullanın.
  • Hmax. m.28/2'ye göre kat yüksekliği x kat adedi; m.9/1-c'deki 1,20 m subasman payı ayrıca include_subasman=True ile eklenebilir. İdareler bu iki yaklaşımı farklı uygulayabilir.
  • 60,50 m üzeri kat sayısı. Kat yüksekliği verilmezse 3,00 m varsayılır (typical_floor_height); kesin sayı floors_above_very_tall ile verilmelidir.
  • Otopark yorumları. Kesirler toplam üzerinden yuvarlanır (round_each=True ile kullanım başına). Akaryakıt satırındaki “beher pompaj başına 150 m² ve her lift/kanal başına 150 m²” ifadesi pompa ve lift/kanal başına 1 otopark olarak; kapalı yüzme havuzunda “100 m² ya da 20 oturma yeri” ikisinin büyüğü olarak yorumlanmıştır.
  • Asansör kontrolünde bodrum katlar yalnız exposed_basements ile sayılır; m.5/27 bağımsız bölüm/ortak alan bulunan tüm bodrumları sayar.
  • Kotlandırma (m.10-18), çıkmalar (m.41), çatı arası kullanımları (m.40/7-9), bodrumda konut koşulları (m.29/3), yangın ve otopark rampası hesapları kapsam dışıdır; yalnız mahya yüksekliği ve açığa çıkan bodrum oturumu (m.20/4) kontrol edilir.
  • Koordinatlar metrik ve projeksiyonlu olmalıdır (ör. TM 3°, UTM).

Geliştirme

pip install -e ".[dev,shapely]"
pytest --cov=tr_imar
ruff check . && ruff format --check src tests && mypy src

Testler ağa erişmez; yönetmelik örnekleri elle hesaplanmış değerlerle karşılaştırılır.

Lisans

MIT © 2026 Yusuf Eminoğlu. Bkz. LICENSE. Atıf için CITATION.cff.

Academic citation

@software{eminoglu_tr_imar,
  author  = {Eminoğlu, Yusuf},
  title   = {tr-imar},
  year    = {2026},
  version = {0.1.1},
  url     = {https://github.com/YusufEminoglu/tr_imar_sdk}
}

Metadata

Release files for tr-imar 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for tr-imar 0.1.1
File Size Uploaded Provenance Actions
tr_imar-0.1.1.tar.gz 72.7 kB With provenance Details for tr_imar-0.1.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for tr-imar 0.1.1
File Interpreter ABI Platform Actions
tr_imar-0.1.1-py3-none-any.whl Python 3 none any Details for tr_imar-0.1.1-py3-none-any.whl

Total release size: 132.2 kB

Release files / tr_imar-0.1.1.tar.gz

Download URL tr_imar-0.1.1.tar.gz
Size 72.7 kB
Tags Source
SHA-256 checksum
How to use checksums
02848153ed18690e983a12954212604862548befd7da6c5da380218f088cd26e
BLAKE2b-256 checksum
How to use checksums
10bcd71e6617d07863133000a698ba2127d4ae5f1de0c8df3d2fa4dd0586c365
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 9, 2026.

Transparency log

Release files / tr_imar-0.1.1-py3-none-any.whl

Download URL tr_imar-0.1.1-py3-none-any.whl
Size 59.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
08c98cbb5441ace0808b910915b9017320d938660ade91a3de8446a7f85cad80
BLAKE2b-256 checksum
How to use checksums
395c5c0f56c41ed2dbe8ead8cff8c97a29b7bfe36503b793e007a9ef88f428ac
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 9, 2026.

Transparency log

Security for tr-imar 0.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

Both files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for tr_imar-0.1.1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 9, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page