Поделиться через


Как запрашивать актуальные и прогнозные погодные данные с помощью Служб погоды Azure Maps

Службы погоды Azure Maps — это набор интерфейсов REST API, позволяющий разработчикам интегрировать в свои решения высокодинамичные исторические, актуальные и прогнозные погодные данные, а также визуализации.

В этой статье показано, как запрашивать данные погоды в режиме реального времени и прогнозируемых данных о погоде:

  • Запрашивать актуальные (текущие) погодные данные с помощью Get Current Conditions API.
  • Запрашивать предупреждения о неблагоприятных погодных условиях, используя Get Severe Weather Alerts API.
  • Запрашивать ежедневные прогнозы с помощью Get Daily Forecast API.
  • Запрашивать почасовые прогнозы с помощью Get Hourly Forecast API.
  • Запрашивать поминутные прогнозы с помощью Get Minute Forecast API.

В этом видеоролике приведены примеры вызовов REST для Служб погоды Azure Maps.



Необходимые компоненты

Внимание

В примерах URL-адресов в этой статье вам потребуется заменить {Your-Azure-Maps-Subscription-key} ключ подписки Azure Maps.

В этом руководстве используется приложение бруно , но вы можете выбрать другую среду разработки API.

Запрос актуальных данных о погоде

Get Current Conditions API возвращает подробные данные о погодных условиях, например количество осадков, температура и скорость ветра, для заданного с помощью координат расположения. Кроме того, можно получить данные наблюдений за последние 6 часов или 24 часа для определенного расположения. Ответ включает такие сведения, как дата наблюдения и время, описание погодных условий, значок погоды, флаги индикаторов осадков и температура. Также возвращается значение RealFeel™ (ощущаемая температура) и индекс УФ-излучения.

В этом примере вы используете API Get Current Conditions для получения текущих погодных условий в координатах, расположенных в Сиэтле, WA.

  1. Откройте приложение бруно, выберите NEW REQUEST , чтобы создать запрос. В окне NEW REQUEST задайте для типа HTTP. Введите имя запроса.

  2. Выберите метод GET HTTP в раскрывающемся списке URL-адресов и введите следующий URL-адрес:

    https://atlas.microsoft.com/weather/currentConditions/json?api-version=1.0&query=47.60357,-122.32945&subscription-key={Your-Azure-Maps-Subscription-key}
    
  3. Нажмите синюю кнопку "Создать ".

  4. Нажмите кнопку запуска.

    Снимок экрана: URL-адрес данных о погоде запроса в режиме реального времени с выделенной кнопкой запуска в приложении бруно.

    Текст ответа содержит сведения о текущей погоде.

    {
      "results": [
        {
          "dateTime": "2024-08-08T09:22:00-07:00",
          "phrase": "Sunny",
          "iconCode": 1,
          "hasPrecipitation": false,
          "isDayTime": true,
          "temperature": {
            "value": 19.5,
            "unit": "C",
            "unitType": 17
          },
          "realFeelTemperature": {
            "value": 23.7,
            "unit": "C",
            "unitType": 17
          },
          "realFeelTemperatureShade": {
            "value": 19.4,
            "unit": "C",
            "unitType": 17
          },
          "relativeHumidity": 81,
          "dewPoint": {
            "value": 16.2,
            "unit": "C",
            "unitType": 17
          },
          "wind": {
            "direction": {
              "degrees": 0,
              "localizedDescription": "N"
            },
            "speed": {
              "value": 2,
              "unit": "km/h",
              "unitType": 7
            }
          },
          "windGust": {
            "speed": {
              "value": 3.8,
              "unit": "km/h",
              "unitType": 7
            }
          },
          "uvIndex": 4,
          "uvIndexPhrase": "Moderate",
          "visibility": {
            "value": 16.1,
            "unit": "km",
            "unitType": 6
          },
          "obstructionsToVisibility": "",
          "cloudCover": 5,
          "ceiling": {
            "value": 12192,
            "unit": "m",
            "unitType": 5
          },
          "pressure": {
            "value": 1015.9,
            "unit": "mb",
            "unitType": 14
          },
          "pressureTendency": {
            "localizedDescription": "Steady",
            "code": "S"
          },
          "past24HourTemperatureDeparture": {
            "value": 3,
            "unit": "C",
            "unitType": 17
          },
          "apparentTemperature": {
            "value": 20,
            "unit": "C",
            "unitType": 17
          },
          "windChillTemperature": {
            "value": 19.4,
            "unit": "C",
            "unitType": 17
          },
          "wetBulbTemperature": {
            "value": 17.5,
            "unit": "C",
            "unitType": 17
          },
          "precipitationSummary": {
            "pastHour": {
              "value": 0,
              "unit": "mm",
              "unitType": 3
            },
            "past3Hours": {
              "value": 0,
              "unit": "mm",
              "unitType": 3
            },
            "past6Hours": {
              "value": 0,
              "unit": "mm",
              "unitType": 3
            },
            "past9Hours": {
              "value": 0,
              "unit": "mm",
              "unitType": 3
            },
            "past12Hours": {
              "value": 0,
              "unit": "mm",
              "unitType": 3
            },
            "past18Hours": {
              "value": 0,
              "unit": "mm",
              "unitType": 3
            },
            "past24Hours": {
              "value": 0,
              "unit": "mm",
              "unitType": 3
            }
          },
          "temperatureSummary": {
            "past6Hours": {
              "minimum": {
                "value": 16,
                "unit": "C",
                "unitType": 17
              },
              "maximum": {
                "value": 19.5,
                "unit": "C",
                "unitType": 17
              }
            },
            "past12Hours": {
              "minimum": {
                "value": 16,
                "unit": "C",
                "unitType": 17
              },
              "maximum": {
                "value": 20.4,
                "unit": "C",
                "unitType": 17
              }
            },
            "past24Hours": {
              "minimum": {
                "value": 16,
                "unit": "C",
                "unitType": 17
              },
              "maximum": {
                "value": 26.4,
                "unit": "C",
                "unitType": 17
              }
            }
          }
        }
      ]
    }
    

Как запрашивать предупреждения о неблагоприятных погодных условиях

API получения серьезных оповещений о погоде Azure Maps возвращает тяжелые оповещения о погоде, доступные во всем мире от официальных государственных метеорологических агентств и ведущих глобальных поставщиков предупреждений о погоде. Служба возвращает такие сведения, как тип оповещения, категория, уровень. Служба также возвращает подробное описание активных серьезных оповещений для запрошенного расположения, таких как ураганы, грозы, молнии, тепловые волны или лесные пожары. Например, менеджеры по логистике могут визуализировать данные о неблагоприятных погодных условиях на карте вместе с объектами коммерческой деятельности и запланированными маршрутами, а также координировать работу с водителями и сотрудниками на местах.

В этом примере вы используете API получения оповещений о тяжелой погоде для получения текущих погодных условий в координатах, расположенных в Cheyenne, WY.

Примечание.

В этом примере извлекаются предупреждения о неблагоприятных погодных условиях на момент написания этой статьи. Вероятно, для запрошенного расположения больше нет активных предупреждений о неблагоприятных погодных условиях. Чтобы получить фактические данные при выполнении этого примера, необходимо получить данные в расположении с другими координатами.

  1. В приложении бруно выберите NEW REQUEST , чтобы создать запрос. В окне NEW REQUEST задайте для типа HTTP. Введите имя запроса.

  2. Выберите метод GET HTTP в раскрывающемся списке URL-адресов и введите следующий URL-адрес:

    https://atlas.microsoft.com/weather/severe/alerts/json?api-version=1.0&query=41.161079,-104.805450&subscription-key={Your-Azure-Maps-Subscription-key}
    
  3. Нажмите синюю кнопку "Создать ".

  4. Нажмите кнопку запуска.

    Снимок экрана с URL-адресом оповещений о тяжелой погоде запроса с выделенной кнопкой запуска в приложении бруно.

    Если нет серьезных оповещений о погоде, текст отклика содержит пустой results[] массив. При наличии предупреждений текст ответа будет содержать ответ JSON, подобный следующему:

    {
    "results": [
        {
            "countryCode": "US",
            "alertId": 2194734,
            "description": {
                "localized": "Red Flag Warning",
                "english": "Red Flag Warning"
            },
            "category": "FIRE",
            "priority": 54,
            "source": "U.S. National Weather Service",
            "sourceId": 2,
            "alertAreas": [
                {
                    "name": "Platte/Goshen/Central and Eastern Laramie",
                    "summary": "Red Flag Warning in effect until 7:00 PM MDT. Source: U.S. National Weather Service",
                    "startTime": "2020-10-05T15:00:00+00:00",
                    "endTime": "2020-10-06T01:00:00+00:00",
                    "latestStatus": {
                        "localized": "Continue",
                        "english": "Continue"
                    },
                    "alertDetails": "...RED FLAG WARNING REMAINS IN EFFECT FROM 9 AM THIS MORNING TO\n7 PM MDT THIS EVENING FOR STRONG GUSTY WINDS AND LOW HUMIDITY...\n\n* WHERE...Fire weather zones 303, 304, 305, 306, 307, 308, 309,\n  and 310 in southeast Wyoming. Fire weather zone 313 in Nebraska.\n\n* WIND...West to northwest 15 to 30 MPH with gusts around 40 MPH.\n\n* HUMIDITY...10 to 15 percent.\n\n* IMPACTS...Any fires that develop will likely spread rapidly.\n  Outdoor burning is not recommended.\n\nPRECAUTIONARY/PREPAREDNESS ACTIONS...\n\nA Red Flag Warning means that critical fire weather conditions\nare either occurring now...or will shortly. A combination of\nstrong winds...low relative humidity...and warm temperatures can\ncontribute to extreme fire behavior.\n\n&&",
                    "alertDetailsLanguageCode": "en"
                }
            ]
            },...
        ]
    }
    

Как запрашивать данные прогноза погоды по дням

Get Daily Forecast API возвращает подробный прогноз погоды по дням, включая температуру и скорость ветра. В запросе можно указать, за сколько дней требуются данные (1, 5, 10, 15, 25 или 45) для заданного с помощью координат расположения. Ответ включает такие сведения, как температура, скорость ветра, количество осадков, качество воздуха и индекс УФ-излучения. В этом примере мы запрашиваем данные за пять дней, установив duration=5.

Внимание

В ценовой категории S0 можно запросить прогноз по дням на следующие 1, 5, 10 и 15 дней. В ценовой категории 1-го поколения (S1) или 2-го поколения можно запросить ежедневный прогноз на следующие 25 дней и 45 дней.

Выход на пенсию ценовой категории Azure Maps 1-го поколения

Ценовая категория 1-го поколения устарела и будет прекращена на 9.15.26. Ценовая категория 2-го поколения заменяет ценовую категорию 1-го поколения (как S0, так и S1). Если у вашей учетной записи Azure Maps выбрана ценовая категория 1-го поколения, вы можете перейти на ценовую категорию 2-го поколения, прежде чем она будет прекращена, в противном случае она будет автоматически обновлена. Дополнительные сведения см. в статье "Управление ценовой категорией учетной записи Azure Maps".

В этом примере вы используете API получения ежедневного прогноза для получения пятидневного прогноза погоды для координат, расположенных в Сиэтле, WA.

  1. В приложении бруно выберите NEW REQUEST , чтобы создать запрос. В окне NEW REQUEST задайте для типа HTTP. Введите имя запроса.

  2. Выберите метод GET HTTP в раскрывающемся списке URL-адресов и введите следующий URL-адрес:

    https://atlas.microsoft.com/weather/forecast/daily/json?api-version=1.0&query=47.60357,-122.32945&duration=5&subscription-key={Your-Azure-Maps-Subscription-key}
    
  3. Нажмите синюю кнопку "Создать ".

  4. Нажмите кнопку запуска.

    Снимок экрана: URL-адрес данных прогноза погоды запроса с выделенной кнопкой запуска в приложении бруно.

    Текст ответа содержит данные прогноза погоды на пять дней. Для краткости следующий ответ JSON показывает прогноз на первый день.

    {
      "summary": {
        "startDate": "2024-08-09T08:00:00-07:00",
        "endDate": "2024-08-09T20:00:00-07:00",
        "severity": 7,
        "phrase": "Very warm tomorrow",
        "category": "heat"
      },
      "forecasts": [
        {
          "date": "2024-08-08T07:00:00-07:00",
          "temperature": {
            "minimum": {
              "value": 16.2,
              "unit": "C",
              "unitType": 17
            },
            "maximum": {
              "value": 28.9,
              "unit": "C",
              "unitType": 17
            }
          },
          "realFeelTemperature": {
            "minimum": {
              "value": 16.3,
              "unit": "C",
              "unitType": 17
            },
            "maximum": {
              "value": 29.8,
              "unit": "C",
              "unitType": 17
            }
          },
          "realFeelTemperatureShade": {
            "minimum": {
              "value": 16.3,
              "unit": "C",
              "unitType": 17
            },
            "maximum": {
              "value": 27.3,
              "unit": "C",
              "unitType": 17
            }
          },
          "hoursOfSun": 12.9,
          "degreeDaySummary": {
            "heating": {
              "value": 0,
              "unit": "C",
              "unitType": 17
            },
            "cooling": {
              "value": 5,
              "unit": "C",
              "unitType": 17
            }
          },
          "airAndPollen": [
            {
              "name": "AirQuality",
              "value": 56,
              "category": "Moderate",
              "categoryValue": 2,
              "type": "Nitrogen Dioxide"
            },
            {
              "name": "Grass",
              "value": 2,
              "category": "Low",
              "categoryValue": 1
            },
            {
              "name": "Mold",
              "value": 0,
              "category": "Low",
              "categoryValue": 1
            },
            {
              "name": "Ragweed",
              "value": 5,
              "category": "Low",
              "categoryValue": 1
            },
            {
              "name": "Tree",
              "value": 0,
              "category": "Low",
              "categoryValue": 1
            },
            {
              "name": "UVIndex",
              "value": 7,
              "category": "High",
              "categoryValue": 3
            }
          ],
          "day": {
            "iconCode": 2,
            "iconPhrase": "Mostly sunny",
            "hasPrecipitation": false,
            "shortPhrase": "Mostly sunny",
            "longPhrase": "Mostly sunny; wildfire smoke will cause the sky to be hazy",
            "precipitationProbability": 0,
            "thunderstormProbability": 0,
            "rainProbability": 0,
            "snowProbability": 0,
            "iceProbability": 0,
            "wind": {
              "direction": {
                "degrees": 357,
                "localizedDescription": "N"
              },
              "speed": {
                "value": 11.1,
                "unit": "km/h",
                "unitType": 7
              }
            },
            "windGust": {
              "direction": {
                "degrees": 354,
                "localizedDescription": "N"
              },
              "speed": {
                "value": 29.6,
                "unit": "km/h",
                "unitType": 7
              }
            },
            "totalLiquid": {
              "value": 0,
              "unit": "mm",
              "unitType": 3
            },
            "rain": {
              "value": 0,
              "unit": "mm",
              "unitType": 3
            },
            "snow": {
              "value": 0,
              "unit": "cm",
              "unitType": 4
            },
            "ice": {
              "value": 0,
              "unit": "mm",
              "unitType": 3
            },
            "hoursOfPrecipitation": 0,
            "hoursOfRain": 0,
            "hoursOfSnow": 0,
            "hoursOfIce": 0,
            "cloudCover": 10
          },
          "night": {
            "iconCode": 35,
            "iconPhrase": "Partly cloudy",
            "hasPrecipitation": false,
            "shortPhrase": "Partly cloudy",
            "longPhrase": "Partly cloudy; wildfire smoke will cause the sky to be hazy",
            "precipitationProbability": 1,
            "thunderstormProbability": 0,
            "rainProbability": 1,
            "snowProbability": 0,
            "iceProbability": 0,
            "wind": {
              "direction": {
                "degrees": 7,
                "localizedDescription": "N"
              },
              "speed": {
                "value": 9.3,
                "unit": "km/h",
                "unitType": 7
              }
            },
            "windGust": {
              "direction": {
                "degrees": 3,
                "localizedDescription": "N"
              },
              "speed": {
                "value": 20.4,
                "unit": "km/h",
                "unitType": 7
              }
            },
            "totalLiquid": {
              "value": 0,
              "unit": "mm",
              "unitType": 3
            },
            "rain": {
              "value": 0,
              "unit": "mm",
              "unitType": 3
            },
            "snow": {
              "value": 0,
              "unit": "cm",
              "unitType": 4
            },
            "ice": {
              "value": 0,
              "unit": "mm",
              "unitType": 3
            },
            "hoursOfPrecipitation": 0,
            "hoursOfRain": 0,
            "hoursOfSnow": 0,
            "hoursOfIce": 0,
            "cloudCover": 26
          },
          "sources": [
            "AccuWeather"
          ]
        }
      ]
    }
    

Как запрашивать данные прогноза погоды по часам

Get Hourly Forecast API возвращает подробный почасовой прогноз погоды на следующий 1 час, 12 часов, 24 часа (1 день), 72 часа (3 дня), 120 часов (5 дней) или 240 часов (10 дней) для заданного с помощью координат расположения. API возвращает такие сведения, как температура, влажность, скорость ветра, количество осадков и индекс УФ-излучения.

Внимание

В ценовой категории "1-го поколения" (S0) можно запросить почасовой прогноз на следующие 1, 12, 24 часа (1 день) и 72 часа (3 дня). В ценовой категории 1-го поколения (S1) или 2-го поколения можно запросить почасовой прогноз на следующие 120 (5 дней) и 240 часов (10 дней).

В этом примере вы используете API получения почасового прогноза для получения почасового прогноза погоды в течение следующих 12 часов в координатах, расположенных в Сиэтле, WA.

  1. В приложении бруно выберите NEW REQUEST , чтобы создать запрос. В окне NEW REQUEST задайте для типа HTTP. Введите имя запроса.

  2. Выберите метод GET HTTP в раскрывающемся списке URL-адресов и введите следующий URL-адрес:

    https://atlas.microsoft.com/weather/forecast/hourly/json?api-version=1.0&query=47.60357,-122.32945&duration=12&subscription-key={Your-Azure-Maps-Subscription-key}
    
  3. Нажмите синюю кнопку "Создать ".

  4. Нажмите кнопку запуска.

    Снимок экрана: URL-адрес данных прогноза погоды запроса с кнопкой запуска, выделенной в приложении бруно.

    Текст ответа содержит данные прогноза погоды на следующие 12 часов. В следующем примере ответа JSON отображается только первый час:

    {
      "forecasts": [
        {
          "date": "2024-08-07T15:00:00-07:00",
          "iconCode": 2,
          "iconPhrase": "Mostly sunny",
          "hasPrecipitation": false,
          "isDaylight": true,
          "temperature": {
            "value": 24.6,
            "unit": "C",
            "unitType": 17
          },
          "realFeelTemperature": {
            "value": 26.4,
            "unit": "C",
            "unitType": 17
          },
          "wetBulbTemperature": {
            "value": 18.1,
            "unit": "C",
            "unitType": 17
          },
          "dewPoint": {
            "value": 14.5,
            "unit": "C",
            "unitType": 17
          },
          "wind": {
            "direction": {
              "degrees": 340,
              "localizedDescription": "NNW"
            },
            "speed": {
              "value": 14.8,
              "unit": "km/h",
              "unitType": 7
            }
          },
          "windGust": {
            "speed": {
              "value": 24.1,
              "unit": "km/h",
              "unitType": 7
            }
          },
          "relativeHumidity": 53,
          "visibility": {
            "value": 16.1,
            "unit": "km",
            "unitType": 6
          },
          "cloudCover": 11,
          "ceiling": {
            "value": 10211,
            "unit": "m",
            "unitType": 5
          },
          "uvIndex": 5,
          "uvIndexPhrase": "Moderate",
          "precipitationProbability": 0,
          "rainProbability": 0,
          "snowProbability": 0,
          "iceProbability": 0,
          "totalLiquid": {
            "value": 0,
            "unit": "mm",
            "unitType": 3
          },
          "rain": {
            "value": 0,
            "unit": "mm",
            "unitType": 3
          },
          "snow": {
            "value": 0,
            "unit": "cm",
            "unitType": 4
          },
          "ice": {
            "value": 0,
            "unit": "mm",
            "unitType": 3
          }
        }
      ]
    }
    

Как запрашивать данные прогноза погоды по минутам

Get Minute Forecast API возвращает данные поминутного прогноза на следующие 120 минут для определенного расположения. Пользователи могут запрашивать прогноз погоды с интервалом 1, 5 и 15 минут. Ответ содержит такие сведения, как тип осадков (включая дождь, снег или их сочетание), время начала и значение интенсивности осадков (dBZ).

В этом примере вы используете API получения прогноза минут для получения прогноза по минутам погоды в координатах, расположенных в Сиэтле, WA. Прогноз погоды предоставляется на следующие 120 минут. Наши запросы, которые прогноз предоставляется через 15 минут, но можно настроить параметр на 1 или 5 минут.

  1. В приложении бруно выберите NEW REQUEST , чтобы создать запрос. В окне NEW REQUEST задайте для типа HTTP. Введите имя запроса.

  2. Выберите метод GET HTTP в раскрывающемся списке URL-адресов и введите следующий URL-адрес:

    https://atlas.microsoft.com/weather/forecast/minute/json?api-version=1.0&query=47.60357,-122.32945&interval=15&subscription-key={Your-Azure-Maps-Subscription-key}
    
  3. Нажмите синюю кнопку "Создать ".

  4. Нажмите кнопку запуска.

    Снимок экрана: URL-адрес данных прогноза погоды за минуту запроса с выделенной кнопкой запуска в приложении бруно.

    Текст ответа содержит данные прогноза погоды на следующие 120 минут с интервалом в 15 минут.

    {
      "summary": {
        "briefPhrase60": "No precipitation for at least 60 min",
        "shortPhrase": "No precip for 120 min",
        "briefPhrase": "No precipitation for at least 120 min",
        "longPhrase": "No precipitation for at least 120 min",
        "iconCode": 1
      },
      "intervalSummaries": [
        {
          "startMinute": 0,
          "endMinute": 119,
          "totalMinutes": 120,
          "shortPhrase": "No precip for %MINUTE_VALUE min",
          "briefPhrase": "No precipitation for at least %MINUTE_VALUE min",
          "longPhrase": "No precipitation for at least %MINUTE_VALUE min",
          "iconCode": 1
        }
      ],
      "intervals": [
        {
          "startTime": "2024-08-08T05:58:00-07:00",
          "minute": 0,
          "dbz": 0,
          "shortPhrase": "No Precipitation",
          "iconCode": 1,
          "cloudCover": 7
        },
        {
          "startTime": "2024-08-08T06:13:00-07:00",
          "minute": 15,
          "dbz": 0,
          "shortPhrase": "No Precipitation",
          "iconCode": 1,
          "cloudCover": 3
        },
        {
          "startTime": "2024-08-08T06:28:00-07:00",
          "minute": 30,
          "dbz": 0,
          "shortPhrase": "No Precipitation",
          "iconCode": 1,
          "cloudCover": 2
        },
        {
          "startTime": "2024-08-08T06:43:00-07:00",
          "minute": 45,
          "dbz": 0,
          "shortPhrase": "No Precipitation",
          "iconCode": 1,
          "cloudCover": 2
        },
        {
          "startTime": "2024-08-08T06:58:00-07:00",
          "minute": 60,
          "dbz": 0,
          "shortPhrase": "No Precipitation",
          "iconCode": 1,
          "cloudCover": 1
        },
        {
          "startTime": "2024-08-08T07:13:00-07:00",
          "minute": 75,
          "dbz": 0,
          "shortPhrase": "No Precipitation",
          "iconCode": 1,
          "cloudCover": 1
        },
        {
          "startTime": "2024-08-08T07:28:00-07:00",
          "minute": 90,
          "dbz": 0,
          "shortPhrase": "No Precipitation",
          "iconCode": 1,
          "cloudCover": 0
        },
        {
          "startTime": "2024-08-08T07:43:00-07:00",
          "minute": 105,
          "dbz": 0,
          "shortPhrase": "No Precipitation",
          "iconCode": 1,
          "cloudCover": 0
        }
      ]
    }
    

Следующие шаги