tr-imar 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. tr_imar-0.1.0/CHANGELOG.md +31 -0
  2. tr_imar-0.1.0/CITATION.cff +21 -0
  3. tr_imar-0.1.0/LICENSE +21 -0
  4. tr_imar-0.1.0/MANIFEST.in +9 -0
  5. tr_imar-0.1.0/PKG-INFO +327 -0
  6. tr_imar-0.1.0/README.md +288 -0
  7. tr_imar-0.1.0/examples/proje.json +84 -0
  8. tr_imar-0.1.0/examples/quickstart.py +60 -0
  9. tr_imar-0.1.0/pyproject.toml +118 -0
  10. tr_imar-0.1.0/setup.cfg +4 -0
  11. tr_imar-0.1.0/src/tr_imar/__init__.py +118 -0
  12. tr_imar-0.1.0/src/tr_imar/__main__.py +4 -0
  13. tr_imar-0.1.0/src/tr_imar/_version.py +1 -0
  14. tr_imar-0.1.0/src/tr_imar/cli.py +537 -0
  15. tr_imar-0.1.0/src/tr_imar/compliance.py +736 -0
  16. tr_imar-0.1.0/src/tr_imar/config.py +379 -0
  17. tr_imar-0.1.0/src/tr_imar/density.py +172 -0
  18. tr_imar-0.1.0/src/tr_imar/emsal.py +355 -0
  19. tr_imar-0.1.0/src/tr_imar/errors.py +22 -0
  20. tr_imar-0.1.0/src/tr_imar/geometry.py +627 -0
  21. tr_imar-0.1.0/src/tr_imar/height.py +182 -0
  22. tr_imar-0.1.0/src/tr_imar/parking.py +550 -0
  23. tr_imar-0.1.0/src/tr_imar/plan.py +132 -0
  24. tr_imar-0.1.0/src/tr_imar/py.typed +0 -0
  25. tr_imar-0.1.0/src/tr_imar/setbacks.py +214 -0
  26. tr_imar-0.1.0/src/tr_imar.egg-info/PKG-INFO +327 -0
  27. tr_imar-0.1.0/src/tr_imar.egg-info/SOURCES.txt +36 -0
  28. tr_imar-0.1.0/src/tr_imar.egg-info/dependency_links.txt +1 -0
  29. tr_imar-0.1.0/src/tr_imar.egg-info/entry_points.txt +2 -0
  30. tr_imar-0.1.0/src/tr_imar.egg-info/requires.txt +9 -0
  31. tr_imar-0.1.0/src/tr_imar.egg-info/top_level.txt +1 -0
  32. tr_imar-0.1.0/tests/conftest.py +40 -0
  33. tr_imar-0.1.0/tests/test_compliance.py +220 -0
  34. tr_imar-0.1.0/tests/test_config_cli.py +284 -0
  35. tr_imar-0.1.0/tests/test_density_emsal.py +158 -0
  36. tr_imar-0.1.0/tests/test_geometry.py +232 -0
  37. tr_imar-0.1.0/tests/test_height_setbacks.py +184 -0
  38. tr_imar-0.1.0/tests/test_parking.py +174 -0
@@ -0,0 +1,31 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ ## [Unreleased]
6
+
7
+ ## [0.1.0] - 2026-11-09
8
+ ### Added
9
+ - `ImarConfig` / `NATIONAL`: every numeric threshold of the Planlı Alanlar İmar
10
+ Yönetmeliği (text as amended up to RG 01.07.2026/33297) and the Otopark Yönetmeliği in
11
+ one overridable configuration; `FIELD_SOURCES` records the article for each value and
12
+ whether plans or local regulations may change it (PAİY m.69/2). JSON loading.
13
+ - `PlanConditions`: parcel-level plan notes (TAKS, KAKS, floors, Hmax, nizam, zone,
14
+ plan setbacks, road width, local parking factor) kept separate from national values.
15
+ - Density: `resolve_density` (m.5/5, m.5/6 40 % / 60 % rules, m.20/3, m.21/4).
16
+ - Emsal dışı: `evaluate_emsal_disi` with per-item limits (m.22) and the 30 % cap with its
17
+ exemptions (m.5/8).
18
+ - Height: `max_building_height` (m.28), `floors_by_road_width` (m.9), `floors_for_setbacks`
19
+ (m.23/1-d), `classify_height` (high-rise classes, m.4).
20
+ - Setbacks: `required_setbacks` (m.23/1 a-ğ incl. +0.50 m per floor above four and the
21
+ 60.50 m rule), `tower_spacing`.
22
+ - Geometry: `rectangle_envelope`, `buildable_envelope`, `offset_polygon` (pure-Python
23
+ parallel setback lines with half-plane clipping and edge-collapse handling; optional
24
+ exact Euclidean envelope with shapely), `classify_edges`, GeoJSON output.
25
+ - Parking: full current Ek-1 table (incl. RG 25.03.2021, 16.06.2022 and 27.12.2025
26
+ amendments), dwelling-size bands, per-unit minimums, hospital beds rule, local factor,
27
+ small-parcel reduction, overridable table.
28
+ - `check_compliance`: structured report with Turkish messages and legal sources; text and
29
+ JSON output.
30
+ - CLI `tr-imar` with `yogunluk`, `cekme`, `yukseklik`, `zarf`, `otopark`, `kontrol`,
31
+ `yapilandirma` commands (Turkish help and output).
@@ -0,0 +1,21 @@
1
+ cff-version: 1.2.0
2
+ message: "If you use this software, please cite it as below."
3
+ authors:
4
+ - family-names: "Eminoğlu"
5
+ given-names: "Yusuf"
6
+ email: "geospacephilo@gmail.com"
7
+ orcid: "https://orcid.org/0009-0005-6000-2934"
8
+ title: "tr-imar"
9
+ version: "0.1.0"
10
+ date-released: "2026-11-09"
11
+ license: "MIT"
12
+ repository-code: "https://github.com/YusufEminoglu/tr_imar_sdk"
13
+ url: "https://pypi.org/project/tr-imar/"
14
+ abstract: "Turkish zoning (imar) calculations under the Planlı Alanlar İmar Yönetmeliği and the Otopark Yönetmeliği: TAKS/KAKS, areas excluded from the floor-area ratio and their 30% cap, floor count and building height, height-dependent setbacks, buildable envelope of rectangular and polygon parcels, parking requirements and a compliance report in Turkish."
15
+ keywords:
16
+ - zoning
17
+ - urban planning
18
+ - Turkey
19
+ - building regulations
20
+ - setbacks
21
+ - parking
tr_imar-0.1.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Yusuf Eminoğlu
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,9 @@
1
+ include LICENSE
2
+ include README.md
3
+ include CHANGELOG.md
4
+ include CITATION.cff
5
+ include pyproject.toml
6
+ include src/tr_imar/py.typed
7
+ recursive-include src/tr_imar *.py
8
+ recursive-include tests *.py
9
+ recursive-include examples *.py *.json
tr_imar-0.1.0/PKG-INFO ADDED
@@ -0,0 +1,327 @@
1
+ Metadata-Version: 2.4
2
+ Name: tr-imar
3
+ Version: 0.1.0
4
+ Summary: Turkish zoning (imar) calculations under the Planlı Alanlar İmar Yönetmeliği and Otopark Yönetmeliği: TAKS/KAKS, emsal dışı 30% cap, setbacks, buildable envelope, building height, parking and a compliance report in Turkish.
5
+ Author-email: Yusuf Eminoğlu <geospacephilo@gmail.com>
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/YusufEminoglu/tr_imar_sdk
8
+ Project-URL: Repository, https://github.com/YusufEminoglu/tr_imar_sdk
9
+ Project-URL: Issues, https://github.com/YusufEminoglu/tr_imar_sdk/issues
10
+ Project-URL: Changelog, https://github.com/YusufEminoglu/tr_imar_sdk/blob/main/CHANGELOG.md
11
+ Keywords: imar,zoning,turkey,urban-planning,taks,kaks,emsal,setback,building-envelope,parking,otopark,planli-alanlar-imar-yonetmeligi,architecture,gis
12
+ Classifier: Development Status :: 4 - Beta
13
+ Classifier: Programming Language :: Python :: 3
14
+ Classifier: Programming Language :: Python :: 3.9
15
+ Classifier: Programming Language :: Python :: 3.10
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Programming Language :: Python :: 3.13
19
+ Classifier: Operating System :: OS Independent
20
+ Classifier: Environment :: Console
21
+ Classifier: Natural Language :: Turkish
22
+ Classifier: Topic :: Scientific/Engineering :: GIS
23
+ Classifier: Topic :: Utilities
24
+ Classifier: Intended Audience :: Science/Research
25
+ Classifier: Intended Audience :: Developers
26
+ Classifier: Intended Audience :: Other Audience
27
+ Classifier: Typing :: Typed
28
+ Requires-Python: >=3.9
29
+ Description-Content-Type: text/markdown
30
+ License-File: LICENSE
31
+ Provides-Extra: shapely
32
+ Requires-Dist: shapely>=2.0.0; extra == "shapely"
33
+ Provides-Extra: dev
34
+ Requires-Dist: pytest>=7.0.0; extra == "dev"
35
+ Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
36
+ Requires-Dist: ruff>=0.1.0; extra == "dev"
37
+ Requires-Dist: mypy>=1.0.0; extra == "dev"
38
+ Dynamic: license-file
39
+
40
+ # tr-imar
41
+
42
+ [![CI](https://github.com/YusufEminoglu/tr_imar_sdk/actions/workflows/ci.yml/badge.svg)](https://github.com/YusufEminoglu/tr_imar_sdk/actions/workflows/ci.yml)
43
+ [![PyPI](https://img.shields.io/pypi/v/tr-imar.svg)](https://pypi.org/project/tr-imar/)
44
+ [![Python](https://img.shields.io/pypi/pyversions/tr-imar.svg)](https://pypi.org/project/tr-imar/)
45
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
46
+
47
+ **English summary.** `tr-imar` is a dependency-free Python library and CLI for
48
+ Turkish zoning (*imar*) calculations under the *Planlı Alanlar İmar Yönetmeliği*
49
+ (Planned Areas Zoning Regulation, 2017, amended up to 1 July 2026) and the
50
+ *Otopark Yönetmeliği* (Parking Regulation, 2018, amended up to 27 December 2025):
51
+ TAKS/KAKS (footprint and floor-area ratios), the 30 % cap on areas excluded from
52
+ the floor-area ratio, floor count and building height, height-dependent setbacks,
53
+ the buildable envelope of rectangular or polygon parcels, and parking requirements.
54
+ A compliance check returns a structured report whose messages and CLI output are
55
+ in Turkish; national thresholds and local plan notes are kept strictly separate.
56
+
57
+ ---
58
+
59
+ **Türkçe.** `tr-imar`, şehir plancıları ve mimarlar için Planlı Alanlar İmar
60
+ Yönetmeliği (PAİY) ve Otopark Yönetmeliği hesaplarını yapan, bağımlılığı olmayan
61
+ bir Python kütüphanesi ve komut satırı aracıdır:
62
+
63
+ - **Yoğunluk:** TAKS/KAKS'tan azami taban alanı ve emsale esas katlar alanı;
64
+ planda TAKS veya KAKS verilmediğinde PAİY m.5/6 (%40 / %60) kuralları.
65
+ - **Emsal dışı alanlar:** m.22'deki kalem sınırları (kapıcı dairesi 70 m²,
66
+ balkon %20 ...) ve m.5/8'deki **%30 tavanı** ile bu tavana girmeyen alanlar
67
+ (bodrumda zorunlu otoparkın 2 katı, mescidin 150/300 m²'si ...).
68
+ - **Kat adedi ve bina yüksekliği:** m.28 azami kat yükseklikleriyle Hmax, eski
69
+ planlarda yol genişliğine göre kat adedi (m.9), yüksek yapı sınıfı (m.4).
70
+ - **Bahçe mesafeleri:** ön 5 / yan 3 / arka 3 m, 4 katın üzerindeki her kat için
71
+ yan ve arka +0,50 m, yükseklikten kat adedi (m.23/1-d), 60,50 m ve üzeri binalarda
72
+ 15 m + kat başına 0,50 m, aynı parseldeki yüksek binalar arası mesafe.
73
+ - **Yapılaşma zarfı:** dikdörtgen veya **poligon** parselde çekme sonrası alan;
74
+ saf Python paralel yapı yaklaşma sınırları, istenirse `shapely` ile Öklid
75
+ mesafesine göre kesin zarf. GeoJSON çıktısı.
76
+ - **Otopark:** güncel Ek-1 tablosunun tamamı (53 kullanım satırı;
77
+ meskenlerde daire büyüklüğü bantları), yerel artırma katsayısı, küçük parsel
78
+ azaltması; tablo JSON ile değiştirilebilir.
79
+ - **Uyum kontrolü:** önerilen proje için her satırı dayanağıyla (“Plan notu”,
80
+ “PAİY m.23/1-a” ...) belirtilen Türkçe rapor; metin ve JSON çıktı.
81
+
82
+ ```bash
83
+ pip install tr-imar # yalnızca standart kütüphane
84
+ pip install "tr-imar[shapely]" # + kesin (Öklid) zarf hesabı
85
+ ```
86
+
87
+ Python 3.9 veya üstü gerekir.
88
+
89
+ > **Uyarı.** Bu paket bir **ön kontrol** aracıdır. Ruhsat esas olarak uygulama
90
+ > imar planına, plan notlarına, varsa büyükşehir/il belediyesinin imar
91
+ > yönetmeliğine ve ilgili idarenin yorumuna göre verilir. Sonuçları resmi bir
92
+ > karar yerine kullanmayın.
93
+
94
+ ## Hızlı başlangıç (komut satırı)
95
+
96
+ ```bash
97
+ # Yoğunluk: 1000 m² net parsel, TAKS 0.35, KAKS 1.40
98
+ tr-imar yogunluk --parsel 1000 --taks 0.35 --kaks 1.40
99
+ ```
100
+
101
+ ```
102
+ Net parsel alanı : 1.000,00 m²
103
+ Azami taban alanı : 350,00 m² (TAKS 0.3500; Plan notu)
104
+ Azami emsal alanı : 1.400,00 m² (KAKS 1.4000; Plan notu)
105
+ Emsal dışı %30 tavanı : 420,00 m² (PAİY m.5/8)
106
+ ```
107
+
108
+ ```bash
109
+ tr-imar cekme --kat 6 # ön 5,00 / yan 4,00 / arka 4,00 m
110
+ tr-imar cekme --yukseklik 72.5 # 60,50 m üstü: tüm bahçeler 17,00 m
111
+ tr-imar yukseklik --kat 5 --bolge konut # Hmax = 5 x 3,60 = 18,00 m
112
+ tr-imar yukseklik --yol 12 # eski planlarda en çok 4 kat (m.9)
113
+ tr-imar zarf --dikdortgen 20x30 --kat 5 # zarf 13,00 x 21,50 = 279,50 m²
114
+ tr-imar zarf --poligon "0,0;30,0;30,15;15,15;15,30;0,30" --on-kenar 0 --kat 4 --cikti zarf.geojson
115
+ tr-imar otopark --daire 95,95,95,95,95,95 --kullanim dukkan=120 # 3 + 2,4 -> 6
116
+ tr-imar otopark --liste # Ek-1 tablosu ve anahtarlar
117
+ tr-imar kontrol examples/proje.json # uyum raporu (aykırılık varsa çıkış kodu 1)
118
+ tr-imar yapilandirma --kaynaklar # tüm eşikler, dayanak maddeleri
119
+ ```
120
+
121
+ Tüm komutlar `--json` ile makine okunur çıktı verir; `--config yerel.json` ile
122
+ ulusal varsayılanlar (ör. büyükşehir imar yönetmeliğindeki farklı ön bahçe)
123
+ değiştirilir.
124
+
125
+ ### Proje dosyası (`tr-imar kontrol`)
126
+
127
+ ```json
128
+ {
129
+ "plan": {"taks": 0.40, "kaks": 1.60, "kat": 4, "nizam": "ayrik", "bolge": "konut",
130
+ "plan_notlari": ["Bina cephesi yola paralel olacaktır."]},
131
+ "proje": {
132
+ "parsel": [[0, 0], [20, 0], [20, 30], [0, 30]],
133
+ "on_kenarlar": [0],
134
+ "taban_alani": 235, "emsal_alani": 950, "kat": 4, "bina_yuksekligi": 14.20,
135
+ "kat_yukseklikleri": [3.6, 3.6, 3.5, 3.5], "subasman": 0.90,
136
+ "cekme": {"on": 5.0, "yan": 3.0, "arka": 3.5},
137
+ "bb_net_alan": 800,
138
+ "emsal_disi": [{"kategori": "balkon", "alan": 120},
139
+ {"kategori": "bodrum_zorunlu_otopark", "alan": 300}],
140
+ "otopark": [{"kullanim": "mesken", "daireler": [110, 110, 110, 110, 110, 110, 110, 110]}],
141
+ "otopark_mevcut": 4, "asansor": true
142
+ },
143
+ "yapilandirma": {"front_setback": 5.0},
144
+ "otopark_tablosu": {"dukkan": {"per": 60}}
145
+ }
146
+ ```
147
+
148
+ Çıktı (kısaltılmış):
149
+
150
+ ```
151
+ İMAR UYGUNLUK ÖN KONTROL RAPORU
152
+ ================================
153
+ [UYGUN] Kat adedi (bodrum hariç): Önerilen 4 kat, izin verilen en çok 4 kat
154
+ Dayanak: Plan notu; PAİY m.5/11
155
+ [UYGUN] Bina yüksekliği: Önerilen 14,20 m, izin verilen en çok 14,40 m
156
+ Dayanak: PAİY m.28/2 (kat adedi x azami kat yüksekliği)
157
+ [UYGUN] Yan bahçe: Önerilen 3,00 m, gereken en az 3,00 m
158
+ Dayanak: PAİY m.23/1-b
159
+ [BILGI] Yapılaşma zarfı: Çekme mesafeleri sonrası zarf alanı 308,00 m² (parallel yöntemi)
160
+ [UYGUN] Taban alanı (TAKS): Önerilen 235,00 m², izin verilen en çok 240,00 m²
161
+ [UYGUN] Emsal dışı alanlar (%30 hesabına girenler): Önerilen 260,00 m², izin verilen en çok 288,00 m²
162
+ ...
163
+ Sonuç: UYGUN (10 uygun, 0 aykırı, 0 uyarı, 2 bilgi)
164
+ ```
165
+
166
+ ## Python API
167
+
168
+ ```python
169
+ from tr_imar import (
170
+ PlanConditions, Project, EmsalDisiItem, ParkingDemand,
171
+ required_setbacks, buildable_envelope, resolve_density,
172
+ max_building_height, parking_requirement, check_compliance,
173
+ )
174
+
175
+ plan = PlanConditions(taks=0.40, kaks=1.60, floors=4, nizam="ayrik", zone="konut")
176
+
177
+ cekme = required_setbacks(floors=4, plan=plan) # 5 / 3 / 3 m
178
+ zarf = buildable_envelope([(0, 0), (20, 0), (20, 30), (0, 30)], cekme, front_edges=[0])
179
+ zarf.area # 308.0
180
+ zarf.to_geojson() # GeoJSON Feature
181
+
182
+ yog = resolve_density(600, plan, envelope_area=zarf.area)
183
+ yog.max_footprint, yog.max_floor_area, yog.emsal_disi_cap # 240.0, 960.0, 288.0
184
+
185
+ max_building_height(4, "konut") # 14.4 (4 x 3.60)
186
+ parking_requirement([ParkingDemand("mesken", unit_areas=[110] * 8)]).total # 4
187
+
188
+ rapor = check_compliance(Project(parcel_area=600, footprint=250, floors=4), plan)
189
+ rapor.ok, [v.message for v in rapor.violations]
190
+ print(rapor.to_text()) # Türkçe rapor
191
+ rapor.to_dict() # JSON'a yazılabilir sözlük
192
+ ```
193
+
194
+ | Fonksiyon / sınıf | Ne yapar |
195
+ |---|---|
196
+ | `PlanConditions` | Plan notları / imar durumu: TAKS, KAKS, kat, Hmax, nizam, bölge, plan çekme mesafeleri, yol genişliği, otopark katsayısı |
197
+ | `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 |
198
+ | `resolve_density` | Azami taban alanı, emsal alanı, %30 tavanı (m.5/6, m.20/3, m.21/4) |
199
+ | `evaluate_emsal_disi`, `EmsalDisiItem` | Emsal dışı kalemler, kalem sınırları, %30 tavanı (m.5/8, m.22) |
200
+ | `required_setbacks`, `tower_spacing` | Ön/yan/arka bahçe, yükseğe bağlı artışlar (m.23) |
201
+ | `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) |
202
+ | `rectangle_envelope`, `buildable_envelope`, `offset_polygon`, `classify_edges`, `polygon_area` | Parsel geometrisi ve yapılaşma zarfı |
203
+ | `parking_requirement`, `ParkingDemand`, `ParkingTable`, `DEFAULT_PARKING_TABLE` | Otopark Yönetmeliği Ek-1 |
204
+ | `check_compliance`, `Project`, `ComplianceReport` | Uyum kontrolü ve rapor |
205
+
206
+ Türkçe takma adlar: `uygunluk_kontrolu`, `bahce_mesafeleri`, `yapilasma_zarfi`,
207
+ `otopark_ihtiyaci`, `yogunluk`.
208
+
209
+ ## Ulusal yönetmelik ile plan notlarının ayrımı
210
+
211
+ PAİY m.69/2'ye göre yönetmeliğin 1., 2., 6., 7., 8., 9. bölümleri, geçici
212
+ maddeleri ile 19. ve 20. maddeleri **planlarla ve idarelerin imar
213
+ yönetmelikleriyle değiştirilemez**. Diğer hükümlerin çoğu “uygulama imar planında
214
+ aksine hüküm yoksa” uygulanır; plan notları ve (m.69/3) büyükşehir/il imar
215
+ yönetmelikleri bunları değiştirebilir. Paket bu ayrımı üç katmanda tutar:
216
+
217
+ | Katman | Nesne | Örnek |
218
+ |---|---|---|
219
+ | Parsel bazında plan kararı / plan notu | `PlanConditions` | TAKS 0.40, KAKS 1.60, 4 kat, ön bahçe 7 m |
220
+ | Yerel imar yönetmeliği | `ImarConfig.replace(...)` / `--config` | Büyükşehirde farklı kat yüksekliği |
221
+ | Ulusal varsayılan | `NATIONAL` | Ön 5 m, yan 3 m, %30 tavanı |
222
+
223
+ Değiştirilemez bir eşiği (ör. `emsal_disi_cap_ratio`, `taks_cap_absolute`)
224
+ yapılandırmada değiştirirseniz uyum raporu bunu **uyarı** olarak gösterir.
225
+
226
+ | Konu | Dayanak | Plan/yerel yönetmelik değiştirebilir mi? |
227
+ |---|---|---|
228
+ | Taban alanı ve emsal net parsel üzerinden | m.5/5 | Hayır |
229
+ | Ayrık/blok nizamda TAKS ≤ %40 (planda açıkça verilmemişse) | m.5/6 | Plan TAKS verebilir; tavanın kendisi değiştirilemez |
230
+ | KAKS/TAKS verilmemişse TAKS ≤ %60 | m.5/6 | Hayır |
231
+ | Emsal dışı toplam ≤ emsale esas alanın %30'u | m.5/8 | Hayır |
232
+ | Emsal dışı kalemler ve sınırları | m.22 | Evet (yerel yönetmelik ek kalem getirebilir; yine %30'a tabi) |
233
+ | Bahçe mesafeleri ve artışlar | m.23 | Evet (“planda aksine hüküm yoksa”) |
234
+ | Azami kat yükseklikleri | m.28 | Evet (“planda daha fazla belirlenmemiş ise”) |
235
+ | Yol genişliğine göre kat | m.9 | Yalnız planında kat/yükseklik olmayan eski planlar |
236
+ | Kat adedi / bina yüksekliği aşılamaz | m.5/11 | Planın verdiği değer esastır |
237
+ | Asansör zorunluluğu | m.5/27 | Hayır |
238
+ | Otopark miktarları | Otopark Yön. m.8/2 | Yalnız **artırılabilir** (meclis kararı) |
239
+
240
+ ## Yöntem ve kaynaklar
241
+
242
+ Birincil kaynaklar 9 Kasım 2026'da indirilip madde madde karşılaştırılmıştır:
243
+
244
+ - **Planlı Alanlar İmar Yönetmeliği**, RG 03.07.2017/30113, güncel metin
245
+ (son değişiklik RG 01.07.2026/33297):
246
+ <https://www.mevzuat.gov.tr/mevzuat?MevzuatNo=23722&MevzuatTur=7&MevzuatTertip=5>
247
+ - **Otopark Yönetmeliği**, RG 22.02.2018/30340, güncel metin ve Ek-1 (son
248
+ değişiklik RG 27.12.2025/33120):
249
+ <https://www.mevzuat.gov.tr/mevzuat?MevzuatNo=24408&MevzuatTur=7&MevzuatTertip=5>
250
+
251
+ Kullanılan başlıca hükümler:
252
+
253
+ | Hesap | Dayanak | Kural |
254
+ |---|---|---|
255
+ | TAKS, KAKS tanımı | m.4/1-cccc, m.4/1 KAKS | taban alanı / parsel; katlar alanı / parsel |
256
+ | Yoğunluk | m.5/5, m.5/6, m.20/3, m.21/4 | net parsel; %40 / %60; min(TAKS, zarf); TAKS x kat |
257
+ | Emsal dışı | m.5/8, m.22/1 | %30 tavanı ve muafiyetler; kalem sınırları |
258
+ | 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 |
259
+ | 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 |
260
+ | 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 |
261
+ | Yüksek yapı | m.4/1-aaaaa | bina H > 21,50 veya yapı H > 30,50; çok yüksek > 51,50 / 60,50 |
262
+ | Subasman | m.4/1-yyy, m.9/1-c | 0,00 ile +1,20 arası |
263
+ | Asansör | m.5/27 | 3 katta yer, ≥ 4 katta tesis |
264
+ | Mahya | m.40/4 | ≤ 5,00 m |
265
+ | Otopark | Otopark Yön. m.4/1-ç, m.8, Ek-1 | birim park alanı 20 m²; kesir yukarı yuvarlanır |
266
+
267
+ **Zarf geometrisi.** `parallel` yöntemi her parsel kenarına kendi mesafesinde
268
+ paralel bir yapı yaklaşma sınırı çizer ve komşu sınırları kesiştirir (vaziyet
269
+ planlarındaki pratik). Dışbükey parsellerde yarı-düzlem kırpma (Sutherland–Hodgman)
270
+ ile kesindir; içbükey parsellerde çöken kısa kenarlar ayıklanır ve sonuç
271
+ geçerlilik testinden geçirilir. İçbükey köşelerde paralel çizgilerin kesişimi,
272
+ köşeye olan Öklid mesafesinden fazla pay bırakır (fark d²(1 − π/4)); sonuç güvenli
273
+ taraftadır. `exact` yöntemi (`shapely`) parselden her kenarın mesafe kadar
274
+ tamponunu çıkarır ve birden çok parçaya bölünen zarfları da döndürür.
275
+
276
+ ## Sınırlamalar ve yorumlar
277
+
278
+ - **Plan notları önceliklidir.** Plan notunda yan/arka bahçe verilmişse,
279
+ m.23/1-ç kat artışı varsayılan olarak yine eklenir (güvenli taraf);
280
+ `PlanConditions(setback_increments=False)` ile kapatılabilir.
281
+ - **%30 tabanı.** “Parselin toplam emsale esas alanı” azami emsal alanı (KAKS x net
282
+ parsel) olarak yorumlanmıştır; proje emsal alanını esas almak için
283
+ `evaluate_emsal_disi(..., base_area=...)` kullanın.
284
+ - **Hmax.** m.28/2'ye göre kat yüksekliği x kat adedi; m.9/1-c'deki 1,20 m
285
+ subasman payı ayrıca `include_subasman=True` ile eklenebilir. İdareler bu iki
286
+ yaklaşımı farklı uygulayabilir.
287
+ - **60,50 m üzeri kat sayısı.** Kat yüksekliği verilmezse 3,00 m varsayılır
288
+ (`typical_floor_height`); kesin sayı `floors_above_very_tall` ile verilmelidir.
289
+ - **Otopark yorumları.** Kesirler toplam üzerinden yuvarlanır (`round_each=True`
290
+ ile kullanım başına). Akaryakıt satırındaki “beher pompaj başına 150 m² ve her
291
+ lift/kanal başına 150 m²” ifadesi pompa ve lift/kanal başına 1 otopark olarak;
292
+ kapalı yüzme havuzunda “100 m² ya da 20 oturma yeri” ikisinin büyüğü olarak
293
+ yorumlanmıştır.
294
+ - **Asansör** kontrolünde bodrum katlar yalnız `exposed_basements` ile sayılır;
295
+ m.5/27 bağımsız bölüm/ortak alan bulunan tüm bodrumları sayar.
296
+ - Kotlandırma (m.10-18), çıkmalar (m.41), çatı arası kullanımları (m.40/7-9),
297
+ bodrumda konut koşulları (m.29/3), yangın ve otopark rampası hesapları kapsam
298
+ dışıdır; yalnız mahya yüksekliği ve açığa çıkan bodrum oturumu (m.20/4)
299
+ kontrol edilir.
300
+ - Koordinatlar metrik ve projeksiyonlu olmalıdır (ör. TM 3°, UTM).
301
+
302
+ ## Geliştirme
303
+
304
+ ```bash
305
+ pip install -e ".[dev,shapely]"
306
+ pytest --cov=tr_imar
307
+ ruff check . && ruff format --check src tests && mypy src
308
+ ```
309
+
310
+ Testler ağa erişmez; yönetmelik örnekleri elle hesaplanmış değerlerle karşılaştırılır.
311
+
312
+ ## Lisans
313
+
314
+ MIT © 2026 Yusuf Eminoğlu. Bkz. [LICENSE](LICENSE). Atıf için
315
+ [CITATION.cff](CITATION.cff).
316
+
317
+ ## Academic citation
318
+
319
+ ```bibtex
320
+ @software{eminoglu_tr_imar,
321
+ author = {Eminoğlu, Yusuf},
322
+ title = {tr-imar},
323
+ year = {2026},
324
+ version = {0.1.0},
325
+ url = {https://github.com/YusufEminoglu/tr_imar_sdk}
326
+ }
327
+ ```