Skip to content

Commit 862f120

Browse files
github-actions[bot]klokantechsysadminsasaprodribaba
authored
RD-1374: Add GetProjection Getter - Kotlin SDK (#85)
Co-authored-by: klokantechsysadmin <[email protected]> Co-authored-by: sasaprodribaba <[email protected]>
1 parent ccb9fdc commit 862f120

File tree

4 files changed

+48
-6
lines changed

4 files changed

+48
-6
lines changed

MapTilerSDK/src/main/java/com/maptiler/maptilersdk/map/MTMapViewController.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import com.maptiler.maptilersdk.map.options.MTPaddingOptions
3131
import com.maptiler.maptilersdk.map.style.MTStyle
3232
import com.maptiler.maptilersdk.map.types.MTData
3333
import com.maptiler.maptilersdk.map.types.MTPoint
34+
import com.maptiler.maptilersdk.map.types.MTProjectionType
3435
import com.maptiler.maptilersdk.map.workers.navigable.MTNavigable
3536
import com.maptiler.maptilersdk.map.workers.navigable.NavigableWorker
3637
import com.maptiler.maptilersdk.map.workers.zoomable.MTZoomable
@@ -384,6 +385,11 @@ class MTMapViewController(
384385
*/
385386
override suspend fun getCenterElevation(): Double = navigableWorker.getCenterElevation()
386387

388+
/**
389+
* Returns the current map projection type. Defaults to [MTProjectionType.MERCATOR] if unavailable.
390+
*/
391+
suspend fun getProjection(): MTProjectionType = style?.getProjection() ?: MTProjectionType.MERCATOR
392+
387393
/**
388394
* Project coordinates to point on the container.
389395
*/

MapTilerSDK/src/main/java/com/maptiler/maptilersdk/map/style/MTStyle.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -238,9 +238,9 @@ class MTStyle(
238238
fun disableTerrain() = stylableWorker.disableTerrain()
239239

240240
/**
241-
* Gets the current projection type if set.
241+
* Gets the current projection type. Defaults to [MTProjectionType.MERCATOR] when unavailable.
242242
*/
243-
suspend fun getProjection(): MTProjectionType? = stylableWorker.getProjection()
243+
suspend fun getProjection(): MTProjectionType = stylableWorker.getProjection()
244244

245245
// CONTROLS / STYLE HELPERS
246246

MapTilerSDK/src/main/java/com/maptiler/maptilersdk/map/workers/stylable/StylableWorker.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -289,18 +289,18 @@ internal class StylableWorker(
289289
}
290290
}
291291

292-
suspend fun getProjection(): MTProjectionType? {
292+
suspend fun getProjection(): MTProjectionType {
293293
val returnTypeValue = bridge.execute(GetProjection())
294294

295295
return when (returnTypeValue) {
296296
is MTBridgeReturnType.StringValue ->
297297
when (returnTypeValue.value.trim('"')) { // Android webview returns quoted strings
298298
"mercator" -> MTProjectionType.MERCATOR
299299
"globe" -> MTProjectionType.GLOBE
300-
else -> null
300+
else -> MTProjectionType.MERCATOR
301301
}
302-
is MTBridgeReturnType.Null, MTBridgeReturnType.UnsupportedType -> null
303-
else -> null
302+
is MTBridgeReturnType.Null, MTBridgeReturnType.UnsupportedType -> MTProjectionType.MERCATOR
303+
else -> MTProjectionType.MERCATOR
304304
}
305305
}
306306

MapTilerSDK/src/test/java/com/maptiler/maptilersdk/WorkerAndStyleTests.kt

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,14 @@ import com.maptiler.maptilersdk.bridge.MTCommandExecutable
1313
import com.maptiler.maptilersdk.commands.navigation.GetBearing
1414
import com.maptiler.maptilersdk.commands.navigation.GetCenterClampedToGround
1515
import com.maptiler.maptilersdk.commands.navigation.GetCenterElevation
16+
import com.maptiler.maptilersdk.commands.style.GetProjection
1617
import com.maptiler.maptilersdk.map.style.MTMapReferenceStyle
1718
import com.maptiler.maptilersdk.map.style.MTStyle
1819
import com.maptiler.maptilersdk.map.style.MTStyleError
1920
import com.maptiler.maptilersdk.map.style.layer.fill.MTFillLayer
21+
import com.maptiler.maptilersdk.map.types.MTProjectionType
2022
import com.maptiler.maptilersdk.map.workers.navigable.NavigableWorker
23+
import com.maptiler.maptilersdk.map.workers.stylable.StylableWorker
2124
import junit.framework.TestCase.assertTrue
2225
import kotlinx.coroutines.runBlocking
2326
import org.junit.Assert.assertEquals
@@ -95,6 +98,39 @@ class WorkerAndStyleTests {
9598
assertTrue(usedGetCenterElevation)
9699
}
97100

101+
@Test fun stylableWorker_getProjection_UsesGetProjectionCommand() =
102+
runBlocking {
103+
var usedGetProjection = false
104+
val exec =
105+
object : MTCommandExecutable {
106+
override suspend fun execute(command: MTCommand): MTBridgeReturnType {
107+
if (command is GetProjection) {
108+
usedGetProjection = true
109+
}
110+
return MTBridgeReturnType.StringValue("\"globe\"")
111+
}
112+
}
113+
val bridge = MTBridge(exec)
114+
val worker = StylableWorker(bridge, this)
115+
116+
val result = worker.getProjection()
117+
assertTrue(usedGetProjection)
118+
assertEquals(MTProjectionType.GLOBE, result)
119+
}
120+
121+
@Test fun stylableWorker_getProjection_DefaultsToMercatorWhenNull() =
122+
runBlocking {
123+
val exec =
124+
object : MTCommandExecutable {
125+
override suspend fun execute(command: MTCommand): MTBridgeReturnType = MTBridgeReturnType.Null
126+
}
127+
val bridge = MTBridge(exec)
128+
val worker = StylableWorker(bridge, this)
129+
130+
val result = worker.getProjection()
131+
assertEquals(MTProjectionType.MERCATOR, result)
132+
}
133+
98134
@Test fun mtStyle_removeLayer_ThrowsWhenMissing() {
99135
val style = MTStyle(MTMapReferenceStyle.STREETS)
100136
val layer = MTFillLayer("layer-1", "src-1")

0 commit comments

Comments
 (0)