File tree Expand file tree Collapse file tree 6 files changed +62
-0
lines changed
main/java/com/maptiler/maptilersdk
test/java/com/maptiler/maptilersdk Expand file tree Collapse file tree 6 files changed +62
-0
lines changed Original file line number Diff line number Diff line change 1+ /*
2+ * Copyright (c) 2025, MapTiler
3+ * All rights reserved.
4+ * SPDX-License-Identifier: BSD 3-Clause
5+ */
6+
7+ package com.maptiler.maptilersdk.commands.navigation
8+
9+ import com.maptiler.maptilersdk.bridge.MTBridge
10+ import com.maptiler.maptilersdk.bridge.MTCommand
11+
12+ internal class CenterOnIpPoint : MTCommand {
13+ override val isPrimitiveReturnType: Boolean = false
14+
15+ override fun toJS (): String = " ${MTBridge .MAP_OBJECT } .centerOnIpPoint();"
16+ }
Original file line number Diff line number Diff line change @@ -350,6 +350,11 @@ class MTMapViewController(
350350 */
351351 override fun fitToIpBounds () = navigableWorker.fitToIpBounds()
352352
353+ /* *
354+ * Centers the map on the coarse location inferred from the device's public IP address.
355+ */
356+ override fun centerOnIpPoint () = navigableWorker.centerOnIpPoint()
357+
353358 /* *
354359 * Returns the map's current bearing.
355360 */
Original file line number Diff line number Diff line change @@ -78,6 +78,11 @@ interface MTNavigable {
7878 */
7979 fun fitToIpBounds ()
8080
81+ /* *
82+ * Centers the map on the visitor's location inferred from their public IP address.
83+ */
84+ fun centerOnIpPoint ()
85+
8186 /* *
8287 * Returns the map's current bearing.
8388 */
Original file line number Diff line number Diff line change @@ -12,6 +12,7 @@ import com.maptiler.maptilersdk.bridge.MTBridgeReturnType.DoubleValue
1212import com.maptiler.maptilersdk.bridge.MTBridgeReturnType.Null
1313import com.maptiler.maptilersdk.bridge.MTBridgeReturnType.StringValue
1414import com.maptiler.maptilersdk.commands.navigation.AreTilesLoaded
15+ import com.maptiler.maptilersdk.commands.navigation.CenterOnIpPoint
1516import com.maptiler.maptilersdk.commands.navigation.EaseTo
1617import com.maptiler.maptilersdk.commands.navigation.FitBounds
1718import com.maptiler.maptilersdk.commands.navigation.FitToIpBounds
@@ -50,6 +51,7 @@ import com.maptiler.maptilersdk.map.options.MTPaddingOptions
5051import com.maptiler.maptilersdk.map.types.MTBounds
5152import com.maptiler.maptilersdk.map.types.MTPoint
5253import kotlinx.coroutines.CoroutineScope
54+ import kotlinx.coroutines.CoroutineStart
5355import kotlinx.coroutines.launch
5456import kotlinx.serialization.decodeFromString
5557
@@ -131,6 +133,14 @@ internal class NavigableWorker(
131133 }
132134 }
133135
136+ override fun centerOnIpPoint () {
137+ scope.launch(start = CoroutineStart .UNDISPATCHED ) {
138+ bridge.execute(
139+ CenterOnIpPoint (),
140+ )
141+ }
142+ }
143+
134144 override suspend fun getMaxBounds (): MTBounds ? {
135145 val returnTypeValue =
136146 bridge.execute(
Original file line number Diff line number Diff line change @@ -11,6 +11,7 @@ import com.maptiler.maptilersdk.bridge.MTBridgeReturnType
1111import com.maptiler.maptilersdk.bridge.MTCommand
1212import com.maptiler.maptilersdk.bridge.MTCommandExecutable
1313import com.maptiler.maptilersdk.commands.navigation.AreTilesLoaded
14+ import com.maptiler.maptilersdk.commands.navigation.CenterOnIpPoint
1415import com.maptiler.maptilersdk.commands.navigation.GetBearing
1516import com.maptiler.maptilersdk.commands.navigation.GetCenterClampedToGround
1617import com.maptiler.maptilersdk.commands.navigation.GetCenterElevation
@@ -48,6 +49,23 @@ class WorkerAndStyleTests {
4849 assertTrue(usedGetBearing)
4950 }
5051
52+ @Test fun navigableWorker_centerOnIpPoint_UsesCenterOnIpPointCommand () =
53+ runBlocking {
54+ var usedCenterOnIpPoint = false
55+ val exec =
56+ object : MTCommandExecutable {
57+ override suspend fun execute (command : MTCommand ): MTBridgeReturnType {
58+ if (command is CenterOnIpPoint ) usedCenterOnIpPoint = true
59+ return MTBridgeReturnType .Null
60+ }
61+ }
62+
63+ val bridge = MTBridge (exec)
64+ val worker = NavigableWorker (bridge, this )
65+ worker.centerOnIpPoint()
66+ assertTrue(usedCenterOnIpPoint)
67+ }
68+
5169 @Test fun navigableWorker_getCenterClampedToGround_ParsesPrimitiveReturnTypes () =
5270 runBlocking {
5371 val executedCommands = mutableListOf<MTCommand >()
Original file line number Diff line number Diff line change @@ -48,6 +48,14 @@ class BoundsCommandsTest {
4848 assertTrue(! command.isPrimitiveReturnType)
4949 }
5050
51+ @Test
52+ fun `centerOnIpPoint emits expected invocation` () {
53+ val command = CenterOnIpPoint ()
54+
55+ assertEquals(" map.centerOnIpPoint();" , command.toJS())
56+ assertTrue(! command.isPrimitiveReturnType)
57+ }
58+
5159 @Test
5260 fun `getBounds uses primitive return` () {
5361 val command = GetBounds ()
You can’t perform that action at this time.
0 commit comments