Friday, June 21, 2013

Android Port: Begging for Money

I'm getting a lot of queries about an Android port.  Just to recap, I make the WhirlyGlobe-Maply toolkit, an open source 3D interactive globe and map display toolkit for iPad and iPhone.

Globe                            3D Map                         2D Map
Most of the development I do is incremental.  If I add, say, font based text rendering it doesn't cost all that much and one client can pay for it.  Everyone else gets the benefit and that's how open source works.

The Money

Some things are just too big for that model.  An Android port isn't like a feature request, it's big.  How big?  About $50k (USD).

Normally I'd approach this one of two ways:

  1. Do it myself.  I absorb the cost of lots of features no one really wants to pay for.
  2. Wait until a big client needs it.  Pretty likely, but could take a while.
This is just too big for the former.  Remember, I give this stuff away.  The latter will probably happen... eventually.

What if I could speed that up?

The Engineering

I've bid an Android port on several projects now and worked out the details.  Here's how it would go.

The core rendering modules of WhirlyGlobe-Maply are largely C++. We would be making heavy use of the NDK on Android to port the rendering engine.  

The first step would be to move more of the rendering modules into pure C++ on iOS. This has the virtue of being easily testable with the current toolkit.

The next step would be a direct port of the rendering engine modules to the Android NDK.  After that we would rewrite the threading and messaging logic in Java for Android as well as the various interface logic to go between Java and the rendering engine.

Lastly, we would rewrite the high level interface in Java. This would correspond to the Component level on iOS. These objects need to be native Java and function in ways Android developers expect, just as the Component on iOS is native Objective-C. 

The Appeal

A lot of companies are interested in an Android port of WhirlyGlobe-Maply.  Some are using the globe, but most want to do custom map display on both platforms.  Mine is probably the best open source toolkit for that and superior to a lot of the commercial solutions.

So, I'm talking to you guys here:
How much would you kick in for an Android port?

Drop me an email and let me know.  If I hit a certain threshold, I'll come back to you for details.

Monday, June 17, 2013

CartoDB Example

I whipped up a guest blog post over at the CartoDB blog.

That's a simple app that queries country outlines from their spatial database service.  Lot of interesting possibilities there, go check it out.

Saturday, June 8, 2013

State Of The Map - San Francisco 2013

I'm giving a talk this year's at State Of The Map (US) in San Francisco.  This is unrelated to the fact that I live in San Francisco, but convenient nonetheless.

The Talk

It's all about vector display on iOS devices using OpenStreetMap data.  Scintillating.

The green is marijuana cultivation.
You can go grab the slides there.

The talk is based on my toolkit, WhirlyGlobe-Maply, unsurprisingly, and an app I built for fetching vector tiles from the US OpenStreetMap server and displaying them.

The App

The app, called osmmobilevectors, is on github and you can clone the repository, build it and put it on your own device.  I mean, you're set up to do that, right?  Of course you are.

Lots of interesting little bits and pieces went into the WhirlyGlobe-Maply toolkit to make this happen.  I'll break it down for all three of my loyal readers next week.

Friday, June 7, 2013

OpenStreetMap Vectors

I've got a talk tomorrow at the State Of the Map US conference in San Francisco.  It's about paging tiled vectors straight form the US OpenStreetMap server.

Naturally, there's new functionality in WhirlyGlobe-Maply to support this stuff.  Here's a teaser.

There are no clouds in California.  Be serious.

That's a base map overlaid with vector roads, which is one of the options I'll be talking about.

I'll put the talk up next week along with a deeper technical explanation.