17. 17www.luxoft.com
Maps.me uses proprietary files with countries. They are coded, so you can’t read through them, but
in the source code you can find parsers.
My app is crashing. I can't download the country file from the server. Also, I can't get the server list,
it's empty.
If you google a little bit, you can find custom files for the Maps.me app, and there are polygons in them
All data is measured by country. You can request to download a country, to disk – country files. You
will have 2 files per country on the disk - map and diff files.
22. 22www.luxoft.com
More features
Runtime style diff
You can update the style on the server,
and all the apps that are using your
style will download and apply the
update during runtime
Custom layers
If you are brave enough, you can define
your custom layers and define the
render strategy for them.
More on ЛУН article on DOU.
Open-source style designer
On github you can find Maputnik. This
is an open-source style creator, so you
can go deeper and customize the
Mapbox-GL and the style creator
simultaneously.
27. 27www.luxoft.com
Mapbox renderer
OpenGL only
The Mapbox renderer uses OpenGL as a rendering
specification, only.
I think it could be because of simplicity and ‘convenience’
because OpenGL is not something new.
Very style-structure oriented
As I will show on the next slides – the style file is the center of
the universe for this application. Only there is it defined how
many layers the application will have, where to grab data for
rendering, and how to render it.
31. 31www.luxoft.com
Maps.me renderer
Have Vulkan support
Some guys spent some time and
created separate classes for Vulkan
specification support. It includes Vulkan
renderer files and data provider files,
because the Vulkan application also
differs from the OpenGL application in
terms of data organization.
Separated from data
Renderer in Maps.me is separated from
data better than in the Mapbox
solution, but it still depends on mwm
files.
32. 32www.luxoft.com
There is a render engine called DrapeEngine. Inside, it encapsulates all classes needed for
rendering (ex. FrontendRenderer, BackendRenderer, TextureManager etc.)
Also you can switch rendering specification usage (OpenGLES2.0, OpenGLES3.0, Vulkan, Metal)
just by changing the ApiVersion parameter on creation. Inside this will create the infrastructure
for supported APIs.