Garis batas dan pintu masuk bangunan

Gunakan Geocoding API untuk mendapatkan garis batas dan pintu masuk bangunan guna meningkatkan visualisasi data dalam rendering peta Anda.

Untuk melakukannya, sertakan parameter tambahan dalam permintaan Geocoding untuk menampilkan pasangan koordinat lintang/bujur yang menentukan garis batas bangunan, atau pintu masuk. Gunakan output permintaan Anda untuk menggambar garis batas bangunan dan menunjukkan pintu masuk bangunan di peta.

  • Garis batas bangunan adalah kumpulan pasangan koordinat lintang/bujur yang menentukan poligon 2D yang mewakili luas permukaan bumi yang tertutup oleh bangunan.
  • Pintu masuk bangunan adalah satu pasangan koordinat lintang/bujur yang menentukan lokasi titik masuk dan keluar ke suatu tempat.

Penggunaan & cakupan

Anda dapat menggunakan layanan ini untuk menampilkan poligon garis batas untuk satu tempat dalam satu permintaan. Artinya, permintaan untuk geocode tingkat kota, seperti London, Inggris Raya, tidak menampilkan semua garis batas bangunan dalam lokalitas tersebut. Dalam kasus tersebut, layanan akan menampilkan respons geocoding standar tanpa garis batas atau pintu masuk bangunan. Secara khusus, layanan ini menghasilkan garis batas dan pintu masuk hanya untuk jenis tempat berikut:

Jenis tempat yang didukung

Gedung

Masuk

premise

premise

subpremise

subpremise

point_of_interest

point_of_interest

street_address

Meskipun fitur ini tersedia untuk digunakan di semua wilayah, cakupannya bervariasi berdasarkan wilayah. Selain itu, Anda akan menerima respons API yang berisi garis batas bangunan, tetapi tidak ada data pintu masuk. Dalam hal ini, layanan akan menampilkan respons geocoding dengan garis batas bangunan, tetapi tidak ada array data pintu masuk. Layanan ini terus berupaya meningkatkan cakupan pintu masuk.

Detail permintaan

Anda bisa mendapatkan garis batas bangunan dan koordinat pintu masuk dalam jenis permintaan berikut:

Untuk setiap permintaan ini, Anda harus memberikan parameter ini: extra_computations=BUILDING_AND_ENTRANCES.

Contoh permintaan

Kueri berikut menggunakan geocoding tempat untuk mendapatkan informasi pintu masuk dan garis batas untuk restoran di Mountain View, California, Amerika Serikat:

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

Contoh respons

Pada umumnya, respons menampilkan satu bangunan beserta pintu masuk bangunan yang diketahui. Namun, dalam beberapa kasus, respons dapat memiliki beberapa bangunan, seperti lokasi menarik yang menempati beberapa bangunan. Bangunan dan pintu masuk direpresentasikan dengan dua array berikut:

Array buildings[] dengan satu atau beberapa bangunan. Setiap bangunan berisi kolom berikut:

  • place_id

    ID unik bangunan. Lihat Ringkasan ID Tempat untuk mengetahui detail selengkapnya.

  • building_outlines[]

    Array garis batas yang terkait dengan bangunan. Array ini hanya memiliki satu entri. Setiap objek di building_outlines[] memiliki kolom berikut:

    • display_polygon

    Encoding GeoJSON poligon yang mendekati luas permukaan bumi yang tertutup oleh bangunan, menggunakan format RFC 7946

Array entrances[] dengan kolom berikut:

  • location

    Koordinat lintang/bujur pintu masuk.

  • building_place_id

    ID tempat gedung di buildings[] yang berisi pintu masuk ini. Hal ini memungkinkan Anda mengidentifikasi bangunan yang berisi pintu masuk mana. Pintu masuk ini sesuai dengan gedung di indeks i di buildings[] dengan buildings[i].place_id sama dengan building_place_id pintu masuk ini. Catatan: Nilai ini berbeda dengan ID tempat hasil geocode, kecuali jika hasil geocode ditujukan untuk gedung itu sendiri. Parameter ini tidak akan selalu diisi.

  • entrance_tags[]

    Array tag pintu masuk yang menjelaskan karakteristik pintu masuk. Nilai berikut didukung:

    • "PREFERRED"

      Menunjukkan bahwa pintu masuk ini kemungkinan memberikan akses fisik ke tempat yang ditampilkan. Sebuah tempat dapat memiliki beberapa pintu masuk pilihan. Jika pintu masuk tidak memiliki tag ini, berarti pintu masuk tersebut secara fisik berada di gedung yang sama, tetapi tidak selalu memberikan akses ke tempat tersebut.

      Misalnya, jika tempat yang ditampilkan adalah restoran di strip mall, pintu masuk "PREFERRED" akan menjadi pintu masuk ke restoran itu sendiri, sedangkan pintu masuk lainnya yang ditampilkan akan menjadi pintu masuk lain untuk bangunan, seperti pintu masuk ke restoran lain di strip mall.

      Jika tempat yang ditampilkan adalah bangunan itu sendiri, pintu masuk "PREFERRED" akan menjadi pintu masuk ke bagian "utama" bangunan. Misalnya, di pusat perbelanjaan, pintu masuk "PREFERRED" adalah pintu masuk yang memungkinkan akses ke area lobi utama, tetapi jika pintu masuk hanya memberikan akses ke toko di sisi bangunan, pintu masuk tersebut tidak akan menjadi pintu masuk "PREFERRED".

Gambar di bawah menunjukkan representasi visual garis batas bangunan dan pintu masuk yang ditampilkan untuk contoh permintaan di atas.

Garis batas bangunan dan dua pintu masuk yang dirender pada peta. Pintu masuk PREFERRED dirender dengan ikon yang lebih besar daripada pintu masuk lainnya.

Respons dari contoh permintaan di atas menunjukkan dua pintu masuk dan satu bangunan dengan garis batas. Perhatikan bahwa building_place_id dari setiap pintu masuk cocok dengan place_id bangunan:

{
  "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"
    }
  ],
}

Menampilkan garis batas bangunan di peta

JavaScript API memiliki dukungan bawaan untuk menampilkan Poligon dan Multipoligon format RFC 7946. Anda melakukannya sebagai berikut:

  1. Buat objek fitur menggunakan data poligon.
  2. Terapkan gaya ke poligon.
  3. Lampirkan fitur ke objek peta JavaScript.

Setiap objek dalam array buildings berisi satu objek dalam array building_outlines. Contoh berikut menunjukkan cara menampilkan garis batas bangunan di peta:

//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)
    }
}

Dengan menggunakan kode di atas, garis batas bangunan yang ditampilkan oleh Geocoding API dalam contoh respons sebelumnya dalam dokumen ini dirender pada peta sebagai berikut:

Garis batas bangunan yang dirender di peta

Menangani respons dengan beberapa bangunan atau garis batas bangunan

Anda mungkin juga mengalami situasi berikut; namun, kode contoh di atas akan tetap berfungsi untuk hal berikut:

  1. Satu objek building_outlines yang mewakili beberapa poligon.
  2. Respons dengan beberapa bangunan dalam array buildings[].

Misalnya, respons untuk ID tempat ChIJGxgH9QBVHBYRl13JmZ0BFgo berisi dua bangunan dalam array 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"
    }
]

Dengan menggunakan contoh kode JavaScript di atas, kita dapat merender kedua garis batas bangunan di peta:

Dua garis batas bangunan yang dirender di peta

Masukan

Ini adalah fitur eksperimental. Kami akan sangat berterima kasih jika Anda memberikan masukan di geocoding-feedback-channel@google.com.