Контуры зданий и входы

Используйте API геокодирования, чтобы получить контуры зданий и входы для улучшения визуализации данных при визуализации карт.

Для этого включите дополнительный параметр в свой запрос Geocoding, чтобы вернуть пары координат широты/долготы, которые определяют либо контур здания, либо вход. Используйте выходные данные своих запросов для рисования контуров зданий и указания входов в здания на карте.

  • Контур здания представляет собой набор пар координат широты/долготы, которые определяют двухмерный многоугольник, представляющий площадь поверхности Земли, занимаемую зданием.
  • Вход в здание — это одна пара координат широты/долготы, которая определяет местоположение точки входа и выхода в определенное место.

Использование и покрытие

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

Поддерживаемые типы мест

Здание

Входы

premise

premise

subpremise

subpremise

point_of_interest

point_of_interest

street_address

Хотя эта функция доступна для использования во всех регионах, покрытие различается в зависимости от региона. Кроме того, следует ожидать получения ответов API, содержащих контур здания, но не содержащих данные о входе. В этом случае служба вернет ответ геокодирования с контуром здания, но без массива данных о входе. Служба постоянно работает над улучшением покрытия входа.

Запросить подробности

Получить контуры здания и координаты входа можно по следующим видам запросов:

Для любого из этих запросов вы указываете этот параметр: extra_computations=BUILDING_AND_ENTRANCES .

Пример запроса

Следующий запрос использует геокодирование места для получения информации о входе и плане ресторана в Маунтин-Вью, Калифорния, США:

https://maps.googleapis.com/maps/api/geocode/json?place_id=ChIJl2tj2-62j4ARzKWl1WCXLJI&extra_computations=BUILDING_AND_ENTRANCES&key=YOUR_API_KEY

Пример ответа

В большинстве случаев ответ возвращает одно здание вместе с известными входами в здание. Но в некоторых случаях ответ может содержать несколько зданий, например, точки интереса, занимающие несколько зданий. Здания и входы представлены следующими двумя массивами:

Массив buildings[] с одним или несколькими зданиями. Каждое здание содержит следующие поля:

  • place_id

    Уникальный идентификатор здания. Подробнее см. в обзоре Place IDs .

  • building_outlines[]

    Массив контуров, связанных со зданием. Этот массив имеет только одну запись. Каждый объект в building_outlines[] имеет следующее поле:

    • display_polygon

    Кодировка GeoJSON многоугольника, приблизительно соответствующего площади поверхности Земли, занимаемой зданием, с использованием формата RFC 7946.

Массив entrances[] со следующими полями:

  • location

    Координаты широты/долготы входа.

  • building_place_id

    Идентификатор места здания в buildings[] , содержащего этот вход. Это позволяет вам определить, какие здания содержат какие входы. Этот вход соответствует зданию с индексом i в buildings[] , где buildings[i].place_id равен building_place_id этого входа. Примечание: это значение отличается от идентификатора места результата геокодирования, если только результат геокодирования не относится к самому зданию. Этот параметр не всегда будет заполнен.

  • entrance_tags[]

    Массив входных тегов, описывающий характеристики входа. Поддерживается следующее значение:

    • "PREFERRED"

      Указывает, что этот вход, вероятно, обеспечивает физический доступ к возвращаемому месту. Место может иметь несколько предпочтительных входов. Если у входа нет этого тега, это означает, что вход физически находится в том же здании, но не обязательно обеспечивает доступ к месту.

      Например, если возвращаемое место — ресторан в торговом центре, "PREFERRED" входами будут те, которые ведут в сам ресторан, в то время как другими возвращаемыми входами будут другие входы в здание, например, входы в другие рестораны в торговом центре.

      Если возвращаемое место само по себе является зданием, то "PREFERRED" входами будут те, которые ведут в «главную» часть здания. Например, в торговом центре "PREFERRED" входами будут те, которые открывают доступ в зону главного фойе, но если вход обеспечивает доступ только к магазину сбоку здания, то он не будет "PREFERRED" входом.

На изображении ниже показано визуальное представление контура здания и входов, возвращенных для приведенного выше примера запроса.

Контур здания и два входа, отображенные на карте. ПРЕДПОЧТИТЕЛЬНЫЙ вход отображается с более крупным значком, чем другой вход.

Ответ на запрос примера выше показывает два входа и одно здание с контуром. Обратите внимание, что building_place_id каждого входа соответствует place_id здания:

{
  "entrances": [
    {
        "building_place_id" : "ChIJU1erIO-2j4ARzlavxpYBJr8",
        "location" :
        {
          "lat" : 37.3736684,
          "lng" : -122.0540469
        },
        "entrance_tags": ["PREFERRED"]
    },
    {
        "building_place_id" : "ChIJU1erIO-2j4ARzlavxpYBJr8",
        "location" :
        {
          "lat" : 37.3738239,
          "lng" : -122.0539773
        },
    }
  ],
  "buildings" : [
    {
      "building_outlines" : [
        {
          "display_polygon" : {
            "coordinates" : [
              [
                [
                  -122.054453349467,
                  37.3742345734776
                ],
                [
                  -122.054665964955,
                  37.3737591984554
                ],
                [
                  -122.054080317537,
                  37.3735936952922
                ],
                [
                  -122.053867527481,
                  37.374069124071
                ],
                [
                  -122.054453349467,
                  37.3742345734776
                ]
              ]
            ],
            "type" : "Polygon"
          }
        }
      ],
      "place_id" : "ChIJU1erIO-2j4ARzlavxpYBJr8"
    }
  ],
}

Отображение контуров зданий на карте

JavaScript API имеет встроенную поддержку для отображения полигонов и мультиполигонов формата RFC 7946. Это делается следующим образом:

  1. Постройте объект-объект, используя данные полигона.
  2. Примените стиль к многоугольнику.
  3. Прикрепите функцию к объекту карты JavaScript.

Каждый объект в массиве buildings содержит один объект в массиве building_outlines . Следующий пример показывает, как отобразить контур здания на карте:

//This function takes an argument of 'buildings', which is the buildings[] array returned by the API.
async function displayBuildingOutline(buildings) {
    try {
        //Import the Google Maps Data library.
        const { Data } = await google.maps.importLibrary("maps")
        //Loop though the array of building outlines.
        buildings.forEach(building => {
            const features = []
            const buildingOutlines = building.building_outlines;
            //Add each building outline to a Feature object, and push this to an array of Features.
            buildingOutlines.forEach(buildingOutline => {
                const feature = {
                    type: "Feature",
                    properties: {},
                    geometry: buildingOutline.display_polygon
                }
                features.push(feature);
            });
            //Create a new Google Maps Data object, and apply styling.
            //We also assume the reference to the map on the page is named 'map'.
            //This applies the Data object to the map on the page.
            outlineLayer = new google.maps.Data({
                map,
                style: {
                    strokeColor: "#0085cc",
                    strokeOpacity: 1,
                    strokeWeight: 2,
                    fillColor: "#88d4fc",
                    fillOpacity: 0.5,
                },
            });
            //Add the array of Features created earlier to the Data object, as GeoJson.
            outlineLayer.addGeoJson({
                type: "FeatureCollection",
                features: features,
            });
        });
    } catch (e) {
        console.log('Building outlines failed. Error: ' + e)
    }
}

Используя приведенный выше код, контур здания, возвращенный API геокодирования в примере ответа, приведенном ранее в этом документе, отображается на карте следующим образом:

Контур здания, отображенный на карте

Обработка ответов с несколькими зданиями или контурами зданий

Вы также можете столкнуться со следующими ситуациями; однако приведенный выше пример кода все равно будет работать в них:

  1. Один объект building_outlines , представляющий несколько полигонов.
  2. Ответ с несколькими зданиями в массиве buildings[] .

Например, ответ для идентификатора места ChIJGxgH9QBVHBYRl13JmZ0BFgo содержит два здания в массиве buildings[] :

"buildings": [
    {
        "building_outlines": [
            {
                "display_polygon": {
                    "coordinates": [
                        [
                            [
                                44.3313253363354,
                                13.636033631612
                            ],
                            [
                                44.3312576355624,
                                13.6362094887862
                            ],
                            [
                                44.3310854239923,
                                13.6361461767801
                            ],
                            [
                                44.3311531250111,
                                13.6359703194634
                            ],
                            [
                                44.3313253363354,
                                13.636033631612
                            ]
                        ]
                    ],
                    "type": "Polygon"
                }
            }
        ],
        "place_id": "ChIJ24NWUBhUHBYRSEmPBFa1wgc"
    },
    {
        "building_outlines": [
            {
                "display_polygon": {
                    "coordinates": [
                        [
                            [
                                44.330737534504,
                                13.6357057440832
                            ],
                            [
                                44.3307248314371,
                                13.6357390350529
                            ],
                            [
                                44.3306985591742,
                                13.635729486373
                            ],
                            [
                                44.3307114066013,
                                13.6356960265536
                            ],
                            [
                                44.330737534504,
                                13.6357057440832
                            ]
                        ]
                    ],
                    "type": "Polygon"
                }
            }
        ],
        "place_id": "ChIJpzQOABlUHBYRxiOC9goY1fE"
    }
]

Используя приведенный выше пример кода JavaScript, мы можем отобразить на карте контуры обоих зданий:

На карте отображены контуры двух зданий

Обратная связь

Это экспериментальная функция. Мы будем признательны за обратную связь по адресу geocoding-feedback-channel@google.com .