Google Map SDK for iOS のマップにストリートビューの対応地域を表示する。
Goolgle Map SDK for iOSのマップにストリートビューの対応地域を表示する方法について説明したいと思います。(過去に挑戦した時になかなか情報が見つからず苦労した覚えがあります。。ぜひ参考にしてみてください。)
ストリートビューの対応地域はマップ上に青で表示される部分です↓
Objective-Cになりますが、以下のようにGMSSyncTileLayerを継承したストリートビューの対応地域を表示するGoogleMapStreetViewTileLayer.hを作成します。
tileForXメソッドはマップのタイルが更新される時に呼び出されます。このメソッドでタイルに表示するストリートビューの対応地域の画像を戻り値として返すことで、マップのタイルに重ねて表示されます。
タイルというのは、マップを構成する256x256の正方形のマスとなり、これらが集まって一つのマップを構成しています。ズームによって、マスの数は異なります。(詳しくはこちらをご参照ください。)
ストリートビューの対応地域の画像はhttps://mts2.google.com/mapslt?lyrs=svv&x=%lu&y=%lu&z=%lu&w=256&h=256&hl=en&style=40,18にリクエストを投げて、取得することができます。(%luの部分は、tileForXメソッドの引数のx, yの値を指定します。)
このURLを探すのにとても苦労しました(^ ^;)
ストリートビューの対応地域はマップ上に青で表示される部分です↓
Objective-Cになりますが、以下のようにGMSSyncTileLayerを継承したストリートビューの対応地域を表示するGoogleMapStreetViewTileLayer.hを作成します。
#import <GoogleMaps/GoogleMaps.h="">
@interface GoogleMapStreetViewTileLayer : GMSSyncTileLayer
@end
次にGoogleMapStreetViewTileLayer.mを作成します。tileForXメソッドはマップのタイルが更新される時に呼び出されます。このメソッドでタイルに表示するストリートビューの対応地域の画像を戻り値として返すことで、マップのタイルに重ねて表示されます。
タイルというのは、マップを構成する256x256の正方形のマスとなり、これらが集まって一つのマップを構成しています。ズームによって、マスの数は異なります。(詳しくはこちらをご参照ください。)
ストリートビューの対応地域の画像はhttps://mts2.google.com/mapslt?lyrs=svv&x=%lu&y=%lu&z=%lu&w=256&h=256&hl=en&style=40,18にリクエストを投げて、取得することができます。(%luの部分は、tileForXメソッドの引数のx, yの値を指定します。)
このURLを探すのにとても苦労しました(^ ^;)
#import "ELGoogleMapStreetViewTileLayer.h"
@implementation ELGoogleMapStreetViewTileLayer
- (UIImage *)tileForX:(NSUInteger)x
y:(NSUInteger)y
zoom:(NSUInteger)zoom {
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"https://mts2.google.com/mapslt?lyrs=svv&x=%lu&y=%lu&z=%lu&w=256&h=256&hl=en&style=40,18", (unsigned long)x, (unsigned long)y, (unsigned long)zoom]];
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
NSError *error;
NSURLResponse *response;
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
return [UIImage imageWithData:data];
}
@end
後は、以下のようにしてGoogleMapStreetViewTileLayerのmapプロパティにGMSGoogleMapのインスタンスを指定するだけでストリートビューの対応地域がマップ上に表示されます。(GMSMapViewは事前に初期化している前提です。)@property (strong, nonatomic) GMSMapView *mapView;
@property (strong, nonatomic) GMSTileLayer *streetViewLayer;
self.streetViewLayer = [ELGoogleMapStreetViewTileLayer new];
self.streetViewLayer.map = self.mapView;
コメント
コメントを投稿