Flyover mode in Apple Maps allows AR/VR style interaction. This is not by default available for iOS developers using underlaying MapKit/ARKit technology. However it is possible to test it and the following short video is about this proof of concept – viewing cadastral maps (iKatastr) in VR like experience on iPad . Btw. Flyover mode on iOS 11 has some strange handling of overlays – described here so loading of tiles is little bit tricky. The iOS 10 version was much more better (check the video here)
Update : 3/2018 AR enabled version with ARKit available here
Suprise, iOS 9 MapKit finally enables flyeover mode with WMS overlays ! I have used my github MapKit sample and only set in MapViewController mkMapView.mapType = MKMapTypeHybridFlyover;
Open Source OpenGL vector map rendering called MapBox GL, introduced here. Quick test run on iPad Air was successful and is available here :
Quotes from the site:
“Mapbox GL is based on the same vector tile format that powers Mapbox Streets. This means that you can use our global basemap, fully or in part, as well as create your own vector tiles to interleave data from different sources. Much like in TileMill, our open source map design studio, you can create a custom map by composing the various roads, parks, water areas, buildings, and more from lines, points, and polygons, then style them flexibly.”
“We built Mapbox GL in C++11 using OpenGL ES 2.0, a subset of OpenGL that is available on mobile devices and that can also run on desktop hardware with very minor changes. We use protocol buffers via pbf.hpp to implement a lazy vector tile parser, plus we’ve implemented custom code for text display and layout.
Mapbox GL is open source under a permissive BSD license, so you can check out all of the code right now. It currently runs on iOS, OS X, and Linux.”
Updated WMS over MapKit sample code for iOS7 , available on github I have added cadastral maps of Czech Republic, used camera API to set the view and tested, check also WMS on Google Maps SDK on iOS mentioned here
- (void)loadTileAtPath:(MKTileOverlayPath)path result:(void (^)(NSData *tileData, NSError *error)) result
this method is called by MapKit (or better by MKTileOverlayRenderer ) when it needs to draw a tile . It asks for NSData (and error) from x,y,z tile coordinates. In this method you can load NSData either from local cache or from NSURLConnection and pass resulting NSData (when ready) back to MapKit, for example like this (reading from cache)
result ([NSData dataWithContentsOfFile:filePath], nil);
if you do not need to use cache and you do not provide loadTileAtPath method , you can use another hook (callback) that is provided by MKTileOverlay, URLForTilePath:path
- (NSURL *)URLForTilePath:(MKTileOverlayPath)path
this method enables to custom format URL required to load tile, thus you can use WMS HTTP-GET parameters, for example :
if there is neither method in the derived class, then you probably do not need to derive at all from MKTileOverlay and directly use it with initWithUrlTemplate (not case for WMS, but for any other x,y,z sources)
Bad news is that MapKit on iOS7 doesn’t support tilt/pinch in Satellite/Hybrid mode in MapKit on iOS7
What it takes to transfer from Microsoft .NET to Apple iOS developer ?
Update 2015: more longer and similar story/explanation found here
So this was me ‘before’ with all my friends: Windows, C#, .NET, Visual Studio, MSDN :
transcript:
– easy ‘managed’ life,
– can smile and make ceremony
– implicit friends and friends of friends you can’t get rid of them
– shallow water, no deep dive
– few freezes
– slightly detuned, but good enough for many
– moon shots
…and me ‘after’ passing through the fire of iOS, Objective-C, Cocoa Touch, XCode, Documentation, Mac, Certificates, AppStore
transcript:
– different game, different rules
– lot of explosive material (resources)
– focused, not distracted by ‘friends’
– intelligence and luck needed
– dangerous and too explicit
– very rewarding
How avoided storyboard and overloading XIB with just right split between what is visually defined and what is programatically programmed:
visual set-up of the view in Interface builder – only view, no controllers and setting up outlets but no actions. AddNoteView.xib . Justify controls, set up autoscaling etc..
create AddNoteView.h with outlets
create AddNoteView.m and hook awakeFromNib and setup additional settings on view- (void)awakeFromNib{
[super awakeFromNib];
CALayer * layer = [self.locationThumb layer];
[layer setMasksToBounds:YES];
[layer setCornerRadius:10.0];
create AddNoteViewController.m and define loadView- (void)loadView {
Update: be aware as this is not working on iOS7, however in iOS7 MapKit officially supports to disable base layer !
This blog : https://blog.sumbera.com/2011/09/18/how-to-disable-base-google-maps-in-mapkit/ wrote about how to disable Google maps in MapKit. Now with new iOS6 and brand new Apple maps and OpenGL rendering , the question is how to disable rendering of the base maps without using undocumented functions. Removing whole base layer (VKMapView) is possible but cripples touch handling of the overlays. So here is very simple way how to do this without removing VKMapView – just set opacity of the layer to 0.0. This will erase base iOS6 maps .
I have just release iKatastr2 app on AppStore (free) that might be useful for you to look at as it uses WMS sources and custom tile loading on top of google.
App does simple stuff – shows cadastral information by tapping on cadastral map of the Czech Republic.
As all is driven by JSON configuration it is quite easy to render similar information from other sources.