Skip to main content

Release v1.12.0

· 4 min read
Evgen Bodunov
Evgen Bodunov
CEO @ Globus Software

API Refinement, Smarter Tile Loading, and Cross-Platform Consistency

v1.12.0 is all about polish and performance. We've cleaned up coordinate conversion APIs, optimized tile loading to reduce bandwidth waste, and standardized naming across platforms to make your code more maintainable.

TL;DR

  1. Unified screen-to-map conversion API on Android – now uses android.graphics.PointF, eliminating the old MapPoint/Point mix-up
  2. Property clean-up on iOSmapZoommapScale (and heads-up about v1.13 renaming of mapZoomLevel)
  3. Smarter tile pipeline on both platforms – fewer aborts, fewer duplicate downloads, better cache hit-rate
  4. NDK r28.1 & 16 KB page-size support for Android – rebuilt libs and updated CMake configs

What's new

🌍 Cross-platform

Intelligent Tile Loading

We've reimagined how the SDK requests map tiles during pan and zoom gestures. The result? Dramatically reduced bandwidth waste and better cache utilization.

The Problem Before: When users quickly panned or zoomed, the old strategy would fire hundreds of tile requests, only to cancel most of them mid-flight. This wasted bandwidth, CPU cycles, and sometimes led to the wrong tiles being cached.

The v1.12.0 Solution:

AreaDetails
Progressive loadingInstead of requesting every potentially visible tile immediately, v1.12.0 starts with the coarsest visible zoom, then queues deeper detail tiles progressively
Smart cancellationOnly cancels requests that haven't started downloading yet
Opportunistic cachingIf a download has already begun, the SDK completes it and caches the result – even if the viewport has moved
Reduced network churnFewer aborted requests means less wasted bandwidth and more predictable performance

Impact: Apps feel more responsive during rapid map movements, and your users' data plans will thank you.


Consistent Naming Across Platforms

AreaDetails
Terminology alignmentWe're converging on the Android naming scheme: scale = real-world scale (continuous), zoom = discrete zoom level (integer/floor value)
Why it mattersReduces confusion when maintaining cross-platform codebases. The same concept now uses the same name on both iOS and Android.

🤖 Android

Coordinate Conversion API: Now Using the Right Types

One of the most confusing aspects of the old API was using MapPoint for both screen coordinates and map coordinates. This led to bugs and confusion about which coordinate space you were working in.

What Changed:

ChangeNotes
Type safety improvementScreen coordinates now use android.graphics.PointF (the standard Android type). Map coordinates use MapPoint. No more ambiguity.
Method signaturesconvertDisplayToInternal(float x, float y) and convertInternalToDisplay(MapPoint) now have type-safe signatures
Why it mattersEliminates a whole class of coordinate space bugs. The type system now prevents you from accidentally passing screen coords where map coords are expected.

Platform Updates

ChangeNotes
NDK 28.1Pre-built .so files were rebuilt with NDK r28.1 for improved compatibility and performance
16KB page size supportUpdated CMake configs and libs to support Android's upcoming 16KB page size requirement

Minor

  • Added setSurface(surface, w, h, scale) helper (useful for custom Surface routing).
  • destroySurface() is now public.

Migration hints

// 1.11.x
MapPoint geo = renderer.convertDisplayToInternal(new MapPoint(x, y));

// 1.12.0+
MapPoint geo = renderer.convertDisplayToInternal(x, y);

🍏 iOS

Property Naming Cleanup

We're aligning iOS naming with Android to reduce cognitive overhead when working across both platforms.

ChangeNotes
mapZoommapScaleThe floating-point scale property is now called mapScale, matching Android's getMapScale()/setMapScale()
Forward compatibility noticeIn v1.13.0, mapZoomLevel will be renamed to mapZoom (same semantic as Android's mapZoom)
Why this mattersConsistent naming = less context switching. If you maintain both iOS and Android versions, your code will be easier to reason about.

Performance & Features

ChangeNotes
Tile pipeline optimizationSame algorithmic improvements as Android – dramatically fewer cancellations during fast pan/zoom
New propertyAdded isTapZoomInverted property (default = false) for apps that want to invert double-tap zoom behavior

Migration quick-check

// Replace
double scale = mapView.mapZoom; // 1.11.x

// With
double scale = mapView.mapScale; // 1.12.0

Thank you!

Big thanks to everyone who reported issues, tested pre-releases, and sent pull requests. Send feedback to [email protected].