건물 외곽선 및 입구

Geocoding API를 사용하여 건물 윤곽선과 입구를 가져와 지도 렌더링에서 데이터 시각화를 개선하세요.

이렇게 하려면 지오코딩 요청에 추가 매개변수를 포함하여 건물 윤곽선 또는 입구를 정의하는 위도/경도 좌표 쌍을 반환합니다. 요청의 출력을 사용하여 건물 윤곽을 그리고 지도에 건물 입구를 표시합니다.

  • 건물 윤곽은 건물로 덮인 지구 표면적을 나타내는 2D 다각형을 정의하는 위도/경도 좌표 쌍의 집합입니다.
  • 건물 입구는 장소의 진입점과 출입점 위치를 정의하는 단일 위도/경도 좌표 쌍입니다.

사용 및 노출 범위

이 서비스를 사용하여 단일 요청에서 단일 장소의 윤곽 다각형을 반환할 수 있습니다. 즉, 영국 런던과 같은 도시 수준 지오코드 요청은 해당 지역 내의 모든 건물 윤곽을 반환하지 않습니다. 이 경우 서비스는 건물 윤곽선이나 입구가 없는 표준 지오코딩 응답을 반환합니다. 특히 이 서비스는 다음 장소 유형에 대해서만 윤곽선과 입구를 생성합니다.

지원되는 장소 유형

건물

진입수

premise

premise

subpremise

subpremise

point_of_interest

point_of_interest

street_address

이 기능은 모든 지역에서 사용할 수 있지만 적용 범위는 지역에 따라 다릅니다. 또한 건물 윤곽선은 포함되어 있지만 입구 데이터는 포함되지 않은 API 응답을 수신하게 됩니다. 이 경우 서비스는 건물 윤곽선이 포함된 지오코딩 응답을 반환하지만 진입로 데이터 배열은 반환하지 않습니다. 이 서비스는 지속적으로 진입 노출 범위를 개선하기 위해 노력하고 있습니다.

요청 세부정보

다음과 같은 유형의 요청에서 건물 윤곽선과 입구 좌표를 가져올 수 있습니다.

이러한 요청의 경우 extra_computations=BUILDING_AND_ENTRANCES 매개변수를 제공합니다.

요청 예시

다음 쿼리는 장소 지오코딩을 사용하여 미국 캘리포니아 주 마운틴뷰에 있는 음식점의 입구 및 개요 정보를 가져옵니다.

https://maps.googleapis.com/maps/api/geocode/json?place_id=ChIJ4TTDdzS3j4AR78EQgu5EADA&extra_computations=BUILDING_AND_ENTRANCES&key=YOUR_API_KEY

응답 예

대부분의 경우 응답은 단일 건물에 해당하는 필드를 반환하지만, 여러 건물을 차지하는 관심 장소와 같이 응답에 여러 요소가 포함될 수도 있습니다. 응답 요소에는 두 개의 배열이 포함됩니다.

다음 필드가 있는 buildings[] 배열입니다.

  • place_id

    건물의 고유 식별자입니다. 자세한 내용은 장소 ID 개요를 참고하세요.

  • building_outlines[]

    건물과 연결된 윤곽선 배열입니다. 이 배열에는 항목이 하나만 있습니다. building_outlines[]의 각 객체에는 다음 필드가 있습니다.

    • display_polygon

    RFC 7946 형식을 사용하여 건물이 덮고 있는 지구의 표면적을 근사하는 다각형의 GeoJSON 인코딩

다음 필드가 있는 entrances[] 배열입니다.

  • location

    입구의 위도/경도 좌표입니다.

  • building_place_id

    입구가 있는 건물의 장소 ID입니다. 이는 지오코딩 결과가 건물 자체에 대한 결과가 아닌 한 지오코딩 결과의 장소 ID와 다릅니다. 이 매개변수는 항상 채워지는 것은 아닙니다.

위 쿼리의 응답에는 건물 배열에 입구 1개와 다각형 항목 1개가 표시됩니다.

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

지도에 건물 윤곽선 표시

JavaScript API에는 RFC 7946 형식 다각형 및 다중 다각형 표시를 위한 기본 지원이 있습니다. 이렇게 하려면 다음 단계를 따르세요.

  1. 다각형 데이터를 사용하여 지형지물 객체를 빌드합니다.
  2. 다각형에 스타일을 적용합니다.
  3. 지형지물을 JavaScript 지도 객체에 연결합니다.

buildings 배열의 모든 객체에는 building_outlines 배열의 단일 객체가 포함됩니다. 다음 예는 지도에 건물 윤곽선을 표시하는 방법을 보여줍니다.

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

위의 코드를 사용하면 이 문서 앞부분의 예시 응답 내 Geocoding API에서 반환한 건물 윤곽선이 다음과 같이 지도에 렌더링됩니다.

지도에 렌더링된 건물 윤곽선

특이 사례

다음과 같은 특이 사례가 발생할 수도 있지만 위의 샘플 코드는 이러한 경우에도 작동합니다.

  1. 여러 건물 윤곽선이 포함된 응답
  2. 여러 다각형을 나타내는 단일 building_outlines 객체입니다.

예를 들어 장소 ID ChIJGxgH9QBVHBYRl13JmZ0BFgo의 응답에는 두 개의 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"
    }
]

위의 JavaScript 코드 샘플을 사용하면 지도에 두 윤곽선을 모두 렌더링할 수 있습니다.

지도에 렌더링된 두 건물 윤곽선

의견

실험용으로 제공되는 기능입니다. buildings-in-geocoding-feedback-channel@google.com으로 의견을 보내 주세요.