Dokąd lecimy? Ale co to znaczy „dokąd”
Opublikowano: 2026-08-13
„Dokąd lecisz?” to najprostsze pytanie, jakie można zadać podróżnikowi. Człowiek odpowiada bez namysłu: na Sardynię, na Mazury, w Alpy, do Zakopanego. Wyszukiwarka lotów odpowiada inaczej – zna wyłącznie kody lotnisk i nazwy miast. Napisz jej „Sardynia”, a najczęściej dostaniesz zero wyników, choć na wyspę latają cztery lotniska. Ta rozbieżność między tym, jak ludzie mówią o celu podróży, a tym, co rozumieją systemy rezerwacyjne, to jeden z najciekawszych problemów, jakie musieliśmy rozwiązać w MeetInPlane. Poniżej opowiadamy, jak działa nasze pole „Dokąd?” – bez wykresów i wzorów, ale i bez ściemy.
„Dokąd” to nie nazwa. To zbiór lotnisk
Kluczowa decyzja projektowa brzmi tak: celem podróży nie jest napis, tylko zbiór lotnisk, z których da się tam dotrzeć. Kiedy wybierasz „Sardynia”, system nie zapisuje słowa „Sardynia” – zapisuje listę kodów IATA obsługujących wyspę. Kiedy ktoś inny wybierze „Cagliari”, jego zbiór zawiera jeden z tych samych kodów. I dlatego wasze podróże się spotkają, mimo że nikt z was nie wpisał tego samego słowa.
To brzmi jak drobiazg, a jest fundamentem. Dopóki cel podróży jest tekstem, „Kreta”, „Crete”, „Kriti” i „Heraklion” to cztery różne miejsca. Kiedy celem jest zbiór lotnisk, wszystkie cztery są tym samym kierunkiem – i mogą znaleźć się nawzajem. Zbiór lotnisk jest w naszym systemie walutą dopasowania: tym, co porównujemy, licząc, ilu podróżnych wybiera się tam, co Ty.
Miejsca, których nie ma w żadnym rozkładzie lotów
Ludzie nie planują wakacji na lotniskach. Planują je na wyspach, w regionach, w górach i nad jeziorami. Tyle że regiony turystyczne to byty, których świat rezerwacji lotniczych praktycznie nie zna. Żeby je poznać, sięgnęliśmy po otwartą, geograficzną bazę miejsc – i tu zaczęły się schody, bo świat jest znacznie mniej uporządkowany, niż się wydaje.
Kreta istnieje trzy razy
W bazie geograficznej Kreta ma trzy osobne rekordy: jako wyspa, jako region i jako jednostka administracyjna. Sardynia jest zapisana jako wyspa, ale Sycylia już jako region administracyjny. Ta sama kategoria rzeczy, trzy różne klasyfikacje. Gdybyśmy przepisali dane jeden do jednego, w podpowiedziach zobaczyłbyś „Kreta” trzy razy pod rząd – i nie miałbyś pojęcia, którą wybrać. Dlatego import kanonikalizuje duplikaty: wskazuje jednego zwycięzcę, a pozostałe rekordy tylko na niego wskazują. Do wyszukiwarki trafia wyłącznie zwycięzca.
Alpy nie mają kraju
Rekord Alp ma pustą kolumnę „kraj” i osiem kodów krajów obok: Austria, Szwajcaria, Niemcy, Francja, Włochy, Liechtenstein, Monako, Słowenia. Dla bazy danych, w której kierunek podróży zaczynał się od pytania „jaki kraj?”, takie miejsce jest nie do zapisania. To był drugi powód, dla którego przeszliśmy na zbiory lotnisk: Alpy nie potrzebują kraju, wystarczy im lista lotnisk. Innsbruck, Grenoble, Zurych, Mediolan. Kraj wyświetlamy potem, wyliczając go z lotnisk, a nie z samego miejsca.
Mazury, Masuren, Masuria – jedno miejsce, trzy pisownie
Główna kolumna z nazwą zawiera dokładnie jedną wersję i nigdy nie jest tą, której szukasz. Mazury są tam jako „Mazury”, ale Warszawa jako Warsaw, a Kreta jako Crete. Cała reszta – Masuren, Masuria, Warszawa, Warschau, Krakau – leży w osobnym pliku alternatywnych nazw: 742 MB i kilkanaście milionów wierszy. Bez niego polska wyszukiwarka nie znajduje Warszawy, a niemiecka Mazur. Co więcej, sporo z tych nazw nie ma przypisanego języka, więc obok wersji polskiej, angielskiej i niemieckiej trzymamy też „pisownię bez języka” – inaczej Masuren zniknęłoby z indeksu. Przy okazji: cała kategoria regionów turystycznych – Toskania, Prowansja, Mazury – to raptem 2580 wierszy na cały świat. Najcenniejszy zbiór w całym pliku jest jednocześnie najtańszy w obsłudze.
Jak z 13 milionów wierszy zrobić osiem podpowiedzi
Źródłowy plik ma 1,7 GB i 13 455 020 wierszy. Twoja podpowiedź ma osiem pozycji. Cała robota polega na tym, żeby po drodze wyrzucić właściwe 13 milionów.
Szum siedzi w wioskach, nie w regionach
Nazw takich jak „Crete”, „Sardinia” czy „Alps” są w bazie dziesiątki – to bezludne osady w USA i Indiach. Samych wsi poniżej 200 mieszkańców jest blisko pięć milionów, czyli ponad jedna trzecia pliku. Dlatego import stosuje próg ludności (domyślnie 500 osób), przepuszcza bezwarunkowo stolice i siedziby administracyjne, a szczyty górskie wpuszcza dopiero powyżej 1500 m n.p.m. albo wtedy, gdy mają nazwy w kilku językach – bo to dobry sygnał, że ktoś o nich w ogóle słyszał.
Skąd wiemy, które lotniska są najbliżej
Z tej samej bazy, z której bierzemy nazwy, dostajemy też współrzędne geograficzne – szerokość i długość – i to dla każdego rekordu: dla Mazur, dla Zakopanego i dla wszystkich 3274 lotnisk. Mając dwie pary współrzędnych, odległość między nimi liczy się po ortodromie, czyli po najkrótszym łuku na kuli, a nie po linii na płaskiej mapie. Służy do tego klasyczny wzór haversine (ang.) – kilka funkcji trygonometrycznych, które zamieniają różnicę współrzędnych na kilometry i, w przeciwieństwie do naiwnego twierdzenia Pitagorasa, nie rozjeżdżają się na dużych dystansach ani blisko biegunów.
Problem w tym, że policzenie tego „każdy z każdym” to milion miejsc razy 3274 lotniska, czyli 3,3 miliarda operacji. Dlatego lotniska wrzucamy najpierw do siatki komórek o boku jednego stopnia, a potem szukamy pierścieniami – od komórki, w której leży miejsce, coraz szerzej – i przerywamy, gdy nic spoza przeszukanego obszaru nie może już być bliżej niż najlepszy dotychczasowy kandydat. Wynik jest dokładnie taki sam jak przy liczeniu wszystkiego, tylko zamiast 3274 odległości mierzymy zwykle kilkanaście, a cała siatka waży jakieś 350 kB.
Jest w tym jedna pułapka, na której łatwo się przejechać: stopień szerokości to zawsze około 111 km, ale stopień długości to 111 km na równiku, 55 km na 60° szerokości i 31 km na wysokości Tromsø. Kto liczy komórki tak samo w obie strony, ten dla Spitsbergenu „znajdzie” lotnisko, które wcale nie jest najbliższe. Stąd cosinus szerokości w kilku miejscach kodu i osobny test dla Longyearbyen.
Każdy typ miejsca ma swój zasięg
Miejsce dostaje lotniska w promieniu zależnym od tego, czym jest: region, wyspa i pasmo górskie sięgają po 150 km, miasto po 60 km, wieś czy jezioro po 30 km. Te liczby nie są kosmetyką. Przy 60 km Warszawa bierze Chopina i Modlin, ale nie bierze Łodzi – i dzięki temu dwie podróże „do Warszawy” naprawdę oznaczają to samo miasto. Gdyby promień był hojniejszy, dopasowania byłyby liczniejsze i bezużyteczne.
Zakopané, Zakopane, zakopane
To, co wpisujesz, i to, co leży w bazie, przechodzą przez dokładnie tę samą normalizację – bez ogonków, bez wielkich liter, bez akcentów. Inaczej francuskie „Zakopané” nie znalazłoby polskiego Zakopanego. Wyszukiwanie działa po przedroście nazwy, więc podpowiedzi pojawiają się już po dwóch znakach, a dokładne trafienie w całą nazwę dostaje premię w rankingu – ale ograniczoną. Nauczyło nas tego „Krak”: to prawdziwa polska nazwa powiatu pod Krakowem i przez chwilę wygrywała z 800-tysięcznym miastem, o które oczywiście chodziło.
Ta sama Warszawa dwa razy to błąd
Podpowiedzi powstają jednocześnie z dwóch indeksów: starszego, zbudowanego z lotnisk, i nowego, geograficznego. Siłą rzeczy się pokrywają. Scalamy je i usuwamy duplikaty po zbiorze lotnisk: dwie propozycje pokrywające dokładnie te same lotniska to ten sam kierunek, choćby były zapisane inaczej – zostaje lepiej oceniona. Dodatkowo jedna nazwa może wystąpić raz na kraj, żeby lista nie mówiła dwukrotnie „Warszawa”. Kreta w Grecji i Crete w Nebrasce zachowują osobne wpisy, bo to faktycznie dwa różne miejsca.
Co to zmienia, gdy planujesz podróż
W praktyce tyle, że możesz wpisać to, co masz w głowie, a nie to, co ma w bazie linia lotnicza. Wpisujesz „Mazury” i widzisz, ilu podróżnych wybiera się tam w Twoim terminie. Wpisujesz „Alpy”, a system rozumie, że Innsbruck i Grenoble to ta sama zima. Wpisujesz „Sardynia”, a Twoja podróż dopasuje się do kogoś, kto wpisał „Cagliari” – i to jest dokładnie ten moment, dla którego zbudowaliśmy MeetInPlane.
Reszta dzieje się już poza wyszukiwarką: dopasowania pokazujemy z czytelnym powodem („ten sam lot”, „to samo miasto w tym samym tygodniu”), nigdy jako procentowy wynik bez uzasadnienia. Jeśli w Twoim kierunku i terminie nie ma jeszcze nikogo, możesz zostawić jedno powiadomienie – napiszemy raz, gdy ktoś się tam wybierze.
Skąd mamy te dane
Baza miejsc pochodzi z GeoNames – otwartej, budowanej społecznościowo bazy geograficznej udostępnianej na licencji CC BY 4.0. Licencja wymaga wskazania źródła, i słusznie: to kilkanaście lat pracy tysięcy ludzi, dzięki której możemy w ogóle wiedzieć, że Mazury to Masuren, a Alpy leżą w ośmiu krajach. Informacja o źródle jest u nas na stałe w stopce każdej strony, a tu dopisujemy do niej podziękowania. Warstwa lotnisk, promienie, wagi i cała logika dopasowania są już nasze.
Najczęstsze pytania
Czy mogę wyszukiwać po regionie, a nie po mieście?
Tak. Wyspy, regiony, pasma górskie, parki, jeziora i miejscowości działają tak samo jak kraje, miasta i lotniska. Wpisz „Sardynia”, „Mazury”, „Toskania” albo „Alpy”.
Skąd wiadomo, że dwie osoby lecą „w to samo miejsce”?
Z części wspólnej zbiorów lotnisk obu podróży. Jeśli się pokrywają, to ten sam kierunek – niezależnie od tego, jak każdy z was go nazwał.
Czy wyszukiwarka działa po polsku, angielsku i niemiecku?
Tak. Indeks trzyma nazwy w trzech językach obok oryginalnej pisowni, więc „Mazury”, „Masuria” i „Masuren” prowadzą do tego samego miejsca.
Czy muszę mieć kupiony bilet?
Nie. Wystarczy kierunek i przybliżony termin – dokładny lot możesz dodać później.
Następnym razem, gdy ktoś zapyta Cię „dokąd lecisz?”, odpowiedz tak, jak odpowiadasz zawsze. Resztą – tym, że „tam” to w istocie osiem kodów lotnisk, trzy rekordy Krety i jedno pasmo górskie bez kraju – zajmiemy się my. Załóż darmowe konto MeetInPlane i sprawdź, kto wybiera się tam, gdzie Ty.