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.
- tr_imar-0.1.0/CHANGELOG.md +31 -0
- tr_imar-0.1.0/CITATION.cff +21 -0
- tr_imar-0.1.0/LICENSE +21 -0
- tr_imar-0.1.0/MANIFEST.in +9 -0
- tr_imar-0.1.0/PKG-INFO +327 -0
- tr_imar-0.1.0/README.md +288 -0
- tr_imar-0.1.0/examples/proje.json +84 -0
- tr_imar-0.1.0/examples/quickstart.py +60 -0
- tr_imar-0.1.0/pyproject.toml +118 -0
- tr_imar-0.1.0/setup.cfg +4 -0
- tr_imar-0.1.0/src/tr_imar/__init__.py +118 -0
- tr_imar-0.1.0/src/tr_imar/__main__.py +4 -0
- tr_imar-0.1.0/src/tr_imar/_version.py +1 -0
- tr_imar-0.1.0/src/tr_imar/cli.py +537 -0
- tr_imar-0.1.0/src/tr_imar/compliance.py +736 -0
- tr_imar-0.1.0/src/tr_imar/config.py +379 -0
- tr_imar-0.1.0/src/tr_imar/density.py +172 -0
- tr_imar-0.1.0/src/tr_imar/emsal.py +355 -0
- tr_imar-0.1.0/src/tr_imar/errors.py +22 -0
- tr_imar-0.1.0/src/tr_imar/geometry.py +627 -0
- tr_imar-0.1.0/src/tr_imar/height.py +182 -0
- tr_imar-0.1.0/src/tr_imar/parking.py +550 -0
- tr_imar-0.1.0/src/tr_imar/plan.py +132 -0
- tr_imar-0.1.0/src/tr_imar/py.typed +0 -0
- tr_imar-0.1.0/src/tr_imar/setbacks.py +214 -0
- tr_imar-0.1.0/src/tr_imar.egg-info/PKG-INFO +327 -0
- tr_imar-0.1.0/src/tr_imar.egg-info/SOURCES.txt +36 -0
- tr_imar-0.1.0/src/tr_imar.egg-info/dependency_links.txt +1 -0
- tr_imar-0.1.0/src/tr_imar.egg-info/entry_points.txt +2 -0
- tr_imar-0.1.0/src/tr_imar.egg-info/requires.txt +9 -0
- tr_imar-0.1.0/src/tr_imar.egg-info/top_level.txt +1 -0
- tr_imar-0.1.0/tests/conftest.py +40 -0
- tr_imar-0.1.0/tests/test_compliance.py +220 -0
- tr_imar-0.1.0/tests/test_config_cli.py +284 -0
- tr_imar-0.1.0/tests/test_density_emsal.py +158 -0
- tr_imar-0.1.0/tests/test_geometry.py +232 -0
- tr_imar-0.1.0/tests/test_height_setbacks.py +184 -0
- 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.
|
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
|
+
[](https://github.com/YusufEminoglu/tr_imar_sdk/actions/workflows/ci.yml)
|
|
43
|
+
[](https://pypi.org/project/tr-imar/)
|
|
44
|
+
[](https://pypi.org/project/tr-imar/)
|
|
45
|
+
[](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
|
+
```
|