react-native-google-maps-plus 1.7.0-dev.9 → 1.8.0-dev.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/build.gradle +1 -1
- package/android/gradle.properties +2 -1
- package/android/src/main/java/com/rngooglemapsplus/GoogleMapsViewImpl.kt +124 -128
- package/android/src/main/java/com/rngooglemapsplus/MapCircleBuilder.kt +2 -3
- package/android/src/main/java/com/rngooglemapsplus/MapMarkerBuilder.kt +83 -53
- package/android/src/main/java/com/rngooglemapsplus/MapPolygonBuilder.kt +6 -23
- package/android/src/main/java/com/rngooglemapsplus/MapPolylineBuilder.kt.kt +12 -39
- package/android/src/main/java/com/rngooglemapsplus/RNGoogleMapsPlusView.kt +34 -16
- package/android/src/main/java/com/rngooglemapsplus/extensions/BitmapExtension.kt +35 -0
- package/android/src/main/java/com/rngooglemapsplus/extensions/CameraPositionExtension.kt +3 -2
- package/android/src/main/java/com/rngooglemapsplus/extensions/LatLngBoundsExtension.kt +31 -0
- package/android/src/main/java/com/rngooglemapsplus/extensions/MapObjectTagExtensions.kt +84 -0
- package/android/src/main/java/com/rngooglemapsplus/extensions/RNLineCapTypeExtension.kt +14 -0
- package/android/src/main/java/com/rngooglemapsplus/extensions/RNLineJoinTypeExtension.kt +12 -0
- package/android/src/main/java/com/rngooglemapsplus/extensions/RNMapCircleExtension.kt +7 -1
- package/android/src/main/java/com/rngooglemapsplus/extensions/RNMarkerExtension.kt +54 -17
- package/android/src/main/java/com/rngooglemapsplus/extensions/RNPolygonExtension.kt +31 -1
- package/android/src/main/java/com/rngooglemapsplus/extensions/RNPolylineExtension.kt +6 -1
- package/ios/GoogleMapViewImpl.swift +89 -69
- package/ios/LocationHandler.swift +3 -1
- package/ios/MapCircleBuilder.swift +2 -3
- package/ios/MapHelper.swift +3 -5
- package/ios/MapMarkerBuilder.swift +147 -91
- package/ios/MapPolygonBuilder.swift +6 -41
- package/ios/MapPolylineBuilder.swift +2 -10
- package/ios/RNGoogleMapsPlusView.swift +49 -33
- package/ios/extensions/GMSCameraPosition+Extension.swift +2 -2
- package/ios/extensions/MapObjectTag+Extension.swift +93 -0
- package/ios/extensions/RNCircle+Extension.swift +14 -5
- package/ios/extensions/RNLatLng+Extension.swift +11 -0
- package/ios/extensions/RNLineCapType+Extension.swift +10 -0
- package/ios/extensions/RNLineJoinType+Extension.swift +11 -0
- package/ios/extensions/RNMarker+Extension.swift +43 -12
- package/ios/extensions/RNPolygon+Extension.swift.swift +50 -21
- package/ios/extensions/RNPolyline+Extension.swift.swift +15 -26
- package/ios/extensions/SVGKImage+Extension.swift +22 -0
- package/ios/extensions/UIImage+Extension.swift +45 -0
- package/lib/module/types.js.map +1 -1
- package/lib/typescript/src/RNGoogleMapsPlusView.nitro.d.ts +17 -15
- package/lib/typescript/src/RNGoogleMapsPlusView.nitro.d.ts.map +1 -1
- package/lib/typescript/src/types.d.ts +8 -1
- package/lib/typescript/src/types.d.ts.map +1 -1
- package/nitrogen/generated/android/RNGoogleMapsPlusOnLoad.cpp +8 -8
- package/nitrogen/generated/android/c++/{JFunc_void_RNRegion_RNCamera.hpp → JFunc_void_RNRegion_RNCameraChange.hpp} +21 -22
- package/nitrogen/generated/android/c++/JFunc_void_RNRegion_RNCameraChange_bool.hpp +82 -0
- package/nitrogen/generated/android/c++/JFunc_void_std__string.hpp +75 -0
- package/nitrogen/generated/android/c++/JFunc_void_std__string_RNLatLng.hpp +77 -0
- package/nitrogen/generated/android/c++/JHybridRNGoogleMapsPlusViewSpec.cpp +142 -130
- package/nitrogen/generated/android/c++/JHybridRNGoogleMapsPlusViewSpec.hpp +30 -28
- package/nitrogen/generated/android/c++/JRNCameraChange.hpp +70 -0
- package/nitrogen/generated/android/c++/JRNInitialProps.hpp +7 -3
- package/nitrogen/generated/android/c++/JRNMarker.hpp +7 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/{Func_void_RNRegion_RNCamera.kt → Func_void_RNRegion_RNCameraChange.kt} +9 -9
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/{Func_void_RNRegion_RNCamera_bool.kt → Func_void_RNRegion_RNCameraChange_bool.kt} +9 -9
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/{Func_void_std__optional_std__string_.kt → Func_void_std__string.kt} +12 -12
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/{Func_void_std__optional_std__string__RNLatLng.kt → Func_void_std__string_RNLatLng.kt} +12 -12
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/HybridRNGoogleMapsPlusViewSpec.kt +50 -42
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/RNCameraChange.kt +46 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/RNInitialProps.kt +6 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/RNMarker.kt +6 -6
- package/nitrogen/generated/ios/RNGoogleMapsPlus-Swift-Cxx-Bridge.cpp +24 -16
- package/nitrogen/generated/ios/RNGoogleMapsPlus-Swift-Cxx-Bridge.hpp +97 -72
- package/nitrogen/generated/ios/RNGoogleMapsPlus-Swift-Cxx-Umbrella.hpp +3 -0
- package/nitrogen/generated/ios/c++/HybridRNGoogleMapsPlusViewSpecSwift.hpp +43 -28
- package/nitrogen/generated/ios/swift/{Func_void_RNRegion_RNCamera.swift → Func_void_RNRegion_RNCameraChange.swift} +10 -10
- package/nitrogen/generated/ios/swift/{Func_void_RNRegion_RNCamera_bool.swift → Func_void_RNRegion_RNCameraChange_bool.swift} +10 -10
- package/nitrogen/generated/ios/swift/Func_void_std__optional_std__string_.swift +6 -6
- package/nitrogen/generated/ios/swift/Func_void_std__string.swift +47 -0
- package/nitrogen/generated/ios/swift/Func_void_std__string_RNLatLng.swift +47 -0
- package/nitrogen/generated/ios/swift/HybridRNGoogleMapsPlusViewSpec.swift +16 -14
- package/nitrogen/generated/ios/swift/HybridRNGoogleMapsPlusViewSpec_cxx.swift +186 -224
- package/nitrogen/generated/ios/swift/RNCameraChange.swift +68 -0
- package/nitrogen/generated/ios/swift/RNInitialProps.swift +31 -1
- package/nitrogen/generated/ios/swift/RNMarker.swift +24 -31
- package/nitrogen/generated/shared/c++/HybridRNGoogleMapsPlusViewSpec.cpp +2 -0
- package/nitrogen/generated/shared/c++/HybridRNGoogleMapsPlusViewSpec.hpp +36 -31
- package/nitrogen/generated/shared/c++/RNCameraChange.hpp +88 -0
- package/nitrogen/generated/shared/c++/RNInitialProps.hpp +6 -2
- package/nitrogen/generated/shared/c++/RNMarker.hpp +6 -6
- package/nitrogen/generated/shared/c++/views/HybridRNGoogleMapsPlusViewComponent.cpp +28 -28
- package/nitrogen/generated/shared/c++/views/HybridRNGoogleMapsPlusViewComponent.hpp +15 -15
- package/package.json +1 -1
- package/src/RNGoogleMapsPlusView.nitro.ts +19 -14
- package/src/types.ts +9 -1
- package/nitrogen/generated/android/c++/JFunc_void_RNRegion_RNCamera_bool.hpp +0 -83
- package/nitrogen/generated/android/c++/JFunc_void_std__optional_std__string_.hpp +0 -76
- package/nitrogen/generated/android/c++/JFunc_void_std__optional_std__string__RNLatLng.hpp +0 -78
- package/nitrogen/generated/ios/swift/Func_void_std__optional_std__string__RNLatLng.swift +0 -54
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
package com.rngooglemapsplus.extensions
|
|
2
|
+
|
|
3
|
+
import com.google.android.gms.maps.model.ButtCap
|
|
4
|
+
import com.google.android.gms.maps.model.Cap
|
|
5
|
+
import com.google.android.gms.maps.model.RoundCap
|
|
6
|
+
import com.google.android.gms.maps.model.SquareCap
|
|
7
|
+
import com.rngooglemapsplus.RNLineCapType
|
|
8
|
+
|
|
9
|
+
fun RNLineCapType?.toMapLineCap(): Cap =
|
|
10
|
+
when (this) {
|
|
11
|
+
RNLineCapType.ROUND -> RoundCap()
|
|
12
|
+
RNLineCapType.SQUARE -> SquareCap()
|
|
13
|
+
else -> ButtCap()
|
|
14
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
package com.rngooglemapsplus.extensions
|
|
2
|
+
|
|
3
|
+
import com.google.android.gms.maps.model.JointType
|
|
4
|
+
import com.rngooglemapsplus.RNLineJoinType
|
|
5
|
+
|
|
6
|
+
fun RNLineJoinType?.toMapJointType(): Int =
|
|
7
|
+
when (this) {
|
|
8
|
+
RNLineJoinType.ROUND -> JointType.ROUND
|
|
9
|
+
RNLineJoinType.BEVEL -> JointType.BEVEL
|
|
10
|
+
RNLineJoinType.MITER -> JointType.DEFAULT
|
|
11
|
+
null -> JointType.DEFAULT
|
|
12
|
+
}
|
|
@@ -3,12 +3,18 @@ package com.rngooglemapsplus.extensions
|
|
|
3
3
|
import com.rngooglemapsplus.RNCircle
|
|
4
4
|
|
|
5
5
|
fun RNCircle.circleEquals(b: RNCircle): Boolean {
|
|
6
|
+
if (!centerEquals(b)) return false
|
|
6
7
|
if (zIndex != b.zIndex) return false
|
|
7
8
|
if (pressable != b.pressable) return false
|
|
8
|
-
if (center != b.center) return false
|
|
9
9
|
if (radius != b.radius) return false
|
|
10
10
|
if (strokeWidth != b.strokeWidth) return false
|
|
11
11
|
if (strokeColor != b.strokeColor) return false
|
|
12
12
|
if (fillColor != b.fillColor) return false
|
|
13
13
|
return true
|
|
14
14
|
}
|
|
15
|
+
|
|
16
|
+
fun RNCircle.centerEquals(b: RNCircle): Boolean {
|
|
17
|
+
if (center.latitude != b.center.latitude) return false
|
|
18
|
+
if (center.longitude != b.center.longitude) return false
|
|
19
|
+
return true
|
|
20
|
+
}
|
|
@@ -2,24 +2,61 @@ package com.rngooglemapsplus.extensions
|
|
|
2
2
|
|
|
3
3
|
import com.rngooglemapsplus.RNMarker
|
|
4
4
|
|
|
5
|
-
fun RNMarker.markerEquals(b: RNMarker): Boolean
|
|
6
|
-
id
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
5
|
+
fun RNMarker.markerEquals(b: RNMarker): Boolean {
|
|
6
|
+
if (id != b.id) return false
|
|
7
|
+
if (zIndex != b.zIndex) return false
|
|
8
|
+
if (!coordinatesEquals(b)) return false
|
|
9
|
+
if (!anchorEquals(b)) return false
|
|
10
|
+
if (!infoWindowAnchorEquals(b)) return false
|
|
11
|
+
if (title != b.title) return false
|
|
12
|
+
if (snippet != b.snippet) return false
|
|
13
|
+
if (opacity != b.opacity) return false
|
|
14
|
+
if (flat != b.flat) return false
|
|
15
|
+
if (draggable != b.draggable) return false
|
|
16
|
+
if (rotation != b.rotation) return false
|
|
17
|
+
if (!markerInfoWindowStyleEquals(b)) return false
|
|
18
|
+
if (!markerStyleEquals(b)) return false
|
|
19
|
+
|
|
20
|
+
return true
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
fun RNMarker.coordinatesEquals(b: RNMarker): Boolean {
|
|
24
|
+
if (coordinate.latitude != b.coordinate.latitude) return false
|
|
25
|
+
if (coordinate.longitude != b.coordinate.longitude) return false
|
|
26
|
+
return true
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
fun RNMarker.anchorEquals(b: RNMarker): Boolean {
|
|
30
|
+
if (anchor?.x != b.anchor?.x) return false
|
|
31
|
+
if (anchor?.y != b.anchor?.y) return false
|
|
32
|
+
return true
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
fun RNMarker.infoWindowAnchorEquals(b: RNMarker): Boolean {
|
|
36
|
+
if (infoWindowAnchor?.x != b.infoWindowAnchor?.x) return false
|
|
37
|
+
if (infoWindowAnchor?.y != b.infoWindowAnchor?.y) return false
|
|
38
|
+
return true
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
fun RNMarker.markerInfoWindowStyleEquals(b: RNMarker): Boolean {
|
|
42
|
+
if (infoWindowIconSvg?.width != b.infoWindowIconSvg?.width) return false
|
|
43
|
+
if (infoWindowIconSvg?.height != b.infoWindowIconSvg?.height) return false
|
|
44
|
+
if (infoWindowIconSvg?.svgString != b.infoWindowIconSvg?.svgString) return false
|
|
45
|
+
|
|
46
|
+
return true
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
fun RNMarker.markerStyleEquals(b: RNMarker): Boolean {
|
|
50
|
+
if (iconSvg?.width != b.iconSvg?.width) return false
|
|
51
|
+
if (iconSvg?.height != b.iconSvg?.height) return false
|
|
52
|
+
if (iconSvg?.svgString != b.iconSvg?.svgString) return false
|
|
53
|
+
|
|
54
|
+
return true
|
|
55
|
+
}
|
|
21
56
|
|
|
22
57
|
fun RNMarker.styleHash(): Int =
|
|
23
58
|
arrayOf<Any?>(
|
|
24
|
-
iconSvg,
|
|
59
|
+
iconSvg?.width,
|
|
60
|
+
iconSvg?.height,
|
|
61
|
+
iconSvg?.svgString,
|
|
25
62
|
).contentHashCode()
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
package com.rngooglemapsplus.extensions
|
|
2
2
|
|
|
3
|
+
import com.google.android.gms.maps.model.LatLng
|
|
3
4
|
import com.rngooglemapsplus.RNPolygon
|
|
5
|
+
import com.rngooglemapsplus.RNPolygonHole
|
|
4
6
|
|
|
5
7
|
fun RNPolygon.polygonEquals(b: RNPolygon): Boolean {
|
|
6
8
|
if (zIndex != b.zIndex) return false
|
|
@@ -9,7 +11,12 @@ fun RNPolygon.polygonEquals(b: RNPolygon): Boolean {
|
|
|
9
11
|
if (fillColor != b.fillColor) return false
|
|
10
12
|
if (strokeColor != b.strokeColor) return false
|
|
11
13
|
if (geodesic != b.geodesic) return false
|
|
12
|
-
if (!
|
|
14
|
+
if (!coordinatesEquals(b)) return false
|
|
15
|
+
if (!holesEquals(b)) return false
|
|
16
|
+
return true
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
fun RNPolygon.coordinatesEquals(b: RNPolygon): Boolean {
|
|
13
20
|
val ac = coordinates
|
|
14
21
|
val bc = b.coordinates
|
|
15
22
|
if (ac.size != bc.size) return false
|
|
@@ -20,3 +27,26 @@ fun RNPolygon.polygonEquals(b: RNPolygon): Boolean {
|
|
|
20
27
|
}
|
|
21
28
|
return true
|
|
22
29
|
}
|
|
30
|
+
|
|
31
|
+
fun RNPolygon.holesEquals(b: RNPolygon): Boolean {
|
|
32
|
+
if (holes?.size != b.holes?.size) return false
|
|
33
|
+
if (holes != null && b.holes != null) {
|
|
34
|
+
for (i in holes.indices) {
|
|
35
|
+
val ah = holes[i]
|
|
36
|
+
val bh = b.holes[i]
|
|
37
|
+
|
|
38
|
+
if (ah.coordinates.size != bh.coordinates.size) return false
|
|
39
|
+
for (j in ah.coordinates.indices) {
|
|
40
|
+
val p = ah.coordinates[j]
|
|
41
|
+
val q = bh.coordinates[j]
|
|
42
|
+
if (p.latitude != q.latitude || p.longitude != q.longitude) return false
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return true
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
fun Array<RNPolygonHole>.toMapsPolygonHoles(): List<List<LatLng>> =
|
|
50
|
+
this.map { hole ->
|
|
51
|
+
hole.coordinates.map { it.toLatLng() }
|
|
52
|
+
}
|
|
@@ -5,11 +5,16 @@ import com.rngooglemapsplus.RNPolyline
|
|
|
5
5
|
fun RNPolyline.polylineEquals(b: RNPolyline): Boolean {
|
|
6
6
|
if (zIndex != b.zIndex) return false
|
|
7
7
|
if (pressable != b.pressable) return false
|
|
8
|
-
if (
|
|
8
|
+
if (width != b.width) return false
|
|
9
9
|
if (lineCap != b.lineCap) return false
|
|
10
10
|
if (lineJoin != b.lineJoin) return false
|
|
11
11
|
if (geodesic != b.geodesic) return false
|
|
12
12
|
if (color != b.color) return false
|
|
13
|
+
if (!coordinatesEquals(b)) return false
|
|
14
|
+
return true
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
fun RNPolyline.coordinatesEquals(b: RNPolyline): Boolean {
|
|
13
18
|
val ac = coordinates
|
|
14
19
|
val bc = b.coordinates
|
|
15
20
|
if (ac.size != bc.size) return false
|
|
@@ -261,29 +261,48 @@ GMSIndoorDisplayDelegate {
|
|
|
261
261
|
|
|
262
262
|
var onMapError: ((RNMapErrorCode) -> Void)?
|
|
263
263
|
var onMapReady: ((Bool) -> Void)?
|
|
264
|
-
var onMapLoaded: ((RNRegion,
|
|
264
|
+
var onMapLoaded: ((RNRegion, RNCameraChange) -> Void)?
|
|
265
265
|
var onLocationUpdate: ((RNLocation) -> Void)?
|
|
266
266
|
var onLocationError: ((_ error: RNLocationErrorCode) -> Void)?
|
|
267
267
|
var onMapPress: ((RNLatLng) -> Void)?
|
|
268
268
|
var onMapLongPress: ((RNLatLng) -> Void)?
|
|
269
269
|
var onPoiPress: ((String, String, RNLatLng) -> Void)?
|
|
270
|
-
var onMarkerPress: ((String
|
|
271
|
-
var onPolylinePress: ((String
|
|
272
|
-
var onPolygonPress: ((String
|
|
273
|
-
var onCirclePress: ((String
|
|
274
|
-
var onMarkerDragStart: ((String
|
|
275
|
-
var onMarkerDrag: ((String
|
|
276
|
-
var onMarkerDragEnd: ((String
|
|
270
|
+
var onMarkerPress: ((String) -> Void)?
|
|
271
|
+
var onPolylinePress: ((String) -> Void)?
|
|
272
|
+
var onPolygonPress: ((String) -> Void)?
|
|
273
|
+
var onCirclePress: ((String) -> Void)?
|
|
274
|
+
var onMarkerDragStart: ((String, RNLatLng) -> Void)?
|
|
275
|
+
var onMarkerDrag: ((String, RNLatLng) -> Void)?
|
|
276
|
+
var onMarkerDragEnd: ((String, RNLatLng) -> Void)?
|
|
277
277
|
var onIndoorBuildingFocused: ((RNIndoorBuilding) -> Void)?
|
|
278
278
|
var onIndoorLevelActivated: ((RNIndoorLevel) -> Void)?
|
|
279
|
-
var onInfoWindowPress: ((String
|
|
280
|
-
var onInfoWindowClose: ((String
|
|
281
|
-
var onInfoWindowLongPress: ((String
|
|
279
|
+
var onInfoWindowPress: ((String) -> Void)?
|
|
280
|
+
var onInfoWindowClose: ((String) -> Void)?
|
|
281
|
+
var onInfoWindowLongPress: ((String) -> Void)?
|
|
282
282
|
var onMyLocationPress: ((RNLocation) -> Void)?
|
|
283
283
|
var onMyLocationButtonPress: ((Bool) -> Void)?
|
|
284
|
-
var onCameraChangeStart: ((RNRegion,
|
|
285
|
-
var onCameraChange: ((RNRegion,
|
|
286
|
-
var onCameraChangeComplete: ((RNRegion,
|
|
284
|
+
var onCameraChangeStart: ((RNRegion, RNCameraChange, Bool) -> Void)?
|
|
285
|
+
var onCameraChange: ((RNRegion, RNCameraChange, Bool) -> Void)?
|
|
286
|
+
var onCameraChangeComplete: ((RNRegion, RNCameraChange, Bool) -> Void)?
|
|
287
|
+
|
|
288
|
+
@MainActor
|
|
289
|
+
func showMarkerInfoWindow(id: String) {
|
|
290
|
+
onMain {
|
|
291
|
+
guard let marker = self.markersById[id] else { return }
|
|
292
|
+
self.mapView?.selectedMarker = nil
|
|
293
|
+
self.mapView?.selectedMarker = marker
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
@MainActor
|
|
298
|
+
func hideMarkerInfoWindow(id: String) {
|
|
299
|
+
onMain {
|
|
300
|
+
guard let marker = self.markersById[id] else { return }
|
|
301
|
+
if self.mapView?.selectedMarker == marker {
|
|
302
|
+
self.mapView?.selectedMarker = nil
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
}
|
|
287
306
|
|
|
288
307
|
@MainActor
|
|
289
308
|
func setCamera(camera: GMSCameraPosition, animated: Bool, durationMs: Double) {
|
|
@@ -380,42 +399,16 @@ GMSIndoorDisplayDelegate {
|
|
|
380
399
|
mapView.layer.render(in: ctx.cgContext)
|
|
381
400
|
}
|
|
382
401
|
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
let data: Data?
|
|
393
|
-
switch imageFormat {
|
|
394
|
-
case .jpeg:
|
|
395
|
-
data = finalImage.jpegData(compressionQuality: quality)
|
|
396
|
-
case .png:
|
|
397
|
-
data = finalImage.pngData()
|
|
398
|
-
}
|
|
399
|
-
|
|
400
|
-
guard let imageData = data else {
|
|
401
|
-
promise.resolve(withResult: nil)
|
|
402
|
-
return
|
|
403
|
-
}
|
|
404
|
-
|
|
405
|
-
if resultIsFile {
|
|
406
|
-
let filename =
|
|
407
|
-
"map_snapshot_\(Int(Date().timeIntervalSince1970)).\(format)"
|
|
408
|
-
let fileURL = URL(fileURLWithPath: NSTemporaryDirectory())
|
|
409
|
-
.appendingPathComponent(filename)
|
|
410
|
-
do {
|
|
411
|
-
try imageData.write(to: fileURL)
|
|
412
|
-
promise.resolve(withResult: fileURL.path)
|
|
413
|
-
} catch {
|
|
414
|
-
promise.resolve(withResult: nil)
|
|
415
|
-
}
|
|
402
|
+
if let result = image.encode(
|
|
403
|
+
targetSize: size,
|
|
404
|
+
format: format,
|
|
405
|
+
imageFormat: imageFormat,
|
|
406
|
+
quality: quality,
|
|
407
|
+
resultIsFile: resultIsFile
|
|
408
|
+
) {
|
|
409
|
+
promise.resolve(withResult: result)
|
|
416
410
|
} else {
|
|
417
|
-
|
|
418
|
-
promise.resolve(withResult: "data:image/\(format);base64,\(base64)")
|
|
411
|
+
promise.resolve(withResult: nil)
|
|
419
412
|
}
|
|
420
413
|
}
|
|
421
414
|
|
|
@@ -434,19 +427,27 @@ GMSIndoorDisplayDelegate {
|
|
|
434
427
|
|
|
435
428
|
@MainActor
|
|
436
429
|
private func addMarkerInternal(id: String, marker: GMSMarker) {
|
|
437
|
-
marker.userData = id
|
|
438
430
|
marker.map = mapView
|
|
439
431
|
markersById[id] = marker
|
|
440
432
|
}
|
|
441
433
|
|
|
442
434
|
@MainActor
|
|
443
435
|
func updateMarker(id: String, block: @escaping (GMSMarker) -> Void) {
|
|
444
|
-
markersById[id].map {
|
|
436
|
+
markersById[id].map {
|
|
437
|
+
block($0)
|
|
438
|
+
if let mapView, mapView.selectedMarker == $0 {
|
|
439
|
+
mapView.selectedMarker = nil
|
|
440
|
+
mapView.selectedMarker = $0
|
|
441
|
+
}
|
|
442
|
+
}
|
|
445
443
|
}
|
|
446
444
|
|
|
447
445
|
@MainActor
|
|
448
446
|
func removeMarker(id: String) {
|
|
449
|
-
markersById.removeValue(forKey: id).map {
|
|
447
|
+
markersById.removeValue(forKey: id).map {
|
|
448
|
+
$0.icon = nil
|
|
449
|
+
$0.map = nil
|
|
450
|
+
}
|
|
450
451
|
}
|
|
451
452
|
|
|
452
453
|
@MainActor
|
|
@@ -468,8 +469,8 @@ GMSIndoorDisplayDelegate {
|
|
|
468
469
|
|
|
469
470
|
@MainActor
|
|
470
471
|
private func addPolylineInternal(id: String, polyline: GMSPolyline) {
|
|
472
|
+
polyline.tagData = PolylineTag(id: id)
|
|
471
473
|
polyline.map = mapView
|
|
472
|
-
polyline.userData = id
|
|
473
474
|
polylinesById[id] = polyline
|
|
474
475
|
}
|
|
475
476
|
|
|
@@ -502,8 +503,8 @@ GMSIndoorDisplayDelegate {
|
|
|
502
503
|
|
|
503
504
|
@MainActor
|
|
504
505
|
private func addPolygonInternal(id: String, polygon: GMSPolygon) {
|
|
506
|
+
polygon.tagData = PolygonTag(id: id)
|
|
505
507
|
polygon.map = mapView
|
|
506
|
-
polygon.userData = id
|
|
507
508
|
polygonsById[id] = polygon
|
|
508
509
|
}
|
|
509
510
|
|
|
@@ -536,8 +537,8 @@ GMSIndoorDisplayDelegate {
|
|
|
536
537
|
|
|
537
538
|
@MainActor
|
|
538
539
|
private func addCircleInternal(id: String, circle: GMSCircle) {
|
|
540
|
+
circle.tagData = CircleTag(id: id)
|
|
539
541
|
circle.map = mapView
|
|
540
|
-
circle.userData = id
|
|
541
542
|
circlesById[id] = circle
|
|
542
543
|
}
|
|
543
544
|
|
|
@@ -576,7 +577,10 @@ GMSIndoorDisplayDelegate {
|
|
|
576
577
|
|
|
577
578
|
@MainActor
|
|
578
579
|
func removeHeatmap(id: String) {
|
|
579
|
-
heatmapsById.removeValue(forKey: id).map {
|
|
580
|
+
heatmapsById.removeValue(forKey: id).map {
|
|
581
|
+
$0.clearTileCache()
|
|
582
|
+
$0.map = nil
|
|
583
|
+
}
|
|
580
584
|
}
|
|
581
585
|
|
|
582
586
|
@MainActor
|
|
@@ -610,6 +614,7 @@ GMSIndoorDisplayDelegate {
|
|
|
610
614
|
geometries: parser.placemarks
|
|
611
615
|
)
|
|
612
616
|
renderer.render()
|
|
617
|
+
kmlLayerById[id] = renderer
|
|
613
618
|
}
|
|
614
619
|
}
|
|
615
620
|
|
|
@@ -641,16 +646,23 @@ GMSIndoorDisplayDelegate {
|
|
|
641
646
|
urlTileOverlay: GMSURLTileLayer
|
|
642
647
|
) {
|
|
643
648
|
urlTileOverlay.map = mapView
|
|
649
|
+
urlTileOverlays[id] = urlTileOverlay
|
|
644
650
|
}
|
|
645
651
|
|
|
646
652
|
@MainActor
|
|
647
653
|
func removeUrlTileOverlay(id: String) {
|
|
648
|
-
urlTileOverlays.removeValue(forKey: id).map {
|
|
654
|
+
urlTileOverlays.removeValue(forKey: id).map {
|
|
655
|
+
$0.clearTileCache()
|
|
656
|
+
$0.map = nil
|
|
657
|
+
}
|
|
649
658
|
}
|
|
650
659
|
|
|
651
660
|
@MainActor
|
|
652
661
|
func clearUrlTileOverlay() {
|
|
653
|
-
urlTileOverlays.values.forEach {
|
|
662
|
+
urlTileOverlays.values.forEach {
|
|
663
|
+
$0.clearTileCache()
|
|
664
|
+
$0.map = nil
|
|
665
|
+
}
|
|
654
666
|
urlTileOverlays.removeAll()
|
|
655
667
|
pendingUrlTileOverlays.removeAll()
|
|
656
668
|
}
|
|
@@ -778,8 +790,7 @@ GMSIndoorDisplayDelegate {
|
|
|
778
790
|
|
|
779
791
|
func mapView(_ mapView: GMSMapView, didTap marker: GMSMarker) -> Bool {
|
|
780
792
|
onMain {
|
|
781
|
-
|
|
782
|
-
self.onMarkerPress?(marker.userData as? String, )
|
|
793
|
+
self.onMarkerPress?(marker.idTag)
|
|
783
794
|
}
|
|
784
795
|
return uiSettings?.consumeOnMarkerPress ?? false
|
|
785
796
|
}
|
|
@@ -788,13 +799,13 @@ GMSIndoorDisplayDelegate {
|
|
|
788
799
|
onMain {
|
|
789
800
|
switch overlay {
|
|
790
801
|
case let circle as GMSCircle:
|
|
791
|
-
self.onCirclePress?(circle.
|
|
802
|
+
self.onCirclePress?(circle.idTag)
|
|
792
803
|
|
|
793
804
|
case let polygon as GMSPolygon:
|
|
794
|
-
self.onPolygonPress?(polygon.
|
|
805
|
+
self.onPolygonPress?(polygon.idTag)
|
|
795
806
|
|
|
796
807
|
case let polyline as GMSPolyline:
|
|
797
|
-
self.onPolylinePress?(polyline.
|
|
808
|
+
self.onPolylinePress?(polyline.idTag)
|
|
798
809
|
|
|
799
810
|
default:
|
|
800
811
|
break
|
|
@@ -805,7 +816,7 @@ GMSIndoorDisplayDelegate {
|
|
|
805
816
|
func mapView(_ mapView: GMSMapView, didBeginDragging marker: GMSMarker) {
|
|
806
817
|
onMain {
|
|
807
818
|
self.onMarkerDragStart?(
|
|
808
|
-
marker.
|
|
819
|
+
marker.idTag,
|
|
809
820
|
marker.position.toRNLatLng()
|
|
810
821
|
)
|
|
811
822
|
}
|
|
@@ -814,7 +825,7 @@ GMSIndoorDisplayDelegate {
|
|
|
814
825
|
func mapView(_ mapView: GMSMapView, didDrag marker: GMSMarker) {
|
|
815
826
|
onMain {
|
|
816
827
|
self.onMarkerDrag?(
|
|
817
|
-
marker.
|
|
828
|
+
marker.idTag,
|
|
818
829
|
marker.position.toRNLatLng()
|
|
819
830
|
)
|
|
820
831
|
}
|
|
@@ -823,7 +834,7 @@ GMSIndoorDisplayDelegate {
|
|
|
823
834
|
func mapView(_ mapView: GMSMapView, didEndDragging marker: GMSMarker) {
|
|
824
835
|
onMain {
|
|
825
836
|
self.onMarkerDragEnd?(
|
|
826
|
-
marker.
|
|
837
|
+
marker.idTag,
|
|
827
838
|
marker.position.toRNLatLng()
|
|
828
839
|
)
|
|
829
840
|
}
|
|
@@ -857,13 +868,13 @@ GMSIndoorDisplayDelegate {
|
|
|
857
868
|
|
|
858
869
|
func mapView(_ mapView: GMSMapView, didTapInfoWindowOf marker: GMSMarker) {
|
|
859
870
|
onMain {
|
|
860
|
-
self.onInfoWindowPress?(marker.
|
|
871
|
+
self.onInfoWindowPress?(marker.idTag)
|
|
861
872
|
}
|
|
862
873
|
}
|
|
863
874
|
|
|
864
875
|
func mapView(_ mapView: GMSMapView, didCloseInfoWindowOf marker: GMSMarker) {
|
|
865
876
|
onMain {
|
|
866
|
-
self.onInfoWindowClose?(marker.
|
|
877
|
+
self.onInfoWindowClose?(marker.idTag)
|
|
867
878
|
}
|
|
868
879
|
}
|
|
869
880
|
|
|
@@ -872,7 +883,7 @@ GMSIndoorDisplayDelegate {
|
|
|
872
883
|
didLongPressInfoWindowOf marker: GMSMarker
|
|
873
884
|
) {
|
|
874
885
|
onMain {
|
|
875
|
-
self.onInfoWindowLongPress?(marker.
|
|
886
|
+
self.onInfoWindowLongPress?(marker.idTag)
|
|
876
887
|
}
|
|
877
888
|
}
|
|
878
889
|
|
|
@@ -893,4 +904,13 @@ GMSIndoorDisplayDelegate {
|
|
|
893
904
|
}
|
|
894
905
|
return uiSettings?.consumeOnMyLocationButtonPress ?? false
|
|
895
906
|
}
|
|
907
|
+
|
|
908
|
+
func mapView(_ mapView: GMSMapView, markerInfoWindow marker: GMSMarker) -> UIView? {
|
|
909
|
+
return markerBuilder.buildInfoWindow(iconSvg: marker.tagData.iconSvg)
|
|
910
|
+
}
|
|
911
|
+
|
|
912
|
+
func mapView(_ mapView: GMSMapView, markerInfoContents marker: GMSMarker)
|
|
913
|
+
-> UIView? {
|
|
914
|
+
return nil
|
|
915
|
+
}
|
|
896
916
|
}
|
|
@@ -35,6 +35,8 @@ final class LocationHandler: NSObject, CLLocationManagerDelegate {
|
|
|
35
35
|
|
|
36
36
|
func showLocationDialog() {
|
|
37
37
|
onMainAsync { [weak self] in
|
|
38
|
+
guard let self = self else { return }
|
|
39
|
+
|
|
38
40
|
guard let vc = Self.topMostViewController() else { return }
|
|
39
41
|
let title =
|
|
40
42
|
Bundle.main.object(forInfoDictionaryKey: "LocationNotAvailableTitle")
|
|
@@ -61,7 +63,7 @@ final class LocationHandler: NSObject, CLLocationManagerDelegate {
|
|
|
61
63
|
title: openLocationSettingsButton ?? "Open settings",
|
|
62
64
|
style: .default
|
|
63
65
|
) { _ in
|
|
64
|
-
self
|
|
66
|
+
self.openLocationSettings()
|
|
65
67
|
}
|
|
66
68
|
)
|
|
67
69
|
vc.present(alert, animated: true, completion: nil)
|
|
@@ -17,13 +17,12 @@ final class MapCircleBuilder {
|
|
|
17
17
|
|
|
18
18
|
@MainActor
|
|
19
19
|
func update(_ prev: RNCircle, _ next: RNCircle, _ c: GMSCircle) {
|
|
20
|
-
if prev.
|
|
21
|
-
|| prev.center.longitude != next.center.longitude {
|
|
20
|
+
if !prev.centerEquals(next) {
|
|
22
21
|
c.position = next.center.toCLLocationCoordinate2D()
|
|
23
22
|
}
|
|
24
23
|
|
|
25
24
|
if prev.radius != next.radius {
|
|
26
|
-
c.radius = next.radius
|
|
25
|
+
c.radius = next.radius
|
|
27
26
|
}
|
|
28
27
|
|
|
29
28
|
if prev.fillColor != next.fillColor {
|
package/ios/MapHelper.swift
CHANGED
|
@@ -32,11 +32,9 @@ func onMain(_ block: @escaping @MainActor () -> Void) {
|
|
|
32
32
|
|
|
33
33
|
@inline(__always)
|
|
34
34
|
func onMainAsync(
|
|
35
|
-
_ block: @
|
|
35
|
+
_ block: @escaping @MainActor () async -> Void
|
|
36
36
|
) {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
} else {
|
|
40
|
-
Task { @MainActor in await block() }
|
|
37
|
+
Task { @MainActor in
|
|
38
|
+
await block()
|
|
41
39
|
}
|
|
42
40
|
}
|