Jak stworzyć aplikację do tworzenia rozkładów jazdy transportu publicznego w czasie rzeczywistym?
Published: 2024-03-01 16:34:36

Istnieje miejsce, w którym spotykają się informacje w czasie rzeczywistym, zmieniające się scenariusze systemów transportu publicznego i Internet Rzeczy (IoT) - nazwijmy to Internetem Rzeczy Transportowych (IoTT). Można o nim myśleć jako o wysoce zaawansowanej i przyjaznej dla użytkownika aplikacji tranzytowej, która działa w oparciu o dane w czasie rzeczywistym. Dzięki tytanom takim jak IBM, Moovit i Google Maps, którzy chcą wykorzystać "inteligentny transport", IoTT może zrewolucjonizować sposób, w jaki postrzegamy transport, czyniąc go bardziej dostępnym dla osób codziennie dojeżdżających do pracy.

Jako programista, szczególnie zajmujący się tworzeniem aplikacji mobilnych, możesz zastanawiać się, jak ten nowy rozwój wpływa na Ciebie i jak możesz się w niego zaangażować. Niezależnie od tego, czy jesteś entuzjastą iOS, czy Androida, sieć strumieni danych w czasie rzeczywistym, taka jak PubNub, może być bramą do nawigacji po tej morskiej zmianie. Ta nowa fala obsługi informacji o transporcie publicznym przybliża ekscytującą przyszłość IoTT do rzeczywistości, wyobrażając sobie czas, w którym możesz opracować aplikację tranzytową na urządzenia mobilne, która umożliwia urządzeniom łączenie się z kanałem i komunikację, nadając takie rzeczy, jak bieżące lokalizacje lub miejsca docelowe. Wyobraź sobie przyszłość, w której wszystkie te informacje w czasie rzeczywistym pomagają w grupowaniu transportu w oparciu o te informacje w celu uzyskania najwyższej wydajności.

PubNub to potężne narzędzie, które znajduje się w czołówce tej ewolucji i nadal wprowadza innowacje dzięki najnowocześniejszej technologii i zaufanym usługom w dziedzinie IoT, popartym naszymi renomowanymi certyfikatami i kwalifikacjami. Daje to obiecującą możliwość tworzenia aplikacji, które mogą na nowo zdefiniować sposób działania systemów transportowych. Tego rodzaju aplikacje stają się coraz ważniejsze w branży transportowej, okazując się korzystne dla osób dojeżdżających do pracy, agencji tranzytowych, a także dostawców usług transportowych.

Jak więc zacząć? Zabrudźmy sobie ręce prostym przykładem. W dzisiejszych czasach dane publiczne są obfite i dostępne do pobrania. Od publicznych danych dotyczących zagospodarowania przestrzennego po czasy przejazdu metra, wiele miast oferuje dane publiczne za pośrednictwem łatwych do wykorzystania interfejsów API. W tym artykule jako podstawę przyjmiemy API BART (Bay Area Rapid Transit) - API, które zapewnia szeroką gamę wskaźników, statystyk i rozkładów jazdy dla największego systemu kolejowego w Bay Area - aby stworzyć aplikację z harmonogramem transportu obsługującą aktualizacje w czasie rzeczywistym, która może być dużym impulsem dla aplikacji transportu publicznego.

Jak stworzyć aplikację transportową: Zakres programowania
---------------------------------------------------------

![](https://www.pubnub.com/cdn/3prze68gbwl1/asset-17suaysk1qa1hy3/51833020ec055e2ee9ecf7de3add5e60/times.png)

W tym artykule dowiesz się, jak wykorzystać interfejs API BART do zbudowania aplikacji rozkładu jazdy transportu publicznego w czasie rzeczywistym, prezentującej użytkownikom aktualizacje w czasie rzeczywistym i powiadomienia o usługach, podobnie jak Mapy Google, Moovit i Uber. Ma to na celu poprawę komfortu użytkowania poprzez dostarczanie cennych informacji, od czasów odjazdu po możliwe zakłócenia w świadczeniu usług. Dowiesz się, jak pobierać lokalizacje stacji (takich jak stacja metra lub przystanek autobusowy) i konwertować je na geohashe. Po zebraniu informacji wskażesz lokalizację użytkownika w San Francisco (lub sfałszujesz ją w naszym przypadku), a następnie dopasujesz lokalizację użytkownika do pobliskich stacji, co będzie wymagało większej liczby wywołań API w celu pobrania odpowiednich danych.

Po uzyskaniu szacowanych czasów odjazdu, wyświetlisz je na infoboxie mapy. Cały proces został uproszczony w samouczku krok po kroku, któremu towarzyszą fragmenty kodu i wyjaśnienia.

Rozpoczęcie pracy z aplikacją harmonogramu transportu
-----------------------------------------------------

Aby utworzyć aplikację tranzytową w czasie rzeczywistym, konfiguracja jest podobna do naszego [poprzedniego samouczka na temat geohashingu JavaScript](https://pubnub.com/blog/calculating-geolocation-proximity-w-javascript-geohashing/). Za pomocą skutecznych algorytmów planowania podróży i wykorzystując moc danych w czasie rzeczywistym, można stworzyć unikalną, przyjazną dla użytkownika aplikację mobilną dla systemów iOS, Android i innych urządzeń mobilnych, która może skutecznie zarządzać aktualizacjami w czasie rzeczywistym dotyczącymi transportu publicznego.

Po pierwsze, będziesz potrzebował "node" i "npm" dla modułu ETA swojej aplikacji. Jeśli nie znasz tych terminów, zapoznaj się z [obszernym wprowadzeniem do Node.js w PubNub](https://pubnub.com/blog/node-js-supercharged-by-pubnub/).

Używane pakiety node to:

-   [Browserify](http://browserify.org/) do korzystania z pakietów node w przeglądarce.
    
-   [ngeohash](https://github.com/sunng87/node-geohash) do kodowania szerokości i długości geograficznej w ciąg znaków.
    
-   [request](https://github.com/request/request) do żądań HTTP poza przeglądarką.
    
-   [xml2js](https://github.com/Leonidas-from-XIV/node-xml2js) do konwersji zwrotów XML na JSON.
    

Pakiety te zapewniają niezbędne funkcje do wywoływania interfejsów API, obsługi danych i wykonywania zadań wymaganych przez naszą aplikację. Jeśli spojrzysz na przykładowy kod, zauważysz, że brakuje tych pakietów. Wystarczy przejść do folderu bazowego projektu i wpisać \`npm install\` w wierszu poleceń. Spowoduje to zainstalowanie pakietów na podstawie wymagań w pliku \`package.json\`.

W kolejnych sekcjach zajmiemy się szczegółami pracy z danymi geolokalizacyjnymi, wydajnym przetwarzaniem powiadomień push, skutecznym wyświetlaniem lokalizacji pojazdów i tworzeniem doskonałego doświadczenia użytkownika z aplikacją. Bądź na bieżąco!

Hash użytkownika i lokalizacja na mapie dla aplikacji rozkładu jazdy tranzytu
-----------------------------------------------------------------------------

HTML5 Geolocation API to przydatne narzędzie, które umożliwia dostęp do lokalizacji geograficznej (długości i szerokości geograficznej) w oparciu o adres IP urządzenia, RFID, WIFI, adres MAC Bluetooth, GPS lub dane wprowadzone przez użytkownika. Oto jak go użyć, aby uzyskać lokalizację użytkownika w celu zapewnienia śledzenia w czasie rzeczywistym, podobnie jak robią to aplikacje transportowe, takie jak Uber czy Google Maps:

```js
if (navigator.geolocation) {
  navigator.geolocation.getCurrentPosition(function(position) {
  //...
```

Ten kod sprawdza, czy przeglądarka obsługuje geolokalizację, a następnie pobiera bieżącą pozycję użytkownika. Do celów testowych w tym samouczku ustawimy nasze współrzędne tak, aby oznaczały lokalizację w obszarze Bay.

```js
    that.lat = 37.6;
    that.lng = -122.4;
    var lat = that.lat;
    var lng = that.lng;
```

Nasza aplikacja będzie wymagać danych stacji do wyświetlenia na mapie. Importujemy te dane z pliku \`app.js\`.

```js
    var app = require("./app.js");
```

Następnie ustawiamy zmienne lokalne dla naszych danych:

```js
    var json_data, hash_table, hash_matches, destinations;
    …
    json_data_formatted = app.formatted_json;
    hash_table = app.hash_table;
    hash_matches = app.hash_matches;
    destinations = app.destinations;
```

Następnie zintegrujemy PubNub i Google Maps:

```js
    pubs();
    google.maps.event.addDomListener(window, 'load', initialize());
```

Funkcja \`pubs()\` jest wywoływana od linii 130 i inicjalizuje PubNub z unikalnymi kluczami publikowania i subskrypcji. Jeśli nie masz kluczy PubNub, możesz założyć [konto Pub](https://admin.pubnub.com/signup/) Nub, aby je uzyskać.

```js
function pubs() {
     var pubnub = new PubNub({
       publishKey: "publish_key",
       subscribeKey: "subscribe_key",
       userId: "UUID"
   });
},
```

Logika mapy Google została zapożyczona z [jednego z poprzednich](https://pubnub.com/blog/calculating-geolocation-proximity-w-javascript-geohashing/) artykułów. Połączenie PubNub nasłuchuje komunikatów o współrzędnych wysyłanych do kanału "mymaps", a następnie przesuwa znacznik użytkownika na podstawie otrzymanych informacji.

Funkcja \`initialize()\` Google Maps jest wywoływana, dodając właściwości do mapy. Co ważne, dodaje ona znacznik dla każdego \`hash\_match\`.

```js
    var business_marker = new google.maps.Marker({position: {lat: match_lat, lng: match_lng}, map: map});
    business_marker.setMap(map);
```

Następnie dodawany jest detektor zdarzeń dla okien informacyjnych.

```js
    google.maps.event.addListener(business_marker, 'mouseover', function() {
      infowindow.open(map,business_marker);
    });
    google.maps.event.addListener(business_marker, 'mouseout', function() {
      infowindow.close(map,business_marker);
```

Wyszukiwanie rozkładów jazdy pociągów dla aplikacji tranzytowej
---------------------------------------------------------------

Po zajęciu się wyświetlaniem elementów na mapie, następnym krokiem jest dodanie informacji o godzinach odjazdu. Osiąga się to poprzez powrót do \`app.js\` i wypełnienie hash\_matches danymi dla każdego z dopasowań.

W tym przykładzie zapisujemy dane tylko dla stacji Millbrae. Wykonujemy wywołanie Ajax na danych Millbrae:

```js
    $.ajax({
      type: "GET",
      url: "data/MLBR.json",
      dataType: "json",
      success: function(file) {
        main_two(file);
      }
    });
```

Ta funkcja, \`main\_two\`, formatuje dane i przygotowuje je do interakcji z Google Maps.

### Wyświetlanie rozkładów jazdy dla harmonogramu tranzytowego

Wróćmy teraz do pliku \`gmap.js\`. Tutaj przechodzimy przez różne nazwy miejsc docelowych. W tym przypadku \`Millbrae\` zostało zakodowane na sztywno, ale idealnie byłoby użyć zmiennej do dopasowania skrótów między \`hash\_matches\` i \`destinations\`, wyświetlając odpowiednie czasy.

```js
    var times = destination.times;
    dest_string = dest_string + "<p><i>" + destination.abbreviation + ":" + "</i><p>";
    times.forEach(function(time) {
      dest_string = dest_string + " " + time;
    });
```

Następnie określ okno informacyjne:

```js
    var infowindow = new google.maps.InfoWindow({
      content: "<b>" + BusinessName + "</b>" +
    "<p>" + dest_string + "</p></p></p>"
    });
```

To wszystko! Pomyślnie wyświetliłeś elementy na mapie i dodałeś informacje o godzinach odlotów. Jeśli chcesz dowiedzieć się więcej na temat mapowania w czasie rzeczywistym i geolokalizacji przy użyciu interfejsów API, takich jak MapBox, MapKit i Google Maps, zapoznaj się z naszymi [innymi samouczkami](https://pubnub.com/blog/category/tutorials/).

Poznaj PubNub
-------------

Co powiesz na zapoznanie się z PubNub? Zapoznaj się z naszym [Live](https://www.pubnub.com/tour/introduction/) Tour, aby zrozumieć podstawowe koncepcje każdej aplikacji opartej na PubNub w mniej niż 5 minut. Możesz [założyć](https://admin.pubnub.com/signup/) konto PubNub i [rozpocząć](https://www.pubnub.com/docs) pracę nad swoim projektem. Praca z PubNub może ożywić Twoją aplikację dzięki aktualizacjom w czasie rzeczywistym, powiadomieniom push i przyjaznemu dla użytkownika interfejsowi, otwierając nowe możliwości dla aplikacji transportowych.

Niezależnie od tego, czy jesteś użytkownikiem Apple czy Androida, czy dojeżdżasz do pracy autobusem, metrem czy rowerem, posiadanie pod ręką aplikacji transportowej w czasie rzeczywistym ma kluczowe znaczenie. Wykorzystując potężne interfejsy API PubNub i łatwo dostępne dane GTFS z agencji transportowych, możesz przyczynić się do przekształcenia transportu publicznego, tworząc wydajne, przyjazne dla użytkownika rozwiązanie cyfrowe dla osób dojeżdżających do pracy, usług transportowych i agencji. Pomyśl tylko - koniec z korkami, koniec z niepewnością co do czasu przyjazdu, po prostu płynny transport publiczny z aktualizacjami w czasie rzeczywistym. Po co więc czekać? Wskoczmy w tę podróż przekształcania systemu transportu z PubNub.

#### Spis treści

[Jak stworzyć aplikację transportową: Zakres programowaniaRozpoczęcie](#h-0) pracy z aplikacją do tworzenia rozkładów[jazdyUżytkownik](#h-1)[Hash i lokalizacja na mapie dla aplikacji do tworzenia rozkładów jazdyWyszukiwanie](#h-2)[rozkładów jazdy pociągów dla aplikacji do tworzenia rozkładów jazdyWyświetlanie](#h-3)[rozkładów jazdy dla aplikacji do tworzenia rozkładów jazdy Doświadczenie](#h-4) z[PubNub](#h-5)

Jak PubNub może ci pomóc?
=========================

Ten artykuł został pierwotnie opublikowany na PubNub [.com](https://www.pubnub.com/blog/how-to-build-a-realtime-public-transit-schedule-app/)

Nasza platforma pomaga programistom tworzyć, dostarczać i zarządzać interaktywnością w czasie rzeczywistym dla aplikacji internetowych, aplikacji mobilnych i urządzeń IoT.

Podstawą naszej platformy jest największa w branży i najbardziej skalowalna sieć komunikacyjna w czasie rzeczywistym. Dzięki ponad 15 punktom obecności na całym świecie obsługującym 800 milionów aktywnych użytkowników miesięcznie i niezawodności na poziomie 99,999%, nigdy nie będziesz musiał martwić się o przestoje, limity współbieżności lub jakiekolwiek opóźnienia spowodowane skokami ruchu.

Poznaj PubNub
-------------

Sprawdź [Live Tour](https://www.pubnub.com/tour/introduction/), aby zrozumieć podstawowe koncepcje każdej aplikacji opartej na PubNub w mniej niż 5 minut.

Rozpocznij konfigurację
-----------------------

Załóż [konto](https://admin.pubnub.com/signup/) PubNub, aby uzyskać natychmiastowy i bezpłatny dostęp do kluczy PubNub.

Rozpocznij
----------

[Dokumenty](https://www.pubnub.com/docs) PubNub pozwolą Ci rozpocząć pracę, niezależnie od przypadku użycia lub [zestawu SDK](https://www.pubnub.com/docs).