Используйте API геокодирования, чтобы получить контуры зданий и входы для улучшения визуализации данных при визуализации карт.
Для этого включите дополнительный параметр в свой запрос Geocoding, чтобы вернуть пары координат широты/долготы, которые определяют либо контур здания, либо вход. Используйте выходные данные своих запросов для рисования контуров зданий и указания входов в здания на карте.
- Контур здания представляет собой набор пар координат широты/долготы, которые определяют двухмерный многоугольник, представляющий площадь поверхности Земли, занимаемую зданием.
- Вход в здание — это одна пара координат широты/долготы, которая определяет местоположение точки входа и выхода в определенное место.
Использование и покрытие
Вы можете использовать сервис для возврата контурных полигонов для одного места в одном запросе. Это означает, что запрос на геокодирование на уровне города, например Лондона, Великобритания, не возвращает все контуры зданий в пределах этого населенного пункта. В таких случаях сервис вернет стандартный ответ геокодирования без контуров зданий или входов. В частности, сервис генерирует контуры и входы только для следующих типов мест:
Поддерживаемые типы мест
Здание | Входы |
---|---|
| |
| |
| |
|
Хотя эта функция доступна для использования во всех регионах, покрытие различается в зависимости от региона. Кроме того, следует ожидать получения ответов 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. Это делается следующим образом:
- Постройте объект-объект, используя данные полигона.
- Примените стиль к многоугольнику.
- Прикрепите функцию к объекту карты 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 геокодирования в примере ответа, приведенном ранее в этом документе, отображается на карте следующим образом:
Обработка ответов с несколькими зданиями или контурами зданий
Вы также можете столкнуться со следующими ситуациями; однако приведенный выше пример кода все равно будет работать в них:
- Один объект
building_outlines
, представляющий несколько полигонов. - Ответ с несколькими зданиями в массиве
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 .