Użyj interfejsu Geocoding API, aby uzyskać kontury budynków i wejścia, co pozwoli Ci ulepszyć wizualizację danych na renderowanych mapach.
Aby to zrobić, dodaj do żądania geokodowania dodatkowy parametr, który będzie zwracać pary współrzędnych geograficznych (szerokość i długość geograficzna) określające kontur budynku lub wejście. Używaj wyników zapytań do rysowania konturów budynków i wskazywania wejść do nich na mapie.
- Obrys budynku to zbiór par współrzędnych geograficznych, które definiują wielokąt 2D reprezentujący powierzchnię Ziemi zajmowaną przez budynek.
- Wejście do budynku to pojedyncza para współrzędnych szerokości i długości geograficznej, która określa lokalizację punktu wejścia i wyjścia z miejsca.
Użytkowanie i zasięg
Usługa umożliwia zwracanie wielokątów konturów dla jednego miejsca w ramach jednego żądania. Oznacza to, że żądanie geokodu na poziomie miasta, np. Londyn, Wielka Brytania, nie zwraca wszystkich konturów budynków w tej miejscowości. W takich przypadkach usługa zwraca standardową odpowiedź geokodowania bez konturów budynków ani wejść. Usługa generuje kontury i wejścia tylko w przypadku tych typów miejsc:
Obsługiwane typy miejsc
Budynek |
Wejścia |
---|---|
|
|
|
|
|
|
|
Ta funkcja jest dostępna we wszystkich regionach, ale jej zasięg różni się w zależności od regionu. Ponadto możesz oczekiwać odpowiedzi interfejsu API zawierających zarys budynku, ale bez danych o wejściach. W takim przypadku usługa zwróci odpowiedź geokodowania z konturem budynku, ale bez tablicy danych wejściowych. Usługa stale pracuje nad zwiększeniem zasięgu wejść.
Szczegóły prośby
Kontury budynków i współrzędne wejść możesz uzyskać w tych rodzajach żądań:
W przypadku każdej z tych próśb podaj ten parametr:extra_computations=BUILDING_AND_ENTRANCES
.
Przykładowe żądanie
To zapytanie korzysta z geokodowania miejsca, aby uzyskać informacje o wejściu i konturze restauracji w Mountain View w Kalifornii w Stanach Zjednoczonych:
https://maps.googleapis.com/maps/api/geocode/json?place_id=ChIJl2tj2-62j4ARzKWl1WCXLJI&extra_computations=BUILDING_AND_ENTRANCES&key=YOUR_API_KEY
Przykładowa odpowiedź
W większości przypadków odpowiedź zawiera jeden budynek wraz z znanymi wejściami do niego. W niektórych przypadkach odpowiedź może jednak zawierać wiele budynków, np. w przypadku punktów orientacyjnych, które zajmują kilka budynków. Budynki i wejścia są reprezentowane przez te 2 tablice:
buildings[]
Tablica z co najmniej 1 budynkiem. Każdy budynek zawiera te pola:
place_id
Unikalny identyfikator budynku. Więcej informacji znajdziesz w omówieniu identyfikatorów miejsc.
building_outlines[]
Tablica konturów powiązanych z budynkiem. Ta tablica ma tylko 1 element. Każdy obiekt w polu
building_outlines[]
ma to pole:display_polygon
Kodowanie GeoJSON wielokąta, który przybliża powierzchnię Ziemi zajmowaną przez budynek, w formacie RFC 7946.
Tablica entrances[]
z tymi polami:
location
Współrzędne geograficzne wejścia.
building_place_id
Identyfikator miejsca budynku w
buildings[]
, w którym znajduje się to wejście. Dzięki temu możesz określić, w których budynkach znajdują się poszczególne wejścia. To wejście odpowiada budynkowi o indeksiei
wbuildings[]
, gdziebuildings[i].place_id
jest równebuilding_place_id
tego wejścia. Uwaga: ta wartość różni się od identyfikatora miejsca wyniku geokodowania, chyba że wynik geokodowania dotyczy samego budynku. Ten parametr nie zawsze będzie wypełniony.entrance_tags[]
Tablica tagów wejścia opisujących jego cechy. Obsługiwana jest ta wartość:
"PREFERRED"
Wskazuje, że to wejście prawdopodobnie zapewnia fizyczny dostęp do zwróconego miejsca. Miejsce może mieć wiele preferowanych wejść. Jeśli wejście nie ma tego tagu, oznacza to, że znajduje się w tym samym budynku, ale niekoniecznie zapewnia dostęp do miejsca.
Jeśli na przykład zwrócone miejsce to restauracja w centrum handlowym,
"PREFERRED"
wejścia będą prowadzić do samej restauracji, a pozostałe zwrócone wejścia będą innymi wejściami do budynku, np. do innych restauracji w centrum handlowym.Jeśli zwrócone miejsce jest budynkiem, wejścia
"PREFERRED"
będą prowadzić do „głównej” części budynku. Na przykład w centrum handlowym"PREFERRED"
wejścia to te, które umożliwiają dostęp do głównego holu. Jeśli jednak wejście zapewnia dostęp tylko do sklepu z boku budynku, nie będzie to"PREFERRED"
wejście.
Obraz poniżej przedstawia wizualizację konturu budynku i wejść zwróconych w odpowiedzi na przykładowe żądanie powyżej.
Odpowiedź na przykładowe żądanie powyżej pokazuje 2 wejścia i 1 budynek z konturem. Zwróć uwagę, że building_place_id
każdego wejścia
pasuje do place_id
budynku:
{
"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"
}
],
}
Wyświetlanie zarysów budynków na mapie
Interfejs JavaScript API ma wbudowaną obsługę wyświetlania wielokątów i wielokątów złożonych w formacie RFC 7946. Aby to zrobić:
- Utwórz obiekt cechy za pomocą danych wielokąta.
- Zastosuj styl do wielokąta.
- Dołącz funkcję do obiektu mapy JavaScript.
Każdy obiekt w tablicy buildings
zawiera pojedynczy obiekt w tablicy building_outlines
. Ten przykład pokazuje, jak wyświetlić zarys budynku na mapie:
//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)
}
}
Korzystając z powyższego kodu, kontur budynku zwrócony przez interfejs Geocoding API w przykładzie odpowiedzi podanym wcześniej w tym dokumencie jest renderowany na mapie w ten sposób:
Obsługa odpowiedzi z wieloma budynkami lub ich konturami
Możesz też napotkać te sytuacje, ale powyższy przykładowy kod nadal będzie w nich działać:
- Pojedynczy obiekt
building_outlines
reprezentujący wiele wielokątów. - Odpowiedź z wieloma budynkami w tablicy
buildings[]
.
Na przykład odpowiedź dla identyfikatora miejsca ChIJGxgH9QBVHBYRl13JmZ0BFgo
zawiera 2 budynki w tablicy 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"
}
]
Korzystając z przykładowego kodu JavaScript powyżej, możemy renderować na mapie kontury budynków:
Prześlij opinię
To funkcja eksperymentalna. Będziemy wdzięczni za Twoją opinię. Możesz ją przesłać na adres [email protected].