SERIA · LOCAL AI LAB

GeoDesk i OpenStreetMap — agent geograficzny bez internetu

Wyszukiwanie restauracji, stacji, parkingów i punktów POI liczone lokalnie z pliku OSM, bez Overpass API i bez połączenia z siecią.

SZOPA NA WSI2 MIN CZYTANIA
GeoDesk i OpenStreetMap — agent geograficzny bez internetu
GEO.OFFLINELOCAL AI LAB · 10 KROKÓW
BEZ SIECI
WEJŚCIEPRZETWARZANIEMAGAZYNDECYZJANARZĘDZIEWYJŚCIE01PLIK OSM/PBFwycinek regionu02KONWERSJAGEODESK03INDEKSPRZESTRZENNY04POZYCJAGPS / ręcznie05INTERPRETACJAPYTANIA06FILTR OSMamenity, shop…07ZAPYTANIE08SORTOWANIE09WZBOGACENIE10MAPAINDEKS PRZESTRZENNYOFFLINE · OSM/PBFTYHOTEL 0.4 kmSTACJA 1.1 kmSKLEP 0.2 kmPARKING 0.6 km
GEODESK + OSM/PBF · ZAPYTANIA PRZESTRZENNE LICZONE LOKALNIE, BEZ OVERPASS API

Zapytania geograficzne to jeden z niewielu przypadków, w których dane offline są nie tylko możliwe, ale wręcz lepsze: OpenStreetMap można pobrać w całości, a zapytania przestrzenne liczą się szybciej lokalnie niż przez publiczne API.

Problem

Overpass API jest świetne do zapytań okazjonalnych. Przy agencie, który odpytuje mapę kilkadziesiąt razy w trakcie jednego zadania, kończy się limitami i czasem odpowiedzi liczonym w sekundach. Do tego dochodzi zależność od łącza — a agent ma działać także w warsztacie bez zasięgu.

Przygotowanie danych

Punktem wyjścia jest wycinek regionu w formacie PBF. Cała Polska to kilkaset megabajtów; pojedyncze województwo znacznie mniej. Konwersja do formatu GeoDesk buduje indeks przestrzenny, dzięki któremu zapytanie „co jest w promieniu kilometra” nie wymaga przeglądania całego zbioru.

Aktualizacja danych to osobny, świadomie rzadki proces. Mapa nie zmienia się z godziny na godzinę, więc odświeżamy ją raz na kilka tygodni.

Mapa miasta z zaznaczonymi punktami POI wyszukanymi lokalnie

Od pytania do filtra

Rola modelu językowego jest tu wąska i dobrze określona: zamienia zdanie na filtr OSM. „Gdzie zjem coś ciepłego w promieniu kilometra” staje się zapytaniem o obiekty oznaczone jako restauracja lub bar w zadanym promieniu.

Ten podział ma konkretną zaletę: model nie musi znać geografii. Nie zgaduje odległości ani nie wymyśla adresów — te dane pochodzą z indeksu, więc nie da się ich zhalucynować.

Ograniczenia, o których warto wiedzieć

Dane OSM są tworzone społecznościowo, więc ich kompletność bywa nierówna. W mieście godziny otwarcia ma większość lokali, na wsi prawie żaden. Agent musi to komunikować wprost — „brak danych o godzinach” jest uczciwszą odpowiedzią niż milczące pominięcie obiektu.

Drugie ograniczenie to brak informacji o ruchu i czasach przejazdu. Odległość w linii prostej nie jest odległością drogową, a przy planowaniu trasy różnica bywa dwukrotna. Do tego trzeba osobnego silnika routingu — również działającego lokalnie.

Sortowanie i wzbogacenie

Wyniki surowe z OSM bywają ubogie: nazwa, współrzędne, kilka tagów. Sortujemy je po odległości, ale też po kompletności danych — obiekt z godzinami otwarcia i telefonem jest praktyczniejszy niż punkt z samą nazwą.

Wzbogacenie o dane lokalne to element, którego nie da się kupić: własne notatki o tym, gdzie kupujemy materiał i który tartak przetrze kłodę na wymiar, siedzą w tej samej bazie co punkty z mapy.

Zapytanie przestrzenne i wynik obok mapy — wszystko liczone lokalnie
Zapytanie przestrzenne i wynik obok mapy — wszystko liczone lokalnie · fot. winkelnkemper · CC BY-SA 2.0 · Wikimedia Commons

Wynik

Zapytanie o punkty w promieniu kilku kilometrów wykonuje się w czasie nieodczuwalnym dla użytkownika, bez limitów i bez łącza. Największym zaskoczeniem był efekt uboczny: agent przestał wymyślać nieistniejące miejsca, bo nie ma już takiej możliwości — lista pochodzi z indeksu, a nie z modelu.

Laptop działający poza zasięgiem sieci z mapą i lokalną bazą OSM
TAGI:AIAUTOMATIONCODE