Đường viền toà nhà và lối vào

Nhà phát triển ở Khu vực kinh tế Châu Âu (EEA)

Sử dụng API Mã hoá địa lý để lấy đường viền và lối vào của toà nhà nhằm nâng cao khả năng trực quan hoá dữ liệu trong bản đồ kết xuất.

Để thực hiện việc này, hãy thêm một tham số bổ sung vào yêu cầu Địa chỉ được mã hoá địa lý để trả về các cặp toạ độ vĩ độ/kinh độ xác định đường viền của một toà nhà hoặc một lối vào. Sử dụng kết quả của các yêu cầu để vẽ đường viền của toà nhà và chỉ báo lối vào toà nhà trên bản đồ.

  • Đường viền của toà nhà là một tập hợp các cặp toạ độ vĩ độ/kinh độ xác định một đa giác 2D thể hiện diện tích bề mặt của trái đất mà toà nhà che phủ.
  • Cổng vào toà nhà là một cặp toạ độ vĩ độ/kinh độ duy nhất xác định vị trí của điểm vào và điểm ra của một địa điểm.

Mức sử dụng và phạm vi áp dụng

Bạn có thể sử dụng dịch vụ này để trả về đa giác đường viền cho một vị trí duy nhất trong một yêu cầu duy nhất. Điều này có nghĩa là yêu cầu mã địa lý cấp thành phố, chẳng hạn như London, Vương quốc Anh, sẽ không trả về tất cả đường viền toà nhà trong khu vực đó. Trong những trường hợp như vậy, dịch vụ sẽ trả về một phản hồi mã hoá địa lý chuẩn không có đường viền hoặc lối vào của toà nhà. Cụ thể, dịch vụ này chỉ tạo đường viền và lối vào cho các loại địa điểm sau:

Các loại địa điểm được hỗ trợ

Tòa nhà

Số lần truy cập

premise

premise

subpremise

subpremise

point_of_interest

point_of_interest

street_address

Mặc dù tính năng này có thể sử dụng ở tất cả các khu vực, nhưng phạm vi cung cấp sẽ khác nhau tuỳ theo khu vực. Hơn nữa, bạn sẽ nhận được các phản hồi API chứa bản phác thảo của toà nhà nhưng không có dữ liệu về lối vào. Trong trường hợp này, dịch vụ sẽ trả về một phản hồi về việc mã hoá địa lý có đường viền của toà nhà nhưng không có mảng dữ liệu về lối vào. Dịch vụ này liên tục hoạt động để cải thiện phạm vi cung cấp thông tin về lối vào.

Thông tin chi tiết về yêu cầu

Bạn có thể lấy đường viền của toà nhà và toạ độ lối vào trong các loại yêu cầu sau:

Đối với bất kỳ yêu cầu nào trong số này, bạn cung cấp tham số này: extra_computations=BUILDING_AND_ENTRANCES.

Yêu cầu mẫu

Truy vấn sau đây sử dụng tính năng định dạng địa lý của địa điểm để lấy thông tin về lối vào và thông tin cơ bản của một nhà hàng ở Mountain View, California, Hoa Kỳ:

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

Ví dụ về phản hồi

Trong hầu hết các trường hợp, phản hồi sẽ trả về một toà nhà cùng với các lối vào đã biết của toà nhà đó. Tuy nhiên, trong một số trường hợp, phản hồi có thể có nhiều tòa nhà, chẳng hạn như các điểm yêu thích chiếm nhiều tòa nhà. Các toà nhà và lối vào được biểu thị bằng hai mảng sau:

Mảng buildings[] có một hoặc nhiều toà nhà. Mỗi toà nhà chứa các trường sau:

  • place_id

    Giá trị nhận dạng duy nhất của toà nhà. Hãy xem tổng quan về Mã địa điểm để biết thêm chi tiết.

  • building_outlines[]

    Một mảng các đường viền liên kết với toà nhà. Mảng này chỉ có một mục nhập. Mỗi đối tượng trong building_outlines[] có trường sau:

    • display_polygon

    Mã hoá GeoJSON của đa giác ước tính diện tích bề mặt của trái đất mà toà nhà che phủ, sử dụng định dạng RFC 7946

Mảng entrances[] có các trường sau:

  • location

    Toạ độ theo vĩ độ/kinh độ của lối vào.

  • building_place_id

    Mã địa điểm của toà nhà trong buildings[] chứa lối vào này. Điều này giúp bạn xác định những toà nhà có lối vào nào. Lối vào này tương ứng với toà nhà ở chỉ mục i trong buildings[], trong đó buildings[i].place_id bằng building_place_id của lối vào này. Lưu ý: Giá trị này khác với mã địa điểm của kết quả mã địa lý, trừ phi kết quả mã địa lý là dành cho chính toà nhà đó. Thông số này không phải lúc nào cũng được điền sẵn.

  • entrance_tags[]

    Một mảng thẻ lối vào mô tả các đặc điểm của lối vào. Hệ thống hỗ trợ giá trị sau:

    • "PREFERRED"

      Cho biết lối vào này có thể cung cấp quyền truy cập thực tế vào địa điểm được trả về. Một địa điểm có thể có nhiều lối vào ưu tiên. Nếu một lối vào không có thẻ này, thì tức là lối vào đó nằm trên cùng một toà nhà nhưng không nhất thiết phải cung cấp quyền truy cập vào địa điểm đó.

      Ví dụ: nếu địa điểm được trả về là một nhà hàng trong khu mua sắm, thì các lối vào "PREFERRED" sẽ là lối vào nhà hàng, còn các lối vào khác được trả về sẽ là lối vào của toà nhà, chẳng hạn như lối vào các nhà hàng khác trong khu mua sắm.

      Nếu địa điểm được trả về là một toà nhà, thì các lối vào "PREFERRED" sẽ là những lối dẫn vào phần "chính" của toà nhà. Ví dụ: trong một trung tâm mua sắm, lối vào "PREFERRED" sẽ là lối vào khu vực sảnh chính, nhưng nếu một lối vào chỉ cho phép truy cập vào một cửa hàng ở bên hông toà nhà, thì đó sẽ không phải là lối vào "PREFERRED".

Hình ảnh dưới đây minh hoạ đường viền và lối vào của toà nhà được trả về cho yêu cầu mẫu ở trên.

Đường viền của một toà nhà và hai lối vào được kết xuất trên bản đồ. Lối vào PREFERRED (ƯU TIÊN) được hiển thị bằng biểu tượng lớn hơn so với lối vào còn lại.

Nội dung phản hồi từ yêu cầu mẫu ở trên cho thấy hai lối vào và một toà nhà có đường viền. Lưu ý rằng building_place_id của mỗi lối vào khớp với place_id của toà nhà:

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

Hiển thị đường viền của toà nhà trên bản đồ

JavaScript API tích hợp sẵn tính năng hỗ trợ hiển thị Đa giác và Đa đa giác ở định dạng RFC 7946. Bạn thực hiện việc này như sau:

  1. Tạo đối tượng đặc điểm bằng dữ liệu đa giác.
  2. Áp dụng kiểu cho đa giác.
  3. Gắn đối tượng này vào đối tượng bản đồ JavaScript.

Mỗi đối tượng trong mảng buildings chứa một đối tượng duy nhất trong mảng building_outlines. Ví dụ sau đây cho thấy cách hiển thị đường viền của một toà nhà trên bản đồ:

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

Khi sử dụng mã trên, đường viền của toà nhà do API Mã hoá địa lý trả về trong phản hồi mẫu ở phần trước của tài liệu này sẽ được hiển thị trên bản đồ như sau:

Đường viền của toà nhà được kết xuất trên bản đồ

Xử lý các phản hồi có nhiều toà nhà hoặc đường viền toà nhà

Bạn cũng có thể gặp phải các trường hợp sau; tuy nhiên, mã mẫu ở trên vẫn sẽ hoạt động cho các trường hợp này:

  1. Một đối tượng building_outlines đại diện cho nhiều đa giác.
  2. Một phản hồi có nhiều toà nhà trong mảng buildings[].

Ví dụ: phản hồi cho mã địa điểm ChIJGxgH9QBVHBYRl13JmZ0BFgo chứa hai toà nhà trong mảng 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"
    }
]

Bằng cách sử dụng mã mẫu JavaScript ở trên, chúng ta có thể kết xuất cả hai đường viền của tòa nhà trên bản đồ:

Hai đường viền của toà nhà được kết xuất trên bản đồ

Phản hồi

Đây là tính năng thử nghiệm. Chúng tôi rất mong nhận được ý kiến phản hồi của bạn tại địa chỉ geocoding-feedback-channel@google.com.