# Izvori podataka karte „Gdje kupiti”

Preuzeto **28. 10. 2026.** Sirovi izvori i skripte su u `var/lokacije-2026-10-28/geometrija/` (gitignorirano).
Ova verzija zamjenjuje prvu (Natural Earth 1:10m obris i 10 gradova): NE obris griješi obalu do ~300 m
(Split i Pag grad bili su izvan obrisa), a 10 naselja ne služi za pretragu.

## Datoteke

| Datoteka | Veličina (gzip) | Sadržaj |
|---|---|---|
| `hrvatska.geojson` | 359 337 B (98 869 B) | Hrvatska: 1 `MultiPolygon`, **81 dio** (kopno, Pelješac s dubrovačkim područjem, 79 otoka i otočića), 20 185 točaka, 4 decimale |
| `more.geojson` | 363 454 B (99 802 B) | More unutar `[12.5, 41.6, 20.2, 47.0]`: 4 poligona (glavni ima 93 rupe), oko 20 400 točaka, 4 decimale |
| `gradovi.json` | 400 967 B (89 096 B) | **6 605 naselja** iz GeoNames: `{ naziv, lat, lng, rang }`, 4 decimale |
| `postanski-brojevi.json` | 445 565 B (78 473 B) | **6 774 zapisa** (309 različitih poštanskih brojeva): `{ pbr, naziv, lat, lng }` |

Veličine `hrvatska.geojson` i `more.geojson` su iznad ciljanih ~300 odnosno ~250 KB (vidi „Odstupanja”). Poslužuj ih gzipanima.

## Izvori i licence

### 1. Obris Hrvatske: geoBoundaries gbOpen, HRV ADM0

- Repozitorij: <https://github.com/wmgeolab/geoBoundaries>, commit `9469f09592ced973a3448cf66b6100b741b64c0d` (13. 12. 2023.).
  Datoteka: <https://github.com/wmgeolab/geoBoundaries/raw/9469f09/releaseData/gbOpen/HRV/ADM0/geoBoundaries-HRV-ADM0.geojson>
  (8 479 104 B, SHA-256 `03275cc3c3a723c2766d95af5609b572f098c511584cc29b8b08a24b501d72f2`, 220 510 točaka).
- Metapodaci te datoteke (API <https://www.geoboundaries.org/api/current/gbOpen/HRV/ADM0/>, `boundaryID` HRV-ADM0-1432937):
  izvor **„OpenStreetMap, Wambacher”** (`wambachers-osm.website/boundaries/`), izvorni podaci od 19. 1. 2023., `boundaryYearRepresented` 2017,
  licenca **Open Data Commons Open Database License 1.0 (ODbL)**, `licenseSource` www.openstreetmap.org/copyright.
- Tekst licence: <https://opendatacommons.org/licenses/odbl/1-0/> (i <https://www.openstreetmap.org/copyright>). ODbL dopušta komercijalnu uporabu.
- **Obveze ODbL-a:** (a) navesti „© OpenStreetMap contributors”; (b) `hrvatska.geojson` i `more.geojson` su izvedena baza (Derived Database)
  i ako se javno distribuiraju (a leže u `web/public`, dakle jesu), moraju se nuditi pod ODbL-om. Sama prikazana karta (Produced Work) traži samo atribuciju.
  Prije objave preporučujem da vlasnik to svjesno potvrdi.

### 2. Maska mora: kopno susjeda (samo za izrezivanje, ne crta se)

geoBoundaries gbOpen, isti commit `9469f09` (BIH: commit `f549eab`, koji API navodi za tu državu). Preuzete su i sve druge sirove datoteke
`geoBoundaries-<ISO>-ADM0.geojson` u `var/`. Licencija po datoteci iz metapodataka:

| Država | Izvor | Licenca |
|---|---|---|
| Italija (ITA) | ISTAT | CC BY 3.0 (<https://creativecommons.org/licenses/by/3.0/>), atribucija „ISTAT” |
| Slovenija (SVN), Albanija (ALB), Bosna i Hercegovina (BIH) | Wikimedia Commons / geoBoundaries | Public Domain |
| Crna Gora (MNE) | OpenStreetMap, Wambacher | ODbL 1.0 |
| Austrija, Mađarska, Srbija, Rumunjska, Kosovo | razno (CC BY-SA 2.0, CC0, ODbL, CC BY 3.0) | Rub tih država ne ulazi u `more.geojson` (vidi niže). Služe samo da uklone unutarnje procjepe. |

Obale susjeda u `more.geojson` dolaze iz ITA, SVN, BIH, MNE i ALB (pojednostavljene na 100 m). One se ne vide kao zasebni obrisi, samo kao rub mora.

### 3. Natural Earth 1:10m (pomoćno)

Samo ocean izrezan na okvir (`ne_10m_ocean.geojson`) služi kao filter: zadržavaju se poligoni mora koji leže u Jadranu, a odbacuju procjepi
između granica susjeda. Obalna linija iz NE ne ulazi u izlazne datoteke osim kao filter.
Natural Earth: <https://github.com/nvkelso/natural-earth-vector>, commit `ca96624a56bd078437bca8184e78163e5039ad19`, javno dobro
(<https://www.naturalearthdata.com/about/terms-of-use/>), preporučena atribucija „Made with Natural Earth”.

### 4. Naselja: GeoNames

- <https://download.geonames.org/export/dump/HR.zip> (800 346 B, SHA-256 `f03fc531e9d42a200ff5a9b6065ecd82dd7395f3008d6be7d52e59961ccf827b`, `HR.txt` zadnja izmjena 28. 10. 2026.).
- Licenca **Creative Commons Attribution 4.0** (<https://creativecommons.org/licenses/by/4.0/>), navedeno u `readme.txt` datoteke.

### 5. Poštanski brojevi: GeoNames postal codes

- <https://download.geonames.org/export/zip/HR.zip> (86 791 B, SHA-256 `7c42a6cbc1c822a3c0b1db5599f6ac0e767831d7e1b7bea7afdf4c8dad83c39b`, 6 774 reda).
- Licenca **Creative Commons Attribution 4.0** (<https://creativecommons.org/licenses/by/4.0/>), navedeno u `readme.txt` datoteke.

## OBAVEZNA ATRIBUCIJA

Uz kartu (npr. sitno „i” / „O podacima” ispod ili u kutu karte, vidljivo bez klika) mora stajati:

> Karta: © OpenStreetMap contributors (ODbL), preko geoBoundaries; More i obala susjeda: ISTAT (CC BY 3.0). Naselja i poštanski brojevi: © GeoNames, geonames.org (CC BY 4.0). Made with Natural Earth.

Kratka inačica uz kartu (s poveznicama): **© OpenStreetMap contributors · © GeoNames (CC BY 4.0) · ISTAT · Natural Earth**, gdje „OpenStreetMap contributors” vodi na
<https://www.openstreetmap.org/copyright>, a „GeoNames” na <https://www.geonames.org>. Puni tekst iznad treba biti dostupan (npr. u „O podacima” ili podnožju stranice).
GeoNames CC BY traži navođenje autora i izvora i oznaku da je podatak mijenjan: „Podaci prilagođeni (filtrirani, ispravljena dijakritika, preračunat rang)”.
Citiranje geoBoundaries (preporuka autora): Runfola, D. i dr. (2020), geoBoundaries: A global database of political administrative boundaries, PLoS ONE 15(4): e0231866.

## Naredbe obrade

Alat: `npx -y mapshaper@0.6` (0.6.121) i Node v24.17.0, u `var/lokacije-2026-10-28/geometrija/`.

```sh
# Obris Hrvatske: Douglas-Peucker s dvije tolerancije (obala 45 m, kopnena granica 250 m), 4 decimale
node izrada-obrisa.mjs gb_HRV_ADM0.geojson hrvatska_gb_pojednostavljena.geojson 45 250 4
cp hrvatska_gb_pojednostavljena.geojson ../../../web/public/karta/hrvatska.geojson

# Natural Earth ocean izrezan na okvir (filter)
npx -y mapshaper@0.6 ne_10m_ocean.geojson -clip bbox=12.5,41.6,20.2,47.0 -filter-fields featurecla \
  -o more_puno.geojson precision=0.00001 format=geojson

# Kopno susjeda (geoBoundaries), izrezano, spojeno i pojednostavljeno na 100 m
npx -y mapshaper@0.6 -i gb_ITA_ADM0.geojson gb_SVN_ADM0.geojson gb_BIH_ADM0.geojson gb_MNE_ADM0.geojson gb_ALB_ADM0.geojson \
  gb_AUT_ADM0.geojson gb_HUN_ADM0.geojson gb_SRB_ADM0.geojson gb_XKX_ADM0.geojson gb_ROU_ADM0.geojson combine-files \
  -clip bbox=12.4,41.5,20.3,47.1 target='*' -merge-layers -dissolve -o susjedi_gb.geojson format=geojson
npx -y mapshaper@0.6 susjedi_gb.geojson -simplify dp interval=100 keep-shapes -o susjedi_gb_s.geojson precision=0.0001 format=geojson

# More = okvir minus (pojednostavljena) Hrvatska minus kopno susjeda
npx -y mapshaper@0.6 -rectangle bbox=12.5,41.6,20.2,47.0 name=more -o more_t0.geojson format=geojson
npx -y mapshaper@0.6 -i hrvatska_gb_pojednostavljena.geojson susjedi_gb_s.geojson more_t0.geojson combine-files \
  -erase source=hrvatska_gb_pojednostavljena target=more_t0 -erase source=susjedi_gb_s target=more_t0 \
  -each 'naziv="More"' target=more_t0 -o more_t1.geojson target=more_t0 format=geojson
node filtriraj-more.mjs more_t1.geojson ../../../web/public/karta/more.geojson   # zadrži samo jadranske poligone, 4 decimale

# Naselja i poštanski brojevi
node izrada-gradova.mjs
node izrada-postanskih.mjs
```

Provjere: `provjera-tocaka.mjs`, `provjera-otoka.mjs`, `pogreska-obale.mjs`, `provjera-praznina.mjs`.

## Rezultati provjera

### Točnost obale (`hrvatska.geojson` prema geoBoundaries izvoru, uključuje zaokruživanje na 4 decimale)

- **Obala** (točke do 1,5 km od mora): srednje odstupanje **11,9 m**, 95. percentil 32,9 m, **najveće 49,8 m**.
- Kopnena granica (tolerancija 250 m): srednje 22,9 m za sve točke, najveće 252 m. Granica prema BiH, Srbiji, Mađarskoj i Sloveniji namjerno je grublja.
- Obrnuto (točke izlaza prema izvoru): najveće 6,7 m (sve točke izlaza leže na izvornoj liniji, plus zaokruživanje).
- Površina: izvor 57 077 km², izlaz 57 055 km². Izgubljena su 3 dijela od 84 (mikro otočići koje je pojednostavljenje svelo na manje od 4 točke). Najmanji preostali dio ima 0,57 km².
- Točnost samog izvora (OSM) nije dodatno mjerena. Usporedba s Natural Earthom nije smislena (NE je gruba).

### Otoci kao zasebni dijelovi (indeks dijela, površina)

Krk (79, 410 km²), Cres (78, 408), Lošinj (**dva** dijela, 68: 53 km² i 64: 22 km², OSM ga dijeli na Veli i Mali Lošinj), Pag (67, 284), Rab (72, 87),
Brač (17, 388), Hvar (16, 291), Korčula (9, 264), Vis (13, 88), Mljet (8, 95), Dugi otok (48, 112), Lastovo (6, 39).
Dio 80 je kopno, dio 12 je Pelješac s dubrovačkim područjem (sadrži Ston i Dubrovnik). Dodatna provjera na gradovima na otocima (točka u dijelu):
Krk 79, Cres 78, Mali Lošinj 64, Pag 67, Brač (Supetar) 17, Hvar 16, Korčula 9, Mljet (Sobra) 8, Dugi otok (Sali) 48, Lastovo 6.
Luke Raba i Visa (koordinate gradova) leže 39 odnosno 28 m u moru i u izvoru (35 odnosno 19 m), dakle to je OSM-ova obala lučkog gata.

### 14 točaka (ray casting): 14 od 14 prolazi, bez ikakvog pomicanja točaka

| Mjesto | Očekivano | Rezultat | Udaljenost do ruba obrisa |
|---|---|---|---|
| Zagreb | unutar | OK | 21 427 m |
| Dubrovnik | unutar | OK | 477 m |
| Korčula grad | unutar | OK | 74 m |
| Hvar grad | unutar | OK | 55 m |
| Krk grad | unutar | OK | 46 m |
| Pag grad | unutar | OK | 364 m |
| Vukovar | unutar | OK | 747 m |
| Osijek | unutar | OK | 15 148 m |
| Split | unutar | OK | 128 m |
| Ston | unutar | OK | 434 m |
| Mostar | izvan | OK | 30 898 m |
| Neum | izvan | OK | 1 966 m |
| Ljubljana | izvan | OK | 42 736 m |
| Trst | izvan | OK | 20 169 m |

Isti rezultat daje i nepojednostavljeni geoBoundaries izvor.

### Usklađenost mora i kopna

- Render (SVG, kopno lila, more aqua, praznine crveno) cijelog okvira i izbliza (Split, Neum, Konavle, Trst/Istra): nema vidljivih praznina ni preklapanja uz hrvatsku obalu.
  U SVG prikazu se uz sam rub vidi dlaka pozadine (anti-aliasing); u Leafletu stavi moru isti `color` obruba debljine 1 da je prekrije, a Hrvatsku crtaj iznad mora.
- Numerički (`provjera-praznina.mjs`): 30 000 slučajnih točaka u pojasu od oko 250 m uz hrvatsku obalu: **0 preklapanja**, **1 točka u procjepu uz more**
  (0,003 %; mikro-procjep dug oko 4 m i uži od 2 m, uz Korčulu/Pelješac, 42.9731 N 17.1755 E). Druga označena točka (42.6183 N 18.2282 E, zaleđe Cavtata) je procjep na kopnenoj
  granici prema BiH (>100 m, jer je obris BiH grubo mjeren): neutralna pozadina, ne more. Ostalih 344 procjepa na kopnenoj granici nisu brojani (tamo je kopno susjeda koje se ne crta).

## Naselja (`gradovi.json`)

- Izvor: GeoNames `HR.txt`, feature class `P`: 11 631 redak.
- **Izuzeto:** `PPLX` (dijelovi naselja, npr. „Centar”; 165), `PPLQ` napuštena (60), `PPLW` uništena (33), `PPLH` povijesna (4), `PPLCH` vjerske ustanove (4),
  te **4 760 naselja bez stanovnika** (populacija 0 ili nepoznata) osim sjedišta uprave (`PPLC`, `PPLA`, `PPLA2`, `PPLA3`, `PPLA4`). Bez toga kriterija
  datoteka je 696 KB, s kriterijem 401 KB (preko ~400 KB je bila granica pa su zaseoci bez stanovnika izostavljeni, a preciznost je 4 decimale).
- **Rang iz broja stanovnika:** 1 = ≥ 100 000, 2 = ≥ 20 000, 3 = ≥ 5 000, 4 = ≥ 1 000, 5 = ≥ 200, 6 = ispod 200. Manji rang = veći grad.
  Raspodjela: rang 1: 3, rang 2: 16, rang 3: 54, rang 4: 415, rang 5: 1 922, rang 6: 4 195. Poredak: po broju stanovnika silazno.
- **Dijakritika:** stupac `name` je hrvatski (Šibenik, Varaždin, Čakovec). Ispravljeno je 90 naziva (popis u `gradovi_ispravke.txt` u `var/`):
  (a) znak `Ð`/`ð` zamijenjen s `Đ`/`đ` (npr. „Ðakovački” u „Đakovački”), (b) naziv bez dijakritike zamijenjen alternativnim imenom iste riječi koje ima dijakritiku (npr. Osljak u Ošljak).
  Naziv bez dijakritike bez ikakve alternative nije mijenjan (nepoznato je ispravno ime).
- Duplikati s istim nazivom i koordinatama su uklonjeni. Istoimena naselja na različitim mjestima (npr. više „Vrh”) ostaju.

## Poštanski brojevi (`postanski-brojevi.json`)

- GeoNames `HR.txt`: 6 774 retka, bez duplikata para pbr+naziv, svi zapisi imaju koordinate, nazivi imaju ispravnu dijakritiku.
- Zapis po paru pbr+naziv. Nazivi su preneseni kako ih daje izvor, npr. „Pula - Pola”, „Zagreb-Donji Grad”, „Fažana - Fasana”.
- Točnost koordinata iz izvora (stupac `accuracy`): 4 623 zapisa razina 4, 2 132 zapisa razina 3, 19 zapisa razina 1. Mnogi zapisi istog pbr-a dijele istu koordinatu
  (sjedište općine), pa koordinata nije točna lokacija zaseoka.
- 5 provjerenih primjera:
  - 10000: Zagreb-Črnomerec, Zagreb-Donji Grad, Zagreb-Gornji Grad- Medveščak, Zagreb-Maksimir, Zagreb-Podsljeme, Zagreb-Trnje, Sljeme (7 zapisa).
  - 21000: Split (43.5089, 16.4392) i Kamen.
  - 20000: Dubrovnik (42.6481, 18.0922).
  - 31000: Osijek (45.5511, 18.6939), Nemetin, Podravlje, Sarvaš, Tvrđavica.
  - 52100: Pula - Pola (44.8768, 13.8833) i 19 okolnih mjesta (Banjole, Medulin, Premantura, Vodnjan - Dignano, ...).

## Odstupanja od zadanog

1. `hrvatska.geojson` je 359 KB (cilj ≤ ~300 KB) i `more.geojson` je 363 KB (prethodni cilj ~250 KB). Obala unutar 50 m tražila je tolerancije koje daju oko 20 000 točaka;
   za 300 KB ostaje samo obala unutar oko 70 m (srednje odstupanje ipak ≈ 15 m). Gzip: oko 99 KB svaka. More mora ponavljati hrvatsku obalu da nema praznina ni preklapanja, pa je skoro iste veličine.
2. `gradovi.json` je 401 KB i uključuje samo naselja sa stanovnicima (plus sjedišta uprave), ne sva 11 631.
3. Obris susjeda za more nije Natural Earth, nego geoBoundaries (isti izvor i isti rubovi kao Hrvatska), jer je NE-ov rub neusklađen s OSM-ovim granicama i dao bi
   procjepe po cijeloj kopnenoj granici. NE služi samo kao filter jadranskih poligona.
4. Licencijski: izvor Hrvatske je ODbL (OSM), što traži atribuciju i nuđenje izvedene baze pod ODbL (vidi gore).
