Tuesday, March 4, 2014

Maply Android Update

I've been hard at work on an Android version of WhirlyGlobe-Maply.  Here it is.  Or a screenshot anyway.

Little Android thing up there on the left.  Totally authentic.
Actually I implemented OpenStreetMap vectors first, but everybody loves the satellite imagery.

The toolkit is pretty big these days, so how much of it is done?

Basic Functionality


The biggest chunk is the core, as you might imagine.  Just getting the rendering up and going took a while.  At the user level, there are three big pieces done:

  1. Quad-tree Image Tile Layer.  This is what everyone thinks of as a remotely paged basemap.  You know, the things you get from Bing or MapBox.  Not Google, you don't get to play with those yourself.
  2. Vectors, Markers, Labels.  These are the basic objects we use to represent things, particularly maps.
  3. Quad-tree Paging Layer.  This is how you implement a tiled vector map.  As a test case, I've hooked it up to the vector tiles on the US OpenStreetMap server.

Vector Maps!
There's plenty yet to do.  Tiled basemap animation, full vector maps, the globe, efficient labels, feature animation, the list goes on.  It'll be a while before the port is complete.

A Few Details


A full writeup of how WhirlyGlobe-Maply 3.0 is working and will work would take a while.  So let's just hit the major points of the Maply Android port.  First, the roadmap.

  • WhirlyGlobe-Maply 2.2 is out now for iOS.  
  • WG-Maply 2.3 will come out in the next couple of months
  • That's probably the last 2.x version.  
  • WG-Maply 3.0 is cross platform and already under development for both Android and iOS.


The rendering engine is C++.   In 2.2 it was Objective-C++ (yes, that's a thing), but now it's just C++.  On iOS very little is changing at the user level.  On Android there's an entirely new Java interface corresponding to the "Component".

To interface the Java and C++ I'm using the Java Native Interface.  It's painful, but you won't ever have to see it.

One consequence of the design is that I'm using each platform's threading model.  On Android, it's all Java threads and queues.  On iOS it's Grand Central Dispatch.  This means more code, but it fits very well into each platform's world view and will be more friendly to each tribe of developers.

General Release


I've got one more big delivery on this version of the Android port.  At that point I'll put the toolkit into a closed beta.  If you want access to it, you need to pay for some functionality.  Don't worry, there's plenty left to pay for.

When I'm happy with the Android port I'll release it generally.  That's where this is heading, of course, a cross platform open source geospatial display toolkit.  It's starting to look pretty good.  If you need it for a project, drop me a line, preferably with some money attached.