home.social

#graphhopper — Public Fediverse posts

Live and recent posts from across the Fediverse tagged #graphhopper, aggregated by home.social.

fetched live
  1. Self-Hosted Google Maps egy Raspberry Pi-n

    Mindig is lenyűgözött az a gondolat, hogy a saját négy falunk között is fusson egy olyan térkép szolgáltatás, ami nem függ az internetkapcsolattól. Egy olyan „Google Maps”, ami a saját gépemen fut, a saját adataimat használja, és akkor is működik, ha épp nincs net. Az inspiration a N.O.M.A.D. (Network of Offline Mapping and Discovery) projektből jött, akik egy teljes offline szolgáltatás stack-et álmodtak meg. Az ő nyomdokaikon haladva építettem meg a saját verziómat, ami egy Raspberry Pi-n fut, Docker konténerekben, és teljes Magyarországot lefedi.

    A hardver – Mi ez a gép?

    A szolgáltatás a xorp-archive.xorp.hu nevű gépemen fut, ami nem egy átlagos Raspberry Pi. Egy Raspberry Pi ARM64 architektúrájú eszköz, 8 GB RAM-mal, NVMe HAT kiegészítővel és egy 1 TB-os Crucial CT1000E100SSD8 NVMe SSD-vel. Ez nem a régi SD kártyás megoldás – az NVMe sebessége és megbízhatósága nélkülözhetetlen egy ilyen adatigényes stack működtetéséhez. A gép Ubuntu 24.04 LTS-t futtat, a kernel pedig a Raspberry Pi-hez optimalizált 6.8.0-1057-raspi.

    1. ábra: A Raspberry Pi NVMe HAT-tal és SSD-vel. A képen a Raspberry Pi 5, a ráhelyezett M.2 HAT+ és az NVMe SSD látható.

    Az ötlet – Miért építsünk offline térképet?

    A válasz egyszerű: szabadság. Amikor nincs internet, vagy korlátozott a sávszélesség, a legtöbb térkép szolgáltatás használhatatlanná válik. Gondoljunk csak egy kirándulásra a Pilisbe, egy külföldi utazásra roaming nélkül, vagy épp egy olyan helyzetre, ahol az adatvédelem miatt nem szeretnénk külső szolgáltatókra bízni magunkat. Egy offline térkép ezekre mind megoldást nyújt.

    A stack négy fő komponensből áll, amelyek Docker konténerekben futnak:

    • OSM Tile Server – a térkép csempék (tile-ok) kiszolgálása
    • Photon – címkeresés, geokódolás
    • GraphHopper – útvonaltervezés (autó, bicikli, gyalogos)
    • GraphHopper PT – tömegközlekedési útvonaltervezés (MÁV, Volánbusz, BKK)
    • MapLibre GL UI – a webes felület, ami összefogja az egészet

    Az architektúra áttekintése

    Minden kérés egyetlen belépési ponton, a map-ui konténeren keresztül történik, ami egy Nginx reverse proxyként szolgál. Ez nemcsak egyszerűbbé teszi a konfigurációt, hanem kiküszöböli a CORS problémákat is, hiszen a böngésző számára minden kérés ugyanarról az origin-ről érkezik.

    Böngésző → port 8090
      └── Nginx (map-ui konténer)
           ├── /tile/{z}/{x}/{y}.png → OSM (8081)
           ├── /photon/api → Photon (2322)
           ├── /graphhopper/route → GraphHopper (8989)
           └── /graphhopper-pt/route → GraphHopper PT (8989)

    A Docker Compose – Minden együtt

    A teljes stack egyetlen docker-compose-osm-extended.yml fájlban van definiálva. Lássuk a lényeget (az IP címeket és elérési utakat természetesen megváltoztattam a valóságban):

    services:
      osm-import:
        image: overv/openstreetmap-tile-server
        container_name: osm-import
        command: import
        shm_size: 1gb
        environment:
          THREADS: 4
          UPDATES: enabled
        volumes:
          - /home/osm/data/hungary-latest.osm.pbf:/data/region.osm.pbf
          - /home/osm/data/hungary.poly:/data/region.poly
          - osm-db:/data/database
          - osm-tiles:/data/tiles
    
      osm:
        image: overv/openstreetmap-tile-server
        container_name: osm
        command: run
        shm_size: 1gb
        ports:
          - 8081:80
        environment:
          UPDATES: enabled
          THREADS: 4
          REPLICATION_URL: https://planet.openstreetmap.org/replication/minute/
        volumes:
          - osm-db:/data/database
          - osm-tiles:/data/tiles
    
      photon:
        image: local/photon:1.1.0
        container_name: photon
        command: ["-listen-ip", "0.0.0.0", "-cors-any"]
        ports:
          - 2322:2322
        volumes:
          - /home/osm/photon:/data/photon
    
      graphhopper:
        image: local/graphhopper:9.1
        container_name: graphhopper
        ports:
          - 8989:8989
        volumes:
          - /home/osm/graphhopper:/data
          - /home/osm/data/hungary-latest.osm.pbf:/data/region.osm.pbf
    
      graphhopper-pt:
        image: local/graphhopper:9.1
        container_name: graphhopper-pt
        ports:
          - 8991:8989
        volumes:
          - /home/osm/graphhopper-pt:/data
          - /home/osm/data/hungary-latest.osm.pbf:/data/region.osm.pbf
          - /home/osm/gtfs:/data/gtfs:ro
        entrypoint: ["java", "-Xmx6g", "-jar", "/app/graphhopper-web.jar", "server", "/app/config.yml"]
    
      map-ui:
        image: local/osm-ui:1.0
        container_name: map-ui
        ports:
          - 8090:80
        volumes:
          - /root/osm-ui:/usr/share/nginx/html:ro
          - /home/osm/map-ui/conf/default.conf:/etc/nginx/conf.d/default.conf:ro

    1. OpenStreetMap Tile Server – A térkép alapja

    Az overv/openstreetmap-tile-server Docker image egy előre összeállított környezet, ami tartalmazza az Apache webszervert, a renderd-et (a csempe renderelő démont), a PostgreSQL-t PostGIS kiegészítővel, és a mod_tile-t, ami a csempe kiszolgálásért felel. Ez a négy komponens együtt teszi lehetővé, hogy a nyers OpenStreetMap adatokból szép, böngészhető térképi csempéket (tile-okat) kapjunk.

    Az import folyamat

    Minden egy PBF fájllal kezdődik – ez a Protocol Buffer Binary Format, az OpenStreetMap adatok tömörített formátuma. Nekünk a Magyarországra vonatkozó kivonatra van szükségünk, ami a geofabrik.de-ról szerezhető be. Ez a fájl a /home/osm/data/hungary-latest.osm.pbf elérési úton található.

    Az import az osm-import konténer egyszeri futtatásával történik:

    # Első importálás (csak egyszer kell)
    docker compose -f docker-compose-osm-extended.yml run --rm osm-import
    
    # Ha frissíteni kell a PBF-et, töröljük a régi adatbázist és újraimportálunk
    docker compose -f docker-compose-osm-extended.yml down
    # ... új PBF letöltése ...
    docker compose -f docker-compose-osm-extended.yml run --rm osm-import
    docker compose -f docker-compose-osm-extended.yml up -d osm

    A konténer a shm_size: 1gb beállítással fut, mert az importálás és a renderelés során rengeteg megosztott memóriára van szükség a gyorsítótárazáshoz. Ez egy kritikus beállítás – ha kicsi a shared memory, a renderelés rendkívül lassú lesz.

    3. ábra: Az OSM tile server folyamatos frissítése – a docker compose logs kimenete mutatja az osm2pgsql importálást és a percenkénti diff letöltést.

    Folyamatos frissítés

    A legmenőbb funkció a beépített incrementális frissítés. Az UPDATES: enabled környezeti változó hatására a konténer percenként letölti a minute diff fájlokat a planet.openstreetmap.org-ról. Ez azt jelenti, hogy a térképünk gyakorlatilag valós időben frissül – ha valaki módosít egy utat az OSM-ben, az pár percen belül megjelenik a saját szerverünkön is. Természetesen ha nincs internet, a script egyszerűen csendben meghibásodik, és a konténer tovább szolgálja a már meglévő csempéket.

    2. Photon – Címkeresés geokódolással

    A Photon egy nyílt forráskódú geokódoló motor, ami az OpenStreetMap adatokra épül. A mi stackünkben a local/photon:1.1.0 image fut, ami egy Magyarországra szabott adatbázissal dolgozik. Ez nem a teljes világ – csak Magyarország, ami jelentősen csökkenti a keresési időt és a tárhely igényt.

    A Photon adatbázis frissítése egy /root/photon-import.sh script segítségével történik, ami hetente egyszer fut (vasárnap 11:30-kor a cron-ban).

    A script működése:

    1. Letölti a legújabb Magyarország Photon dump fájlt(zst tömörítésben) a graphhopper.com-ról
    2. Ellenőrzi a metaadatokat (ETag, last-modified) – ha nem változott, kihagyja a letöltést
    3. Leállítja a Photon konténert
    4. Egy ideiglenes Docker konténerben dekompresszálja és importálja az adatbázist
    5. Frissíti a szimbolikus linket az új import könyvtárra
    6. Újraindítja a Photon konténert
    7. Ellenőrzi a szolgáltatás állapotát egy egyszerű API hívással
    # A Photon import script lényege (egyszerűsítve):
    docker run --rm \
      --entrypoint sh \
      -v /home/osm/photon:/data/photon \
      -v /home/osm/photon-dumps:/data/dumps \
      local/photon:1.1.0 \
      -lc "zstd -d --stdout /data/dumps/photon-dump-hungary.jsonl.zst \
           | java -Xms2g -Xmx4g -jar /app/photon.jar import \
             -import-file - -data-dir /data/photon/imports/20260603200523"
    
    # A szimbolikus link frissítése:
    ln -sfn /home/osm/photon/imports/20260603200523 /home/osm/photon/photon_data

    Az importált adatbázisok verziózott könyvtárakba kerülnek (/home/osm/photon/imports/20260603200523/), így mindig vissza lehet térni egy régebbi verzióhoz, ha valami elromlana. Egy szimbolikus link (photon_data -> imports/20260603200523/) mutat az aktuális verzióra.

    4. ábra: Címkeresés a Photon segítségével – „Eger, Dobó tér” keresése és megjelenítése a térképen.

    3. GraphHopper – Útvonaltervezés (autó, bicikli, gyalogos)

    A GraphHopper egy nagy teljesítményű, nyílt forráskódú útvonaltervező motor, ami az OpenStreetMap úthálózatára épül. A mi stackünkben a local/graphhopper:9.1 image fut, 4 GB RAM allokációval.

    A GraphHopper három útvonal profilt támogat:

    • car – autós közlekedés, figyelembe veszi az egyirányú utcákat, sebességkorlátozásokat, út típusokat
    • bike – biciklis közlekedés, preferálja a kerékpárutakat, kerüli a főútvonalakat
    • foot – gyalogos közlekedés, használja a járdákat, gyalogutakat, lépcsőket

    A konfiguráció /home/osm/graphhopper/config.yml-ban található:

    graphhopper:
      datareader.file: /data/region.osm.pbf
      graph.location: /data/graph-cache
    
      profiles:
        - name: car
        - name: bike
        - name: foot
    
      profiles_ch:
        - profile: car
        - profile: bike
        - profile: foot
    
      graph.dataaccess.default_type: RAM_STORE
    
    server:
      application_connectors:
        - type: http
          port: 8989
          bind_host: 0.0.0.0

    A Contraction Hierarchies (CH) egy előfeldolgozási technika, ami drámaian felgyorsítja az útvonal keresést. Az autó és bicikli profilokhoz CH-t használunk, ami az első induláskor 5-10 perc előfeldolgozást igényel, de utána a lekérések ezredmásodpercek alatt teljesülnek.

    5. ábra: Autós útvonaltervezés a GraphHopper segítségével – Budapestről Debrecenbe (231,5 km, 2 óra 12 perc).

    4. GraphHopper PT – Tömegközlekedési útvonaltervezés

    Ez a stack talán legmenőbb komponense. A GraphHopper PT (Public Transport) egy speciális konfigurációja a GraphHopper-nak, ami nemcsak az OSM úthálózatot, hanem a menetrendi adatokat (GTFS) is felhasználja a tömegközlekedési útvonaltervezéshez.

    GTFS adatforrások

    Három GTFS adatforrást használunk, amelyek Magyarország teljes tömegközlekedését lefedik:

    SzolgáltatóForrásMéretFrissítésMÁV (Magyar Államvasutak)mavcsoport.hu (Basic Auth)~5 MBNapontaVolánbusz (Helyközi buszok)opendata.utas.hu~110 MBNapontaBKK (Budapesti Közlekedési Központ)go.bkk.hu~55 MBHetente

    A MÁV regisztrációs kálvária

    A MÁV GTFS elérése sajnos nem nyilvános – a mavcsoport.hu/gtfs oldalon kell regisztrálni, ahol egy rövid adatkezelési hozzájárulás után kapunk Basic Auth felhasználónevet és jelszót. A regisztráció egyszerű, de a mai napig nem értem, miért kell ez egy nyílt GTFS adatfolyamhoz – a MÁV indoklása szerint azért, hogy „tudják, hányan és milyen célra használják az adataikat”. Nos, a mi célunk egyértelmű: jobb tömegközlekedési információt adni a felhasználóknak.

    A Volánbusz és a BKK szerencsére nyíltan, mindenféle regisztráció nélkül elérhető – köszönet érte!

    A GTFS szinkronizáló script

    A /root/gtfs-sync.sh script naponta (hajnali 3:30-kor) letölti mindhárom GTFS fájlt, majd újraindítja a graphhopper-pt konténert, hogy az új menetrend alapján újraépítse a gráfot. Ez a folyamat 2-5 percet vesz igénybe – ezalatt a tömegközlekedési útvonaltervezés nem elérhető.

    # A GTFS szinkronizáló script lényege (egyszerűsítve):
    # MÁV letöltés (Basic Auth-val)
    curl -sSf -u "user:password" \
      -o /home/osm/gtfs/mav_gtfs.zip \
      "https://www.mavcsoport.hu/gtfs/gtfsMavMenetrend.zip"
    
    # Volánbusz letöltés
    curl -sSf -o /home/osm/gtfs/volanbusz_gtfs.zip \
      "https://opendata.utas.hu/public-gtfs/volanbusz_gtfs.zip"
    
    # BKK letöltés
    curl -sSf -o /home/osm/gtfs/bkk_gtfs.zip \
      "https://go.bkk.hu/api/static/v1/public-gtfs/budapest_gtfs.zip"
    
    # GraphHopper PT újraindítása az új menetrendek betöltéséhez
    docker restart graphhopper-pt

    Érdekesség, hogy a GraphHopper PT konfigurációja egyszerre három GTFS fájlt is be tud tölteni – a gtfs.file paraméterben vesszővel felsorolva:

    graphhopper:
      gtfs.file: /data/gtfs/mav_gtfs.zip,/data/gtfs/volanbusz_gtfs.zip,/data/gtfs/bkk_gtfs.zip
      # ...és az OSM fájl a gyalogos kapcsolatokhoz

    Ez azért fontos, mert a tömegközlekedési útvonaltervezésnél nem elég a menetrend – tudni kell, hogyan jutok el a buszmegállóhoz gyalog, amihez pontosan az OSM adataira van szükség.

    6. ábra: Tömegközlekedési útvonaltervezés a GraphHopper PT segítségével – Egerből a Budapest-Keleti pályaudvarra, átszállás nélkül, 2 óra 33 perc alatt.

    5. A Webes Felület – MapLibre GL UI

    A felhasználói felület MapLibre GL JS-re épül, ami a Mapbox GL JS nyílt forráskódú továbbfejlesztett változata. A map-ui konténer egy Nginx Alpine image, ami a statikus fájlokat szolgálja ki és proxy-zik a háttérszolgáltatások felé.

    Ami különösen fontos: minden JavaScript és CSS fájl lokálisan van tárolva a /root/osm-ui/vendor/ könyvtárban. Nincs CDN függőség, nincs Google Fonts, nincs unpkg – ha elmegy az internet, a felület továbbra is teljesen működőképes marad.

    A UI funkciói

    • Térkép nézet – raszteres csempék MapLibre GL-lel, teljes képernyős interakció
    • Keresés – autocomplete címkeresés a Photon segítségével, kattintásra odarepülés
    • Útvonaltervezés – A→B útvonal négy módban: autó, bicikli, gyalogos, tömegközlekedés
    • Kanyarról-kanyarra navigáció – összecsukható lista az útvonal panelen, bármelyik kanyarra kattintva odarepül a térkép
    • Több alternatíva – tömegközlekedésnél több útvonal közül választhatunk indulási/idő szerint
    • Járat jelvények – színkódolt jelvények a különböző járatokhoz (busz=kék, villamos=sárga, metró=piros, vasút=lila, stb.)
    • Rétegek váltása – OSM (alap) és Műhold (ESRI World Imagery) között
    • Offline érzékelés – a műhold réteg automatikusan letiltódik, ha nincs internet

    7. ábra: A teljes webes felület – a térkép, keresés és útvonaltervezés használata lépésről lépésre.

    Offline audit – Mi működik internet nélkül?

    Ez a projekt egyik legfontosabb szempontja. Lássuk, mi a helyzet:

    Teljesen offline (nincs szükség internetre)

    • Térképi csempék – a PostgreSQL adatbázisból renderelve (Magyarország OSM PBF)
    • Címkeresés – Photon a lokális Magyarország dump-ot használja
    • Útvonaltervezés – GraphHopper ugyanazt a lokális PBF-et olvassa
    • Tömegközlekedés – GraphHopper PT a lokálisan szinkronizált GTFS menetrendekkel
    • MapLibre GL JS/CSS/root/osm-ui/vendor/ könyvtárból (nincs CDN)
    • Összes HTML/JS/CSS – nincs külső font, nincs Google Fonts, nincs külső API hívás
    • Nginx proxy – minden upstream cél localhost vagy konténer név

    Internetet igényel

    • Műhold réteg (ESRI World Imagery) – opcionális, kikapcsolható
    • OSM tile frissítések – minute diff letöltések (ha elérhető a net, különben csendben hibázik)
    • Photon adatfrissítés – heti dump letöltés graphhopper.com-ról
    • GTFS adatok – napi menetrend letöltés

    Üzemeltetés – Cron feladatok

    A rendszer üzemeltetése nagyrészt automatizált. Három cron job gondoskodik a frissítésekről:

    # Heti Photon adatbázis frissítés (vasárnap 11:30)
    30 11 * * 0 /root/photon-import.sh >> /var/log/photon-import.log 2>&1
    
    # Napi GTFS szinkronizáció (hajnali 3:30)
    30 3  * * * /root/gtfs-sync.sh >> /var/log/gtfs-sync.log 2>&1

    Az OSM konténer beépített frissítése percenként fut a konténeren belül, nem cron-on keresztül.

    Ismert korlátok

    • Hiányzó házszámok a Photon keresésben – a Magyarország Photon dump nem tartalmazza az OSM házszintű címkéit. Ez nem hiba, hanem adatkorlát.
    • Street View nem elérhető – nincs gyakorlati, önállóan üzemeltethető alternatíva (a Mapillary internetet igényel, a Google Street View pedig API kulcsot és internetet).
    • GraphHopper frissítése kézi – amikor az OSM PBF frissül, a GraphHopper graph cache-t manuálisan kell törölni (vagy újraindítani a konténert).
    • Transit gráf újraépítés – GTFS frissítéskor 2-5 percig nem elérhető a tömegközlekedési útvonaltervezés.
    • GTFS adatok időszerűsége – a menetrendek olyan frissek, amilyen friss az utolsó szinkronizáció (maximum 24 óra késés).

    Zárszó

    Ez a projekt számomra a szoftveres szabadság egyik legszebb példája. Egy olcsó, kis fogyasztású Raspberry Pi-n fut egy teljes értékű térkép szolgáltatás, ami semmilyen külső függőséggel nem rendelkezik. A nyílt forráskódú OpenStreetMap közösség munkája, a Photon, a GraphHopper és a MapLibre projectek lehetővé teszik, hogy bárki a saját kezébe vegye a térképezést.

    A forráskód és a konfigurációk természetesen elérhetők a saját infrastruktúrámon. Ha bárki szeretne egy hasonló rendszert építeni, a N.O.M.A.D. projekt remek kiindulási alap, és az itt leírt konfigurációk is szabadon felhasználhatók.

    Következő lépésként szeretném kiterjeszteni a szolgáltatást Szlovákiára, Romániára, Ausztriára, Szlovéniára és Horvátországra is – a Kárpát-medence teljes lefedésére. Továbbá tervben van egy útnyitás (road closure) támogatás is, ahol a felhasználók jelezhetik az aktuális lezárásokat, tereléseket, ami aztán az összes felhasználó számára megjelenne.

    Ha kérdésetek van, vagy kipróbáltátok a megoldást és elakadtatok, nyugodtan szóljatok!

    #útvonaltervezés #BKK #Docker #GraphHopper #GTFS #MapLibre #MÁV #offline #OpenStreetMap #OSM #Photon #RaspberryPi #térkép #tömegközlekedés #Volánbusz
  2. Self-Hosted Google Maps egy Raspberry Pi-n

    Mindig is lenyűgözött az a gondolat, hogy a saját négy falunk között is fusson egy olyan térkép szolgáltatás, ami nem függ az internetkapcsolattól. Egy olyan „Google Maps”, ami a saját gépemen fut, a saját adataimat használja, és akkor is működik, ha épp nincs net. Az inspiration a N.O.M.A.D. (Network of Offline Mapping and Discovery) projektből jött, akik egy teljes offline szolgáltatás stack-et álmodtak meg. Az ő nyomdokaikon haladva építettem meg a saját verziómat, ami egy Raspberry Pi-n fut, Docker konténerekben, és teljes Magyarországot lefedi.

    A hardver – Mi ez a gép?

    A szolgáltatás a xorp-archive.xorp.hu nevű gépemen fut, ami nem egy átlagos Raspberry Pi. Egy Raspberry Pi ARM64 architektúrájú eszköz, 8 GB RAM-mal, NVMe HAT kiegészítővel és egy 1 TB-os Crucial CT1000E100SSD8 NVMe SSD-vel. Ez nem a régi SD kártyás megoldás – az NVMe sebessége és megbízhatósága nélkülözhetetlen egy ilyen adatigényes stack működtetéséhez. A gép Ubuntu 24.04 LTS-t futtat, a kernel pedig a Raspberry Pi-hez optimalizált 6.8.0-1057-raspi.

    1. ábra: A Raspberry Pi NVMe HAT-tal és SSD-vel. A képen a Raspberry Pi 5, a ráhelyezett M.2 HAT+ és az NVMe SSD látható.

    Az ötlet – Miért építsünk offline térképet?

    A válasz egyszerű: szabadság. Amikor nincs internet, vagy korlátozott a sávszélesség, a legtöbb térkép szolgáltatás használhatatlanná válik. Gondoljunk csak egy kirándulásra a Pilisbe, egy külföldi utazásra roaming nélkül, vagy épp egy olyan helyzetre, ahol az adatvédelem miatt nem szeretnénk külső szolgáltatókra bízni magunkat. Egy offline térkép ezekre mind megoldást nyújt.

    A stack négy fő komponensből áll, amelyek Docker konténerekben futnak:

    • OSM Tile Server – a térkép csempék (tile-ok) kiszolgálása
    • Photon – címkeresés, geokódolás
    • GraphHopper – útvonaltervezés (autó, bicikli, gyalogos)
    • GraphHopper PT – tömegközlekedési útvonaltervezés (MÁV, Volánbusz, BKK)
    • MapLibre GL UI – a webes felület, ami összefogja az egészet

    Az architektúra áttekintése

    Minden kérés egyetlen belépési ponton, a map-ui konténeren keresztül történik, ami egy Nginx reverse proxyként szolgál. Ez nemcsak egyszerűbbé teszi a konfigurációt, hanem kiküszöböli a CORS problémákat is, hiszen a böngésző számára minden kérés ugyanarról az origin-ről érkezik.

    Böngésző → port 8090
      └── Nginx (map-ui konténer)
           ├── /tile/{z}/{x}/{y}.png → OSM (8081)
           ├── /photon/api → Photon (2322)
           ├── /graphhopper/route → GraphHopper (8989)
           └── /graphhopper-pt/route → GraphHopper PT (8989)

    A Docker Compose – Minden együtt

    A teljes stack egyetlen docker-compose-osm-extended.yml fájlban van definiálva. Lássuk a lényeget (az IP címeket és elérési utakat természetesen megváltoztattam a valóságban):

    services:
      osm-import:
        image: overv/openstreetmap-tile-server
        container_name: osm-import
        command: import
        shm_size: 1gb
        environment:
          THREADS: 4
          UPDATES: enabled
        volumes:
          - /home/osm/data/hungary-latest.osm.pbf:/data/region.osm.pbf
          - /home/osm/data/hungary.poly:/data/region.poly
          - osm-db:/data/database
          - osm-tiles:/data/tiles
    
      osm:
        image: overv/openstreetmap-tile-server
        container_name: osm
        command: run
        shm_size: 1gb
        ports:
          - 8081:80
        environment:
          UPDATES: enabled
          THREADS: 4
          REPLICATION_URL: https://planet.openstreetmap.org/replication/minute/
        volumes:
          - osm-db:/data/database
          - osm-tiles:/data/tiles
    
      photon:
        image: local/photon:1.1.0
        container_name: photon
        command: ["-listen-ip", "0.0.0.0", "-cors-any"]
        ports:
          - 2322:2322
        volumes:
          - /home/osm/photon:/data/photon
    
      graphhopper:
        image: local/graphhopper:9.1
        container_name: graphhopper
        ports:
          - 8989:8989
        volumes:
          - /home/osm/graphhopper:/data
          - /home/osm/data/hungary-latest.osm.pbf:/data/region.osm.pbf
    
      graphhopper-pt:
        image: local/graphhopper:9.1
        container_name: graphhopper-pt
        ports:
          - 8991:8989
        volumes:
          - /home/osm/graphhopper-pt:/data
          - /home/osm/data/hungary-latest.osm.pbf:/data/region.osm.pbf
          - /home/osm/gtfs:/data/gtfs:ro
        entrypoint: ["java", "-Xmx6g", "-jar", "/app/graphhopper-web.jar", "server", "/app/config.yml"]
    
      map-ui:
        image: local/osm-ui:1.0
        container_name: map-ui
        ports:
          - 8090:80
        volumes:
          - /root/osm-ui:/usr/share/nginx/html:ro
          - /home/osm/map-ui/conf/default.conf:/etc/nginx/conf.d/default.conf:ro

    1. OpenStreetMap Tile Server – A térkép alapja

    Az overv/openstreetmap-tile-server Docker image egy előre összeállított környezet, ami tartalmazza az Apache webszervert, a renderd-et (a csempe renderelő démont), a PostgreSQL-t PostGIS kiegészítővel, és a mod_tile-t, ami a csempe kiszolgálásért felel. Ez a négy komponens együtt teszi lehetővé, hogy a nyers OpenStreetMap adatokból szép, böngészhető térképi csempéket (tile-okat) kapjunk.

    Az import folyamat

    Minden egy PBF fájllal kezdődik – ez a Protocol Buffer Binary Format, az OpenStreetMap adatok tömörített formátuma. Nekünk a Magyarországra vonatkozó kivonatra van szükségünk, ami a geofabrik.de-ról szerezhető be. Ez a fájl a /home/osm/data/hungary-latest.osm.pbf elérési úton található.

    Az import az osm-import konténer egyszeri futtatásával történik:

    # Első importálás (csak egyszer kell)
    docker compose -f docker-compose-osm-extended.yml run --rm osm-import
    
    # Ha frissíteni kell a PBF-et, töröljük a régi adatbázist és újraimportálunk
    docker compose -f docker-compose-osm-extended.yml down
    # ... új PBF letöltése ...
    docker compose -f docker-compose-osm-extended.yml run --rm osm-import
    docker compose -f docker-compose-osm-extended.yml up -d osm

    A konténer a shm_size: 1gb beállítással fut, mert az importálás és a renderelés során rengeteg megosztott memóriára van szükség a gyorsítótárazáshoz. Ez egy kritikus beállítás – ha kicsi a shared memory, a renderelés rendkívül lassú lesz.

    3. ábra: Az OSM tile server folyamatos frissítése – a docker compose logs kimenete mutatja az osm2pgsql importálást és a percenkénti diff letöltést.

    Folyamatos frissítés

    A legmenőbb funkció a beépített incrementális frissítés. Az UPDATES: enabled környezeti változó hatására a konténer percenként letölti a minute diff fájlokat a planet.openstreetmap.org-ról. Ez azt jelenti, hogy a térképünk gyakorlatilag valós időben frissül – ha valaki módosít egy utat az OSM-ben, az pár percen belül megjelenik a saját szerverünkön is. Természetesen ha nincs internet, a script egyszerűen csendben meghibásodik, és a konténer tovább szolgálja a már meglévő csempéket.

    2. Photon – Címkeresés geokódolással

    A Photon egy nyílt forráskódú geokódoló motor, ami az OpenStreetMap adatokra épül. A mi stackünkben a local/photon:1.1.0 image fut, ami egy Magyarországra szabott adatbázissal dolgozik. Ez nem a teljes világ – csak Magyarország, ami jelentősen csökkenti a keresési időt és a tárhely igényt.

    A Photon adatbázis frissítése egy /root/photon-import.sh script segítségével történik, ami hetente egyszer fut (vasárnap 11:30-kor a cron-ban).

    A script működése:

    1. Letölti a legújabb Magyarország Photon dump fájlt(zst tömörítésben) a graphhopper.com-ról
    2. Ellenőrzi a metaadatokat (ETag, last-modified) – ha nem változott, kihagyja a letöltést
    3. Leállítja a Photon konténert
    4. Egy ideiglenes Docker konténerben dekompresszálja és importálja az adatbázist
    5. Frissíti a szimbolikus linket az új import könyvtárra
    6. Újraindítja a Photon konténert
    7. Ellenőrzi a szolgáltatás állapotát egy egyszerű API hívással
    # A Photon import script lényege (egyszerűsítve):
    docker run --rm \
      --entrypoint sh \
      -v /home/osm/photon:/data/photon \
      -v /home/osm/photon-dumps:/data/dumps \
      local/photon:1.1.0 \
      -lc "zstd -d --stdout /data/dumps/photon-dump-hungary.jsonl.zst \
           | java -Xms2g -Xmx4g -jar /app/photon.jar import \
             -import-file - -data-dir /data/photon/imports/20260603200523"
    
    # A szimbolikus link frissítése:
    ln -sfn /home/osm/photon/imports/20260603200523 /home/osm/photon/photon_data

    Az importált adatbázisok verziózott könyvtárakba kerülnek (/home/osm/photon/imports/20260603200523/), így mindig vissza lehet térni egy régebbi verzióhoz, ha valami elromlana. Egy szimbolikus link (photon_data -> imports/20260603200523/) mutat az aktuális verzióra.

    4. ábra: Címkeresés a Photon segítségével – „Eger, Dobó tér” keresése és megjelenítése a térképen.

    3. GraphHopper – Útvonaltervezés (autó, bicikli, gyalogos)

    A GraphHopper egy nagy teljesítményű, nyílt forráskódú útvonaltervező motor, ami az OpenStreetMap úthálózatára épül. A mi stackünkben a local/graphhopper:9.1 image fut, 4 GB RAM allokációval.

    A GraphHopper három útvonal profilt támogat:

    • car – autós közlekedés, figyelembe veszi az egyirányú utcákat, sebességkorlátozásokat, út típusokat
    • bike – biciklis közlekedés, preferálja a kerékpárutakat, kerüli a főútvonalakat
    • foot – gyalogos közlekedés, használja a járdákat, gyalogutakat, lépcsőket

    A konfiguráció /home/osm/graphhopper/config.yml-ban található:

    graphhopper:
      datareader.file: /data/region.osm.pbf
      graph.location: /data/graph-cache
    
      profiles:
        - name: car
        - name: bike
        - name: foot
    
      profiles_ch:
        - profile: car
        - profile: bike
        - profile: foot
    
      graph.dataaccess.default_type: RAM_STORE
    
    server:
      application_connectors:
        - type: http
          port: 8989
          bind_host: 0.0.0.0

    A Contraction Hierarchies (CH) egy előfeldolgozási technika, ami drámaian felgyorsítja az útvonal keresést. Az autó és bicikli profilokhoz CH-t használunk, ami az első induláskor 5-10 perc előfeldolgozást igényel, de utána a lekérések ezredmásodpercek alatt teljesülnek.

    5. ábra: Autós útvonaltervezés a GraphHopper segítségével – Budapestről Debrecenbe (231,5 km, 2 óra 12 perc).

    4. GraphHopper PT – Tömegközlekedési útvonaltervezés

    Ez a stack talán legmenőbb komponense. A GraphHopper PT (Public Transport) egy speciális konfigurációja a GraphHopper-nak, ami nemcsak az OSM úthálózatot, hanem a menetrendi adatokat (GTFS) is felhasználja a tömegközlekedési útvonaltervezéshez.

    GTFS adatforrások

    Három GTFS adatforrást használunk, amelyek Magyarország teljes tömegközlekedését lefedik:

    SzolgáltatóForrásMéretFrissítésMÁV (Magyar Államvasutak)mavcsoport.hu (Basic Auth)~5 MBNapontaVolánbusz (Helyközi buszok)opendata.utas.hu~110 MBNapontaBKK (Budapesti Közlekedési Központ)go.bkk.hu~55 MBHetente

    A MÁV regisztrációs kálvária

    A MÁV GTFS elérése sajnos nem nyilvános – a mavcsoport.hu/gtfs oldalon kell regisztrálni, ahol egy rövid adatkezelési hozzájárulás után kapunk Basic Auth felhasználónevet és jelszót. A regisztráció egyszerű, de a mai napig nem értem, miért kell ez egy nyílt GTFS adatfolyamhoz – a MÁV indoklása szerint azért, hogy „tudják, hányan és milyen célra használják az adataikat”. Nos, a mi célunk egyértelmű: jobb tömegközlekedési információt adni a felhasználóknak.

    A Volánbusz és a BKK szerencsére nyíltan, mindenféle regisztráció nélkül elérhető – köszönet érte!

    A GTFS szinkronizáló script

    A /root/gtfs-sync.sh script naponta (hajnali 3:30-kor) letölti mindhárom GTFS fájlt, majd újraindítja a graphhopper-pt konténert, hogy az új menetrend alapján újraépítse a gráfot. Ez a folyamat 2-5 percet vesz igénybe – ezalatt a tömegközlekedési útvonaltervezés nem elérhető.

    # A GTFS szinkronizáló script lényege (egyszerűsítve):
    # MÁV letöltés (Basic Auth-val)
    curl -sSf -u "user:password" \
      -o /home/osm/gtfs/mav_gtfs.zip \
      "https://www.mavcsoport.hu/gtfs/gtfsMavMenetrend.zip"
    
    # Volánbusz letöltés
    curl -sSf -o /home/osm/gtfs/volanbusz_gtfs.zip \
      "https://opendata.utas.hu/public-gtfs/volanbusz_gtfs.zip"
    
    # BKK letöltés
    curl -sSf -o /home/osm/gtfs/bkk_gtfs.zip \
      "https://go.bkk.hu/api/static/v1/public-gtfs/budapest_gtfs.zip"
    
    # GraphHopper PT újraindítása az új menetrendek betöltéséhez
    docker restart graphhopper-pt

    Érdekesség, hogy a GraphHopper PT konfigurációja egyszerre három GTFS fájlt is be tud tölteni – a gtfs.file paraméterben vesszővel felsorolva:

    graphhopper:
      gtfs.file: /data/gtfs/mav_gtfs.zip,/data/gtfs/volanbusz_gtfs.zip,/data/gtfs/bkk_gtfs.zip
      # ...és az OSM fájl a gyalogos kapcsolatokhoz

    Ez azért fontos, mert a tömegközlekedési útvonaltervezésnél nem elég a menetrend – tudni kell, hogyan jutok el a buszmegállóhoz gyalog, amihez pontosan az OSM adataira van szükség.

    6. ábra: Tömegközlekedési útvonaltervezés a GraphHopper PT segítségével – Egerből a Budapest-Keleti pályaudvarra, átszállás nélkül, 2 óra 33 perc alatt.

    5. A Webes Felület – MapLibre GL UI

    A felhasználói felület MapLibre GL JS-re épül, ami a Mapbox GL JS nyílt forráskódú továbbfejlesztett változata. A map-ui konténer egy Nginx Alpine image, ami a statikus fájlokat szolgálja ki és proxy-zik a háttérszolgáltatások felé.

    Ami különösen fontos: minden JavaScript és CSS fájl lokálisan van tárolva a /root/osm-ui/vendor/ könyvtárban. Nincs CDN függőség, nincs Google Fonts, nincs unpkg – ha elmegy az internet, a felület továbbra is teljesen működőképes marad.

    A UI funkciói

    • Térkép nézet – raszteres csempék MapLibre GL-lel, teljes képernyős interakció
    • Keresés – autocomplete címkeresés a Photon segítségével, kattintásra odarepülés
    • Útvonaltervezés – A→B útvonal négy módban: autó, bicikli, gyalogos, tömegközlekedés
    • Kanyarról-kanyarra navigáció – összecsukható lista az útvonal panelen, bármelyik kanyarra kattintva odarepül a térkép
    • Több alternatíva – tömegközlekedésnél több útvonal közül választhatunk indulási/idő szerint
    • Járat jelvények – színkódolt jelvények a különböző járatokhoz (busz=kék, villamos=sárga, metró=piros, vasút=lila, stb.)
    • Rétegek váltása – OSM (alap) és Műhold (ESRI World Imagery) között
    • Offline érzékelés – a műhold réteg automatikusan letiltódik, ha nincs internet

    7. ábra: A teljes webes felület – a térkép, keresés és útvonaltervezés használata lépésről lépésre.

    Offline audit – Mi működik internet nélkül?

    Ez a projekt egyik legfontosabb szempontja. Lássuk, mi a helyzet:

    Teljesen offline (nincs szükség internetre)

    • Térképi csempék – a PostgreSQL adatbázisból renderelve (Magyarország OSM PBF)
    • Címkeresés – Photon a lokális Magyarország dump-ot használja
    • Útvonaltervezés – GraphHopper ugyanazt a lokális PBF-et olvassa
    • Tömegközlekedés – GraphHopper PT a lokálisan szinkronizált GTFS menetrendekkel
    • MapLibre GL JS/CSS/root/osm-ui/vendor/ könyvtárból (nincs CDN)
    • Összes HTML/JS/CSS – nincs külső font, nincs Google Fonts, nincs külső API hívás
    • Nginx proxy – minden upstream cél localhost vagy konténer név

    Internetet igényel

    • Műhold réteg (ESRI World Imagery) – opcionális, kikapcsolható
    • OSM tile frissítések – minute diff letöltések (ha elérhető a net, különben csendben hibázik)
    • Photon adatfrissítés – heti dump letöltés graphhopper.com-ról
    • GTFS adatok – napi menetrend letöltés

    Üzemeltetés – Cron feladatok

    A rendszer üzemeltetése nagyrészt automatizált. Három cron job gondoskodik a frissítésekről:

    # Heti Photon adatbázis frissítés (vasárnap 11:30)
    30 11 * * 0 /root/photon-import.sh >> /var/log/photon-import.log 2>&1
    
    # Napi GTFS szinkronizáció (hajnali 3:30)
    30 3  * * * /root/gtfs-sync.sh >> /var/log/gtfs-sync.log 2>&1

    Az OSM konténer beépített frissítése percenként fut a konténeren belül, nem cron-on keresztül.

    Ismert korlátok

    • Hiányzó házszámok a Photon keresésben – a Magyarország Photon dump nem tartalmazza az OSM házszintű címkéit. Ez nem hiba, hanem adatkorlát.
    • Street View nem elérhető – nincs gyakorlati, önállóan üzemeltethető alternatíva (a Mapillary internetet igényel, a Google Street View pedig API kulcsot és internetet).
    • GraphHopper frissítése kézi – amikor az OSM PBF frissül, a GraphHopper graph cache-t manuálisan kell törölni (vagy újraindítani a konténert).
    • Transit gráf újraépítés – GTFS frissítéskor 2-5 percig nem elérhető a tömegközlekedési útvonaltervezés.
    • GTFS adatok időszerűsége – a menetrendek olyan frissek, amilyen friss az utolsó szinkronizáció (maximum 24 óra késés).

    Zárszó

    Ez a projekt számomra a szoftveres szabadság egyik legszebb példája. Egy olcsó, kis fogyasztású Raspberry Pi-n fut egy teljes értékű térkép szolgáltatás, ami semmilyen külső függőséggel nem rendelkezik. A nyílt forráskódú OpenStreetMap közösség munkája, a Photon, a GraphHopper és a MapLibre projectek lehetővé teszik, hogy bárki a saját kezébe vegye a térképezést.

    A forráskód és a konfigurációk természetesen elérhetők a saját infrastruktúrámon. Ha bárki szeretne egy hasonló rendszert építeni, a N.O.M.A.D. projekt remek kiindulási alap, és az itt leírt konfigurációk is szabadon felhasználhatók.

    Következő lépésként szeretném kiterjeszteni a szolgáltatást Szlovákiára, Romániára, Ausztriára, Szlovéniára és Horvátországra is – a Kárpát-medence teljes lefedésére. Továbbá tervben van egy útnyitás (road closure) támogatás is, ahol a felhasználók jelezhetik az aktuális lezárásokat, tereléseket, ami aztán az összes felhasználó számára megjelenne.

    Ha kérdésetek van, vagy kipróbáltátok a megoldást és elakadtatok, nyugodtan szóljatok!

    #útvonaltervezés #BKK #Docker #GraphHopper #GTFS #MapLibre #MÁV #offline #OpenStreetMap #OSM #Photon #RaspberryPi #térkép #tömegközlekedés #Volánbusz
  3. 🚴‍♂️🔍🥱 So apparently, everyone was losing sleep over the "vital" need for more precise #elevation #data in GraphHopper's routing engine. Because, clearly, your #cycling route simply isn't complete without knowing that hill is exactly 2.34567 meters high. 🌍🚫
    graphhopper.com/blog/2026/03/2 #GraphHopper #SleepDeprivation #PrecisionRouting #TechHumor #HackerNews #ngated

  4. 🚴‍♂️🔍🥱 So apparently, everyone was losing sleep over the "vital" need for more precise #elevation #data in GraphHopper's routing engine. Because, clearly, your #cycling route simply isn't complete without knowing that hill is exactly 2.34567 meters high. 🌍🚫
    graphhopper.com/blog/2026/03/2 #GraphHopper #SleepDeprivation #PrecisionRouting #TechHumor #HackerNews #ngated

  5. #Carburoid: After adding route deviations, geodesic distance become a bad approximation. So current struggle is adding real road distance. I lost many hours getting #graphhopper working and yet no outcome. Default configurations don't work out of the box, data blobs are too big and features are too overshoot for what i need, just the distance. Documentation for offline use is obscure and #AI agents loop among non-working solutions. I am stuck. Any suggestions?

    #opensource #kotlin #android

  6. #Carburoid: After adding route deviations, geodesic distance become a bad approximation. So current struggle is adding real road distance. I lost many hours getting #graphhopper working and yet no outcome. Default configurations don't work out of the box, data blobs are too big and features are too overshoot for what i need, just the distance. Documentation for offline use is obscure and #AI agents loop among non-working solutions. I am stuck. Any suggestions?

    #opensource #kotlin #android

  7. @nclick sehr gut. Vielen Dank. Werde ich testen. Ich habe schon einige alternative #naviapps getestet. Mit den bekannten wie #OsmAnd #GraphHopper #organicmaps bin ich nicht wirklich happy gewesen und habe bisher #MagicEarth für mich entdeckt. #CoMaps runtergeladen und installiert! Danke f Hinweis!

    PS: Die #Sprachausgabe #TTS ist in meinem E/OS shitty. (Gibt es eine nette alternative TTS-Plastikdame in deutsch?)

    #navigation #naviapp #did #didit #diday #digitalindependenceDay #eos #android

  8. RE: social.notjustbikes.com/@notju

    Nessuno dovrebbe usare google maps per andare in bici: chi l'ha progettato non oncepisce che l'auto potrebbe non essere il modo migliore di spostarsi, specialmente in città.

    Avete mai notato come sono rappresentate le strade pedonali nell'app? O che gli spostamenti includono il traffico, ma mai il tempo per trovare parcheggio e per poi andare dal parcheggio alla destinazione?

    Tutto spiagato nel video di @notjustbikes , che potete trovare anche su YouTube: youtube.com/watch?v=csHdwHTteO

    (Per trovare il miglior percorso ciclabile potete provare graphhopper.com/maps/?profile=)

    #graphhopper #googlemaps #motonormatività

  9. RE: social.notjustbikes.com/@notju

    Nessuno dovrebbe usare google maps per andare in bici: chi l'ha progettato non oncepisce che l'auto potrebbe non essere il modo migliore di spostarsi, specialmente in città.

    Avete mai notato come sono rappresentate le strade pedonali nell'app? O che gli spostamenti includono il traffico, ma mai il tempo per trovare parcheggio e per poi andare dal parcheggio alla destinazione?

    Tutto spiagato nel video di @notjustbikes , che potete trovare anche su YouTube: youtube.com/watch?v=csHdwHTteO

    (Per trovare il miglior percorso ciclabile potete provare graphhopper.com/maps/?profile=)

    #graphhopper #googlemaps #motonormatività

  10. I made GNOME Maps stop doing search queries faster than most people can type, with this One Weird Trick™: gitlab.gnome.org/GNOME/gnome-m

    Medium-to-fast typists will no longer see flickering search results and won't be doing "Hokuto no ken" network requests anymore. I presume #GNOME users will have less chances of collectively DDoSing servers when the Year of the Linux Desktop™ happens.

    #GNOMEMaps #OpenStreetMap #GraphHopper #EnergyEfficiency #EnvironmentThisWeek

  11. I made GNOME Maps stop doing search queries faster than most people can type, with this One Weird Trick™: gitlab.gnome.org/GNOME/gnome-m

    Medium-to-fast typists will no longer see flickering search results and won't be doing "Hokuto no ken" network requests anymore. I presume #GNOME users will have less chances of collectively DDoSing servers when the Year of the Linux Desktop™ happens.

    #GNOMEMaps #OpenStreetMap #GraphHopper #EnergyEfficiency #EnvironmentThisWeek

  12. Das technische Update unserer Webseite hat einen großen Fortschritt erfahren. Leider sieht man kaum etwas von den unzähligen Stunden, die reingeflossen sind.
    * #PHP Version 8.X-Kompatibilität hergestellt
    * altes Framework entfernt
    * #Symfony PHP-Framework eingeführt

    Wir sammeln ohnehin nicht viele Daten, doch die wenigen sind nach den Updates noch besser geschützt.

    Sichtbar:
    * Self-Service Passwortreset für den Mitgliederbereich
    * Die Patenbäume werden nun wieder im Mitgliederbereich mit Link auf die Baumbeschreibung dargestellt
    * GPS-Daten des #Patenbaum|es im Mitgliederbereich werden nun auf Satellitenkarte von #Graphhopper dargestellt

    Unser Webmaster Ed hat noch weitere Updates im Köcher. Wir bleiben dran und danken ihm für seine exzellente Arbeit!

  13. @magerquark

    Das ist ne Fährstrecke. Kannst du sicher vermeiden, anderer Kommentar. Dass es sowas überhaupt gibt ist schon nice

    Sicher dass du alle Karten heruntergeladen hast? Norddeutschland, Dänemark, Schweden?

    Alternativ kannst du auch Routing von #BRouter oder #GraphHopper verwenden, die gehen auch ohne heruntergeladene Karten aber halt nicht lokal.

  14. @magerquark

    Das ist ne Fährstrecke. Kannst du sicher vermeiden, anderer Kommentar. Dass es sowas überhaupt gibt ist schon nice

    Sicher dass du alle Karten heruntergeladen hast? Norddeutschland, Dänemark, Schweden?

    Alternativ kannst du auch Routing von #BRouter oder #GraphHopper verwenden, die gehen auch ohne heruntergeladene Karten aber halt nicht lokal.

  15. What #OpenStreetMap routing method would you use to draw a reasonably efficient route to visit a number of coordinates (dozens, hundreds of places)?

    #OpenRouteService is the only option mentioned in wiki.openstreetmap.org/wiki/Tr .

    For example: tour of 35 #Helsinki city #libraries. I did the track manually on #GraphHopper and imported it on #uMap. Surely there's a better way?
    graphhopper.com/maps/?point=60
    umap.openstreetmap.fr/en/map/h

  16. What #OpenStreetMap routing method would you use to draw a reasonably efficient route to visit a number of coordinates (dozens, hundreds of places)?

    #OpenRouteService is the only option mentioned in wiki.openstreetmap.org/wiki/Tr .

    For example: tour of 35 #Helsinki city #libraries. I did the track manually on #GraphHopper and imported it on #uMap. Surely there's a better way?
    graphhopper.com/maps/?point=60
    umap.openstreetmap.fr/en/map/h

  17. @awinkler for which region? For car only routing there exist several (#graphhopper, #osrm, #valhalla ), for transit routing, data availability is still an issue. The #transitous project is the largest free instance I‘m aware of. For smaller regions, you might self-host e.g. an #OpenTripPlanner or #MOTIS instance transitous.org/

  18. @awinkler for which region? For car only routing there exist several (#graphhopper, #osrm, #valhalla ), for transit routing, data availability is still an issue. The #transitous project is the largest free instance I‘m aware of. For smaller regions, you might self-host e.g. an #OpenTripPlanner or #MOTIS instance transitous.org/

  19. @ianb Meanwhile #GraphHopper lets you decide between leisurely walk and hike, but gently warns you that the hike involves 15 km of climbing of which 5 rather dangerous.

  20. @ianb Meanwhile #GraphHopper lets you decide between leisurely walk and hike, but gently warns you that the hike involves 15 km of climbing of which 5 rather dangerous.

  21. I just discovered .
    It's a routing engine that can use data and your own preferences for roads if you want.

    Certainly beats on the website.

    brouter.de/brouter-web/

    Is there a GUI for ?

  22. I just discovered #brouter .
    It's a routing engine that can use #openstreetmap data and your own preferences for #cycling roads if you want.

    Certainly beats #graphhopper on the #OSM website.

    brouter.de/brouter-web/

    Is there a GUI for #Linux ?

    #bike #bicycle #maps

  23. Hey #OpenStreetMap peeps, how can I debug this strange routing behavior?

    #GraphHopper & #OSRM make a simple left turn (correct), while #Valhalla and #OsmAnd act as if there's a turn restriction and make a U-turn instead.

    This is at 51.73201° N, 9.97389° E, coming from north on B3 and going to the east on A7.

    There's been a construction site here a few weeks ago, so my first suspicion was stale data, but even with OsmAnd Live it still does it.

    I can't see any restrictions in the data. Ideas?

  24. Hey #OpenStreetMap peeps, how can I debug this strange routing behavior?

    #GraphHopper & #OSRM make a simple left turn (correct), while #Valhalla and #OsmAnd act as if there's a turn restriction and make a U-turn instead.

    This is at 51.73201° N, 9.97389° E, coming from north on B3 and going to the east on A7.

    There's been a construction site here a few weeks ago, so my first suspicion was stale data, but even with OsmAnd Live it still does it.

    I can't see any restrictions in the data. Ideas?

  25. Why doesn't @duckduckgo have cycling directions on their maps, like every other navigation app? Only having the choice between walking or driving really decreases its value.
    Fortunately #GraphHopper works reasonably well...

  26. Why doesn't @duckduckgo have cycling directions on their maps, like every other navigation app? Only having the choice between walking or driving really decreases its value.
    Fortunately #GraphHopper works reasonably well...

  27. Nächste Radtour steht fest 🤣
    Danke Graphhopper, dass du selbst
    51°N 6.5°E komplett misinterpretierst.
    Inzwischen sehe ich, dass es sowohl dezimal als auch im Bogenmaß mehr als hapert.
    #komoot #graphhopper #photon

  28. Why would a map app like #Graphhopper fail so hard in 2024 when given
    50°55'58.5"N 6°55'03.3"E
    as a search String?

  29. OSM, Graphopper и все все все

    Введение Думаю, все согласятся с утверждением, что в современном мире логистической компании трудно обойтись без маршрутизации. Да, можно планировать все поездки руками, но с ростом объема работ это делать становиться все труднее и труднее. Не спасают ни записные книжки, ни электронные таблицы, ни даже записи в базе данных. Увеличивается количество ошибок. И появляется случаи доставки отправления не в назначенный Саратов, а в Норильск. Выясняется это уже на месте, производится возврат отправления на что тратятся ресурсы компании. Маршрутизация, волшебное слово, но с чего начать?

    habr.com/ru/articles/823242/

    #osm #graphhopper #ors #osrm #nominatim

  30. @blausand Nun ja, die Routenvorschläge von #GraphHopper fürs Fahrrad sehen dann aber auch sehr nach quick'n dirty aus. Habe vorhin mal probehalber Start und Ziel fürs #mdrza eingegeben. Suboptimal wäre untertrieben. Dann doch lieber bei #osmand (ggf. mit #BRouter als offline Engine) ein paar Sekunden warten und dafür eine wirklich brauchbare Route erhalten.
    Und wenn ich vorab planen kann, suche ich mir die Routen auf #bikerouter und importiere die Tracks dann zum Navigieren in OsmAnd.

  31. @Cheatha Ach, übrigens, hab rausgefunden, wer bei der Suche auf freien mobilen Karten am Stock geht (wie ich, Grüße geh'n raus an #OSMand), dem sei die #GraphHopper App empfohlen. Blitzschnell ist untertrieben!
    #hackurday

  32. Si quelqu'un près de #Montréal voudrait implémenter les directions pour le transport en commun de la #STM, #ARTM / Exo, etc., dans #GNOMEMaps pour avoir un logiciel de routage natif à #GNOME / #Linux avec #OpenStreetMap et #GraphHopper, voyez ce billet et ceux reliés pour la documentation de données ouvertes #opendata : gitlab.gnome.org/GNOME/gnome-m

  33. Si quelqu'un près de #Montréal voudrait implémenter les directions pour le transport en commun de la #STM, #ARTM / Exo, etc., dans #GNOMEMaps pour avoir un logiciel de routage natif à #GNOME / #Linux avec #OpenStreetMap et #GraphHopper, voyez ce billet et ceux reliés pour la documentation de données ouvertes #opendata : gitlab.gnome.org/GNOME/gnome-m

  34. Ahem, #GNOMEMaps Nightly (with its dark vector maps!) says that walking from the airport's nearest lane to the #GUADEC 2024 venue is a terrible idea 🤔️

    I'll just leave this link here in case someone in the #GNOME #Colorado community wants to implement public transit routing using the #Denver RTD's open data / APIs and #OpenStreetMap #GraphHopper : gitlab.gnome.org/GNOME/gnome-m

  35. Ahem, #GNOMEMaps Nightly (with its dark vector maps!) says that walking from the airport's nearest lane to the #GUADEC 2024 venue is a terrible idea 🤔️

    I'll just leave this link here in case someone in the #GNOME #Colorado community wants to implement public transit routing using the #Denver RTD's open data / APIs and #OpenStreetMap #GraphHopper : gitlab.gnome.org/GNOME/gnome-m

  36. @cliftonmr @yrioll

    Actually, you can : openstreetmap.org/directions though it won't be able to provide you with turn-by-turn guidance.

    There are multiple routers and modes available, too: #OSRM, #graphHopper, #valhalla

  37. Online Routenberechnung #Graphhopper funktioniert. Jedoch wird da ja dann kein Tempolimit und auch keine Verkehrsbeschränkungen mehr angezeigt.
  38. Zur Frage der Software:

    1. Die #Graphhopper Routing engine ist Open Source
    graphhopper.com/open-source/ - Wie ich Peter kenne ist er sehr offen für jedwede Verbesserung ... github.com/boldtrn/graphhopper

    2. Auch Victor Scherb von #OsmAnd github.com/osmandapp/OsmAnd ist jederzeit ansprechbar