tr-donati 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_donati-0.1.0/CHANGELOG.md +22 -0
- tr_donati-0.1.0/CITATION.cff +21 -0
- tr_donati-0.1.0/LICENSE +21 -0
- tr_donati-0.1.0/MANIFEST.in +10 -0
- tr_donati-0.1.0/PKG-INFO +262 -0
- tr_donati-0.1.0/README.md +227 -0
- tr_donati-0.1.0/examples/ornek_plan.geojson +725 -0
- tr_donati-0.1.0/examples/quickstart.py +57 -0
- tr_donati-0.1.0/pyproject.toml +110 -0
- tr_donati-0.1.0/setup.cfg +4 -0
- tr_donati-0.1.0/src/tr_donati/__init__.py +97 -0
- tr_donati-0.1.0/src/tr_donati/__main__.py +7 -0
- tr_donati-0.1.0/src/tr_donati/_version.py +1 -0
- tr_donati-0.1.0/src/tr_donati/access.py +247 -0
- tr_donati-0.1.0/src/tr_donati/cli.py +342 -0
- tr_donati-0.1.0/src/tr_donati/compliance.py +427 -0
- tr_donati-0.1.0/src/tr_donati/data/default_mapping.json +69 -0
- tr_donati-0.1.0/src/tr_donati/data/ek2_2017.json +172 -0
- tr_donati-0.1.0/src/tr_donati/data/service_radii.json +18 -0
- tr_donati-0.1.0/src/tr_donati/geometry.py +195 -0
- tr_donati-0.1.0/src/tr_donati/landuse.py +354 -0
- tr_donati-0.1.0/src/tr_donati/py.typed +0 -0
- tr_donati-0.1.0/src/tr_donati/report.py +343 -0
- tr_donati-0.1.0/src/tr_donati/requirements.py +105 -0
- tr_donati-0.1.0/src/tr_donati/standards.py +287 -0
- tr_donati-0.1.0/src/tr_donati.egg-info/PKG-INFO +262 -0
- tr_donati-0.1.0/src/tr_donati.egg-info/SOURCES.txt +34 -0
- tr_donati-0.1.0/src/tr_donati.egg-info/dependency_links.txt +1 -0
- tr_donati-0.1.0/src/tr_donati.egg-info/entry_points.txt +2 -0
- tr_donati-0.1.0/src/tr_donati.egg-info/requires.txt +6 -0
- tr_donati-0.1.0/src/tr_donati.egg-info/top_level.txt +1 -0
- tr_donati-0.1.0/tests/test_access.py +111 -0
- tr_donati-0.1.0/tests/test_cli_report.py +255 -0
- tr_donati-0.1.0/tests/test_geometry_landuse.py +206 -0
- tr_donati-0.1.0/tests/test_requirements_compliance.py +210 -0
- tr_donati-0.1.0/tests/test_standards.py +156 -0
|
@@ -0,0 +1,22 @@
|
|
|
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
|
+
- Bundled, data-driven EK-2 standards table of the Mekânsal Planlar Yapım Yönetmeliği
|
|
10
|
+
(RG 14/6/2014-29030; EK-2 as amended by RG 17/5/2017-30069), transcribed from the official
|
|
11
|
+
annex file on mevzuat.gov.tr, with regulation version/date metadata and the 13 explanations.
|
|
12
|
+
- `StandardsTable` with population-band lookup, per-capita standards, minimum unit areas,
|
|
13
|
+
deep-merge overrides and JSON loading.
|
|
14
|
+
- `required_areas` / `total_per_capita` by planned population, settlement (ilçe projection)
|
|
15
|
+
population and il/ilçe scope.
|
|
16
|
+
- `check_compliance`: provided vs required areas, deficits, per-capita indicators, minimum
|
|
17
|
+
parcel size checks (`check_parcel`) and the open/green-area rules of explanations 9 and 10.
|
|
18
|
+
- GeoJSON/CSV plan input with planar or spherical polygon areas and a configurable land-use
|
|
19
|
+
code -> donatı type mapping (JSON/CSV, share splits).
|
|
20
|
+
- Service-radius coverage analysis (Euclidean, haversine or user distance matrix).
|
|
21
|
+
- Turkish Markdown/CSV reports and the `tr-donati` CLI (`standartlar`, `ihtiyac`, `denetle`,
|
|
22
|
+
`erisim`).
|
|
@@ -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-donati"
|
|
9
|
+
version: "0.1.0"
|
|
10
|
+
date-released: "2026-11-09"
|
|
11
|
+
license: "MIT"
|
|
12
|
+
repository-code: "https://github.com/YusufEminoglu/tr_donati_sdk"
|
|
13
|
+
url: "https://pypi.org/project/tr-donati/"
|
|
14
|
+
abstract: "Donatı (social and technical infrastructure) area standards for Turkish spatial plans based on EK-2 of the Mekânsal Planlar Yapım Yönetmeliği: required areas by population, plan compliance checks with deficits and per-capita indicators, minimum parcel sizes, service-radius analysis and Turkish Markdown/CSV reports."
|
|
15
|
+
keywords:
|
|
16
|
+
- urban planning
|
|
17
|
+
- spatial planning
|
|
18
|
+
- Turkey
|
|
19
|
+
- social infrastructure
|
|
20
|
+
- planning standards
|
|
21
|
+
- gis
|
tr_donati-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,10 @@
|
|
|
1
|
+
include LICENSE
|
|
2
|
+
include README.md
|
|
3
|
+
include CHANGELOG.md
|
|
4
|
+
include CITATION.cff
|
|
5
|
+
include pyproject.toml
|
|
6
|
+
include src/tr_donati/py.typed
|
|
7
|
+
recursive-include src/tr_donati *.py
|
|
8
|
+
recursive-include src/tr_donati/data *.json
|
|
9
|
+
recursive-include tests *.py
|
|
10
|
+
recursive-include examples *.py *.geojson
|
tr_donati-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: tr-donati
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Donatı (social and technical infrastructure) area standards for Turkish spatial plans: EK-2 of the Mekânsal Planlar Yapım Yönetmeliği, required areas, plan compliance checks, per-capita indicators and service-radius analysis.
|
|
5
|
+
Author-email: Yusuf Eminoğlu <geospacephilo@gmail.com>
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/YusufEminoglu/tr_donati_sdk
|
|
8
|
+
Project-URL: Repository, https://github.com/YusufEminoglu/tr_donati_sdk
|
|
9
|
+
Project-URL: Issues, https://github.com/YusufEminoglu/tr_donati_sdk/issues
|
|
10
|
+
Project-URL: Changelog, https://github.com/YusufEminoglu/tr_donati_sdk/blob/main/CHANGELOG.md
|
|
11
|
+
Keywords: turkish,turkey,turkiye,urban-planning,spatial-planning,imar-plani,donati,donati-alani,mekansal-planlar-yapim-yonetmeligi,social-infrastructure,green-space,planning-standards,accessibility,geojson,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: Intended Audience :: Science/Research
|
|
24
|
+
Classifier: Intended Audience :: Developers
|
|
25
|
+
Classifier: Typing :: Typed
|
|
26
|
+
Requires-Python: >=3.9
|
|
27
|
+
Description-Content-Type: text/markdown
|
|
28
|
+
License-File: LICENSE
|
|
29
|
+
Provides-Extra: dev
|
|
30
|
+
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
31
|
+
Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
|
|
32
|
+
Requires-Dist: ruff>=0.1.0; extra == "dev"
|
|
33
|
+
Requires-Dist: mypy>=1.0.0; extra == "dev"
|
|
34
|
+
Dynamic: license-file
|
|
35
|
+
|
|
36
|
+
# tr-donati
|
|
37
|
+
|
|
38
|
+
[](https://pypi.org/project/tr-donati/)
|
|
39
|
+
[](https://pypi.org/project/tr-donati/)
|
|
40
|
+
[](https://github.com/YusufEminoglu/tr_donati_sdk/actions/workflows/ci.yml)
|
|
41
|
+
[](LICENSE)
|
|
42
|
+
|
|
43
|
+
**English summary.** `tr-donati` implements the minimum social and technical infrastructure
|
|
44
|
+
("donatı") area standards that Turkish spatial plans must meet: Annex 2 (EK-2) of the
|
|
45
|
+
*Mekânsal Planlar Yapım Yönetmeliği* (Official Gazette 14 June 2014, no. 29030; annex as
|
|
46
|
+
amended on 17 May 2017). It computes required areas for a planned population, checks a plan's
|
|
47
|
+
land-use polygons (GeoJSON/CSV) against those standards with deficits, per-capita indicators
|
|
48
|
+
and minimum parcel sizes, runs service-radius checks, and writes Turkish Markdown/CSV reports.
|
|
49
|
+
Pure Python, no dependencies.
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
**Türk imar planları için donatı alanı standartları.** `tr-donati`, Mekânsal Planlar Yapım
|
|
54
|
+
Yönetmeliği'nin **EK-2** tablosundaki ("Farklı nüfus gruplarında asgari sosyal ve teknik
|
|
55
|
+
altyapı alanlarına ilişkin standartlar ve asgari alan büyüklükleri tablosu") kişi başı
|
|
56
|
+
standartları ve asgari birim alanları veri olarak içerir ve bunlarla:
|
|
57
|
+
|
|
58
|
+
- planlanan nüfus için **gerekli donatı alanlarını** hesaplar (nüfus grubuna ve il/ilçe
|
|
59
|
+
kapsamına göre),
|
|
60
|
+
- plan arazi kullanım poligonlarını (GeoJSON/CSV) okuyup **sunulan ve gerekli alanları
|
|
61
|
+
karşılaştırır**, açıkları ve kişi başı göstergeleri verir,
|
|
62
|
+
- tesis parsellerini **asgari birim alana** göre denetler (ör. ilkokul ≥ 5.000 m², devlet
|
|
63
|
+
hastanesi yatak başına 130 m²),
|
|
64
|
+
- EK-2 açıklama 9 ve 10'daki **açık-yeşil alan kurallarını** denetler,
|
|
65
|
+
- okul/park gibi tesisler için **hizmet yarıçapı (etki alanı)** analizi yapar (kuş uçuşu ya da
|
|
66
|
+
kullanıcının verdiği ağ mesafeleri),
|
|
67
|
+
- Türkçe **Markdown/CSV rapor** üretir.
|
|
68
|
+
|
|
69
|
+
Standart tablosu veri tabanlıdır (JSON); yönetmelik sürümü ve tarihi tabloda kayıtlıdır ve
|
|
70
|
+
tüm değerler kullanıcı tarafından değiştirilebilir. Saf Python, bağımlılık yok, Python 3.9+.
|
|
71
|
+
|
|
72
|
+
## Kurulum
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
pip install tr-donati
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Hızlı başlangıç (Python)
|
|
79
|
+
|
|
80
|
+
```python
|
|
81
|
+
>>> import tr_donati as td
|
|
82
|
+
>>> {r.category: r.required_area for r in td.required_areas(120_000)}["acik_yesil_ilce"]
|
|
83
|
+
1200000.0
|
|
84
|
+
>>> td.population_group(120_000).label
|
|
85
|
+
'75.001 - 150.000'
|
|
86
|
+
>>> rep = td.check_compliance(
|
|
87
|
+
... {"park": 80_000, "cocuk_bahcesi": 15_000, "ilkokul": 16_500},
|
|
88
|
+
... population=10_000,
|
|
89
|
+
... settlement_population=200_000, # ilçe projeksiyon nüfusu -> nüfus grubu
|
|
90
|
+
... )
|
|
91
|
+
>>> green = rep.result("acik_yesil_ilce")
|
|
92
|
+
>>> green.required_area, green.provided_area, green.deficit
|
|
93
|
+
(100000.0, 95000.0, 5000.0)
|
|
94
|
+
>>> rep.result("ilkokul").deficit
|
|
95
|
+
3500.0
|
|
96
|
+
>>> td.check_parcel("ilkokul", 4_500, 200_000).status
|
|
97
|
+
'asgari alanın altında'
|
|
98
|
+
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Plan dosyasından rapor:
|
|
102
|
+
|
|
103
|
+
```python
|
|
104
|
+
import tr_donati as td
|
|
105
|
+
|
|
106
|
+
feats = td.read_plan("plan.geojson", code_field="KULLANIM") # alan geometriden hesaplanır
|
|
107
|
+
summary = td.summarize(feats) # varsayılan eşleştirme
|
|
108
|
+
rep = td.check_compliance(summary.provided, population=10_000, settlement_population=200_000,
|
|
109
|
+
parcels=summary.parcels, unmapped=summary.unmapped,
|
|
110
|
+
plan_area=summary.plan_area)
|
|
111
|
+
open("rapor.md", "w", encoding="utf-8").write(rep.to_markdown())
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Daha fazlası için `examples/quickstart.py` ve `examples/ornek_plan.geojson` dosyalarına bakın.
|
|
115
|
+
|
|
116
|
+
## Komut satırı
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
# EK-2 tablosu
|
|
120
|
+
tr-donati standartlar
|
|
121
|
+
|
|
122
|
+
# 120 000 kişi için gerekli alanlar
|
|
123
|
+
tr-donati ihtiyac --nufus 120000
|
|
124
|
+
|
|
125
|
+
# 10 000 kişilik plan, 200 000 nüfuslu ilçede; il bütünü kapsamında; CSV çıktı
|
|
126
|
+
tr-donati ihtiyac --nufus 10000 --yerlesme-nufusu 200000 --kapsam il --bicim csv
|
|
127
|
+
|
|
128
|
+
# Plan uygunluk denetimi (GeoJSON veya CSV)
|
|
129
|
+
tr-donati denetle examples/ornek_plan.geojson --nufus 10000 --yerlesme-nufusu 200000 \
|
|
130
|
+
--kod-alani KULLANIM --kimlik-alani ADA_PARSEL --birim-alani YATAK -o rapor.md
|
|
131
|
+
|
|
132
|
+
# Kendi kodlarınız ve standartlarınızla
|
|
133
|
+
tr-donati denetle plan.csv --nufus 25000 --kod-alani KOD --alan-alani ALAN_M2 \
|
|
134
|
+
--eslestirme eslestirme.json --standartlar cdp_standartlari.json --siki
|
|
135
|
+
|
|
136
|
+
# İlkokul etki alanı: konut adalarından 800 m
|
|
137
|
+
tr-donati erisim --tesisler plan.geojson --tesis-filtre-alani KULLANIM --tesis-filtre-degeri İlkokul \
|
|
138
|
+
--talep plan.geojson --talep-filtre-alani KULLANIM --talep-filtre-degeri Konut \
|
|
139
|
+
--agirlik-alani NUFUS --yaricap 800
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
`--siki` verildiğinde standart sağlanmazsa çıkış kodu 1 olur (CI/otomasyon için).
|
|
143
|
+
`--cografi` / `--projeksiyonlu` koordinat türünü zorlar; verilmezse otomatik algılanır.
|
|
144
|
+
|
|
145
|
+
## API özeti
|
|
146
|
+
|
|
147
|
+
| İşlev / sınıf | Açıklama |
|
|
148
|
+
| --- | --- |
|
|
149
|
+
| `StandardsTable.default()` | Gömülü EK-2 tablosu; `with_overrides()`, `from_json()`, `group_for()`, `per_capita()`, `min_area()` |
|
|
150
|
+
| `required_areas(pop, settlement_population=None, scope="ilce")` | Kategori bazında gerekli alanlar (`Requirement`) |
|
|
151
|
+
| `total_per_capita(pop, scope)` | Toplam kişi başı standart (m²/kişi) |
|
|
152
|
+
| `check_compliance(provided, pop, ...)` | `ComplianceReport`: açıklar, kurallar, parsel kontrolleri, `indicators()`, `to_markdown()`, `to_csv()` |
|
|
153
|
+
| `check_parcel(facility, area, pop, units=None)` | Tek parselin asgari birim alan kontrolü |
|
|
154
|
+
| `LandUseMapping` | Kullanım kodu → tesis türü (paylı bölme destekli), JSON/CSV'den yükleme |
|
|
155
|
+
| `read_plan`, `read_geojson`, `read_csv`, `summarize` | Plan girdisi okuma ve alan toplama |
|
|
156
|
+
| `service_coverage(demand, facilities, radius, metric, distances)` | Etki alanı / en yakın tesis analizi |
|
|
157
|
+
| `read_points`, `read_distance_matrix` | Nokta ve mesafe matrisi okuma |
|
|
158
|
+
|
|
159
|
+
### Kategoriler ve tesis türleri
|
|
160
|
+
|
|
161
|
+
Kişi başı standart taşıyan kategoriler: `anaokulu`, `ilkokul`, `ortaokul`, `ortaogretim`
|
|
162
|
+
(lise + diğer eğitim tesisleri, tabloda tek birleşik hücre), `acik_yesil_ilce` (10 m²/kişi),
|
|
163
|
+
`acik_yesil_il` (il bütününde +5 m²/kişi), `saglik`, `sosyal_kulturel`, `ibadet`,
|
|
164
|
+
`teknik_altyapi` (yol ve otopark hariç). `otopark` ve `resmi_kurum` EK-2'de standart
|
|
165
|
+
içermez; yalnızca sunulan alan raporlanır (isterseniz `with_overrides` ile standart ekleyin).
|
|
166
|
+
|
|
167
|
+
Tesis türleri (örnek): `anaokulu`, `ilkokul`, `ortaokul`, `gunduzlu_lise`, `yatili_lise`,
|
|
168
|
+
`meslek_lisesi`, `ozel_egitim`, `halk_egitim`, `cocuk_bahcesi`, `oyun_alani`, `park`,
|
|
169
|
+
`meydan`, `semt_spor_alani`, `botanik_parki`, `mesire_yeri`, `rekreasyon`, `kent_ormani`,
|
|
170
|
+
`aile_sagligi_merkezi`, `devlet_hastanesi`, `saglik_kampusu`, `kulturel_tesis`,
|
|
171
|
+
`sosyal_tesis`, `kucuk_ibadet_yeri`, `orta_ibadet_yeri`, `buyuk_ibadet_yeri`,
|
|
172
|
+
`teknik_altyapi`, `otopark`, `resmi_kurum`. Tam liste: `tr-donati standartlar --json`.
|
|
173
|
+
|
|
174
|
+
### Eşleştirme dosyası
|
|
175
|
+
|
|
176
|
+
Kullanım adları normalize edilir (`"Çocuk Bahçesi"` → `cocuk_bahcesi`). Varsayılan eşleştirme
|
|
177
|
+
tesis kimliklerini, etiketlerini ve yaygın eş anlamlıları (Kreş, ASM, Cami, Hastane, Trafo...)
|
|
178
|
+
tanır. Kendi kodlarınız için:
|
|
179
|
+
|
|
180
|
+
```json
|
|
181
|
+
{"mapping": {"1101": "park", "1204": {"ilkokul": 0.5, "ortaokul": 0.5}}}
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
veya CSV (`kod;tesis;pay`). Varsayılan olarak "İlköğretim alanı" ilkokul/ortaokul arasında
|
|
185
|
+
%50-%50 bölünür; bu bir varsayımdır, gerekirse değiştirin.
|
|
186
|
+
|
|
187
|
+
### Standartları değiştirme
|
|
188
|
+
|
|
189
|
+
Yönetmelik Md. 11/2 kentsel asgari standartların çevre düzeni planıyla belirlenebileceğini,
|
|
190
|
+
EK-2 açıklama 13 ise asgari alan büyüklüklerinin ilgili bakanlık düzenlemelerine göre
|
|
191
|
+
belirlenebileceğini söyler. Bu yüzden tüm değerler değiştirilebilir:
|
|
192
|
+
|
|
193
|
+
```python
|
|
194
|
+
t = td.StandardsTable.default().with_overrides({
|
|
195
|
+
"meta": {"annex_version": "X Çevre Düzeni Planı hükümleri"},
|
|
196
|
+
"categories": {"acik_yesil_ilce": {"per_capita": [12, 12, 12, 12]}},
|
|
197
|
+
"facilities": {"ilkokul": {"min_area": [[6000, 9000]] * 4}},
|
|
198
|
+
})
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
Değiştirilmiş tablo raporlarda "kullanıcı tarafından değiştirilmiştir" uyarısıyla belirtilir.
|
|
202
|
+
|
|
203
|
+
## Yöntem ve kaynaklar
|
|
204
|
+
|
|
205
|
+
- **Birincil kaynak:** Mekânsal Planlar Yapım Yönetmeliği, RG 14/6/2014 sayı 29030, Md. 11 ve
|
|
206
|
+
EK-2 (Değişik: RG 17/5/2017-30069). Değerler mevzuat.gov.tr'de yayımlanan resmi ek dosyasından
|
|
207
|
+
(`7.5.19788-ek.zip` → `EK-2.xlsx`) aktarılmış, RG 22/1/2026-33145 değişikliği işlenmiş
|
|
208
|
+
konsolide metinle karşılaştırılmıştır (EK-2 2017'den bu yana değişmemiştir). Kaynak bilgisi
|
|
209
|
+
`src/tr_donati/data/ek2_2017.json` içindeki `meta` alanındadır; EK-2'nin 13 açıklaması
|
|
210
|
+
aynen `notes` alanında yer alır.
|
|
211
|
+
- **Nüfus grubu:** EK-2 açıklama 1'e göre ilçe projeksiyon nüfusuyla seçilir
|
|
212
|
+
(`settlement_population`). Gerekli alan = kişi başı standart × planlanan nüfus.
|
|
213
|
+
- **Açık-yeşil alan kuralı (açıklama 9):** çocuk bahçesi, oyun alanı, park, meydan ve semt spor
|
|
214
|
+
alanı toplamı %75'in altına düşemez. Paydanın metinde açıkça belirtilmemesi nedeniyle paket
|
|
215
|
+
bunu standardın %75'i (0,75 × 10 m²/kişi × nüfus) olarak denetler ve sunulan yeşil alan
|
|
216
|
+
içindeki payı ayrıca raporlar.
|
|
217
|
+
- **İl bütünü (açıklama 10):** `scope="il"` ile hayvanat bahçesi, kent ormanı, ağaçlandırılacak
|
|
218
|
+
alan, fuar ve hipodrom için +5 m²/kişi; toplam 15 m²/kişi kuralı denetlenir.
|
|
219
|
+
- **Asgari birim alan:** tablodaki aralığın alt sınırı asgari değer olarak kullanılır; yatak/ünit
|
|
220
|
+
bazlı tesislerde alan = birim alan × yatak/ünit sayısı. Md. 11/3 ve açıklama 13 istisnaları
|
|
221
|
+
nedeniyle bu kontroller uyarı niteliğindedir.
|
|
222
|
+
- **Alan hesabı:** projeksiyonlu koordinatlarda shoelace formülü; boylam/enlem koordinatlarında
|
|
223
|
+
küre üzerinde Chamberlain & Duquette (2007, *Some algorithms for polygons on a sphere*, JPL
|
|
224
|
+
07-03) çizgi integrali (R = 6.371.008,8 m; elipsoide göre hata < ~%0,5). Kesin alan için verinizi
|
|
225
|
+
TUREF/TM gibi metrik bir projeksiyona dönüştürün.
|
|
226
|
+
- **Mesafe:** düzlemde Öklid, coğrafi koordinatta haversine veya kullanıcı mesafe matrisi.
|
|
227
|
+
|
|
228
|
+
## Sınırlamalar
|
|
229
|
+
|
|
230
|
+
- **Hizmet yarıçapları yönetmelikte yoktur.** `DEFAULT_SERVICE_RADII` (çocuk bahçesi 300 m,
|
|
231
|
+
park 500 m, anaokulu 500 m, ilkokul 800 m, ortaokul 1.000 m, lise 1.500 m, ASM 1.000 m,
|
|
232
|
+
ibadet yeri 500 m, semt spor alanı 1.000 m) planlama eğitiminde kullanılan **gösterge**
|
|
233
|
+
değerlerdir; birincil kaynakla doğrulanmamıştır. Resmi değerlendirmelerde `--yaricap` ile
|
|
234
|
+
kendi değerinizi verin.
|
|
235
|
+
- Kuş uçuşu mesafe gerçek yürüme mesafesini olduğundan kısa gösterir; ağ analizi sonuçlarını
|
|
236
|
+
`--mesafeler` ile verebilirsiniz.
|
|
237
|
+
- Otopark ihtiyacı Otopark Yönetmeliği'ne tabidir ve bu pakette hesaplanmaz.
|
|
238
|
+
- Kaynak tabloda son nüfus grubu "501.000 +" olarak yazılmıştır; 500.001-500.999 aralığı bu
|
|
239
|
+
gruba atanmıştır.
|
|
240
|
+
- Varsayılan eşleştirmedeki eş anlamlılar (ör. "Hastane" → devlet hastanesi, "İlköğretim" →
|
|
241
|
+
%50 ilkokul + %50 ortaokul) varsayımdır.
|
|
242
|
+
- Koruma amaçlı imar planları (Md. 11/4), turizm alanları (Md. 11/5) ve 6306 sayılı Kanun
|
|
243
|
+
planları (açıklama 11) için özel hükümler otomatik uygulanmaz.
|
|
244
|
+
- Bu araç karar desteği içindir; resmi plan onay ve denetim süreçlerinin yerine geçmez.
|
|
245
|
+
|
|
246
|
+
## Akademik atıf
|
|
247
|
+
|
|
248
|
+
```bibtex
|
|
249
|
+
@software{eminoglu_tr_donati,
|
|
250
|
+
author = {Eminoğlu, Yusuf},
|
|
251
|
+
title = {tr-donati},
|
|
252
|
+
year = {2026},
|
|
253
|
+
version = {0.1.0},
|
|
254
|
+
url = {https://github.com/YusufEminoglu/tr_donati_sdk}
|
|
255
|
+
}
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
Ayrıca bkz. `CITATION.cff`.
|
|
259
|
+
|
|
260
|
+
## Lisans
|
|
261
|
+
|
|
262
|
+
MIT © 2026 Yusuf Eminoğlu. Bkz. [LICENSE](LICENSE).
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
# tr-donati
|
|
2
|
+
|
|
3
|
+
[](https://pypi.org/project/tr-donati/)
|
|
4
|
+
[](https://pypi.org/project/tr-donati/)
|
|
5
|
+
[](https://github.com/YusufEminoglu/tr_donati_sdk/actions/workflows/ci.yml)
|
|
6
|
+
[](LICENSE)
|
|
7
|
+
|
|
8
|
+
**English summary.** `tr-donati` implements the minimum social and technical infrastructure
|
|
9
|
+
("donatı") area standards that Turkish spatial plans must meet: Annex 2 (EK-2) of the
|
|
10
|
+
*Mekânsal Planlar Yapım Yönetmeliği* (Official Gazette 14 June 2014, no. 29030; annex as
|
|
11
|
+
amended on 17 May 2017). It computes required areas for a planned population, checks a plan's
|
|
12
|
+
land-use polygons (GeoJSON/CSV) against those standards with deficits, per-capita indicators
|
|
13
|
+
and minimum parcel sizes, runs service-radius checks, and writes Turkish Markdown/CSV reports.
|
|
14
|
+
Pure Python, no dependencies.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
**Türk imar planları için donatı alanı standartları.** `tr-donati`, Mekânsal Planlar Yapım
|
|
19
|
+
Yönetmeliği'nin **EK-2** tablosundaki ("Farklı nüfus gruplarında asgari sosyal ve teknik
|
|
20
|
+
altyapı alanlarına ilişkin standartlar ve asgari alan büyüklükleri tablosu") kişi başı
|
|
21
|
+
standartları ve asgari birim alanları veri olarak içerir ve bunlarla:
|
|
22
|
+
|
|
23
|
+
- planlanan nüfus için **gerekli donatı alanlarını** hesaplar (nüfus grubuna ve il/ilçe
|
|
24
|
+
kapsamına göre),
|
|
25
|
+
- plan arazi kullanım poligonlarını (GeoJSON/CSV) okuyup **sunulan ve gerekli alanları
|
|
26
|
+
karşılaştırır**, açıkları ve kişi başı göstergeleri verir,
|
|
27
|
+
- tesis parsellerini **asgari birim alana** göre denetler (ör. ilkokul ≥ 5.000 m², devlet
|
|
28
|
+
hastanesi yatak başına 130 m²),
|
|
29
|
+
- EK-2 açıklama 9 ve 10'daki **açık-yeşil alan kurallarını** denetler,
|
|
30
|
+
- okul/park gibi tesisler için **hizmet yarıçapı (etki alanı)** analizi yapar (kuş uçuşu ya da
|
|
31
|
+
kullanıcının verdiği ağ mesafeleri),
|
|
32
|
+
- Türkçe **Markdown/CSV rapor** üretir.
|
|
33
|
+
|
|
34
|
+
Standart tablosu veri tabanlıdır (JSON); yönetmelik sürümü ve tarihi tabloda kayıtlıdır ve
|
|
35
|
+
tüm değerler kullanıcı tarafından değiştirilebilir. Saf Python, bağımlılık yok, Python 3.9+.
|
|
36
|
+
|
|
37
|
+
## Kurulum
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
pip install tr-donati
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Hızlı başlangıç (Python)
|
|
44
|
+
|
|
45
|
+
```python
|
|
46
|
+
>>> import tr_donati as td
|
|
47
|
+
>>> {r.category: r.required_area for r in td.required_areas(120_000)}["acik_yesil_ilce"]
|
|
48
|
+
1200000.0
|
|
49
|
+
>>> td.population_group(120_000).label
|
|
50
|
+
'75.001 - 150.000'
|
|
51
|
+
>>> rep = td.check_compliance(
|
|
52
|
+
... {"park": 80_000, "cocuk_bahcesi": 15_000, "ilkokul": 16_500},
|
|
53
|
+
... population=10_000,
|
|
54
|
+
... settlement_population=200_000, # ilçe projeksiyon nüfusu -> nüfus grubu
|
|
55
|
+
... )
|
|
56
|
+
>>> green = rep.result("acik_yesil_ilce")
|
|
57
|
+
>>> green.required_area, green.provided_area, green.deficit
|
|
58
|
+
(100000.0, 95000.0, 5000.0)
|
|
59
|
+
>>> rep.result("ilkokul").deficit
|
|
60
|
+
3500.0
|
|
61
|
+
>>> td.check_parcel("ilkokul", 4_500, 200_000).status
|
|
62
|
+
'asgari alanın altında'
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Plan dosyasından rapor:
|
|
67
|
+
|
|
68
|
+
```python
|
|
69
|
+
import tr_donati as td
|
|
70
|
+
|
|
71
|
+
feats = td.read_plan("plan.geojson", code_field="KULLANIM") # alan geometriden hesaplanır
|
|
72
|
+
summary = td.summarize(feats) # varsayılan eşleştirme
|
|
73
|
+
rep = td.check_compliance(summary.provided, population=10_000, settlement_population=200_000,
|
|
74
|
+
parcels=summary.parcels, unmapped=summary.unmapped,
|
|
75
|
+
plan_area=summary.plan_area)
|
|
76
|
+
open("rapor.md", "w", encoding="utf-8").write(rep.to_markdown())
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Daha fazlası için `examples/quickstart.py` ve `examples/ornek_plan.geojson` dosyalarına bakın.
|
|
80
|
+
|
|
81
|
+
## Komut satırı
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
# EK-2 tablosu
|
|
85
|
+
tr-donati standartlar
|
|
86
|
+
|
|
87
|
+
# 120 000 kişi için gerekli alanlar
|
|
88
|
+
tr-donati ihtiyac --nufus 120000
|
|
89
|
+
|
|
90
|
+
# 10 000 kişilik plan, 200 000 nüfuslu ilçede; il bütünü kapsamında; CSV çıktı
|
|
91
|
+
tr-donati ihtiyac --nufus 10000 --yerlesme-nufusu 200000 --kapsam il --bicim csv
|
|
92
|
+
|
|
93
|
+
# Plan uygunluk denetimi (GeoJSON veya CSV)
|
|
94
|
+
tr-donati denetle examples/ornek_plan.geojson --nufus 10000 --yerlesme-nufusu 200000 \
|
|
95
|
+
--kod-alani KULLANIM --kimlik-alani ADA_PARSEL --birim-alani YATAK -o rapor.md
|
|
96
|
+
|
|
97
|
+
# Kendi kodlarınız ve standartlarınızla
|
|
98
|
+
tr-donati denetle plan.csv --nufus 25000 --kod-alani KOD --alan-alani ALAN_M2 \
|
|
99
|
+
--eslestirme eslestirme.json --standartlar cdp_standartlari.json --siki
|
|
100
|
+
|
|
101
|
+
# İlkokul etki alanı: konut adalarından 800 m
|
|
102
|
+
tr-donati erisim --tesisler plan.geojson --tesis-filtre-alani KULLANIM --tesis-filtre-degeri İlkokul \
|
|
103
|
+
--talep plan.geojson --talep-filtre-alani KULLANIM --talep-filtre-degeri Konut \
|
|
104
|
+
--agirlik-alani NUFUS --yaricap 800
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
`--siki` verildiğinde standart sağlanmazsa çıkış kodu 1 olur (CI/otomasyon için).
|
|
108
|
+
`--cografi` / `--projeksiyonlu` koordinat türünü zorlar; verilmezse otomatik algılanır.
|
|
109
|
+
|
|
110
|
+
## API özeti
|
|
111
|
+
|
|
112
|
+
| İşlev / sınıf | Açıklama |
|
|
113
|
+
| --- | --- |
|
|
114
|
+
| `StandardsTable.default()` | Gömülü EK-2 tablosu; `with_overrides()`, `from_json()`, `group_for()`, `per_capita()`, `min_area()` |
|
|
115
|
+
| `required_areas(pop, settlement_population=None, scope="ilce")` | Kategori bazında gerekli alanlar (`Requirement`) |
|
|
116
|
+
| `total_per_capita(pop, scope)` | Toplam kişi başı standart (m²/kişi) |
|
|
117
|
+
| `check_compliance(provided, pop, ...)` | `ComplianceReport`: açıklar, kurallar, parsel kontrolleri, `indicators()`, `to_markdown()`, `to_csv()` |
|
|
118
|
+
| `check_parcel(facility, area, pop, units=None)` | Tek parselin asgari birim alan kontrolü |
|
|
119
|
+
| `LandUseMapping` | Kullanım kodu → tesis türü (paylı bölme destekli), JSON/CSV'den yükleme |
|
|
120
|
+
| `read_plan`, `read_geojson`, `read_csv`, `summarize` | Plan girdisi okuma ve alan toplama |
|
|
121
|
+
| `service_coverage(demand, facilities, radius, metric, distances)` | Etki alanı / en yakın tesis analizi |
|
|
122
|
+
| `read_points`, `read_distance_matrix` | Nokta ve mesafe matrisi okuma |
|
|
123
|
+
|
|
124
|
+
### Kategoriler ve tesis türleri
|
|
125
|
+
|
|
126
|
+
Kişi başı standart taşıyan kategoriler: `anaokulu`, `ilkokul`, `ortaokul`, `ortaogretim`
|
|
127
|
+
(lise + diğer eğitim tesisleri, tabloda tek birleşik hücre), `acik_yesil_ilce` (10 m²/kişi),
|
|
128
|
+
`acik_yesil_il` (il bütününde +5 m²/kişi), `saglik`, `sosyal_kulturel`, `ibadet`,
|
|
129
|
+
`teknik_altyapi` (yol ve otopark hariç). `otopark` ve `resmi_kurum` EK-2'de standart
|
|
130
|
+
içermez; yalnızca sunulan alan raporlanır (isterseniz `with_overrides` ile standart ekleyin).
|
|
131
|
+
|
|
132
|
+
Tesis türleri (örnek): `anaokulu`, `ilkokul`, `ortaokul`, `gunduzlu_lise`, `yatili_lise`,
|
|
133
|
+
`meslek_lisesi`, `ozel_egitim`, `halk_egitim`, `cocuk_bahcesi`, `oyun_alani`, `park`,
|
|
134
|
+
`meydan`, `semt_spor_alani`, `botanik_parki`, `mesire_yeri`, `rekreasyon`, `kent_ormani`,
|
|
135
|
+
`aile_sagligi_merkezi`, `devlet_hastanesi`, `saglik_kampusu`, `kulturel_tesis`,
|
|
136
|
+
`sosyal_tesis`, `kucuk_ibadet_yeri`, `orta_ibadet_yeri`, `buyuk_ibadet_yeri`,
|
|
137
|
+
`teknik_altyapi`, `otopark`, `resmi_kurum`. Tam liste: `tr-donati standartlar --json`.
|
|
138
|
+
|
|
139
|
+
### Eşleştirme dosyası
|
|
140
|
+
|
|
141
|
+
Kullanım adları normalize edilir (`"Çocuk Bahçesi"` → `cocuk_bahcesi`). Varsayılan eşleştirme
|
|
142
|
+
tesis kimliklerini, etiketlerini ve yaygın eş anlamlıları (Kreş, ASM, Cami, Hastane, Trafo...)
|
|
143
|
+
tanır. Kendi kodlarınız için:
|
|
144
|
+
|
|
145
|
+
```json
|
|
146
|
+
{"mapping": {"1101": "park", "1204": {"ilkokul": 0.5, "ortaokul": 0.5}}}
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
veya CSV (`kod;tesis;pay`). Varsayılan olarak "İlköğretim alanı" ilkokul/ortaokul arasında
|
|
150
|
+
%50-%50 bölünür; bu bir varsayımdır, gerekirse değiştirin.
|
|
151
|
+
|
|
152
|
+
### Standartları değiştirme
|
|
153
|
+
|
|
154
|
+
Yönetmelik Md. 11/2 kentsel asgari standartların çevre düzeni planıyla belirlenebileceğini,
|
|
155
|
+
EK-2 açıklama 13 ise asgari alan büyüklüklerinin ilgili bakanlık düzenlemelerine göre
|
|
156
|
+
belirlenebileceğini söyler. Bu yüzden tüm değerler değiştirilebilir:
|
|
157
|
+
|
|
158
|
+
```python
|
|
159
|
+
t = td.StandardsTable.default().with_overrides({
|
|
160
|
+
"meta": {"annex_version": "X Çevre Düzeni Planı hükümleri"},
|
|
161
|
+
"categories": {"acik_yesil_ilce": {"per_capita": [12, 12, 12, 12]}},
|
|
162
|
+
"facilities": {"ilkokul": {"min_area": [[6000, 9000]] * 4}},
|
|
163
|
+
})
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
Değiştirilmiş tablo raporlarda "kullanıcı tarafından değiştirilmiştir" uyarısıyla belirtilir.
|
|
167
|
+
|
|
168
|
+
## Yöntem ve kaynaklar
|
|
169
|
+
|
|
170
|
+
- **Birincil kaynak:** Mekânsal Planlar Yapım Yönetmeliği, RG 14/6/2014 sayı 29030, Md. 11 ve
|
|
171
|
+
EK-2 (Değişik: RG 17/5/2017-30069). Değerler mevzuat.gov.tr'de yayımlanan resmi ek dosyasından
|
|
172
|
+
(`7.5.19788-ek.zip` → `EK-2.xlsx`) aktarılmış, RG 22/1/2026-33145 değişikliği işlenmiş
|
|
173
|
+
konsolide metinle karşılaştırılmıştır (EK-2 2017'den bu yana değişmemiştir). Kaynak bilgisi
|
|
174
|
+
`src/tr_donati/data/ek2_2017.json` içindeki `meta` alanındadır; EK-2'nin 13 açıklaması
|
|
175
|
+
aynen `notes` alanında yer alır.
|
|
176
|
+
- **Nüfus grubu:** EK-2 açıklama 1'e göre ilçe projeksiyon nüfusuyla seçilir
|
|
177
|
+
(`settlement_population`). Gerekli alan = kişi başı standart × planlanan nüfus.
|
|
178
|
+
- **Açık-yeşil alan kuralı (açıklama 9):** çocuk bahçesi, oyun alanı, park, meydan ve semt spor
|
|
179
|
+
alanı toplamı %75'in altına düşemez. Paydanın metinde açıkça belirtilmemesi nedeniyle paket
|
|
180
|
+
bunu standardın %75'i (0,75 × 10 m²/kişi × nüfus) olarak denetler ve sunulan yeşil alan
|
|
181
|
+
içindeki payı ayrıca raporlar.
|
|
182
|
+
- **İl bütünü (açıklama 10):** `scope="il"` ile hayvanat bahçesi, kent ormanı, ağaçlandırılacak
|
|
183
|
+
alan, fuar ve hipodrom için +5 m²/kişi; toplam 15 m²/kişi kuralı denetlenir.
|
|
184
|
+
- **Asgari birim alan:** tablodaki aralığın alt sınırı asgari değer olarak kullanılır; yatak/ünit
|
|
185
|
+
bazlı tesislerde alan = birim alan × yatak/ünit sayısı. Md. 11/3 ve açıklama 13 istisnaları
|
|
186
|
+
nedeniyle bu kontroller uyarı niteliğindedir.
|
|
187
|
+
- **Alan hesabı:** projeksiyonlu koordinatlarda shoelace formülü; boylam/enlem koordinatlarında
|
|
188
|
+
küre üzerinde Chamberlain & Duquette (2007, *Some algorithms for polygons on a sphere*, JPL
|
|
189
|
+
07-03) çizgi integrali (R = 6.371.008,8 m; elipsoide göre hata < ~%0,5). Kesin alan için verinizi
|
|
190
|
+
TUREF/TM gibi metrik bir projeksiyona dönüştürün.
|
|
191
|
+
- **Mesafe:** düzlemde Öklid, coğrafi koordinatta haversine veya kullanıcı mesafe matrisi.
|
|
192
|
+
|
|
193
|
+
## Sınırlamalar
|
|
194
|
+
|
|
195
|
+
- **Hizmet yarıçapları yönetmelikte yoktur.** `DEFAULT_SERVICE_RADII` (çocuk bahçesi 300 m,
|
|
196
|
+
park 500 m, anaokulu 500 m, ilkokul 800 m, ortaokul 1.000 m, lise 1.500 m, ASM 1.000 m,
|
|
197
|
+
ibadet yeri 500 m, semt spor alanı 1.000 m) planlama eğitiminde kullanılan **gösterge**
|
|
198
|
+
değerlerdir; birincil kaynakla doğrulanmamıştır. Resmi değerlendirmelerde `--yaricap` ile
|
|
199
|
+
kendi değerinizi verin.
|
|
200
|
+
- Kuş uçuşu mesafe gerçek yürüme mesafesini olduğundan kısa gösterir; ağ analizi sonuçlarını
|
|
201
|
+
`--mesafeler` ile verebilirsiniz.
|
|
202
|
+
- Otopark ihtiyacı Otopark Yönetmeliği'ne tabidir ve bu pakette hesaplanmaz.
|
|
203
|
+
- Kaynak tabloda son nüfus grubu "501.000 +" olarak yazılmıştır; 500.001-500.999 aralığı bu
|
|
204
|
+
gruba atanmıştır.
|
|
205
|
+
- Varsayılan eşleştirmedeki eş anlamlılar (ör. "Hastane" → devlet hastanesi, "İlköğretim" →
|
|
206
|
+
%50 ilkokul + %50 ortaokul) varsayımdır.
|
|
207
|
+
- Koruma amaçlı imar planları (Md. 11/4), turizm alanları (Md. 11/5) ve 6306 sayılı Kanun
|
|
208
|
+
planları (açıklama 11) için özel hükümler otomatik uygulanmaz.
|
|
209
|
+
- Bu araç karar desteği içindir; resmi plan onay ve denetim süreçlerinin yerine geçmez.
|
|
210
|
+
|
|
211
|
+
## Akademik atıf
|
|
212
|
+
|
|
213
|
+
```bibtex
|
|
214
|
+
@software{eminoglu_tr_donati,
|
|
215
|
+
author = {Eminoğlu, Yusuf},
|
|
216
|
+
title = {tr-donati},
|
|
217
|
+
year = {2026},
|
|
218
|
+
version = {0.1.0},
|
|
219
|
+
url = {https://github.com/YusufEminoglu/tr_donati_sdk}
|
|
220
|
+
}
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
Ayrıca bkz. `CITATION.cff`.
|
|
224
|
+
|
|
225
|
+
## Lisans
|
|
226
|
+
|
|
227
|
+
MIT © 2026 Yusuf Eminoğlu. Bkz. [LICENSE](LICENSE).
|