Nokia 3D WebGL Map experiments
February 4, 2012
Recently, I ‘ve been very excited with Nokia’s 3D webGl mapping platfom. It’s really exciting that they achieved a Google Earth-like experience, using no plugin at all, just pure WebGL (supprted by Chrome and Firefox, more to come.)
Digging a little deeper, it seems that C3 Technologies, a SAAB spin-off, is responsible for generating the 3D models in an automatic way, however there isn’t a lot of information available online since Apple bought them 6 months ago. A nice video that explains the technology behind the 3D extraction process can be found here.
Having launched a streetview-like service in Greece, I do appreciate all innovations in the Web-GIS field and in this case, Nokia has really set the bar higher, so I just had to take a closer look at their service. It seems that I wasn’t the only one, and looking for more information I found @praeclarum’s really good write-up describing how to grab the geometry of the 3d models, as well as Michal’s post with similar results.
Picking @praeclarum’s code up, I forked his code to add the functionality to texture the 3D geometries with photorealistic textures. You could see the resulting Collada file in any 3D viewer like Sketchup.
- Nokia WebGL 3D view
- Exported model in Sketchup
The code is available here (Github), has some Windows-specific headers, but should be very easy to compile in other platforms as well.
Next steps
What would be very interesting would be to find out how does the tiling scheme Nokia uses actually works. It seems for the 2D maps it’s using the same Spherical Mercator-based tiling scheme Google and Bing also use. However this is not the case for the 3D n3m files.
For example, the Statue of Liberty area can be seen:
Google Maps:
zoom=19, x= 154308, y=197167
http://khm0.google.com/kh/v=102&x=154308&y=197167&z=19&s=Ga
Nokia Maps Satellite:
zoom=19, x= 154308, y=197167
http://3.maptile.lbs.ovi.com/maptiler/v2/maptile/newest/hybrid.day/19/154308/197167/256/png8?token=fee2f2a877fd4a429f17207a57658582&appId=nokiaMaps
Nokia Maps 3D:
zoom 19, x= 154308, y=??? 327120 ???
http://c.maps3d.svc.nokia.com/data4/19/3215/7143/20/map_19_327120_154308.n3m
The URL parameters for the 3D n3m file don’t follow the same tiling scheme of the other 2.
Let me know your thoughts on this. Any feedback on the above would be very helpful.


It’s actually the same tiling scheme in the .n3m files, just turned around a little to account for (I think) normal expectations of a bottom-left origin in 3D graphics compared to a top-left origin in spherical mercator tiles. My code’s all on Github now, have a look at the coordinatePath() function:
https://github.com/migurski/NokiaWebGL
I’m a bit stuck with the height lookup tables in function coordinateHeights() – my output looks exactly right in Oakland, and exactly wrong in SF where the Transamerica Pyramid ends up looking strangely squat.
With regard to the numbers, note that 327120 = 2^19 – 197167 – 1 and 197167 = 2^19 – 327120 – 1.