tr-gurultu 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_gurultu-0.1.0/CHANGELOG.md +22 -0
  2. tr_gurultu-0.1.0/CITATION.cff +20 -0
  3. tr_gurultu-0.1.0/LICENSE +21 -0
  4. tr_gurultu-0.1.0/MANIFEST.in +9 -0
  5. tr_gurultu-0.1.0/PKG-INFO +240 -0
  6. tr_gurultu-0.1.0/README.md +204 -0
  7. tr_gurultu-0.1.0/examples/quickstart.py +51 -0
  8. tr_gurultu-0.1.0/pyproject.toml +110 -0
  9. tr_gurultu-0.1.0/setup.cfg +4 -0
  10. tr_gurultu-0.1.0/src/tr_gurultu/__init__.py +132 -0
  11. tr_gurultu-0.1.0/src/tr_gurultu/__main__.py +7 -0
  12. tr_gurultu-0.1.0/src/tr_gurultu/_version.py +1 -0
  13. tr_gurultu-0.1.0/src/tr_gurultu/cli.py +369 -0
  14. tr_gurultu-0.1.0/src/tr_gurultu/construction.py +279 -0
  15. tr_gurultu-0.1.0/src/tr_gurultu/decibel.py +152 -0
  16. tr_gurultu-0.1.0/src/tr_gurultu/errors.py +7 -0
  17. tr_gurultu-0.1.0/src/tr_gurultu/exceedance.py +199 -0
  18. tr_gurultu-0.1.0/src/tr_gurultu/exposure.py +224 -0
  19. tr_gurultu-0.1.0/src/tr_gurultu/indicators.py +320 -0
  20. tr_gurultu-0.1.0/src/tr_gurultu/io.py +149 -0
  21. tr_gurultu-0.1.0/src/tr_gurultu/limits.py +471 -0
  22. tr_gurultu-0.1.0/src/tr_gurultu/propagation.py +137 -0
  23. tr_gurultu-0.1.0/src/tr_gurultu/py.typed +0 -0
  24. tr_gurultu-0.1.0/src/tr_gurultu/report.py +148 -0
  25. tr_gurultu-0.1.0/src/tr_gurultu.egg-info/PKG-INFO +240 -0
  26. tr_gurultu-0.1.0/src/tr_gurultu.egg-info/SOURCES.txt +36 -0
  27. tr_gurultu-0.1.0/src/tr_gurultu.egg-info/dependency_links.txt +1 -0
  28. tr_gurultu-0.1.0/src/tr_gurultu.egg-info/entry_points.txt +2 -0
  29. tr_gurultu-0.1.0/src/tr_gurultu.egg-info/requires.txt +6 -0
  30. tr_gurultu-0.1.0/src/tr_gurultu.egg-info/top_level.txt +1 -0
  31. tr_gurultu-0.1.0/tests/test_cli.py +198 -0
  32. tr_gurultu-0.1.0/tests/test_construction.py +123 -0
  33. tr_gurultu-0.1.0/tests/test_decibel.py +77 -0
  34. tr_gurultu-0.1.0/tests/test_exceedance.py +86 -0
  35. tr_gurultu-0.1.0/tests/test_indicators.py +198 -0
  36. tr_gurultu-0.1.0/tests/test_io_doctests.py +88 -0
  37. tr_gurultu-0.1.0/tests/test_limits.py +187 -0
  38. tr_gurultu-0.1.0/tests/test_propagation_exposure.py +131 -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
+ - Noise indicators Lgündüz, Lakşam, Lgece and Lgag (Lden) from hourly or arbitrary
10
+ interval LAeq values, with period splitting at 07:00/19:00/23:00, multi-day pooling,
11
+ coverage reporting and configurable period schemes.
12
+ - Energetic decibel sum, (time-weighted) mean, subtraction and background correction.
13
+ - Limit tables of the Çevresel Gürültü Kontrol Yönetmeliği (RG 30.11.2022/32029)
14
+ Ek-2 Tablo 1, and of the repealed 2010 regulation (Ek-VII, area types) for reference;
15
+ user overrides via Python or JSON.
16
+ - Exceedance check with Turkish text and Markdown reports, LCmax 100 dB(C) check.
17
+ - Construction site and outdoor activity time windows (Ek-2 Tablo 2), 2010 construction limits.
18
+ - Screening distance attenuation for point and line sources (geometric divergence,
19
+ ISO 9613-2 Adiv, optional air absorption) and buffer distances.
20
+ - Population exposure bands (50-54 … ≥75 dB) with rounding to the nearest hundred,
21
+ END presets, totals above 55/65/75 dB.
22
+ - `tr-gurultu` command-line interface with Turkish help and output.
@@ -0,0 +1,20 @@
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-gurultu"
9
+ version: "0.1.0"
10
+ date-released: "2026-11-09"
11
+ license: "MIT"
12
+ repository-code: "https://gitlab.com/geophilo1/tr_gurultu_sdk"
13
+ url: "https://pypi.org/project/tr-gurultu/"
14
+ abstract: "Turkish environmental noise regulation helpers: Lgündüz/Lakşam/Lgece/Lgag (Lden) indicators from hourly or interval Leq data, limit values and exceedance reports under the Çevresel Gürültü Kontrol Yönetmeliği (2022), construction-site rules, decibel arithmetic, screening distance attenuation and noise-map exposure bands."
15
+ keywords:
16
+ - environmental noise
17
+ - Lden
18
+ - noise limits
19
+ - noise mapping
20
+ - Turkey
@@ -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_gurultu/py.typed
7
+ recursive-include src/tr_gurultu *.py
8
+ recursive-include tests *.py
9
+ recursive-include examples *.py *.csv *.json
@@ -0,0 +1,240 @@
1
+ Metadata-Version: 2.4
2
+ Name: tr-gurultu
3
+ Version: 0.1.0
4
+ Summary: Turkish environmental noise regulation helpers: Lgündüz/Lakşam/Lgece/Lgag (Lden) indicators, limit values and exceedance reports, construction-site rules, decibel arithmetic, screening distance attenuation and noise-map exposure bands (Çevresel Gürültü Kontrol Yönetmeliği 2022).
5
+ Author-email: Yusuf Eminoğlu <geospacephilo@gmail.com>
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://gitlab.com/geophilo1/tr_gurultu_sdk
8
+ Project-URL: Repository, https://gitlab.com/geophilo1/tr_gurultu_sdk
9
+ Project-URL: Issues, https://gitlab.com/geophilo1/tr_gurultu_sdk/-/work_items
10
+ Project-URL: Changelog, https://gitlab.com/geophilo1/tr_gurultu_sdk/-/blob/main/CHANGELOG.md
11
+ Keywords: noise,environmental-noise,gurultu,lden,lgag,noise-indicators,noise-limits,noise-map,acoustics,decibel,turkey,turkiye,regulation,urban-planning
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 :: Scientific/Engineering :: Physics
24
+ Classifier: Intended Audience :: Science/Research
25
+ Classifier: Intended Audience :: Developers
26
+ Classifier: Typing :: Typed
27
+ Requires-Python: >=3.9
28
+ Description-Content-Type: text/markdown
29
+ License-File: LICENSE
30
+ Provides-Extra: dev
31
+ Requires-Dist: pytest>=7.0.0; extra == "dev"
32
+ Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
33
+ Requires-Dist: ruff>=0.1.0; extra == "dev"
34
+ Requires-Dist: mypy>=1.0.0; extra == "dev"
35
+ Dynamic: license-file
36
+
37
+ # tr-gurultu
38
+
39
+ [![PyPI](https://img.shields.io/pypi/v/tr-gurultu.svg)](https://pypi.org/project/tr-gurultu/)
40
+ [![Python](https://img.shields.io/pypi/pyversions/tr-gurultu.svg)](https://pypi.org/project/tr-gurultu/)
41
+ [![pipeline](https://gitlab.com/geophilo1/tr_gurultu_sdk/badges/main/pipeline.svg)](https://gitlab.com/geophilo1/tr_gurultu_sdk/-/pipelines)
42
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
43
+
44
+ **English summary.** `tr-gurultu` is a dependency-free Python library and CLI for
45
+ environmental noise assessment under the Turkish *Çevresel Gürültü Kontrol Yönetmeliği*
46
+ (Environmental Noise Control Regulation, Official Gazette 30.11.2022 No. 32029). It
47
+ computes the noise indicators Lgündüz, Lakşam, Lgece and Lgag (Lden) from hourly or
48
+ interval Leq data, checks levels against the regulation's limit values (and the repealed
49
+ 2010 area-type tables for reference), screens construction-site hours, does energetic
50
+ decibel arithmetic and simple distance attenuation, and builds the population exposure
51
+ band tables used in strategic noise maps. Reports and CLI output are in Turkish.
52
+
53
+ ---
54
+
55
+ **Türkçe.** `tr-gurultu`, *Çevresel Gürültü Kontrol Yönetmeliği* (Resmî Gazete
56
+ 30.11.2022, sayı 32029) kapsamında çevresel gürültü değerlendirmesi için bağımlılıksız
57
+ bir Python kütüphanesi ve komut satırı aracıdır:
58
+
59
+ - **Gürültü göstergeleri:** saatlik veya istenen sürede (ör. 5 dakikalık) Leq
60
+ verisinden Lgündüz, Lakşam, Lgece ve Lgag (Lden). Dönem sınırlarını (07:00, 19:00,
61
+ 23:00) aşan aralıklar bölünür, birden çok günün verisi enerjetik olarak birleştirilir,
62
+ her dönemin kapsanan süresi raporlanır.
63
+ - **Desibel aritmetiği:** enerjetik toplama, (zaman ağırlıklı) ortalama, çıkarma ve
64
+ arka plan gürültüsü düzeltmesi.
65
+ - **Sınır değerler:** 2022 yönetmeliğinin Ek-2 Tablo 1'i (endüstri, ulaşım, müzik yayını
66
+ yapan işyerleri, işyerleri, LCmax) ve başvuru için yürürlükten kaldırılmış 2010
67
+ yönetmeliğinin alan türüne göre tabloları (kara yolu, hava alanı, endüstri, şantiye,
68
+ raylı sistem, eğlence yerleri). Tüm tablolar kullanıcı tarafından (Python veya JSON
69
+ ile) değiştirilebilir; örneğin İl Mahalli Çevre Kurulu kararları.
70
+ - **Aşım kontrolü ve rapor:** dönem bazında ölçülen/sınır/fark tablosu, Türkçe metin ve
71
+ Markdown rapor, JSON çıktı.
72
+ - **Şantiye:** Ek-2 Tablo 2 izinli saatleri (şantiye 10:00-22:00, açık hava etkinlikleri
73
+ 10:00-01:00, havai fişek 20:00-22:00, patlatma 10:00-20:00), LCmax 100 dB(C) ve 2010
74
+ Tablo-5 sınırları.
75
+ - **Mesafe azalımı:** nokta ve çizgi kaynak için geometrik yayılma, ses gücünden ses
76
+ basıncı düzeyi (ISO 9613-2 Adiv), tampon mesafe hesabı (ön değerlendirme).
77
+ - **Maruziyet tablosu:** gürültü haritası alıcı noktalarından 50-54, 55-59 … ≥75 dB
78
+ aralıklarına düşen nüfus/konut sayıları, en yakın yüzlüğe yuvarlama ve 55/65/75 dB
79
+ üzeri toplamlar.
80
+
81
+ ```bash
82
+ pip install tr-gurultu
83
+ ```
84
+
85
+ Python 3.9 veya üstü gerekir; çalışma zamanı bağımlılığı yoktur.
86
+
87
+ ## Hızlı başlangıç (Python)
88
+
89
+ ```python
90
+ from tr_gurultu import (
91
+ indicators_from_hourly, get_limit, check_compliance,
92
+ db_sum, level_at_distance, exposure_table, check_construction,
93
+ )
94
+
95
+ # 00:00'dan 23:00'e 24 saatlik LAeq,1h değerleri
96
+ hourly = [52.1, 50.4, 49.8, 49.5, 50.2, 53.7, 58.9, 63.5,
97
+ 66.2, 65.8, 65.1, 64.9, 65.3, 65.0, 64.8, 65.2,
98
+ 66.0, 66.4, 65.7, 63.9, 62.5, 61.8, 60.2, 57.0]
99
+ ind = indicators_from_hourly(hourly)
100
+ print(round(ind.lgunduz, 1), round(ind.laksam, 1), round(ind.lgece, 1), round(ind.lgag, 1))
101
+ # 65.4 62.3 54.1 65.4
102
+
103
+ res = check_compliance(ind, get_limit("ulasim"), location="Örnek cephe")
104
+ print(res.to_text()) # Türkçe aşım raporu
105
+ res.exceeded # True (gündüz +0.4, akşam +2.3 dB)
106
+
107
+ db_sum([60, 60]) # 63.01 dB
108
+ level_at_distance(82, 10, 120) # nokta kaynak: 60.4 dB
109
+ check_construction("08:00", "23:00").hours_ok # False: 180 dk izin dışı
110
+ exposure_table([53.2, 57.9, 76.5], [120, 340, 14]).to_text()
111
+ ```
112
+
113
+ Aralık verisi (ör. 5 dakikalık ölçümler, birden çok gün) için:
114
+
115
+ ```python
116
+ from tr_gurultu import indicators_from_intervals
117
+ ind = indicators_from_intervals([
118
+ ("2025-06-01T18:30:00", 60, 70.0), # (başlangıç, süre_dk, LAeq) — 30 dk gündüz + 30 dk akşam
119
+ ("23:00", 480, 50.0),
120
+ ("07:00", 690, 70.0),
121
+ ])
122
+ ```
123
+
124
+ ## Hızlı başlangıç (komut satırı)
125
+
126
+ ```bash
127
+ tr-gurultu gosterge olcum.csv # 'saat;leq' veya 'baslangic;sure_dk;leq'
128
+ tr-gurultu lgag 65 62 57 # Lgag = 66.1 dB(A)
129
+ tr-gurultu topla 68 71 # enerjetik toplam
130
+ tr-gurultu ortalama 70 50 --agirlik 45,15 # zaman ağırlıklı ortalama
131
+ tr-gurultu arkaplan 60 55 # arka plan düzeltmesi
132
+ tr-gurultu sinir # 2022 sınır değer tablosu
133
+ tr-gurultu sinir --surum 2010 # 2010 tabloları (kaldırıldı, başvuru)
134
+ tr-gurultu kontrol --kaynak ulasim --gunduz 66 --aksam 58 --gece 56 --lcmax 98
135
+ tr-gurultu kontrol --kaynak isyeri --gunduz 54 --arka-plan 50
136
+ tr-gurultu kontrol --kaynak karayolu --surum 2010 --alan konut --tur mevcut --dosya olcum.csv
137
+ tr-gurultu mesafe --duzey 82 --ref 10 --mesafe 120 --hedef 55
138
+ tr-gurultu santiye --baslangic 08:00 --bitis 23:00 --lcmax 97
139
+ tr-gurultu maruziyet alicilar.csv --nufus-sutun nufus --csv
140
+ tr-gurultu kategori 62 # 2010 madde 27 planlama kategorisi
141
+ ```
142
+
143
+ Her komut `--json` ile makine tarafından okunabilir çıktı verir. `kontrol` ve `santiye`
144
+ komutları aşım olduğunda çıkış kodu **1**, hata durumunda **2** döndürür; betiklerde ve
145
+ sürekli entegrasyonda kullanılabilir. CSV dosyaları UTF-8 (BOM'lu olabilir) veya
146
+ Windows-1254, `;`/`,`/sekme ayırıcılı ve ondalık virgüllü olabilir.
147
+
148
+ ## API özeti
149
+
150
+ | İşlev / sınıf | Açıklama |
151
+ |---|---|
152
+ | `indicators_from_hourly(values)` | 24×n saatlik değer veya `{saat: leq}` → `NoiseIndicators` |
153
+ | `indicators_from_intervals(items)` | `(başlangıç, süre_dk, leq)` aralıkları → `NoiseIndicators` |
154
+ | `lgag(ld, le, ln)` / `lden` | Ek-3 madde 2.1 formülü |
155
+ | `PeriodScheme(...)` | dönem başlangıçları ve cezalar (varsayılan 07/19/23, +5/+10 dB) |
156
+ | `db_sum`, `db_mean`, `db_subtract`, `background_correction` | desibel aritmetiği |
157
+ | `get_limit(kaynak, alan, edition=, variant=)` | `LimitValue` (gündüz/akşam/gece) |
158
+ | `LIMITS_2022`, `LIMITS_2010`, `load_limit_table(json)` | tablolar ve kullanıcı değişiklikleri |
159
+ | `check_compliance(levels, limit, background=, lcmax=)` | `ComplianceResult` (`to_text`, `to_markdown`, `to_dict`) |
160
+ | `check_construction(start, end, ...)`, `is_permitted` | şantiye ve açık hava faaliyet saatleri |
161
+ | `level_at_distance`, `distance_for_level`, `lw_to_lp`, `lw_line_to_lp` | mesafe azalımı |
162
+ | `exposure_table(levels, weights, bands=)`, `exposure_above` | maruziyet tabloları |
163
+ | `planning_category_2010(lgunduz)` | 2010 madde 27 A-D kategorisi |
164
+
165
+ Sınır değerlerin değiştirilmesi:
166
+
167
+ ```python
168
+ from tr_gurultu import LIMITS_2022, get_limit
169
+ karar = LIMITS_2022.with_overrides({"ulasim": {"gece": 50},
170
+ "sessiz_alan": {"gunduz": 50, "aksam": 45, "gece": 40}})
171
+ get_limit("sessiz_alan", table=karar)
172
+ ```
173
+
174
+ ```json
175
+ {"endustri": {"gece": 50}, "sessiz_alan": {"gunduz": 50, "aksam": 45, "gece": 40}}
176
+ ```
177
+
178
+ `tr-gurultu kontrol ... --sinir-dosyasi karar.json`
179
+
180
+ ## Yöntem ve kaynaklar
181
+
182
+ | Konu | Kaynak |
183
+ |---|---|
184
+ | Dönemler (gündüz 07-19, akşam 19-23, gece 23-07) | Çevresel Gürültü Kontrol Yönetmeliği (RG 30.11.2022/32029) Ek-1 (c), (ğ), (h) |
185
+ | Lgag formülü, 12/4/8 saat, +5/+10 dB | aynı yönetmelik Ek-3 madde 2.1; AB 2002/49/EC Ek I (Lden) |
186
+ | Sınır değerler 2022 (65/60/55; müzik 60/55/50, 63-250 Hz; işyeri arka plan +5/+3, çoklu +7/+5; LCmax 100 dB(C)) | Ek-2 Tablo 1 |
187
+ | İzinli saatler (şantiye 10-22, açık hava etkinlik 10-01, havai fişek 20-22, patlatma 10-20) | Ek-2 Tablo 2; kamu yararı projeleri Ek-2 madde 10; sınav günleri madde 11 |
188
+ | Maruziyet aralıkları 50-54 … >75 dB, yüzlüğe yuvarlama, >55/65/75 dB toplamları | Ek-3 madde 1.8.1.4, 1.8.1.5, 1.8.2.7 |
189
+ | 2010 tabloları (kara yolu, hava alanı, endüstri, şantiye), raylı/helikopter/su yolu 65/60/55, işyeri/eğlence arka plan + 5 dBA, madde 27 kategorileri | Çevresel Gürültünün Değerlendirilmesi ve Yönetimi Yönetmeliği (RG 04.06.2010/27601) Ek-VII ve madde 19-24, 27 (**30.11.2022'de yürürlükten kaldırıldı**) |
190
+ | Yüzlüğe yuvarlama kuralı (5150-5249 → 5200) | 2010 yönetmeliği Ek-VI 1.5 örneği |
191
+ | Nokta kaynak Adiv = 20 lg d + 11 dB | ISO 9613-2:1996 eşitlik (7) |
192
+ | Çizgi kaynak 10 lg(r2/r1), Lp = Lw' − 10 lg(2πd) | silindirik yayılma (temel akustik) |
193
+ | Arka plan düzeltmesi (≥10 dB düzeltme yok, 3-10 dB enerjetik çıkarma, <3 dB güvenilmez) | TS ISO 1996-2 uygulaması |
194
+
195
+ 2022 metni ve ek PDF'i Resmî Gazete'den, 2010 ekleri 04.06.2010 tarihli Resmî Gazete'nin
196
+ ek dosyasından doğrulanmıştır. Güncel metin: <https://www.mevzuat.gov.tr> (MevzuatNo 39864).
197
+
198
+ **Not:** Yönetmeliğin 2022 sürümünün adı *Çevresel Gürültü Kontrol Yönetmeliği*dir;
199
+ 2010 tarihli *Çevresel Gürültünün Değerlendirilmesi ve Yönetimi Yönetmeliği*ni
200
+ yürürlükten kaldırmıştır (madde 21).
201
+
202
+ ## Sınırlamalar
203
+
204
+ - Bu paket ön değerlendirme ve eğitim içindir; resmî akustik rapor, stratejik gürültü
205
+ haritası veya denetim ölçümünün yerini tutmaz. Ölçümler TS ISO 1996-1/-2'ye göre,
206
+ yetkin kişilerce yapılmalıdır.
207
+ - 2022 Tablo 1 sınırları **LAeq,5dk** (müzik yayınında 63-250 Hz bandında LAeq) olarak
208
+ tanımlıdır. `check_compliance` kendisine verilen düzeyi doğrudan karşılaştırır; uzun
209
+ dönem Lgündüz/Lakşam/Lgece ile karşılaştırmak bir yorumdur. 5 dakikalık değerleri tek
210
+ tek kontrol etmek için her aralığı ayrı ayrı verin.
211
+ - 2022 tablosunda alan türüne göre ayrım ve şantiyeler için düzey sınırı yoktur. Şantiye
212
+ düzeyi için il kurullarının uyguladığı değer `level_limit` ile verilebilir.
213
+ - 2010 tabloları yalnızca başvuru içindir, ilk yayımlanmış hâliyle aktarılmıştır;
214
+ 2011, 2015 ve 2022 değişiklikleri işlenmemiştir. 2010'daki "7-10 dBA" aralıkları için alt
215
+ sınır (7 dBA) kullanılır.
216
+ - Ek-2 madde 3'teki ton/darbe seviye ayarlamaları otomatik uygulanmaz.
217
+ - Mesafe azalımı yalnızca geometrik yayılma ve isteğe bağlı doğrusal hava yutmasıdır;
218
+ zemin etkisi, perdeleme, yansıma ve meteoroloji yoktur. Kaynak modellemesi (CNOSSOS-EU)
219
+ ve ISO 9613-2 yayılımı için aynı yazarın
220
+ [`roadnoise`](https://pypi.org/project/roadnoise/) paketine bakın; `tr-gurultu`
221
+ yönetmelik göstergeleri ve sınır değerlerine odaklanır.
222
+ - Arka plan düzeltmesi eşikleri (3 ve 10 dB) ISO 1996-2'nin yaygın uygulamasından
223
+ alınmıştır ve parametre olarak değiştirilebilir.
224
+
225
+ ## Akademik atıf
226
+
227
+ ```bibtex
228
+ @software{eminoglu_tr_gurultu,
229
+ author = {Eminoğlu, Yusuf},
230
+ title = {tr-gurultu},
231
+ year = {2026},
232
+ version = {0.1.0},
233
+ url = {https://gitlab.com/geophilo1/tr_gurultu_sdk}
234
+ }
235
+ ```
236
+
237
+ ## Lisans
238
+
239
+ MIT © 2026 Yusuf Eminoğlu. Ayrıntılar için [LICENSE](LICENSE). İletişim:
240
+ geospacephilo@gmail.com
@@ -0,0 +1,204 @@
1
+ # tr-gurultu
2
+
3
+ [![PyPI](https://img.shields.io/pypi/v/tr-gurultu.svg)](https://pypi.org/project/tr-gurultu/)
4
+ [![Python](https://img.shields.io/pypi/pyversions/tr-gurultu.svg)](https://pypi.org/project/tr-gurultu/)
5
+ [![pipeline](https://gitlab.com/geophilo1/tr_gurultu_sdk/badges/main/pipeline.svg)](https://gitlab.com/geophilo1/tr_gurultu_sdk/-/pipelines)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
7
+
8
+ **English summary.** `tr-gurultu` is a dependency-free Python library and CLI for
9
+ environmental noise assessment under the Turkish *Çevresel Gürültü Kontrol Yönetmeliği*
10
+ (Environmental Noise Control Regulation, Official Gazette 30.11.2022 No. 32029). It
11
+ computes the noise indicators Lgündüz, Lakşam, Lgece and Lgag (Lden) from hourly or
12
+ interval Leq data, checks levels against the regulation's limit values (and the repealed
13
+ 2010 area-type tables for reference), screens construction-site hours, does energetic
14
+ decibel arithmetic and simple distance attenuation, and builds the population exposure
15
+ band tables used in strategic noise maps. Reports and CLI output are in Turkish.
16
+
17
+ ---
18
+
19
+ **Türkçe.** `tr-gurultu`, *Çevresel Gürültü Kontrol Yönetmeliği* (Resmî Gazete
20
+ 30.11.2022, sayı 32029) kapsamında çevresel gürültü değerlendirmesi için bağımlılıksız
21
+ bir Python kütüphanesi ve komut satırı aracıdır:
22
+
23
+ - **Gürültü göstergeleri:** saatlik veya istenen sürede (ör. 5 dakikalık) Leq
24
+ verisinden Lgündüz, Lakşam, Lgece ve Lgag (Lden). Dönem sınırlarını (07:00, 19:00,
25
+ 23:00) aşan aralıklar bölünür, birden çok günün verisi enerjetik olarak birleştirilir,
26
+ her dönemin kapsanan süresi raporlanır.
27
+ - **Desibel aritmetiği:** enerjetik toplama, (zaman ağırlıklı) ortalama, çıkarma ve
28
+ arka plan gürültüsü düzeltmesi.
29
+ - **Sınır değerler:** 2022 yönetmeliğinin Ek-2 Tablo 1'i (endüstri, ulaşım, müzik yayını
30
+ yapan işyerleri, işyerleri, LCmax) ve başvuru için yürürlükten kaldırılmış 2010
31
+ yönetmeliğinin alan türüne göre tabloları (kara yolu, hava alanı, endüstri, şantiye,
32
+ raylı sistem, eğlence yerleri). Tüm tablolar kullanıcı tarafından (Python veya JSON
33
+ ile) değiştirilebilir; örneğin İl Mahalli Çevre Kurulu kararları.
34
+ - **Aşım kontrolü ve rapor:** dönem bazında ölçülen/sınır/fark tablosu, Türkçe metin ve
35
+ Markdown rapor, JSON çıktı.
36
+ - **Şantiye:** Ek-2 Tablo 2 izinli saatleri (şantiye 10:00-22:00, açık hava etkinlikleri
37
+ 10:00-01:00, havai fişek 20:00-22:00, patlatma 10:00-20:00), LCmax 100 dB(C) ve 2010
38
+ Tablo-5 sınırları.
39
+ - **Mesafe azalımı:** nokta ve çizgi kaynak için geometrik yayılma, ses gücünden ses
40
+ basıncı düzeyi (ISO 9613-2 Adiv), tampon mesafe hesabı (ön değerlendirme).
41
+ - **Maruziyet tablosu:** gürültü haritası alıcı noktalarından 50-54, 55-59 … ≥75 dB
42
+ aralıklarına düşen nüfus/konut sayıları, en yakın yüzlüğe yuvarlama ve 55/65/75 dB
43
+ üzeri toplamlar.
44
+
45
+ ```bash
46
+ pip install tr-gurultu
47
+ ```
48
+
49
+ Python 3.9 veya üstü gerekir; çalışma zamanı bağımlılığı yoktur.
50
+
51
+ ## Hızlı başlangıç (Python)
52
+
53
+ ```python
54
+ from tr_gurultu import (
55
+ indicators_from_hourly, get_limit, check_compliance,
56
+ db_sum, level_at_distance, exposure_table, check_construction,
57
+ )
58
+
59
+ # 00:00'dan 23:00'e 24 saatlik LAeq,1h değerleri
60
+ hourly = [52.1, 50.4, 49.8, 49.5, 50.2, 53.7, 58.9, 63.5,
61
+ 66.2, 65.8, 65.1, 64.9, 65.3, 65.0, 64.8, 65.2,
62
+ 66.0, 66.4, 65.7, 63.9, 62.5, 61.8, 60.2, 57.0]
63
+ ind = indicators_from_hourly(hourly)
64
+ print(round(ind.lgunduz, 1), round(ind.laksam, 1), round(ind.lgece, 1), round(ind.lgag, 1))
65
+ # 65.4 62.3 54.1 65.4
66
+
67
+ res = check_compliance(ind, get_limit("ulasim"), location="Örnek cephe")
68
+ print(res.to_text()) # Türkçe aşım raporu
69
+ res.exceeded # True (gündüz +0.4, akşam +2.3 dB)
70
+
71
+ db_sum([60, 60]) # 63.01 dB
72
+ level_at_distance(82, 10, 120) # nokta kaynak: 60.4 dB
73
+ check_construction("08:00", "23:00").hours_ok # False: 180 dk izin dışı
74
+ exposure_table([53.2, 57.9, 76.5], [120, 340, 14]).to_text()
75
+ ```
76
+
77
+ Aralık verisi (ör. 5 dakikalık ölçümler, birden çok gün) için:
78
+
79
+ ```python
80
+ from tr_gurultu import indicators_from_intervals
81
+ ind = indicators_from_intervals([
82
+ ("2025-06-01T18:30:00", 60, 70.0), # (başlangıç, süre_dk, LAeq) — 30 dk gündüz + 30 dk akşam
83
+ ("23:00", 480, 50.0),
84
+ ("07:00", 690, 70.0),
85
+ ])
86
+ ```
87
+
88
+ ## Hızlı başlangıç (komut satırı)
89
+
90
+ ```bash
91
+ tr-gurultu gosterge olcum.csv # 'saat;leq' veya 'baslangic;sure_dk;leq'
92
+ tr-gurultu lgag 65 62 57 # Lgag = 66.1 dB(A)
93
+ tr-gurultu topla 68 71 # enerjetik toplam
94
+ tr-gurultu ortalama 70 50 --agirlik 45,15 # zaman ağırlıklı ortalama
95
+ tr-gurultu arkaplan 60 55 # arka plan düzeltmesi
96
+ tr-gurultu sinir # 2022 sınır değer tablosu
97
+ tr-gurultu sinir --surum 2010 # 2010 tabloları (kaldırıldı, başvuru)
98
+ tr-gurultu kontrol --kaynak ulasim --gunduz 66 --aksam 58 --gece 56 --lcmax 98
99
+ tr-gurultu kontrol --kaynak isyeri --gunduz 54 --arka-plan 50
100
+ tr-gurultu kontrol --kaynak karayolu --surum 2010 --alan konut --tur mevcut --dosya olcum.csv
101
+ tr-gurultu mesafe --duzey 82 --ref 10 --mesafe 120 --hedef 55
102
+ tr-gurultu santiye --baslangic 08:00 --bitis 23:00 --lcmax 97
103
+ tr-gurultu maruziyet alicilar.csv --nufus-sutun nufus --csv
104
+ tr-gurultu kategori 62 # 2010 madde 27 planlama kategorisi
105
+ ```
106
+
107
+ Her komut `--json` ile makine tarafından okunabilir çıktı verir. `kontrol` ve `santiye`
108
+ komutları aşım olduğunda çıkış kodu **1**, hata durumunda **2** döndürür; betiklerde ve
109
+ sürekli entegrasyonda kullanılabilir. CSV dosyaları UTF-8 (BOM'lu olabilir) veya
110
+ Windows-1254, `;`/`,`/sekme ayırıcılı ve ondalık virgüllü olabilir.
111
+
112
+ ## API özeti
113
+
114
+ | İşlev / sınıf | Açıklama |
115
+ |---|---|
116
+ | `indicators_from_hourly(values)` | 24×n saatlik değer veya `{saat: leq}` → `NoiseIndicators` |
117
+ | `indicators_from_intervals(items)` | `(başlangıç, süre_dk, leq)` aralıkları → `NoiseIndicators` |
118
+ | `lgag(ld, le, ln)` / `lden` | Ek-3 madde 2.1 formülü |
119
+ | `PeriodScheme(...)` | dönem başlangıçları ve cezalar (varsayılan 07/19/23, +5/+10 dB) |
120
+ | `db_sum`, `db_mean`, `db_subtract`, `background_correction` | desibel aritmetiği |
121
+ | `get_limit(kaynak, alan, edition=, variant=)` | `LimitValue` (gündüz/akşam/gece) |
122
+ | `LIMITS_2022`, `LIMITS_2010`, `load_limit_table(json)` | tablolar ve kullanıcı değişiklikleri |
123
+ | `check_compliance(levels, limit, background=, lcmax=)` | `ComplianceResult` (`to_text`, `to_markdown`, `to_dict`) |
124
+ | `check_construction(start, end, ...)`, `is_permitted` | şantiye ve açık hava faaliyet saatleri |
125
+ | `level_at_distance`, `distance_for_level`, `lw_to_lp`, `lw_line_to_lp` | mesafe azalımı |
126
+ | `exposure_table(levels, weights, bands=)`, `exposure_above` | maruziyet tabloları |
127
+ | `planning_category_2010(lgunduz)` | 2010 madde 27 A-D kategorisi |
128
+
129
+ Sınır değerlerin değiştirilmesi:
130
+
131
+ ```python
132
+ from tr_gurultu import LIMITS_2022, get_limit
133
+ karar = LIMITS_2022.with_overrides({"ulasim": {"gece": 50},
134
+ "sessiz_alan": {"gunduz": 50, "aksam": 45, "gece": 40}})
135
+ get_limit("sessiz_alan", table=karar)
136
+ ```
137
+
138
+ ```json
139
+ {"endustri": {"gece": 50}, "sessiz_alan": {"gunduz": 50, "aksam": 45, "gece": 40}}
140
+ ```
141
+
142
+ `tr-gurultu kontrol ... --sinir-dosyasi karar.json`
143
+
144
+ ## Yöntem ve kaynaklar
145
+
146
+ | Konu | Kaynak |
147
+ |---|---|
148
+ | Dönemler (gündüz 07-19, akşam 19-23, gece 23-07) | Çevresel Gürültü Kontrol Yönetmeliği (RG 30.11.2022/32029) Ek-1 (c), (ğ), (h) |
149
+ | Lgag formülü, 12/4/8 saat, +5/+10 dB | aynı yönetmelik Ek-3 madde 2.1; AB 2002/49/EC Ek I (Lden) |
150
+ | Sınır değerler 2022 (65/60/55; müzik 60/55/50, 63-250 Hz; işyeri arka plan +5/+3, çoklu +7/+5; LCmax 100 dB(C)) | Ek-2 Tablo 1 |
151
+ | İzinli saatler (şantiye 10-22, açık hava etkinlik 10-01, havai fişek 20-22, patlatma 10-20) | Ek-2 Tablo 2; kamu yararı projeleri Ek-2 madde 10; sınav günleri madde 11 |
152
+ | Maruziyet aralıkları 50-54 … >75 dB, yüzlüğe yuvarlama, >55/65/75 dB toplamları | Ek-3 madde 1.8.1.4, 1.8.1.5, 1.8.2.7 |
153
+ | 2010 tabloları (kara yolu, hava alanı, endüstri, şantiye), raylı/helikopter/su yolu 65/60/55, işyeri/eğlence arka plan + 5 dBA, madde 27 kategorileri | Çevresel Gürültünün Değerlendirilmesi ve Yönetimi Yönetmeliği (RG 04.06.2010/27601) Ek-VII ve madde 19-24, 27 (**30.11.2022'de yürürlükten kaldırıldı**) |
154
+ | Yüzlüğe yuvarlama kuralı (5150-5249 → 5200) | 2010 yönetmeliği Ek-VI 1.5 örneği |
155
+ | Nokta kaynak Adiv = 20 lg d + 11 dB | ISO 9613-2:1996 eşitlik (7) |
156
+ | Çizgi kaynak 10 lg(r2/r1), Lp = Lw' − 10 lg(2πd) | silindirik yayılma (temel akustik) |
157
+ | Arka plan düzeltmesi (≥10 dB düzeltme yok, 3-10 dB enerjetik çıkarma, <3 dB güvenilmez) | TS ISO 1996-2 uygulaması |
158
+
159
+ 2022 metni ve ek PDF'i Resmî Gazete'den, 2010 ekleri 04.06.2010 tarihli Resmî Gazete'nin
160
+ ek dosyasından doğrulanmıştır. Güncel metin: <https://www.mevzuat.gov.tr> (MevzuatNo 39864).
161
+
162
+ **Not:** Yönetmeliğin 2022 sürümünün adı *Çevresel Gürültü Kontrol Yönetmeliği*dir;
163
+ 2010 tarihli *Çevresel Gürültünün Değerlendirilmesi ve Yönetimi Yönetmeliği*ni
164
+ yürürlükten kaldırmıştır (madde 21).
165
+
166
+ ## Sınırlamalar
167
+
168
+ - Bu paket ön değerlendirme ve eğitim içindir; resmî akustik rapor, stratejik gürültü
169
+ haritası veya denetim ölçümünün yerini tutmaz. Ölçümler TS ISO 1996-1/-2'ye göre,
170
+ yetkin kişilerce yapılmalıdır.
171
+ - 2022 Tablo 1 sınırları **LAeq,5dk** (müzik yayınında 63-250 Hz bandında LAeq) olarak
172
+ tanımlıdır. `check_compliance` kendisine verilen düzeyi doğrudan karşılaştırır; uzun
173
+ dönem Lgündüz/Lakşam/Lgece ile karşılaştırmak bir yorumdur. 5 dakikalık değerleri tek
174
+ tek kontrol etmek için her aralığı ayrı ayrı verin.
175
+ - 2022 tablosunda alan türüne göre ayrım ve şantiyeler için düzey sınırı yoktur. Şantiye
176
+ düzeyi için il kurullarının uyguladığı değer `level_limit` ile verilebilir.
177
+ - 2010 tabloları yalnızca başvuru içindir, ilk yayımlanmış hâliyle aktarılmıştır;
178
+ 2011, 2015 ve 2022 değişiklikleri işlenmemiştir. 2010'daki "7-10 dBA" aralıkları için alt
179
+ sınır (7 dBA) kullanılır.
180
+ - Ek-2 madde 3'teki ton/darbe seviye ayarlamaları otomatik uygulanmaz.
181
+ - Mesafe azalımı yalnızca geometrik yayılma ve isteğe bağlı doğrusal hava yutmasıdır;
182
+ zemin etkisi, perdeleme, yansıma ve meteoroloji yoktur. Kaynak modellemesi (CNOSSOS-EU)
183
+ ve ISO 9613-2 yayılımı için aynı yazarın
184
+ [`roadnoise`](https://pypi.org/project/roadnoise/) paketine bakın; `tr-gurultu`
185
+ yönetmelik göstergeleri ve sınır değerlerine odaklanır.
186
+ - Arka plan düzeltmesi eşikleri (3 ve 10 dB) ISO 1996-2'nin yaygın uygulamasından
187
+ alınmıştır ve parametre olarak değiştirilebilir.
188
+
189
+ ## Akademik atıf
190
+
191
+ ```bibtex
192
+ @software{eminoglu_tr_gurultu,
193
+ author = {Eminoğlu, Yusuf},
194
+ title = {tr-gurultu},
195
+ year = {2026},
196
+ version = {0.1.0},
197
+ url = {https://gitlab.com/geophilo1/tr_gurultu_sdk}
198
+ }
199
+ ```
200
+
201
+ ## Lisans
202
+
203
+ MIT © 2026 Yusuf Eminoğlu. Ayrıntılar için [LICENSE](LICENSE). İletişim:
204
+ geospacephilo@gmail.com
@@ -0,0 +1,51 @@
1
+ """tr-gurultu quick start (no network, no data files needed).
2
+
3
+ python examples/quickstart.py
4
+ """
5
+
6
+ from __future__ import annotations
7
+
8
+ from tr_gurultu import (
9
+ check_compliance,
10
+ check_construction,
11
+ db_sum,
12
+ distance_for_level,
13
+ exposure_table,
14
+ get_limit,
15
+ indicators_from_hourly,
16
+ level_at_distance,
17
+ )
18
+
19
+ # 1) Hourly LAeq,1h values at a facade next to a street (00:00 ... 23:00).
20
+ hourly = [
21
+ 52.1, 50.4, 49.8, 49.5, 50.2, 53.7, 58.9, 63.5, # 00-07
22
+ 66.2, 65.8, 65.1, 64.9, 65.3, 65.0, 64.8, 65.2, # 08-15
23
+ 66.0, 66.4, 65.7, 63.9, 62.5, 61.8, 60.2, 57.0, # 16-23
24
+ ] # fmt: skip
25
+ ind = indicators_from_hourly(hourly)
26
+ print(ind.to_text())
27
+ print()
28
+
29
+ # 2) Compare with the 2022 limit for transport sources (Ek-2 Tablo 1).
30
+ res = check_compliance(ind, get_limit("ulasim"), location="Örnek cephe")
31
+ print(res.to_text())
32
+ print()
33
+
34
+ # 3) The same point against the repealed 2010 road table (existing road, housing area).
35
+ old = check_compliance(ind, get_limit("karayolu", "konut", edition="2010", variant="mevcut"))
36
+ print(old.to_markdown())
37
+
38
+ # 4) Decibel arithmetic and screening distances.
39
+ print(f"İki kompresör (68 + 71 dB): {db_sum([68, 71]):.1f} dB")
40
+ print(f"10 m'de 82 dB nokta kaynak, 120 m'de: {level_at_distance(82, 10, 120):.1f} dB")
41
+ print(f"Gece 55 dB(A) için tampon mesafe: {distance_for_level(82, 10, 55):.0f} m")
42
+ print()
43
+
44
+ # 5) Construction schedule check.
45
+ print(check_construction("08:00", "23:00", lcmax=97).to_text())
46
+ print()
47
+
48
+ # 6) Exposure table from noise-map receivers (Lgag per building + residents).
49
+ levels = [53.2, 57.9, 61.4, 66.0, 71.2, 76.5, 48.0, 59.6]
50
+ residents = [120, 340, 455, 80, 62, 14, 30, 210]
51
+ print(exposure_table(levels, residents, indicator="Lgag").to_text())