
Sample for using WMS sources in Google Maps SDK for iOS. available on github here: https://github.com/Sumbera/WMS_iOS_GoogleMapSDK
Provide your API key in the WMSController.h
- Google Maps for iOS used : 1.7.2 (April 2014)
- used XCode 5.1.1 (April 2014)
- iPad Air, iOS 7.1 (should run in iOS6.0 too)
There are two ways of overlaying WMS in the Google Maps for iOS SDK:
“Method B”: use GMSTileURLConstructor
// -- method B. WMS tile layer with GMSTileURLConstructor GMSTileURLConstructor urls = ^(NSUInteger x, NSUInteger y, NSUInteger z) { BBox bbox = bboxFromXYZ(x,y,z); NSString *urlKN = [NSString stringWithFormat:@"Your WMS url&BBOX=%f,%f,%f,%f", bbox.left, bbox.bottom, bbox.right, bbox.top]; return [NSURL URLWithString:urlKN]; };
“Method A”: use custom TileLayer derived from GMSTileLayer
- your derived class from GMSTileLayer (here WMSTileLayer.h) will receive tile request
-(void)requestTileForX:(NSUInteger)x
y:(NSUInteger)y
zoom:(NSUInteger)z
receiver:(id<GMSTileReceiver>)receiver - WMSTileLayer first checks for cached tile and if found calls :
[self drawTileAtX:x y:y zoom:z Url:urlStr Receiver:receiver] ;
- if tile is not cached we download it, save it to the file system (using MD5 hash) and call to draw it
[data writeToFile: filePath atomically:YES];
[self drawTileAtX:x y: y zoom: z Url:urlStr Receiver:receiver] ; - drawTileAtX is very simple:
-(void) drawTileAtX: (NSUInteger) x
y:(NSUInteger) y
zoom:(NSUInteger)zoom
Url:(NSString*) url
Receiver: (id<GMSTileReceiver>) receiver {
UIImage *image = TileLoad(url,NO);
[receiver receiveTileWithX:x y:y zoom:zoom image:image];
}
}
both ways are used in this sample.