건물 외곽선 및 입구

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

    이 입구가 포함된 buildings[]의 건물의 장소 ID입니다. 이렇게 하면 어떤 건물에 어떤 입구가 있는지 파악할 수 있습니다. 이 입구는 buildings[]의 색인 i에 있는 건물에 해당하며 여기서 buildings[i].place_id는 이 입구의 building_place_id와 같습니다. 참고: 지오코딩 결과가 건물 자체에 대한 결과가 아닌 한 이 값은 지오코딩 결과의 장소 ID와 다릅니다. 이 매개변수는 항상 채워지는 것은 아닙니다.

위 쿼리의 응답은 건물 배열에 입구 1개와 다각형 항목 1개를 보여줍니다. 각 입구의 building_place_id가 건물의 place_id와 일치하는 것을 확인할 수 있습니다.

{
  "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. 여러 다각형을 나타내는 단일 building_outlines 객체입니다.
  2. buildings[] 배열에 여러 건물이 있는 응답입니다.

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

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

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

의견

실험용으로 제공되는 기능입니다. buildings-in-geocoding-feedback-channel@google.com으로 의견을 보내주시면 감사하겠습니다.