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

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 địa phương đó. 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ý tiêu 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ù bạn có thể sử dụng tính năng này ở 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 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ạ độ của 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=ChIJ4TTDdzS3j4AR78EQgu5EADA&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ề các trường tương ứng với một toà nhà, nhưng trong một số trường hợp, phản hồi có thể có nhiều phần tử, chẳng hạn như các điểm yêu thích chiếm nhiều toà nhà. Các phần tử phản hồi bao gồm hai mảng:

Mảng buildings[] có 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 thông tin 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à có chứa lối vào. Mã 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.

Phản hồi từ truy vấn ở trên cho thấy một lối vào và một mục đa giác trong mảng 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"
    }
  ],
}

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 theo đị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 đồ

Trường hợp đặc biệt

Bạn cũng có thể gặp phải các trường hợp ngoại lệ 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 phản hồi có nhiều đường viền của toà nhà.
  2. Một đối tượng building_outlines đại diện cho nhiều đa giác.

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

Khi sử dụng mã mẫu JavaScript ở trên, chúng ta có thể kết xuất cả hai đường viền 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 buildings-in-geocoding-feedback-channel@google.com.