Google 지도 스트리트 뷰를 사용하면 360도 거리 수준 이미지를 통해 전 세계의 장소를 탐색할 수 있습니다. 세계 명소를 둘러보고, 자연의 경이로움을 감상하고, 여행 경로를 탐색하거나, 비즈니스 외부를 보여줄 수 있습니다.
개요
Google 스트리트 뷰는 지정된 도로부터 지도에 표시되는 영역
전반에 걸쳐 360도 파노라마 뷰를 제공합니다. SDK를 통해 제공되는 노출 범위는 iOS용 Google 지도 앱 또는 https://maps.google.com/
의 노출 범위와 동일합니다. 스트리트 뷰 정보에서 스트리트 뷰에 대해 자세히 알아보고 대화형 지도에서 지원되는 지역을 확인할 수 있습니다.
iOS용 Maps SDK는 Google 지도 스트리트 뷰에 사용되는 이미지를 가져오고 조작하기 위한 스트리트 뷰 서비스를 제공합니다.
스트리트 뷰 이미지는 파노라마로 반환되며 GMSPanoramaView
유형의 객체인 스트리트 뷰 뷰어 내에서 볼 수 있습니다.
스트리트 뷰 파노라마
각 스트리트 뷰 파노라마는 단일 이미지 또는 여러 이미지의 집합으로, 단일 위치에서 완전한 360도 뷰를 제공합니다. 이미지는 360도 가로 보기(전체 둘러보기)와 180도 세로 보기 (위에서 아래로)가 포함된 등각 직사각형 (Plate Carrée) 투영을 따릅니다. 그 결과 얻어지는 360도 파노라마 이미지는 이미지가 구체의 2차원 표면에 래핑된 구체의 투영을 정의합니다.
스트리트 뷰 파노라마는 GMSPanoramaView
객체로 볼 수 있습니다. 이 객체는 카메라가 중심에 있는 구체로 파노라마를 렌더링하는 뷰어를 제공합니다. 카메라의 방향과 뷰어를 맞춤설정하는 여러 속성을 프로그래매틱 방식으로 제어할 수 있습니다.
스트리트 뷰 데이터 액세스
스트리트 뷰 파노라마는 다음 두 가지 메타데이터 중 하나로 식별됩니다.
panoramaID
- 스트리트 뷰 파노라마의 고유 ID입니다. 이
panoramaID
는 시간이 지남에 따라 변경될 수 있으며 장기 또는 하드코딩된 참조로 적합하지 않습니다.panoramaID
는 다양한 스트리트 뷰 이미지에 프로그래매틱 액세스를 제공하는 데 가장 적합합니다. coordinate
- 이 이미지의 정확한 위치로,
CLLocationCoordinate2D
로 표현됩니다. 파노라마 위치를 영구 저장하거나 지도에서 사용자 작업을 스트리트 뷰 이미지로 변환하는 데coordinate
를 사용합니다.
panoramaID
와 coordinate
는 모두 GMSPanorama
객체의 속성으로 저장됩니다. coordinate
또는 panoramaID
를 사용하여 GMSPanoramaService
에서 GMSPanorama
를 요청할 수 있습니다. 결과 객체에는 두 메타데이터와 근처 파노라마로 연결되는 링크 배열이 포함됩니다.
파노라마 위치 설정
스트리트 뷰 파노라마의 위치는 좌표를 기반으로 설정할 수 있습니다.
moveNearCoordinate
메서드는 좌표 근처의 파노라마를 요청합니다.moveNearCoordinate:radius
메서드는 유사하지만 좌표 주변의 검색 반경(단위: 미터)을 지정할 수 있습니다.moveNearCoordinate:source
메서드를 사용하면 소스를 지정할 수 있습니다. 소스는 야외에 있는 파노라마만 찾도록 스트리트 뷰의 범위를 제한하려는 경우에 유용합니다. 기본적으로 위치의 파노라마는 실내 또는 실외 중 하나입니다. 지정된 위치에 야외 파노라마가 없을 수도 있습니다.moveNearCoordinate:radius:source
메서드를 사용하면 반지름과 소스를 모두 지정할 수 있습니다.
스트리트 뷰 이미지 보기
스트리트 뷰 뷰어 추가
뷰어 추가를 위한 기본 단계:
- (한 번) 시작하기의 단계에 따라 SDK를 가져오고 키를 가져와 필요한 프레임워크를 추가합니다.
ViewController
를 만들거나 업데이트합니다. 이 뷰 컨트롤러가 표시될 때 파노라마가 표시되는 경우loadView
메서드 내에 파노라마를 만들어야 합니다.GMSPanoramaView
initWithFrame:
메서드를 사용하여GMSPanoramaView
클래스를 만들고 인스턴스화합니다. 뷰 컨트롤러의 유일한 뷰로 사용하려는 경우CGRectZero
를 지도의 프레임으로 사용할 수 있습니다. 그러면 지도 크기가 자동으로 조절됩니다.GMSPanoramaView
객체를 뷰 컨트롤러의 뷰(예:self.view = panoView;
)로 설정합니다.moveNearCoordinate:
와 같은 메서드를 사용하여 스트리트 뷰 이미지의 위치를 설정합니다.
아래 예시에서는 앱에 스트리트 뷰어를 추가합니다.
Swift
import GoogleMaps class StreetView: UIViewController { override func loadView() { let panoView = GMSPanoramaView(frame: .zero) self.view = panoView panoView.moveNearCoordinate(CLLocationCoordinate2D(latitude: -33.732, longitude: 150.312)) } }
Objective-C
#import "StreetView.h" @import GoogleMaps; @interface StreetView () @end @implementation StreetView - (void)loadView { GMSPanoramaView *panoView = [[GMSPanoramaView alloc] initWithFrame:CGRectZero]; self.view = panoView; [panoView moveNearCoordinate:CLLocationCoordinate2DMake(-33.732, 150.312)]; } @end
보기 맞춤설정
사용 가능한 제스처를 제한하는 방식으로 뷰어를 사용자 지정할 수 있습니다. 기본적으로 화면 이동, 확대/축소, 인접한 파노라마로 이동이 모두 사용 설정되어 있습니다.
개별 동작은 GMSPanoramaView
의 속성을 통해 제어됩니다.
이러한 속성은 사용자 제어 동작을 사용 설정하거나 중지합니다. 동작이 사용 중지된 경우에도 프로그래매틱 변경은 가능합니다.
orientationGestures
- 사용자가 탭하거나 드래그하여 카메라 방향을 다시 설정할 수 있는지 여부입니다. 카메라의 방향 변경을 사용 중지하려면
NO
로 설정하세요. zoomGestures
- 사용자가 핀치하여 확대/축소할 수 있는지 여부입니다. 확대/축소를 사용 중지하려면
NO
로 설정합니다. navigationGestures
- 사용자가 표시되는 파노라마를 변경할 수 있는지 여부입니다. 사용자가 탐색 링크를 한 번 탭하거나 보기를 두 번 탭하여 파노라마를 변경할 수 있습니다.
NO
로 설정하여 탐색 변경을 사용 중지합니다.
setAllGesturesEnabled:
메서드를 사용하여 모든 동작을 한 번에 사용 설정 또는 사용 중지할 수 있습니다.
Swift
panoView.setAllGesturesEnabled(false)
Objective-C
[panoView setAllGesturesEnabled:NO];
URL 스키마를 사용하여 스트리트 뷰 실행
Google 스트리트 뷰 이미지는 iOS용 Google 지도 애플리케이션 내에서 볼 수 있습니다. mapmode
매개변수를 streetview
로 설정하여 comgooglemaps
URL 스킴으로 스트리트 뷰 모드에서 iOS용 Google 지도 애플리케이션을 실행할 수 있습니다. 에어뷰를 실행하는 URL의 예는 다음과 같습니다. 자세한 내용은 URL 스키마 문서를 참고하세요.
comgooglemaps://?center=46.414382,10.013988&mapmode=streetview
스트리트 뷰 위치 및 시점 (POV)
GMSPanoramaCamera
를 사용하면 방향, 기울기, 확대/축소의 조합으로 스트리트 뷰 카메라의 관점을 설정할 수 있습니다.
아래 스니펫 집합은 카메라의 방향을 남쪽, 약간 아래쪽을 향하도록 설정합니다.
Swift
panoView.camera = GMSPanoramaCamera(heading: 180, pitch: -10, zoom: 1)
Objective-C
panoView.camera = [GMSPanoramaCamera cameraWithHeading:180 pitch:-10 zoom:1];
방향
스트리트 뷰 위치는 이미지의 카메라 초점 위치를 정의하지만 해당 이미지의 카메라 방향을 정의하지는 않습니다.
이를 위해 GMSOrientation
객체는 두 가지 속성을 정의합니다.
heading
는 진북을 기준으로 카메라 궤도 주위의 회전 각도를 도 단위로 정의합니다. 방위는 시계 방향으로 측정됩니다. 진북은 0, 동쪽은 90, 남쪽은 180, 서쪽은 270입니다.pitch
(기본값0
): 카메라의 초기 기본 피치에서 '위' 또는 '아래'의 각도 변이를 정의합니다. 이 각도 변이는 항상 그렇지는 않지만 수평으로 평평한 경우가 많습니다. 예를 들어 언덕에서 촬영한 이미지는 수평이 아닌 기본 피치를 보일 수 있습니다. 피치 각도는 위쪽을 볼 때 양수 값 (기본 피치에 대해 수직으로 90도까지)으로, 아래쪽을 볼 때 음수 값 (기본 피치에 대해 수직으로 -90도까지)으로 측정됩니다.
확대/축소
스트리트 뷰는 확대/축소를 통해 다양한 수준의 이미지 세부정보를 지원합니다. 프로그래매틱 방식으로 확대/축소 수준을 설정하거나 사용자가 핀치하여 확대/축소하여 뷰어에서 수준을 변경할 수 있습니다.
카메라 이동
GMSPanoramaView
를 만들고 구성된 카메라 또는 기본 카메라가 있으면 여러 가지 방법 중 하나로 변경할 수 있습니다. 카메라를 변경할 때 결과적으로 발생하는 카메라 움직임을 애니메이션 처리할 수 있습니다. 애니메이션은 현재 카메라 속성과 새 카메라 속성 간에 보간합니다.
GMSPanoramaCamera
객체를 수정하고 GMSPanoramaView
의 camera
속성에 설정할 수 있습니다. 이렇게 하면 애니메이션 없이 카메라가 새 관점에 스냅됩니다. GMSCameraPosition
를 만들어 방향과 확대/축소의 조합을 구성할 수 있습니다.
Swift
panoView.camera = GMSPanoramaCamera(heading: 180, pitch: -10, zoom: 1)
Objective-C
panoView.camera = [GMSPanoramaCamera cameraWithHeading:180 pitch:-10 zoom:1];
GMSPanoramaView
의 animateToCamera:animationDuration:
메서드를 호출하여 전환에 애니메이션을 적용할 수 있습니다.
또한, Core Animation을 사용하여 카메라를 제어할 수 있습니다. 이는 GMSPanoramaView
, GMSPanoramaLayer
의 맞춤 CALayer
를 통해 사용할 수 있습니다.
스트리트 뷰 마커
GMSPanoramaView
객체는 지도 마커를 표시할 수 있습니다. 상응하는 속성을 설정하여 GMSMapView
또는 GMSPanoramaView
객체에서 동일한 GMSMarker
객체를 사용할 수 있습니다.
Swift
// Create a marker at the Eiffel Tower let position = CLLocationCoordinate2D(latitude: 48.858, longitude: 2.294) let marker = GMSMarker(position: position) // Add the marker to a GMSPanoramaView object named panoView marker.panoramaView = panoView // Add the marker to a GMSMapView object named mapView marker.map = mapView
Objective-C
// Create a marker at the Eiffel Tower CLLocationCoordinate2D position = CLLocationCoordinate2DMake(48.858,2.294); GMSMarker *marker = [GMSMarker markerWithPosition:position]; // Add the marker to a GMSPanoramaView object named panoView marker.panoramaView = panoView; // Add the marker to a GMSMapView object named mapView marker.map = mapView;
마커의 크기는 마커의 위치와 GMSCameraView
의 위치 간의 거리에 따라 조정됩니다. 이 거리가 너무 길어지면 마커가 너무 작아져 표시되지 않고 뷰에서 숨겨집니다.
panoramaView
속성을 nil
로 설정하여 GMSPanoramaView
에서 삭제합니다.
Swift
marker.panoramaView = nil
Objective-C
marker.panoramaView = nil;
이벤트
사용자가 파노라마를 탭할 때와 같이 스트리트 뷰 파노라마에서 발생하는 이벤트를 수신 대기할 수 있습니다. 이벤트를 수신 대기하려면 GMSPanoramaViewDelegate
프로토콜을 구현해야 합니다. 전체 이벤트 가이드와 GMSPanoramaViewDelegate
의 메서드 목록을 참고하세요.