지도 상단에 이미지를 타일 계층으로 추가할 수 있습니다. 타일 레이어는 특정 확대/축소 수준에서 지도 타일 위에 배치됩니다. 타일이 충분한 경우 는 여러 확대/축소 수준에서 전체 지도에서 Google 지도 데이터를 보완할 수 있습니다.
소개
타일 레이어 (타일 오버레이라고도 함)를 사용하면
이미지를 표시할 수 있습니다. 이 방법은 데이터를 추가하여
지역 이미지를 포함하여 Google 지도에서
있습니다. kGMSTypeNone
지도 유형과 결합하면
타일 레이어를 사용하면 Google의 기본 지도 데이터를 자체 데이터로 대체할 수 있습니다.
타일 레이어는 일반적으로 광범위한 이미지를 추가할 때 유용합니다. 지도에 표시할 수 있습니다. 이와 대조적으로 지면 오버레이는 단일 이미지를 한 화면에서 고정하려는 경우에 유용합니다. 표시됩니다.
타일 좌표
Maps API는 각 확대/축소 수준의 이미지를 정사각형 지도 집합으로 분할합니다. 타일은 순서가 지정된 그리드로 정렬됩니다. 지도를 스크롤할 때 새 위치나 새 확대/축소 수준으로 변경하면 Maps API가 이를 가져올 타일 집합으로 변환합니다.
Google에서 구현한 메르카토르 투영법의 경우
좌표 (0,0)은 항상 지도의 북서쪽 모서리에 있으며 x
값입니다.
서쪽에서 동쪽으로 갈수록 증가하고 y
값은 북쪽에서 남쪽으로 갈수록 증가합니다.
타일은 해당 원점에서부터 x,y
좌표를 사용하여 색인이 생성됩니다. 예를 들어
지구가 16개의 타일로 나뉘면 각 타일은 확대/축소 수준 2에서
고유 x,y
쌍으로 참조됩니다.
각 지도 타일은 256x256 포인트의 정사각형입니다. 확대/축소 수준이 0이면 전 세계가 표시됩니다. 렌더링됩니다. 각 확대/축소 수준에서 배율은 2의 배수입니다. 따라서 확대/축소 수준 1에서 지도는 타일, 확대/축소 수준 2에서는 4x4 그리드, 확대/축소 수준 3에서는 8x8 그리드 등입니다. 타일 레이어에 사용할 이미지를 만드는 경우 지원하고자 하는 각 확대/축소 수준의 각 타일에 대한 256x256 포인트 이미지.
타일 레이어 추가
GMSURLTileLayer
객체 또는 다음의 맞춤 서브클래스를 인스턴스화합니다.GMSTileLayer
/GMSSyncTileLayer
- 원하는 경우
zIndex
속성을 수정하여 다른 타일 레이어와 관련이 있습니다. map
를 설정하여GMSTileLayer
객체를 지도에 할당합니다. 속성
iOS용 Maps SDK에서는 다음과 같은 세 가지 클래스를 제공합니다.
타일 레이어를 구현합니다. 각 수업에서 컨테이너 이미지를 가져오는 방법을
주어진 {x,y,zoom}
좌표 집합에 대한 올바른 지도 타일을 반환합니다. 사용 가능한 옵션은 다음과 같습니다.
GMSSyncTileLayer
서브클래스:UIImage
인스턴스를 반환하는tileForX:y:zoom
GMSTileLayer
서브클래스: 비동기식 구현을 제공합니다. 나중에 타일 이미지로 다시 호출하는 메서드requestTileForX:y:zoom
입니다.- 기존 클래스
GMSURLTileLayer
를 사용하여 자동으로 카드 가져오기 URL에서 사용하여GMSTileURLConstructor
블록을 제공합니다.GMSURLTileLayer
서브클래스로 분류할 수 없는 구체적인 클래스입니다.
GMSSyncTileLayer
또는 GMSTileLayer
를 서브클래스화하는 경우
nil
타일 결과는 iOS용 Maps SDK에 데이터가 현재
지금은 사용 가능하지 않습니다. 이와 달리
kGMSTileLayerNoTile
를 반환하여 이 위치에 타일이 없음을 나타냅니다.
볼 수 있습니다
GMSURLTileLayer
의 경우 GMSTileURLConstructor
에서 nil
를 반환하면
이 위치에 타일이 없음을 나타냅니다.
`GMSURLTileLayer` 를 사용하여 URL에서 타일 가져오기
GMSURLTileLayer
에는 서브클래스가 필요하지 않지만 다음 작업을 해야 합니다.
GMSTileURLConstructor
블록을 구현합니다. 아래 코드는
GMSURLTileLayer
을 사용하여 다층 건물의 평면도를 표시합니다.
Swift
let floor = 1 // Implement GMSTileURLConstructor // Returns a Tile based on the x,y,zoom coordinates, and the requested floor let urls: GMSTileURLConstructor = { (x, y, zoom) in let url = "https://www.example.com/floorplans/L\(floor)_\(zoom)_\(x)_\(y).png" return URL(string: url) } // Create the GMSTileLayer let layer = GMSURLTileLayer(urlConstructor: urls) // Display on the map at a specific zIndex layer.zIndex = 100 layer.map = mapView
Objective-C
NSInteger floor = 1; // Create the GMSTileLayer GMSURLTileLayer *layer = [GMSURLTileLayer tileLayerWithURLConstructor:^NSURL * _Nullable(NSUInteger x, NSUInteger y, NSUInteger zoom) { NSString *url = [NSString stringWithFormat:@"https://www.example.com/floorplans/L%ld_%lu_%lu_%lu.png", (long)floor, (unsigned long)zoom, (unsigned long)x, (unsigned long)y]; return [NSURL URLWithString:url]; }]; // Display on the map at a specific zIndex layer.zIndex = 100; layer.map = mapView;
GMSSyncTileLayer
서브클래스를 생성하여 카드를 UIImage
로 제공
GMSSyncTileLayer
및 GMSTileLayer
는 다음과 같이 설계된 추상 클래스입니다.
서브클래스로 분류됩니다. 이러한 클래스를 사용하여 카드를 UIImage
로 제공할 수 있습니다. 아래
지도의 일부 타일 위에 맞춤 이미지를 렌더링하는 방법을 보여주는 예입니다.
GMSSyncTileLayer
를 서브클래스로 분류함
Swift
class TestTileLayer: GMSSyncTileLayer { override func tileFor(x: UInt, y: UInt, zoom: UInt) -> UIImage? { // On every odd tile, render an image. if (x % 2 == 1) { return UIImage(named: "australia") } else { return kGMSTileLayerNoTile } } }
Objective-C
@interface TestTileLayer : GMSSyncTileLayer @end @implementation TestTileLayer - (UIImage *)tileForX:(NSUInteger)x y:(NSUInteger)y zoom:(NSUInteger)zoom { // On every odd tile, render an image. if (x % 2 == 1) { return [UIImage imageNamed:@"australia"]; } else { return kGMSTileLayerNoTile; } } @end
지도에 계층을 추가하려면 객체를 인스턴스화하고 지도 속성을 설정합니다.
Swift
let layer = TestTileLayer() layer.map = mapView
Objective-C
GMSTileLayer *layer = [[TestTileLayer alloc] init]; layer.map = mapView;
레티나 기기를 위한 고DPI 타일
GMSSyncTileLayer
와 함께 높은 DPI 이미지를 사용할 수 있습니다.
또는 GMSURLTileLayer
로 설정합니다. tileSize
를 512로 설정하면 됩니다.
tileSize
속성은 반환된 타일의 픽셀 수를 나타냅니다.
이미지가 다음과 같이 표시되는 것을 선호합니다. 기본값은 256이며
입니다.
높은 DPI 기기에 일반 DPI 타일을 표시하는 경우,
tileSize
를 512로 설정하여
이미지 크기를 늘릴 수 있습니다 확대 이미지는
특히 미세한 선이나 텍스트의 경우 이미지 품질을 떨어뜨립니다. 최상의 결과를 얻으려면
tileSize
및 이미지 DPI를 디스플레이에 추가합니다. 레티나 기기에 표시되는 지도는
tileSize
가 512인 높은 DPI 이미지를 표시할 때 가장 보기 좋게 표시됩니다.
레티나 이외 기기에 표시되는 지도는 일반 이미지에서 훌륭하게 표시됩니다.
기본 tileSize
는 256입니다.
오래된 타일 삭제
레이어에서 제공한 타일이 '오래된' 경우 메서드는
강제로 새로고침하려면 레이어에서 clearTileCache
를 호출해야 합니다. 이렇게 하면
이 레이어의 모든 타일이 다시 로드됩니다.
Swift
layer.clearTileCache()
Objective-C
[layer clearTileCache];