Adding MapBox As Tile Provider
Closed this issue · 22 comments
I see that OSMDroid currently has explicit support for maps from CloudMade,
Mapquest, OpenCycleMap, and Microsoft but not MapBox. I'm interested in adding
this support and have built a proof of concept app called BikeMapBox that does
so. Please let me know what the team thinks about this possibility.
https://github.com/bleege/BikeMapBox
Thanks!
Brad
Original issue reported on code.google.com by bleege
on 8 Nov 2013 at 4:03
Looks interesting
Original comment by neilboyd
on 9 Nov 2013 at 8:24
- Added labels: Type-Enhancement
- Removed labels: Type-Defect
What would be needed to add this to osmdroid? As far as I can see it's just a
standard TileSource where the URL includes the API key, so I can't see how to
include that generically in osmdroid. But anyone who wants to use it with
osmdroid can do so very easily, as you've done in your sample app.
Original comment by neilboyd
on 10 Nov 2013 at 2:37
Agreed... the Tile Loading portion is pretty straightforward... now that it's
done. I'd been looking on the Web and talking with MapBox engineers about how
to get their Map Tiles natively on Android for a while now but there was no
good information on how to do this to be found from either source. While
building my sample app I saw that OSMDroid already had other providers (e.g.,
CloudmadeTileSource) in the codebase to provide straightforward integration and
thought that other people, especially those new to the OSM world, might benefit
by not having to re-invent the wheel. The MapBoxTileSource definitely could be
further simplified. For example it could be setup to just require the MapBox
Map Id in a constructor. I've also started adding support for MapBox Markers
(Maki) which people might find useful too.
https://github.com/bleege/BikeMapBox/tree/master/src/com/bradleege/markers
Original comment by bleege
on 10 Nov 2013 at 5:11
I could add MapBoxTileSource to osmdroid, but I couldn't add it to the list of
standard providers because it requires a key and as far as I can see there's no
free plan.
Original comment by neilboyd
on 10 Nov 2013 at 8:07
That's great! I'm really excited about being able to contribute.
I updated the MapBoxTileSource this morning to add support for a basic,
intermediate, and fully customizable constructors along with JavaDoc comments.
It should be good enough starting place for most developers.
https://github.com/bleege/BikeMapBox/blob/master/src/com/bradleege/tilesource/Ma
pBoxTileSource.java
I also did some research this morning and found out that MapBox does still
offer Free plans (which is what I'm using). It just requires signing up for an
account to make your maps and get the map key.
https://www.mapbox.com/plans/
Please let me know if there's anything else I can help with!
Brad Leege
Original comment by bleege
on 11 Nov 2013 at 3:47
Looks good. If there's a free plan I can add it to the sample app.
Original comment by neilboyd
on 11 Nov 2013 at 9:14
- Changed state: Accepted
There are a lot of similarities with Bing Maps and so it should be implemented
the same way. Specifically, retrieving the key from the manifest, and being
styleable.
Original comment by neilboyd
on 11 Nov 2013 at 9:42
I've updated the code to retrieve the mapId (aka key) from the manifest file as
suggested. I didn't implement the IStyledTileSource<T> interface as MapBox
appears to only allow styles (Streets, Terrain, Satellite) to be changed via
their Map Editor Web app and not via the API.
Core API
https://www.mapbox.com/developers/api/
How To: Enable Terrain Imagery
https://www.mapbox.com/help/#enabling-terrain-visualization
How To: Enable Satellite Imagery
https://www.mapbox.com/help/#enabling-satellite-imagery
Original comment by bleege
on 12 Nov 2013 at 3:11
I refactored out the code to read the key from the manifest in revision 1386.
You can use that to prevent duplication.
Original comment by neilboyd
on 12 Nov 2013 at 4:36
I just integrated the MapBoxTileSource file into a personal development fork of
OSMDroid and refactored the retrieveKey method to use the new ManifestUtil.
All in all should be good to go. How would you prefer to proceed?
My fork is at:
https://github.com/bleege/OSMDroid
The MapBoxTileSource is here:
https://github.com/bleege/OSMDroid/blob/master/osmdroid-android/src/main/java/or
g/osmdroid/tileprovider/tilesource/MapBoxTileSource.java
Original comment by bleege
on 13 Nov 2013 at 1:55
[deleted comment]
I've included this in revision 1387.
I don't think I should add it to TileSourceFactory etc because of the
limitations of the free plan.
Original comment by neilboyd
on 13 Nov 2013 at 8:58
Awesome! I'm excited that it's been included in OSMDroid! Thank you for
working with me to make this happen.
As for including support with TileSourceFactory and etc, that's totally your
call as a project owner. I'd just say that no matter what TileSource provider
is chosen there's going to be some licensing / terms / limitations that the end
user / developer needs to accept. For example, CloudMade also has a monthly
tile limit and Microsoft has terms of use that need to be agreed to.
Original comment by bleege
on 14 Nov 2013 at 2:09
Bing is already in third-party. I was thinking about doing the same for MapBox,
but in the end just left it where you put it. Cloudmade has a much higher usage
allowance in the free plan which is not likely to be exceeded by the sample app.
Original comment by neilboyd
on 14 Nov 2013 at 6:42
- Changed state: ReadyForTesting
Hi,
What's the need of the mapBoxMapId at MapBoxTileSource's constructors as it is
set only at retrieveMapBoxMapId method ?
Regards.
Original comment by devemu...@gmail.com
on 14 Nov 2013 at 11:00
I removed it in revision 1389
Original comment by neilboyd
on 14 Nov 2013 at 2:03
Ah, I follow you now in regards to the sample app and monthly tile allotment.
That seems reasonable.
Is there anything else that I can be doing to help move the process along?
Original comment by bleege
on 14 Nov 2013 at 3:22
Is there anything else to do?
Original comment by neilboyd
on 14 Nov 2013 at 4:02
I don't think so. I just saw that the issue status got set to ReadyForTesting
and wanted to make sure that you had everything that you needed from me. How
does the project's process work from here to official inclusion in the codebase?
Original comment by bleege
on 14 Nov 2013 at 4:50
It's already in the codebase ;)
Whenever I decide to do another release it'll be in. I pushed a snapshot to
Maven Central just now.
ReadyForTesting basically means it's finished.
Original comment by neilboyd
on 14 Nov 2013 at 8:45
Fantastic! Thanks again for helping make this happen!
Original comment by bleege
on 14 Nov 2013 at 9:35
Original comment by neilboyd
on 21 Jan 2014 at 8:39
- Changed state: Fixed