Uzyskaj dostęp do danych o ruchu Google za pośrednictwem usługi internetowej


79

Czy istnieje sposób, aby uzyskać dostęp do danych o ruchu, które Google udostępnia za pośrednictwem usługi internetowej?

Wydaje się, że istnieje GTrafficOverlaytaka, która umieszcza ruch na szczycie trasy na wbudowanej mapie Google, ale nie ma bezpośredniej usługi internetowej, którą mogę wykorzystać, powiedzmy, aby podać źródło i miejsce docelowe i znaleźć ruch między nimi?

Czy jest jakieś inne źródło, z którego mogę uzyskać te dane?


Odpowiedzi:


44

Nie ma sposobu (lub przynajmniej rozsądnie łatwego i wygodnego sposobu), aby uzyskać nieprzetworzone dane o ruchu z Google Maps Javascript API v3. Nawet jeśli możesz to zrobić, prawdopodobnie naruszy to jakąś klauzulę w Warunkach korzystania z usługi Google Maps. Musisz uzyskać te informacje z innej usługi. Wątpię, czy istnieje obecnie bezpłatna usługa, która dostarcza tych informacji, ale bardzo bym chciała, gdyby ktoś udowodnił mi, że się myliłem.

Jak wskazuje @crdzoba, Bing Maps API udostępnia niektóre dane o ruchu . Być może to zaspokoi Twoje potrzeby. Z dokumentacji nie wynika jasno, ile danych o ruchu ujawnia, ponieważ są to tylko dane o „incydentach”. Byłby tam spowolniony ruch z powodu robót budowlanych, ale nie jest dla mnie oczywiste, czy będzie to powolny ruch ze względu na wielkość.

AKTUALIZACJA (marzec 2016 r.): Wiele się wydarzyło od czasu napisania tej odpowiedzi w 2011 r., Ale wydaje się, że główne punkty pozostają niezachwiane: nie znajdziesz surowych danych o ruchu w bezpłatnych usługach API (przynajmniej nie dla Stanów Zjednoczonych i prawdopodobnie nie w większości innych miejsc). Ale jeśli nie masz nic przeciwko zapłaceniu trochę i / lub jeśli potrzebujesz po prostu „czasu podróży na określonej trasie z uwzględnieniem ruchu”, masz opcje. Na przykład odpowiedź @ Anto wskazuje na Google Maps For Work jako płatną usługę API, która pozwala uzyskać czas podróży z uwzględnieniem natężenia ruchu.


14

Najwyraźniej informacje są dostępne za pomocą Google Directions API w profesjonalnym wydaniu Maps for work . Zgodnie z dokumentacją API :

Uwaga: użytkownicy Maps for Work muszą dołączyć do swoich żądań parametry klienta i podpisu zamiast klucza.
[...]
duration_in_traffic wskazuje całkowity czas trwania tego etapu, biorąc pod uwagę aktualne warunki drogowe. Czas trwania ruchu zostanie zwrócony tylko wtedy, gdy spełnione są wszystkie poniższe warunki:

  • Żądanie wskazówek zawiera parametr exit_time ustawiony na wartość w ciągu kilku minut od aktualnego czasu.
  • Żądanie zawiera prawidłowego klienta Google Maps API for Work i parametr podpisu .
  • Warunki drogowe są dostępne dla żądanej trasy.
  • Żądanie trasy nie obejmuje punktów pośrednich.

13

Możesz zajrzeć do serwisu HERE MAP SERVICE. Mają bezpośrednie dane o ruchu, których możesz użyć, a dokładnie to, czego potrzebujesz: https://developer.here.com/api-explorer/rest/traffic/traffic-flow-bounding-box

Na przykład, pytając o obszar zainteresowania, możesz otrzymać coś takiego:

{
  "RWS": [
    {
      "RW": [
        {
          "FIS": [
            {
              "FI": [
                {
                  "TMC": {
                    "PC": 32483,
                    "DE": "SOHO",
                    "QD": "+",
                    "LE": 0.71682
                  },
                  "CF": [
                    {
                      "TY": "TR",
                      "SP": 9.1,
                      "SU": 9.1,
                      "FF": 17,
                      "JF": 3.2911,
                      "CN": 0.9
                    }
                  ]
                }
              ]
            }
          ],
....

Ten przykład pokazuje bieżącą średnią prędkość SU9,1, przy czym prędkość swobodnego przepływu FFwynosiłaby 17. Współczynnik zatoru JFwynosi 3,3, co nadal jest uważane za swobodny przepływ, ale staje się powolny. Używane jednostki (mile / km) można zdefiniować w wywołaniu interfejsu API. Aby uniknąć zajmowania się lokalizacjami TMC, możesz poprosić o podanie współrzędnych geograficznych odcinków drogi, dodając responseattributes=shżądanie.

Zastosowane skróty można znaleźć tutaj. Interpretacja map HERE Maps w czasie rzeczywistym :

  • „RWS” - lista elementów jezdni (RW)
  • „RW” = to jest element złożony dla przepływu przez całą jezdnię. Dla każdej jezdni będzie obecny element jezdni z dostępnymi informacjami o natężeniu ruchu
  • „FIS” = lista elementów pozycji przepływu (FI)
  • „FI” = pojedynczy element przepływu
  • "TMC" = Uporządkowana kolekcja lokalizacji TMC
  • „PC” = kod lokalizacji punktu TMC
  • „DE” = opis tekstowy drogi
  • „QD” = kierunek kolejkowania. „+” lub „-”. Zwróć uwagę, że jest to odwrotność kierunku jazdy w pełni kwalifikowanym identyfikatorze, na przykład dla lokalizacji 107 + 03021 QD będzie oznaczać „-”
  • „LE” = długość odcinka drogi. Jednostki są zdefiniowane w nagłówku pliku
  • „CF” = Aktualny przepływ. Ten element zawiera szczegółowe informacje o prędkości i współczynniku zatoru dla danego elementu przepływu.
  • „CN” = pewność, wskazanie, w jaki sposób została określona prędkość. -1,0 droga zamknięta. 1,0 = 100% 0,7-100% Historyczna Zwykle wartość między 0,7 a 1,0 „FF” = prędkość swobodnego przepływu na tym
    odcinku drogi.
  • „JF” = liczba między 0,0 a 10,0 wskazująca oczekiwaną jakość podróży. Gdy droga jest zamknięta, Jam Factor będzie wynosił 10. Wraz ze zbliżaniem się liczby do 10,0 jakość podróży pogarsza się. -1,0 oznacza, że ​​nie można obliczyć współczynnika zatoru
  • „SP” = prędkość (na podstawie JEDNOSTEK) ograniczona przez ograniczenie prędkości
  • „SU” = prędkość (na podstawie JEDNOSTEK) nie ograniczona przez ograniczenie prędkości
  • „TY” = Wpisz informacje dla danego kontenera z odniesieniami do lokalizacji. Może to być dowolnie zdefiniowany ciąg

Również źródło pochodzi z https://developer.here.com/rest-apis/documentation/traffic/topics/additional-parameters.html


1
Chociaż ten link może odpowiedzieć na pytanie, lepiej jest zawrzeć tutaj zasadnicze części odpowiedzi i podać link do odniesienia. Odpowiedzi zawierające tylko łącze mogą stać się nieprawidłowe, jeśli połączona strona ulegnie zmianie. - Z recenzji
CinCout

3
@CinCout Dzięki za sugestie. Zaktualizowałem swój post.
Costa Huang

Jak określić w pełni kwalifikowany identyfikator podany w polu QD?
diegopso


6

Zamiast próbować pobierać nieprzetworzone dane o ruchu, możesz wypróbować inne podejście. Interfejs API Google Directions umożliwia wysyłanie zapytań do interfejsu API za pomocą określonej trasy i zwraca jako wynik ciąg JSON lub element XML. Wynik ten zawiera element - „duration_in_traffic” Wskazuje całkowity czas trwania danego odcinka podróży, biorąc pod uwagę aktualne warunki drogowe. (aby uzyskać informacje na temat „nogi” i innych elementów ciągu JSON zwracanych przez interfejs Directions API, należy zapoznać się z poniższym linkiem)

https://developers.google.com/maps/documentation/directions/#JSON Sam tego nie próbowałem, ale po prostu znalazłem coś w dokumentacji.


To nie działa, ponieważ Google zwraca długość i czas trwania podróży bez uwzględnienia stanu ruchu. To znaczy, zwraca te same liczby, niezależnie od tego, czy jest to godzina szczytu, czy spokojna noc :(
4lberto

1
Działa, jeśli masz płatne konto z mapami Google, jednak subskrypcja jest absurdalnie droga, a użycie danych jest restrykcyjne.
Betel Portugalski


4

Może powinieneś rzucić okiem na Mapquests Traffic API: http://www.mapquestapi.com/traffic/

Usługa internetowa jest niestety dostępna tylko dla niektórych miast w USA, jak sądzę. Ale prawdopodobnie to rozwiązuje twój problem.


3

Nie sądzę, że Google zapewni ten interfejs API. Dane o ruchu zawierają nie tylko dane o zdarzeniach.

Obecnie wiele map online pokazuje ruch w mieście, ale nie zapewniają one API dla dewelopera. Nie wiemy nawet, skąd biorą dane o ruchu. Może rząd ma dane.

Więc myślę, że można by pomyśleć o tym z innej strony. Na przykład istnieje wiele witryn sieci społecznościowych. Każdy mógł zamieścić informacje o ruchu na stronie internetowej. Możemy zbierać te informacje, aby uzyskać stan ruchu. A może uda nam się stworzyć taką stronę internetową.

Ale tego typu dane o ruchu (o których mowa powyżej) nie są dokładne. Nawet informacje dostarczone przez człowieka będą błędne.

Na szczęście odkryłem, że moje miasto udostępnia teraz aplikację mobilną o nazwie „Informacje o autobusach w czasie rzeczywistym”. Mógłby powiedzieć obywatelowi, gdzie jest teraz autobus i kiedy przyjedzie na dworzec autobusowy. Wyczuwam REST API w tej aplikacji. Dane z REST API podają ważne dane, na przykład szerokość i długość, a także prędkość magistrali. I to są dane w czasie rzeczywistym! Więc myślę, że moglibyśmy obliczyć stan ruchu na podstawie tych danych (przez niektóre programy). Oto kilka przykładowych danych: https://github.com/sp-chenyang/bus/blob/master/sample_data/bjgj_aibang_com_8899_bjgj_php_city_linename_stationno_datatype_type.json

Nawet dane magistrali nie wystarczą do obliczenia dokładnego stanu ruchu w czasie rzeczywistym. Zdarzenia, sygnalizacja świetlna i inne rzeczy będą miały wpływ na stan ruchu. Ale myślę, że to początek.

Na koniec myślę, że możesz spróbować sprawdzić, czy twoje miasto dostarcza te dane.

PS: Zawsze myślę, że życie ludzi będzie lepsze w przyszłości, ale nie teraz.


3

Możliwe jest uzyskanie danych o ruchu. Poniżej znajduje się moja implementacja w Pythonie. Interfejs API ma pewien limit i nie jest w pełni darmowy, ale wystarczająco dobry dla małych projektów

import requests
import time
import json


while True:

    url = "https://maps.googleapis.com/maps/api/distancematrix/json"

    querystring = {"units":"metric","departure_time":str(int(time.time())),"traffic_model":"best_guess","origins":"ITPL,Bangalore","destinations":"Tin Factory,Bangalore","key":"GetYourKeyHere"}

    headers = {
        'cache-control': "no-cache",
        'postman-token': "something"
        }

    response = requests.request("GET", url, headers=headers, params=querystring)
    d = json.loads(response.text)
    print("On", time.strftime("%I:%M:%S"),"time duration is",d['rows'][0]['elements'][0]['duration']['text'], " & traffic time is ",d['rows'][0]['elements'][0]['duration_in_traffic']['text'])
    time.sleep(1800)
    print(response.text)

Odpowiedź to: -

{
    "destination_addresses": [
        "Tin Factory, Swamy Vivekananda Rd, Krishna Reddy Industrial Estate, Dooravani Nagar, Bengaluru, Karnataka 560016, India"
    ],
    "origin_addresses": [
        "Whitefield Main Rd, Pattandur Agrahara, Whitefield, Bengaluru, Karnataka 560066, India"
    ],
    "rows": [
        {
            "elements": [
                {
                    "distance": {
                        "text": "10.5 km",
                        "value": 10505
                    },
                    "duration": {
                        "text": "35 mins",
                        "value": 2120
                    },
                    "duration_in_traffic": {
                        "text": "45 mins",
                        "value": 2713
                    },
                    "status": "OK"
                }
            ]
        }
    ],
    "status": "OK"
}

Musisz przekazać "departure_time":str(int(time.time()))to wymagany parametr ciągu zapytania dla informacji o ruchu.

Twoje informacje o ruchu będą obecne w formacie duration_in_traffic.

Więcej informacji znajdziesz w tej dokumentacji.

https://developers.google.com/maps/documentation/distance-matrix/intro#traffic-model

jeśli muszę to wypróbować, wystarczy wymienić mój klucz na „GetYourKeyHere”, czy jest coś innego? ponieważ miałem błąd, więc chcę się upewnić, że jestem we właściwy sposób
Fatima,

0

Istnieje projekt o nazwie Open Traffic, który nie jest obecnie w pełni funkcjonalny, ale wydaje się być właściwą odpowiedzią w przyszłości.

OpenTraffic to globalna platforma danych służąca do przetwarzania anonimowych pozycji pojazdów i smartfonów w postaci statystyk ruchu w czasie rzeczywistym i historycznych. Budujemy to na otwartej przestrzeni, używając w pełni otwartego oprogramowania, przy zaangażowaniu rosnącej listy partnerów.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.