Faza 1 · nastavak
Povezivanje izvora u jedinstveni skup
Nakon geolokacije, tri izvora spajamo u jedan skup u kojem jedan red = jedan požarni događaj, s podacima iz svih izvora koji ga potvrđuju.
Ideja
Svaki izvor sam po sebi vidi samo dio slike. Ako isti požar spomenu i vatrogasna evidencija i svjedok na Facebooku, imamo bogatiji i pouzdaniji zapis o događaju. Zato tražimo koji zapisi iz različitih izvora zapravo opisuju isti događaj.
Sidro i izvori
- Sidro — FIMS intervencije (5034 događaja s koordinatama, 2017–2021): imaju vrijeme, lokaciju i resurse. Oni su „popis događaja".
- HVZ izvješća i Facebook objave geolociraju se našim geolokatorom → dobiju koordinate, pa se kače na FIMS događaje.
Kako spajamo
Objava/izvješće pripada FIMS događaju ako mu je dovoljno blizu u prostoru i vremenu:
| Kriterij | Prag |
|---|---|
| Udaljenost lokacije | ≤ 5 km (haversine, po koordinatama) |
| Razlika u vremenu | ± 1 dan (isti ili uzastopni dan) |
Pragovi (5 km, ±1 dan) lako se mijenjaju u spoji.py (varijable R_KM i D_DANA).
Kod objašnjen (korak po korak)
Sav kod je u jednoj datoteci 📄 Otvori spoji.py
1 · Udaljenost dviju točaka (haversine)
Udaljenost između dvije koordinate na Zemlji računa se „haversine" formulom, u kilometrima:
def haversine(lat1, lon1, lat2, lon2):
R = 6371.0 # polumjer Zemlje (km)
...
return 2 * R * arcsin(sqrt(a)) # udaljenost u km
Radi na cijelom nizu FIMS točaka odjednom (brzo, preko numpy).
2 · Geolokacija s pamćenjem (cache)
HVZ i FB tekstovi geolociraju se našim geolokatorom. LLM pozivi koštaju, pa se rezultati spremaju u datoteku i sljedeći put učitavaju bez novih poziva:
if tekst in cache: # već geolocirano → uzmi iz datoteke
lat, lon = cache[tekst]
else: # novo → pozovi model (paralelno, 8 niti)
...
Zato je i kasnije mijenjanje pragova besplatno (koristi spremljene koordinate).
3 · Spajanje — prvo vrijeme, pa udaljenost
Za svaku objavu/izvješće prvo se izdvoje FIMS događaji u vremenskom prozoru, pa se među njima traže oni u radijusu:
for objava in izvor:
blizu = |datum_fims - datum_objave| <= D_DANA # 1) suzi po danu (jeftino)
dist = haversine(objava, fims[blizu]) # 2) izračunaj udaljenost
pogodak = fims[blizu][dist <= R_KM] # 3) zadrži ≤ R km
Prvo vremenski filter (jeftin) drastično smanjuje koliko udaljenosti treba računati.
Rezultati i usporedba pristupa
Način geolokacije bira se u spoji.py (varijabla PRISTUP = „regex" ili „llm"). LLM daje točnije koordinate (disambiguacija po županiji) pa i više veza, uz iste pragove:
| Mjera (sidro: 5034 FIMS događaja) | Regex | LLM |
|---|---|---|
| Događaja iz više izvora | 123 | 143 |
| samo HVZ / samo FB / oba | 45 / 76 / 2 | 57 / 84 / 2 |
| parova HVZ↔FIMS / FB↔FIMS | 49 / 93 | 60 / 99 |
LLM pristup dao je ~16 % više povezanih događaja — potvrda da bolja geolokacija izravno poboljšava povezivanje.
Osjetljivost na pragove (LLM)
Labavljenjem pragova raste obuhvat, ali i rizik lažnih spajanja (drugi požar u blizini ili unutar nekoliko dana). Događaji potvrđeni iz oba izvora (HVZ i Facebook) najpouzdaniji su:
| Radijus \ Vrijeme | ± 1 dan | ± 2 dana |
|---|---|---|
| 3 km | 102 (1 iz oba) | 152 (4) |
| 5 km | 143 (2) | 220 (7) |
| 10 km | 263 (5) | 408 (16) |
Operativna točka bira se prema potrebi (preciznost ↔ obuhvat) mijenjanjem R_KM i D_DANA u spoji.py.
Primjeri višeizvornih događaja: požar u Trogiru (3. 8. 2021.) potvrđen iz vatrogasne evidencije i 5 Facebook objava svjedoka; veliki požar u Segetu Gornjem (2. 8. 2021., vrlo mnogo angažiranih resursa); te Brist, Dugi Rat, Omiš… — svi u Splitsko-dalmatinskoj.
Povezani događaji padaju u razdoblja gdje se izvori preklapaju (2019.–2021.); ukupni broj je umjeren jer se vremenski rasponi izvora samo djelomično poklapaju.
Kako pokrenuti
cd spajanje_izvora
python spoji.pyRezultat se sprema u spajanje_izvora/rezultati/events.csv (jedan red po događaju + n_hvz, n_fb, n_izvora).
Ograničenja i sljedeće
- Preklapanje razdoblja — glavno ograničenje; više povezanih događaja tamo gdje se izvori vremenski poklapaju.
- Kvaliteta koordinata — LLM geolokacija (disambiguacija po županiji) već daje ~16 % više veza; regex ostaje kao brza, besplatna varijanta (prebacivanje:
PRISTUP). - Pragovi — labaviji radijus/prozor (npr. 10 km, ±2 dana) daju više veza; treba uravnotežiti s preciznošću.
- Nakon toga slijedi priprema za javnu objavu (GDPR anonimizacija) i prijelaz na Fazu 2 (mjera težine).