Отримуйте доступ до даних про дорожній рух Google через веб-службу


79

Чи є спосіб отримати доступ до даних про трафік, які Google надає через веб-службу?

Здається, існує таке, GTrafficOverlayщо розміщує трафік поверх маршруту на вбудованій карті Google, але немає прямої веб-служби, яку я можу використати, щоб, скажімо, вказати джерело та пункт призначення та знайти трафік між ними?

Чи є інше джерело, з якого я можу отримати ці дані?


developers.google.com/maps/documentation/javascript/examples/..., здається, нещодавно додано.
Blazemonger

Відповіді:


44

Немає способу (або, принаймні, достатньо простого та зручного способу) отримати необроблені дані про трафік з Google Maps Javascript API v3. Навіть якщо ви зможете це зробити, це, ймовірно, порушить деякі положення Умов використання Карт Google. Вам доведеться отримати цю інформацію в іншій службі. Я сумніваюся, що зараз існує безкоштовна послуга, яка надає цю інформацію, але мені було б дуже приємно, якби хтось довів, що я не правий у цьому.

Як зазначає @crdzoba, API Bing Maps надає деякі дані про трафік . Можливо, це може задовольнити ваші потреби. З документації не зрозуміло, скільки даних про дорожній рух виявляється, оскільки це лише дані про "інциденти". Там буде повільний рух через будівництво, але мені не очевидно, чи буде повільний рух через просто обсяг.

ОНОВЛЕННЯ (березень 2016 р.): З моменту написання цієї відповіді в 2011 році відбулося багато, але, схоже, основні моменти затримуються: Ви не знайдете необроблених даних про трафік у безкоштовних послугах API (принаймні не для США, і, можливо, ні більшість інших місць). Але якщо ви не проти заплатити трохи та / або якщо вам просто потрібні такі речі, як "час поїздки за певним маршрутом, враховуючи рух", у вас є варіанти. Відповідь @ Anto , наприклад, вказує на Google Maps For Work як платну послугу API, яка дозволяє отримувати час у дорозі з урахуванням трафіку.


14

Очевидно, інформація доступна за допомогою API Google Directions у своєму професійному виданні Maps for Work . Відповідно до документації API :

Примітка. Користувачі Maps for Work повинні включати параметри клієнта та підпису до своїх запитів замість ключа.
[...]
duration_in_traffic вказує загальну тривалість цього етапу, беручи до уваги поточні умови дорожнього руху. Тривалість трафіку буде повернута, лише якщо виконано всі наступні умови:

  • Запит напрямків включає параметр_відправлення_ часу, встановлений у значення протягом декількох хвилин поточного часу.
  • Запит включає дійсний клієнт API Google Maps для роботи та параметр підпису .
  • Для запитуваного маршруту доступні умови дорожнього руху.
  • Запит на вказівки не включає точки зупинки.

13

Можливо, ви захочете поглянути ТУТ СЛУЖБУ КАРТ. Вони мають прямі дані про трафік, якими ви можете скористатися, і саме це вам потрібно: https://developer.here.com/api-explorer/rest/traffic/traffic-flow-bounding-box

Наприклад, запитуючи цікаву область, ви можете отримати щось подібне:

{
  "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
                    }
                  ]
                }
              ]
            }
          ],
....

Цей приклад показує поточну середню швидкість SU9,1, де швидкість вільного потоку FFбуде дорівнювати 17. Коефіцієнт заклинювання JFстановить 3,3, що все ще вважається вільним потоком, але стає млявим. Одиниці вимірювання (милі / км) можна визначити у виклику API. Щоб уникнути спілкування з місцями TMC, ви можете попросити геокоординати ділянок дороги, додавши responseattributes=shв запит.

Використані скорочення можна знайти тут Інтерпретація ТУТ Карт тегів руху в режимі реального часу :

  • "RWS" - перелік предметів дорожнього руху (RW)
  • "RW" = Це складний елемент для потоку по всій проїжджій частині. На кожній проїжджій частині буде присутній елемент проїжджої частини з наявною інформацією про рух транспорту
  • "FIS" = Перелік елементів елемента потоку (FI)
  • "FI" = Одиниця потоку
  • "TMC" = Впорядкована колекція розташувань TMC
  • "ПК" = Point TMC Location Location
  • "DE" = Текстовий опис дороги
  • "QD" = Напрямок черги. '+' або '-'. Зверніть увагу, що це повністю протилежне напрямку руху в повноцінному посвідченні особи, наприклад, для місця розташування 107 + 03021 QD буде "-"
  • "LE" = довжина ділянки дороги. Одиниці визначаються у заголовку файлу
  • "CF" = Поточний потік. Цей елемент містить детальну інформацію про швидкість та коефіцієнт забивання для даного елемента потоку.
  • "CN" = Довіра, вказівка ​​на те, як визначалася швидкість. -1,0 дорога закрита. 1,0 = 100% 0,7-100% Історично Зазвичай значення між .7 і 1,0 "FF" = Швидкість вільного потоку на цій
    ділянці дороги.
  • "JF" = число від 0,0 до 10,0, що вказує на очікувану якість подорожі. Коли буде перекрита дорога, коефіцієнт застрягання буде 10. Коли число наближається до 10,0, якість подорожей погіршується. -1,0 означає, що неможливо розрахувати коефіцієнт забиття
  • "SP" = Швидкість (на основі UNITS), обмежена обмеженням швидкості
  • "SU" = Швидкість (на основі UNITS), не обмежена обмеженням швидкості
  • "TY" = Інформація про тип для вказаного контейнера довідок про місцезнаходження. Це може бути вільно визначений рядок

Також джерело надходить з https://developer.here.com/rest-apis/documentation/traffic/topics/additional-parameters.html


1
Хоча це посилання може відповісти на питання, краще включити сюди основні частини відповіді та надати посилання для довідки. Відповіді лише на посилання можуть стати недійсними, якщо пов’язана сторінка зміниться. - З огляду
CinCout

3
@CinCout Дякую за пропозиції. Я оновив свій пост.
Коста Хуан

Як визначити повністю кваліфікований ідентифікатор, описаний у полі QD?
diegopso

12

Bing Maps API має службу REST, яка повертає інформацію про дорожній рух

http://msdn.microsoft.com/en-us/library/hh441725


Але це означає, що якщо ви хочете відобразити інформацію про дорожній рух на карті, ви повинні використовувати карти bing.
noRema

6

Замість того, щоб намагатися отримати необроблені дані про трафік, ви можете спробувати інший підхід. Google Directions API дозволяє запитувати api з певним маршрутом і в результаті повертає рядок JSON або XML-елемент. Цей результат включає елемент - 'duration_in_traffic'. Це вказує загальну тривалість певного етапу подорожі, беручи до уваги поточні умови руху. (інформацію про "leg" та інші елементи рядка JSON, що повертає Directions API, див. посилання нижче)

https://developers.google.com/maps/documentation/directions/#JSON Я не пробував цього сам, а лише те, що мені траплялося в документації.


Це не працює, оскільки Google повертає довжину та тривалість поїздки, не враховуючи стан трафіку. Я маю на увазі, він повертає ті самі цифри, будь то година пік чи спокійна ніч :(
4lberto

1
Це спрацьовує, якщо у вас є платний рахунок на картах Google, однак передплата смішно дорога, а використання даних обмежене.
Betelguese


4

Можливо, варто поглянути на API трафіку Mapquests: http://www.mapquestapi.com/traffic/

На жаль, веб-сервіс доступний лише для деяких міст США, я думаю. Але, мабуть, це вирішує вашу проблему.


3

Не думаю, що Google надасть цей API. А дані про дорожній рух містять не лише дані про аварії.

Сьогодні багато онлайн-карт показують міський рух, але вони не надають API для розробника. Ми навіть не знаємо, звідки вони беруть дані про дорожній рух. Можливо, уряд має дані.

Тому я думаю, що ви можете подумати про це з іншого напрямку. Наприклад, існує багато веб-сайтів соціальних мереж. Кожен міг розмістити інформацію про дорожній рух на веб-сайті. Ми можемо зібрати цю інформацію, щоб отримати статус руху. Або, можливо, ми можемо створити веб-сайт цього типу.

Але дані про тип трафіку (про які говорилося вище) не є точними. Навіть інформація, надана людиною, буде помилковою.

На щастя, я виявив, що в моєму місті зараз є мобільний додаток, який називається "Інформація про автобуси в реальному часі". Він міг повідомити громадянину, де зараз знаходиться автобус і коли прибуде на автостанцію. І я нюхаю REST API у цьому додатку. Дані з REST API дають важливі дані, наприклад ширину та довжину, а також швидкість шини. І це дані в режимі реального часу! Тому я думаю, що ми могли б обчислити стан трафіку за цими даними (за деяким програмуванням). Ось деякі зразки даних: https://github.com/sp-chenyang/bus/blob/master/sample_data/bjgj_aibang_com_8899_bjgj_php_city_linename_stationno_datatype_type.json

Навіть даних шини буде недостатньо для обчислення точного стану руху в режимі реального часу. Аварії, світлофор та інше вплинуть на стан дорожнього руху. Але я думаю, що це початок.

Зрештою, я думаю, ви можете спробувати з’ясувати, чи надає ваше місто ці дані.

PS: Я завжди думаю, що в майбутньому життя людей буде кращим, але не зараз.


3

Можна отримати дані про дорожній рух. Нижче наведена моя реалізація в python. API має певну квоту і не є повністю безкоштовним, але достатньо хорошим для невеликих проектів

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)

Відповідь: -

{
    "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"
}

Вам потрібно передати "departure_time":str(int(time.time()))необхідний параметр рядка запиту для інформації про дорожній рух.

Ваша інформація про дорожній рух буде присутня у duration_in_traffic.

Докладнішу інформацію див. У цій документації.

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

якщо мені потрібно спробувати, мені залишається лише замінити свій ключ на "GetYourKeyHere", або там є щось інше? тому що у мене сталася помилка, тому я хочу переконатися, що я в правильному напрямку
Фатіма

0

Існує проект під назвою « Відкритий трафік», який зараз не повноцінно функціонує, але здається, що це правильна відповідь у майбутньому.

OpenTraffic - це глобальна платформа передачі даних для обробки анонімних позицій транспортних засобів та смартфонів у статистику реального часу та статистику дорожнього руху. Ми будуємо це відкрито, використовуючи повністю відкрите програмне забезпечення, із залученням зростаючого списку партнерів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.