Użyj interfejsu Geocoding API, aby uzyskać zarysy budynków i ich wejścia, co pozwoli Ci ulepszyć wizualizację danych na mapie.
Aby to zrobić, dodaj do zapytania o geokodowanie dodatkowy parametr, który zwróci pary współrzędnych szerokości i długości geograficznej określające zarys budynku lub wejście. Użyj wyników swoich zapytań, aby narysować kontury budynków i wskazywać wejścia na mapie.
- Kontur budynku to zbiór par współrzędnych szerokości i długości geograficznej, które definiują wielokąt 2D przedstawiający powierzchnię Ziemi pokrytą przez budynek.
- Wejście do budynku to pojedynczy zestaw współrzędnych szerokości i długości geograficznej, który określa lokalizację punktu wejścia i wyjścia do danego miejsca.
Użycie i zasięg
Za pomocą tej usługi możesz zwrócić kontury wielokątów pojedynczego miejsca w ramach pojedynczego żądania. Oznacza to, że żądanie geokodu na poziomie miasta, np. Londyn, Wielka Brytania, nie zwraca konturów wszystkich budynków w danej lokalizacji. W takich przypadkach usługa zwraca standardową odpowiedź geokodowania bez konturów budynków ani wejść. Usługa generuje zarysy 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 zasięg różni się w zależności od regionu. Oprócz tego możesz otrzymać odpowiedzi interfejsu API, które zawierają zarys budynku, ale nie zawierają danych o wejściu. W takim przypadku usługa zwróci odpowiedź geokodowania z konturem budynku, ale bez tablicy danych o wejściu. Usługa stale pracuje nad zwiększeniem zasięgu w przypadku wejścia.
Szczegóły prośby
Kontury budynków i współrzędne wejść możesz uzyskać w ramach tych typów próśb:
W przypadku każdej z tych próśb musisz podać parametr extra_computations=BUILDING_AND_ENTRANCES
.
Przykładowe żądanie
W tym zapytaniu do wykonania geokodowania miejsca użyto informacji o wejściu i ogólnych informacjach o restauracji w Mountain View w Kalifornii w Stanach Zjednoczonych:
https://maps.googleapis.com/maps/api/geocode/json?place_id=ChIJ4TTDdzS3j4AR78EQgu5EADA&extra_computations=BUILDING_AND_ENTRANCES&key=YOUR_API_KEY
Przykładowa odpowiedź
W większości przypadków odpowiedź zwraca pola odpowiadające pojedynczemu budynkowi, ale w niektórych przypadkach może zawierać wiele elementów, takich jak punkty zainteresowania obejmujące kilka budynków. Elementy odpowiedzi zawierają 2 tablice:
tablica buildings[]
z tymi polami:
place_id
Unikalny identyfikator budynku. Więcej informacji znajdziesz w artykule Omówienie 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 takie pole:display_polygon
Kodowanie GeoJSON wielokąta, który w przybliżeniu odpowiada powierzchni Ziemi pokrytej przez budynek, w formacie RFC 7946
tablica entrances[]
z tymi polami:
location
Szerokość i długość geograficzna wejścia.
building_place_id
Identyfikator miejsca, którym jest budynek z wejściem. różni się od identyfikatora miejsca w wyniku geokodowania, chyba że wynik geokodowania dotyczy samego budynku. Ten parametr nie zawsze jest wypełniany.
Odpowiedź na zapytanie powyżej zawiera 1 wejście i 1 element wielokąta w tablicy buildings:
{
"entrances": [
{
"location": {
"lat": 37.3925065,
"lng": -122.0799465
},
"building_place_id": "ChIJVeHddzS3j4ARFZJVu4Cf27o"
}
],
"buildings" : [
{
"building_outlines" : [
{
"display_polygon" : {
"coordinates" : [
[
[
-122.080188246116,
37.3926407183216
],
[
-122.080281351765,
37.3924887558601
],
[
-122.080023707261,
37.392390122414
],
[
-122.079926266852,
37.3925369491992
],
[
-122.080188246116,
37.3926407183216
]
]
],
"type" : "Polygon"
}
}
],
"place_id" : "ChIJVeHddzS3j4ARFZJVu4Cf27o"
}
],
}
Wyświetlanie kontur budynków na mapie
Interfejs JavaScript API ma wbudowane wsparcie dla wyświetlania wielokątów i wielokątów złożonych w formacie RFC 7946. Aby to zrobić:
- Utwórz obiekt obiektu za pomocą danych dotyczących 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ć na mapie zarys budynku:
//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)
}
}
Za pomocą kodu powyżej zarys budynku zwrócony przez interfejs Geocoding API w przykładowej odpowiedzi podanej wcześniej w tym dokumencie jest renderowany na mapie w ten sposób:
Przypadki ekstremalne
Możesz też napotkać te przypadki szczególne, ale powyższy przykładowy kod będzie działał w tych sytuacjach:
- Odpowiedź z kilkoma obrysami budynków.
- Pojedynczy obiekt
building_outlines
reprezentujący wiele wielokątów.
Na przykład odpowiedź dla identyfikatora miejsca ChIJGxgH9QBVHBYRl13JmZ0BFgo
zawiera 2 tablice wyników building_outlines[]
:
"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"
}
]
Za pomocą powyższego przykładu kodu JavaScript możemy renderować oba kontury na mapie:
Prześlij opinię
To funkcja eksperymentalna. Przesyłaj opinie na adres buildings-in-geocoding-feedback-channel@google.com.