Thanks to visit codestin.com
Credit goes to github.com

Skip to content

adamsochorec/maps-api-analysis

Repository files navigation

Maps API analysis

This comparison evaluates performance, pricing and customization of the most common maps API providers. Tested integrations are either their own native platforms (MapKit JS, Maps JS API and Mapbox GL JS) or the most common open source libraries (Leaflet and MapLibre).

API Pricing Caching Visual Integration
MapKit Fixed fee 2790,00 CZK/YEAR Does not cache two 2D appearances, 3D support MapKit JS
Mapbox 50,000 tile requests per month Caches all of the tiles highly customizable 2D appearance, 3D support Mapbox GL JS
Google Maps 10,000 tile requests per month Caches all of the tiles nine appearances, 3D support Maps JS API
Open Street Map Unlimited Caches all of the tiles basic 2D appearances Leaflet
Mapy 250,000 tile requests per month Caches all of the tiles (Leaflet), Caches most of the tiles (MapLibre) four 2D appearances Leaflet, OpenLayers, MapLibre GL, Cesium JS
Thunderforest 150,000 tile requests per month Caches all of the tiles OpenCycleMap, Transport, Landscape, Outdoors, Atlas, Transport Dark, Spinal Map, Pioneer, Neighbourhood, Mobile Atlas Leaflet, OpenLayers, MapLibre GL

Performance

Note

All APIs were tested on the online version of this project, except MapKit integration, which was evaluated externally. Measuring has been conducted through pagespeed.web.dev. Each integration had separate data and API fetching to mitigate caching between individual measurements.

Used metrics

Metric Description
First Contentful Paint First Contentful Paint marks the time at which the first text or image is painted. Learn more about the First Contentful Paint metric.
Total Blocking Time Sum of all time periods between FCP and Time to Interactive, when task length exceeded 50ms, expressed in milliseconds. Learn more about the Total Blocking Time metric.
Speed Index Speed Index shows how quickly the contents of a page are visibly populated. Learn more about the Speed Index metric.
Largest Contentful Paint Largest Contentful Paint marks the time at which the largest text or image is painted. Learn more about the Largest Contentful Paint metric.

Mobile

API Markers First Contentful Paint Total Blocking Time Speed Index Largest Contentful Paint
$\color{red}{\text{MapKit}}$ Loads after tiles $\color{red}{9.1 \text{ s}}$ $\color{red}{1,380 \text{ ms}}$ $\color{red}{9.1 \text{ s}}$ $\color{red}{15.2 \text{ s}}$
$\color{orange}{\text{Mapbox}}$ Loads before tiles $\color{red}{3.5 \text{ s}}$ $\color{red}{2,130 \text{ ms}}$ $\color{orange}{4.8 \text{ s}}$ $\color{orange}{3.6 \text{ s}}$
$\color{orange}{\text{Google Maps}}$ Loads before tiles $\color{red}{3.5 \text{ s}}$ $\color{green}{50 \text{ ms}}$ $\color{orange}{3.9 \text{ s}}$ $\color{red}{7.1 \text{ s}}$
$\color{orange}{\text{Open Street Map (Leaflet)}}$ Loads parallelly $\color{red}{3.5 \text{ s}}$ $\color{green}{50 \text{ ms}}$ $\color{orange}{3.5 \text{ s}}$ $\color{red}{6.0 \text{ s}}$
$\color{orange}{\text{Mapy (Leaflet)}}$ Loads before tiles $\color{red}{3.4 \text{ s}}$ $\color{green}{40 \text{ ms}}$ $\color{orange}{5.7 \text{ s}}$ $\color{red}{5.2 \text{ s}}$
$\color{orange}{\text{Mapy (MapLibre)}}$ Loads before tiles $\color{red}{5.0 \text{ s}}$ $\color{green}{80 \text{ ms}}$ $\color{orange}{5.0 \text{ s}}$ $\color{red}{5.2 \text{ s}}$
$\color{orange}{\text{Thunderforest (Leaflet)}}$ Loads before tiles $\color{red}{3.5 \text{ s}}$ $\color{green}{40 \text{ ms}}$ $\color{orange}{3.5 \text{ s}}$ $\color{red}{5.2 \text{ s}}$
$\color{orange}{\text{Thunderforest (MapLibre)}}$ Loads before tiles $\color{red}{5.0 \text{ s}}$ $\color{orange}{260 \text{ ms}}$ $\color{orange}{5.0 \text{ s}}$ $\color{red}{5.3 \text{ s}}$

Paint

MapKit
Screenshot 2025-10-31 at 19 23 43
Mapbox
Screenshot 2025-11-01 at 16 52 30
Google Maps
Screenshot 2025-11-01 at 16 52 09
Open Street Map
Screenshot 2025-11-01 at 16 52 00
Mapy (Leaflet)
Screenshot 2025-11-01 at 16 51 50
Mapy (MapLibre)
Screenshot 2025-11-01 at 16 51 41
Thunderforest (Leaflet)
Screenshot 2025-11-01 at 17 14 17
Thunderforest (MapLibre)
Screenshot 2025-11-01 at 16 51 04

Desktop

API Markers First Contentful Paint Total Blocking Time Speed Index Largest Contentful Paint
$\color{orange}{\text{MapKit}}$ Loads after tiles $\color{green}{0.5 \text{ s}}$ $\color{red}{3,440 \text{ ms}}$ $\color{orange}{2.2 \text{ s}}$ $\color{orange}{1.5 \text{ s}}$
$\color{orange}{\text{Mapbox}}$ Loads before tiles $\color{green}{0.7 \text{ s}}$ $\color{red}{2,180 \text{ ms}}$ $\color{orange}{1.9 \text{ s}}$ $\color{green}{1.2 \text{ s}}$
$\color{green}{\text{Google Maps}}$ Loads parallelly $\color{green}{0.7 \text{ s}}$ $\color{green}{60 \text{ ms}}$ $\color{orange}{1.3 \text{ s}}$ $\color{orange}{1.5 \text{ s}}$
$\color{green}{\text{Open Street Map (Leaflet)}}$ Loads parallelly $\color{green}{0.7 \text{ s}}$ $\color{green}{40 \text{ ms}}$ $\color{green}{1.3 \text{ s}}$ $\color{orange}{1.7 \text{ s}}$
$\color{green}{\text{Mapy (Leaflet)}}$ Loads before tiles $\color{green}{0.7 \text{ s}}$ $\color{green}{10 \text{ ms}}$ $\color{green}{1.1 \text{ s}}$ $\color{green}{1.0 \text{ s}}$
$\color{green}{\text{Mapy (MapLibre)}}$ Loads before tiles $\color{green}{0.9 \text{ s}}$ $\color{green}{50 \text{ ms}}$ $\color{green}{1.1 \text{ s}}$ $\color{green}{1.0 \text{ s}}$
$\color{green}{\text{Thunderforest (Leaflet)}}$ Loads almost parallelly $\color{green}{0.7 \text{ s}}$ $\color{green}{50 \text{ ms}}$ $\color{green}{1.1 \text{ s}}$ $\color{orange}{1.3 \text{ s}}$
$\color{green}{\text{Thunderforest (MapLibre)}}$ Loads before tiles $\color{green}{0.9 \text{ s}}$ $\color{green}{50 \text{ ms}}$ $\color{green}{1.2 \text{ s}}$ $\color{green}{1.0 \text{ s}}$

Paint

MapKit
Screenshot 2025-10-31 at 19 26 51
Mapbox
Screenshot 2025-11-01 at 16 58 59
Google Maps
Screenshot 2025-11-01 at 16 58 53
Open Street Map
Screenshot 2025-11-01 at 16 58 47
Mapy (Leaflet)
Screenshot 2025-11-01 at 16 58 40
Mapy (MapLibre)
Screenshot 2025-11-01 at 16 58 33
Thunderforest (Leaflet)
Screenshot 2025-11-01 at 17 14 08
Thunderforest (MapLibre)
Screenshot 2025-11-01 at 16 58 18

Conclusion

Based on comprehensive performance testing and feature analysis, Mapy with Leaflet integration is the optimal solution for Czech market applications. This recommendation is supported by several critical factors:

Performance superiority: Mapy (Leaflet) demonstrates exceptional desktop performance with the lowest Speed Index (1.1s) and Largest Contentful Paint (1.0s), while maintaining competitive mobile metrics. The integration efficiently handles marker rendering before tile loading, ensuring a smooth user experience.

Caching efficiency: Unlike MapKit, which notably lacks caching capabilities, Mapy properly caches all tiles through Leaflet integration, significantly reducing load times and API requests during repeated usage. This represents a substantial performance advantage in real-world scenarios.

Cost-effectiveness: With 250,000 free tile requests per month, Mapy offers the most generous pricing tier among commercial alternatives, surpassing Google Maps (10,000), Mapbox (50,000), and Thunderforest (150,000), while MapKit requires a fixed annual fee regardless of usage.

Market advantages: As the de facto standard mapping platform in Czechia, Mapy provides seamless integration with local features and subsequent directions functionality—a critical capability shared only with Google Maps among the evaluated options. This positions Mapy as both technically sound and strategically aligned with primary market requirements.

While alternatives like Open Street Map offer unlimited requests and Google Maps provides extensive global features, Mapy's combination of strong performance metrics, extensive caching, generous free tier, and Czech market alignment makes it the recommended choice for applications primarily targeting Czech users.

Project Setup

npm install # Install Node
npm run dev # Compile and Hot-Reload for Development
npm run build # Type-Check, Compile and Minify for Production