@lugg/maps 1.0.0-beta.3 → 1.0.0-beta.4
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/README.md +3 -0
- package/android/src/main/java/com/luggmaps/LuggCircleView.kt +85 -0
- package/android/src/main/java/com/luggmaps/LuggCircleViewManager.kt +79 -0
- package/android/src/main/java/com/luggmaps/LuggGroundOverlayView.kt +81 -0
- package/android/src/main/java/com/luggmaps/LuggGroundOverlayViewManager.kt +82 -0
- package/android/src/main/java/com/luggmaps/LuggMapView.kt +9 -0
- package/android/src/main/java/com/luggmaps/LuggPackage.kt +4 -1
- package/android/src/main/java/com/luggmaps/LuggTileOverlayView.kt +92 -0
- package/android/src/main/java/com/luggmaps/LuggTileOverlayViewManager.kt +80 -0
- package/android/src/main/java/com/luggmaps/core/GoogleMapProvider.kt +289 -0
- package/android/src/main/java/com/luggmaps/core/MapProviderDelegate.kt +9 -0
- package/android/src/main/java/com/luggmaps/events/CirclePressEvent.kt +12 -0
- package/android/src/main/java/com/luggmaps/events/GroundOverlayPressEvent.kt +12 -0
- package/android/src/main/java/com/luggmaps/events/TileOverlayPressEvent.kt +12 -0
- package/ios/LuggCircleView.h +31 -0
- package/ios/LuggCircleView.mm +133 -0
- package/ios/LuggGroundOverlayView.h +30 -0
- package/ios/LuggGroundOverlayView.mm +125 -0
- package/ios/LuggMapView.mm +43 -0
- package/ios/LuggTileOverlayView.h +31 -0
- package/ios/LuggTileOverlayView.mm +130 -0
- package/ios/core/AppleMapProvider.mm +398 -1
- package/ios/core/GoogleMapProvider.mm +299 -10
- package/ios/core/MapProviderDelegate.h +12 -0
- package/ios/events/CirclePressEvent.h +20 -0
- package/ios/events/GroundOverlayPressEvent.h +20 -0
- package/ios/events/TileOverlayPressEvent.h +20 -0
- package/lib/module/components/Circle.js +46 -0
- package/lib/module/components/Circle.js.map +1 -0
- package/lib/module/components/Circle.types.js +4 -0
- package/lib/module/components/Circle.types.js.map +1 -0
- package/lib/module/components/Circle.web.js +79 -0
- package/lib/module/components/Circle.web.js.map +1 -0
- package/lib/module/components/GroundOverlay.js +45 -0
- package/lib/module/components/GroundOverlay.js.map +1 -0
- package/lib/module/components/GroundOverlay.types.js +4 -0
- package/lib/module/components/GroundOverlay.types.js.map +1 -0
- package/lib/module/components/GroundOverlay.web.js +77 -0
- package/lib/module/components/GroundOverlay.web.js.map +1 -0
- package/lib/module/components/Marker.js +5 -1
- package/lib/module/components/Marker.js.map +1 -1
- package/lib/module/components/TileOverlay.js +44 -0
- package/lib/module/components/TileOverlay.js.map +1 -0
- package/lib/module/components/TileOverlay.types.js +4 -0
- package/lib/module/components/TileOverlay.types.js.map +1 -0
- package/lib/module/components/TileOverlay.web.js +69 -0
- package/lib/module/components/TileOverlay.web.js.map +1 -0
- package/lib/module/components/index.js +3 -0
- package/lib/module/components/index.js.map +1 -1
- package/lib/module/components/index.web.js +3 -0
- package/lib/module/components/index.web.js.map +1 -1
- package/lib/module/fabric/LuggCircleViewNativeComponent.ts +25 -0
- package/lib/module/fabric/LuggGroundOverlayViewNativeComponent.ts +29 -0
- package/lib/module/fabric/LuggTileOverlayViewNativeComponent.ts +30 -0
- package/lib/module/index.js +3 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/index.web.js +3 -0
- package/lib/module/index.web.js.map +1 -1
- package/lib/typescript/src/components/Circle.d.ts +10 -0
- package/lib/typescript/src/components/Circle.d.ts.map +1 -0
- package/lib/typescript/src/components/Circle.types.d.ts +33 -0
- package/lib/typescript/src/components/Circle.types.d.ts.map +1 -0
- package/lib/typescript/src/components/Circle.web.d.ts +3 -0
- package/lib/typescript/src/components/Circle.web.d.ts.map +1 -0
- package/lib/typescript/src/components/GroundOverlay.d.ts +10 -0
- package/lib/typescript/src/components/GroundOverlay.d.ts.map +1 -0
- package/lib/typescript/src/components/GroundOverlay.types.d.ts +35 -0
- package/lib/typescript/src/components/GroundOverlay.types.d.ts.map +1 -0
- package/lib/typescript/src/components/GroundOverlay.web.d.ts +3 -0
- package/lib/typescript/src/components/GroundOverlay.web.d.ts.map +1 -0
- package/lib/typescript/src/components/Marker.d.ts.map +1 -1
- package/lib/typescript/src/components/Marker.types.d.ts +4 -1
- package/lib/typescript/src/components/Marker.types.d.ts.map +1 -1
- package/lib/typescript/src/components/TileOverlay.d.ts +10 -0
- package/lib/typescript/src/components/TileOverlay.d.ts.map +1 -0
- package/lib/typescript/src/components/TileOverlay.types.d.ts +36 -0
- package/lib/typescript/src/components/TileOverlay.types.d.ts.map +1 -0
- package/lib/typescript/src/components/TileOverlay.web.d.ts +3 -0
- package/lib/typescript/src/components/TileOverlay.web.d.ts.map +1 -0
- package/lib/typescript/src/components/index.d.ts +6 -0
- package/lib/typescript/src/components/index.d.ts.map +1 -1
- package/lib/typescript/src/components/index.web.d.ts +6 -0
- package/lib/typescript/src/components/index.web.d.ts.map +1 -1
- package/lib/typescript/src/fabric/LuggCircleViewNativeComponent.d.ts +18 -0
- package/lib/typescript/src/fabric/LuggCircleViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/src/fabric/LuggGroundOverlayViewNativeComponent.d.ts +21 -0
- package/lib/typescript/src/fabric/LuggGroundOverlayViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/src/fabric/LuggTileOverlayViewNativeComponent.d.ts +21 -0
- package/lib/typescript/src/fabric/LuggTileOverlayViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +6 -0
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/index.web.d.ts +6 -0
- package/lib/typescript/src/index.web.d.ts.map +1 -1
- package/package.json +5 -2
- package/src/components/Circle.tsx +52 -0
- package/src/components/Circle.types.ts +33 -0
- package/src/components/Circle.web.tsx +93 -0
- package/src/components/GroundOverlay.tsx +47 -0
- package/src/components/GroundOverlay.types.ts +36 -0
- package/src/components/GroundOverlay.web.tsx +85 -0
- package/src/components/Marker.tsx +4 -1
- package/src/components/Marker.types.ts +4 -1
- package/src/components/TileOverlay.tsx +44 -0
- package/src/components/TileOverlay.types.ts +37 -0
- package/src/components/TileOverlay.web.tsx +95 -0
- package/src/components/index.ts +9 -0
- package/src/components/index.web.ts +9 -0
- package/src/fabric/LuggCircleViewNativeComponent.ts +25 -0
- package/src/fabric/LuggGroundOverlayViewNativeComponent.ts +29 -0
- package/src/fabric/LuggTileOverlayViewNativeComponent.ts +30 -0
- package/src/index.ts +6 -0
- package/src/index.web.ts +12 -0
package/README.md
CHANGED
|
@@ -116,7 +116,10 @@ import { MapView, Marker, Polyline, Polygon } from '@lugg/maps';
|
|
|
116
116
|
- [Marker](docs/MARKER.md) - Map markers with callout support
|
|
117
117
|
- [Polyline](docs/POLYLINE.md) - Draw lines on the map
|
|
118
118
|
- [Polygon](docs/POLYGON.md) - Draw filled shapes on the map
|
|
119
|
+
- [Circle](docs/CIRCLE.md) - Draw circular overlays on the map
|
|
119
120
|
- [GeoJson](docs/GEOJSON.md) - Render GeoJSON data on the map
|
|
121
|
+
- [GroundOverlay](docs/GROUND_OVERLAY.md) - Display images on the map
|
|
122
|
+
- [TileOverlay](docs/TILE_OVERLAY.md) - Display custom tile layers on the map
|
|
120
123
|
|
|
121
124
|
## Types
|
|
122
125
|
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
package com.luggmaps
|
|
2
|
+
|
|
3
|
+
import android.content.Context
|
|
4
|
+
import android.graphics.Color
|
|
5
|
+
import com.facebook.react.views.view.ReactViewGroup
|
|
6
|
+
import com.google.android.gms.maps.model.Circle
|
|
7
|
+
import com.google.android.gms.maps.model.LatLng
|
|
8
|
+
import com.luggmaps.events.CirclePressEvent
|
|
9
|
+
import com.luggmaps.extensions.dispatchEvent
|
|
10
|
+
|
|
11
|
+
interface LuggCircleViewDelegate {
|
|
12
|
+
fun circleViewDidUpdate(circleView: LuggCircleView)
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
class LuggCircleView(context: Context) : ReactViewGroup(context) {
|
|
16
|
+
var center: LatLng = LatLng(0.0, 0.0)
|
|
17
|
+
private set
|
|
18
|
+
|
|
19
|
+
var radius: Double = 0.0
|
|
20
|
+
private set
|
|
21
|
+
|
|
22
|
+
var strokeColor: Int = Color.BLACK
|
|
23
|
+
private set
|
|
24
|
+
|
|
25
|
+
var fillColor: Int = Color.argb(77, 0, 0, 0)
|
|
26
|
+
private set
|
|
27
|
+
|
|
28
|
+
var strokeWidth: Float = 1f
|
|
29
|
+
private set
|
|
30
|
+
|
|
31
|
+
var zIndex: Float = 0f
|
|
32
|
+
private set
|
|
33
|
+
|
|
34
|
+
var tappable: Boolean = false
|
|
35
|
+
private set
|
|
36
|
+
|
|
37
|
+
var delegate: LuggCircleViewDelegate? = null
|
|
38
|
+
var circle: Circle? = null
|
|
39
|
+
|
|
40
|
+
init {
|
|
41
|
+
visibility = GONE
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
fun setCenter(value: LatLng) {
|
|
45
|
+
center = value
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
fun setRadius(value: Double) {
|
|
49
|
+
radius = value
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
fun setStrokeColor(color: Int) {
|
|
53
|
+
strokeColor = color
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
fun setFillColor(color: Int) {
|
|
57
|
+
fillColor = color
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
fun setStrokeWidth(width: Float) {
|
|
61
|
+
strokeWidth = width
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
fun setZIndex(value: Float) {
|
|
65
|
+
zIndex = value
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
fun setTappable(value: Boolean) {
|
|
69
|
+
tappable = value
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
fun emitPressEvent() {
|
|
73
|
+
dispatchEvent(CirclePressEvent(this))
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
fun onAfterUpdateTransaction() {
|
|
77
|
+
delegate?.circleViewDidUpdate(this)
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
fun onDropViewInstance() {
|
|
81
|
+
delegate = null
|
|
82
|
+
circle?.remove()
|
|
83
|
+
circle = null
|
|
84
|
+
}
|
|
85
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
package com.luggmaps
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.bridge.ReadableMap
|
|
4
|
+
import com.facebook.react.module.annotations.ReactModule
|
|
5
|
+
import com.facebook.react.uimanager.ThemedReactContext
|
|
6
|
+
import com.facebook.react.uimanager.ViewGroupManager
|
|
7
|
+
import com.facebook.react.uimanager.ViewManagerDelegate
|
|
8
|
+
import com.facebook.react.uimanager.annotations.ReactProp
|
|
9
|
+
import com.facebook.react.viewmanagers.LuggCircleViewManagerDelegate
|
|
10
|
+
import com.facebook.react.viewmanagers.LuggCircleViewManagerInterface
|
|
11
|
+
import com.google.android.gms.maps.model.LatLng
|
|
12
|
+
|
|
13
|
+
@ReactModule(name = LuggCircleViewManager.NAME)
|
|
14
|
+
class LuggCircleViewManager :
|
|
15
|
+
ViewGroupManager<LuggCircleView>(),
|
|
16
|
+
LuggCircleViewManagerInterface<LuggCircleView> {
|
|
17
|
+
private val delegate: ViewManagerDelegate<LuggCircleView> = LuggCircleViewManagerDelegate(this)
|
|
18
|
+
|
|
19
|
+
override fun getDelegate(): ViewManagerDelegate<LuggCircleView> = delegate
|
|
20
|
+
override fun getName(): String = NAME
|
|
21
|
+
override fun createViewInstance(context: ThemedReactContext): LuggCircleView = LuggCircleView(context)
|
|
22
|
+
|
|
23
|
+
override fun getExportedCustomDirectEventTypeConstants(): Map<String, Any> =
|
|
24
|
+
mapOf("topCirclePress" to mapOf("registrationName" to "onCirclePress"))
|
|
25
|
+
|
|
26
|
+
override fun onDropViewInstance(view: LuggCircleView) {
|
|
27
|
+
super.onDropViewInstance(view)
|
|
28
|
+
view.onDropViewInstance()
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
override fun onAfterUpdateTransaction(view: LuggCircleView) {
|
|
32
|
+
super.onAfterUpdateTransaction(view)
|
|
33
|
+
view.onAfterUpdateTransaction()
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
@ReactProp(name = "center")
|
|
37
|
+
override fun setCenter(view: LuggCircleView, value: ReadableMap?) {
|
|
38
|
+
value?.let { map ->
|
|
39
|
+
val lat = map.getDouble("latitude")
|
|
40
|
+
val lng = map.getDouble("longitude")
|
|
41
|
+
view.setCenter(LatLng(lat, lng))
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
@ReactProp(name = "radius", defaultDouble = 0.0)
|
|
46
|
+
override fun setRadius(view: LuggCircleView, value: Double) {
|
|
47
|
+
view.setRadius(value)
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
@ReactProp(name = "strokeColor", customType = "Color")
|
|
51
|
+
override fun setStrokeColor(view: LuggCircleView, value: Int?) {
|
|
52
|
+
view.setStrokeColor(value ?: android.graphics.Color.BLACK)
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
@ReactProp(name = "fillColor", customType = "Color")
|
|
56
|
+
override fun setFillColor(view: LuggCircleView, value: Int?) {
|
|
57
|
+
view.setFillColor(value ?: android.graphics.Color.argb(77, 0, 0, 0))
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
@ReactProp(name = "strokeWidth", defaultDouble = 1.0)
|
|
61
|
+
override fun setStrokeWidth(view: LuggCircleView, value: Double) {
|
|
62
|
+
view.setStrokeWidth(value.toFloat())
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
@ReactProp(name = "tappable")
|
|
66
|
+
override fun setTappable(view: LuggCircleView, value: Boolean) {
|
|
67
|
+
view.setTappable(value)
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
@ReactProp(name = "zIndex", defaultFloat = 0f)
|
|
71
|
+
override fun setZIndex(view: LuggCircleView, value: Float) {
|
|
72
|
+
super.setZIndex(view, value)
|
|
73
|
+
view.setZIndex(value)
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
companion object {
|
|
77
|
+
const val NAME = "LuggCircleView"
|
|
78
|
+
}
|
|
79
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
package com.luggmaps
|
|
2
|
+
|
|
3
|
+
import android.content.Context
|
|
4
|
+
import com.facebook.react.views.view.ReactViewGroup
|
|
5
|
+
import com.google.android.gms.maps.model.GroundOverlay
|
|
6
|
+
import com.google.android.gms.maps.model.LatLng
|
|
7
|
+
import com.luggmaps.events.GroundOverlayPressEvent
|
|
8
|
+
import com.luggmaps.extensions.dispatchEvent
|
|
9
|
+
|
|
10
|
+
interface LuggGroundOverlayViewDelegate {
|
|
11
|
+
fun groundOverlayViewDidUpdate(groundOverlayView: LuggGroundOverlayView)
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
class LuggGroundOverlayView(context: Context) : ReactViewGroup(context) {
|
|
15
|
+
var imageUri: String = ""
|
|
16
|
+
private set
|
|
17
|
+
|
|
18
|
+
var northeast: LatLng = LatLng(0.0, 0.0)
|
|
19
|
+
private set
|
|
20
|
+
|
|
21
|
+
var southwest: LatLng = LatLng(0.0, 0.0)
|
|
22
|
+
private set
|
|
23
|
+
|
|
24
|
+
var overlayOpacity: Float = 1f
|
|
25
|
+
private set
|
|
26
|
+
|
|
27
|
+
var bearing: Float = 0f
|
|
28
|
+
private set
|
|
29
|
+
|
|
30
|
+
var zIndex: Float = 0f
|
|
31
|
+
private set
|
|
32
|
+
|
|
33
|
+
var tappable: Boolean = false
|
|
34
|
+
private set
|
|
35
|
+
|
|
36
|
+
var delegate: LuggGroundOverlayViewDelegate? = null
|
|
37
|
+
var groundOverlay: GroundOverlay? = null
|
|
38
|
+
|
|
39
|
+
init {
|
|
40
|
+
visibility = GONE
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
fun setImageUri(value: String) {
|
|
44
|
+
imageUri = value
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
fun setBounds(ne: LatLng, sw: LatLng) {
|
|
48
|
+
northeast = ne
|
|
49
|
+
southwest = sw
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
fun setOverlayOpacity(value: Float) {
|
|
53
|
+
overlayOpacity = value
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
fun setBearing(value: Float) {
|
|
57
|
+
bearing = value
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
fun setZIndex(value: Float) {
|
|
61
|
+
zIndex = value
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
fun setTappable(value: Boolean) {
|
|
65
|
+
tappable = value
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
fun emitPressEvent() {
|
|
69
|
+
dispatchEvent(GroundOverlayPressEvent(this))
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
fun onAfterUpdateTransaction() {
|
|
73
|
+
delegate?.groundOverlayViewDidUpdate(this)
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
fun onDropViewInstance() {
|
|
77
|
+
delegate = null
|
|
78
|
+
groundOverlay?.remove()
|
|
79
|
+
groundOverlay = null
|
|
80
|
+
}
|
|
81
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
package com.luggmaps
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.bridge.ReadableMap
|
|
4
|
+
import com.facebook.react.module.annotations.ReactModule
|
|
5
|
+
import com.facebook.react.uimanager.ThemedReactContext
|
|
6
|
+
import com.facebook.react.uimanager.ViewGroupManager
|
|
7
|
+
import com.facebook.react.uimanager.ViewManagerDelegate
|
|
8
|
+
import com.facebook.react.uimanager.annotations.ReactProp
|
|
9
|
+
import com.facebook.react.viewmanagers.LuggGroundOverlayViewManagerDelegate
|
|
10
|
+
import com.facebook.react.viewmanagers.LuggGroundOverlayViewManagerInterface
|
|
11
|
+
import com.google.android.gms.maps.model.LatLng
|
|
12
|
+
|
|
13
|
+
@ReactModule(name = LuggGroundOverlayViewManager.NAME)
|
|
14
|
+
class LuggGroundOverlayViewManager :
|
|
15
|
+
ViewGroupManager<LuggGroundOverlayView>(),
|
|
16
|
+
LuggGroundOverlayViewManagerInterface<LuggGroundOverlayView> {
|
|
17
|
+
private val delegate: ViewManagerDelegate<LuggGroundOverlayView> = LuggGroundOverlayViewManagerDelegate(this)
|
|
18
|
+
|
|
19
|
+
override fun getDelegate(): ViewManagerDelegate<LuggGroundOverlayView> = delegate
|
|
20
|
+
override fun getName(): String = NAME
|
|
21
|
+
override fun createViewInstance(context: ThemedReactContext): LuggGroundOverlayView = LuggGroundOverlayView(context)
|
|
22
|
+
|
|
23
|
+
override fun getExportedCustomDirectEventTypeConstants(): Map<String, Any> =
|
|
24
|
+
mapOf("topGroundOverlayPress" to mapOf("registrationName" to "onGroundOverlayPress"))
|
|
25
|
+
|
|
26
|
+
override fun onDropViewInstance(view: LuggGroundOverlayView) {
|
|
27
|
+
super.onDropViewInstance(view)
|
|
28
|
+
view.onDropViewInstance()
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
override fun onAfterUpdateTransaction(view: LuggGroundOverlayView) {
|
|
32
|
+
super.onAfterUpdateTransaction(view)
|
|
33
|
+
view.onAfterUpdateTransaction()
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
@ReactProp(name = "image")
|
|
37
|
+
override fun setImage(view: LuggGroundOverlayView, value: String?) {
|
|
38
|
+
view.setImageUri(value ?: "")
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
@ReactProp(name = "bounds")
|
|
42
|
+
override fun setBounds(view: LuggGroundOverlayView, value: ReadableMap?) {
|
|
43
|
+
value?.let { map ->
|
|
44
|
+
val ne = map.getMap("northeast")
|
|
45
|
+
val sw = map.getMap("southwest")
|
|
46
|
+
val northeast = LatLng(
|
|
47
|
+
ne?.getDouble("latitude") ?: 0.0,
|
|
48
|
+
ne?.getDouble("longitude") ?: 0.0
|
|
49
|
+
)
|
|
50
|
+
val southwest = LatLng(
|
|
51
|
+
sw?.getDouble("latitude") ?: 0.0,
|
|
52
|
+
sw?.getDouble("longitude") ?: 0.0
|
|
53
|
+
)
|
|
54
|
+
view.setBounds(northeast, southwest)
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
@ReactProp(name = "opacity", defaultDouble = 1.0)
|
|
59
|
+
override fun setOpacity(view: LuggGroundOverlayView, value: Double) {
|
|
60
|
+
view.setOverlayOpacity(value.toFloat())
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
@ReactProp(name = "bearing", defaultDouble = 0.0)
|
|
64
|
+
override fun setBearing(view: LuggGroundOverlayView, value: Double) {
|
|
65
|
+
view.setBearing(value.toFloat())
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
@ReactProp(name = "tappable")
|
|
69
|
+
override fun setTappable(view: LuggGroundOverlayView, value: Boolean) {
|
|
70
|
+
view.setTappable(value)
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
@ReactProp(name = "zIndex", defaultFloat = 0f)
|
|
74
|
+
override fun setZIndex(view: LuggGroundOverlayView, value: Float) {
|
|
75
|
+
super.setZIndex(view, value)
|
|
76
|
+
view.setZIndex(value)
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
companion object {
|
|
80
|
+
const val NAME = "LuggGroundOverlayView"
|
|
81
|
+
}
|
|
82
|
+
}
|
|
@@ -78,6 +78,9 @@ class LuggMapView(private val reactContext: ThemedReactContext) :
|
|
|
78
78
|
is LuggMarkerView -> provider?.addMarkerView(child)
|
|
79
79
|
is LuggPolylineView -> provider?.addPolylineView(child)
|
|
80
80
|
is LuggPolygonView -> provider?.addPolygonView(child)
|
|
81
|
+
is LuggCircleView -> provider?.addCircleView(child)
|
|
82
|
+
is LuggGroundOverlayView -> provider?.addGroundOverlayView(child)
|
|
83
|
+
is LuggTileOverlayView -> provider?.addTileOverlayView(child)
|
|
81
84
|
}
|
|
82
85
|
}
|
|
83
86
|
|
|
@@ -87,6 +90,9 @@ class LuggMapView(private val reactContext: ThemedReactContext) :
|
|
|
87
90
|
is LuggMarkerView -> provider?.removeMarkerView(view)
|
|
88
91
|
is LuggPolylineView -> provider?.removePolylineView(view)
|
|
89
92
|
is LuggPolygonView -> provider?.removePolygonView(view)
|
|
93
|
+
is LuggCircleView -> provider?.removeCircleView(view)
|
|
94
|
+
is LuggGroundOverlayView -> provider?.removeGroundOverlayView(view)
|
|
95
|
+
is LuggTileOverlayView -> provider?.removeTileOverlayView(view)
|
|
90
96
|
}
|
|
91
97
|
super.removeViewAt(index)
|
|
92
98
|
}
|
|
@@ -135,6 +141,9 @@ class LuggMapView(private val reactContext: ThemedReactContext) :
|
|
|
135
141
|
is LuggMarkerView -> google.addMarkerView(child)
|
|
136
142
|
is LuggPolylineView -> google.addPolylineView(child)
|
|
137
143
|
is LuggPolygonView -> google.addPolygonView(child)
|
|
144
|
+
is LuggCircleView -> google.addCircleView(child)
|
|
145
|
+
is LuggGroundOverlayView -> google.addGroundOverlayView(child)
|
|
146
|
+
is LuggTileOverlayView -> google.addTileOverlayView(child)
|
|
138
147
|
}
|
|
139
148
|
}
|
|
140
149
|
}
|
|
@@ -12,6 +12,9 @@ class LuggPackage : ReactPackage {
|
|
|
12
12
|
LuggCalloutViewManager(),
|
|
13
13
|
LuggMapWrapperViewManager(),
|
|
14
14
|
LuggPolylineViewManager(),
|
|
15
|
-
LuggPolygonViewManager()
|
|
15
|
+
LuggPolygonViewManager(),
|
|
16
|
+
LuggCircleViewManager(),
|
|
17
|
+
LuggGroundOverlayViewManager(),
|
|
18
|
+
LuggTileOverlayViewManager()
|
|
16
19
|
)
|
|
17
20
|
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
package com.luggmaps
|
|
2
|
+
|
|
3
|
+
import android.content.Context
|
|
4
|
+
import com.facebook.react.views.view.ReactViewGroup
|
|
5
|
+
import com.google.android.gms.maps.model.TileOverlay
|
|
6
|
+
import com.luggmaps.events.TileOverlayPressEvent
|
|
7
|
+
import com.luggmaps.extensions.dispatchEvent
|
|
8
|
+
|
|
9
|
+
interface LuggTileOverlayViewDelegate {
|
|
10
|
+
fun tileOverlayViewDidUpdate(tileOverlayView: LuggTileOverlayView)
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
class LuggTileOverlayView(context: Context) : ReactViewGroup(context) {
|
|
14
|
+
var urlTemplate: String = ""
|
|
15
|
+
private set
|
|
16
|
+
|
|
17
|
+
var tileSize: Int = 256
|
|
18
|
+
private set
|
|
19
|
+
|
|
20
|
+
var overlayOpacity: Float = 1f
|
|
21
|
+
private set
|
|
22
|
+
|
|
23
|
+
var hasBounds: Boolean = false
|
|
24
|
+
private set
|
|
25
|
+
var boundsSwLat: Double = 0.0
|
|
26
|
+
private set
|
|
27
|
+
var boundsSwLng: Double = 0.0
|
|
28
|
+
private set
|
|
29
|
+
var boundsNeLat: Double = 0.0
|
|
30
|
+
private set
|
|
31
|
+
var boundsNeLng: Double = 0.0
|
|
32
|
+
private set
|
|
33
|
+
|
|
34
|
+
var zIndex: Float = 0f
|
|
35
|
+
private set
|
|
36
|
+
|
|
37
|
+
var tappable: Boolean = false
|
|
38
|
+
private set
|
|
39
|
+
|
|
40
|
+
var delegate: LuggTileOverlayViewDelegate? = null
|
|
41
|
+
var tileOverlay: TileOverlay? = null
|
|
42
|
+
|
|
43
|
+
init {
|
|
44
|
+
visibility = GONE
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
fun setUrlTemplate(value: String) {
|
|
48
|
+
urlTemplate = value
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
fun setTileSize(value: Int) {
|
|
52
|
+
tileSize = value
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
fun setOverlayOpacity(value: Float) {
|
|
56
|
+
overlayOpacity = value
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
fun setZIndex(value: Float) {
|
|
60
|
+
zIndex = value
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
fun setBounds(swLat: Double, swLng: Double, neLat: Double, neLng: Double) {
|
|
64
|
+
hasBounds = true
|
|
65
|
+
boundsSwLat = swLat
|
|
66
|
+
boundsSwLng = swLng
|
|
67
|
+
boundsNeLat = neLat
|
|
68
|
+
boundsNeLng = neLng
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
fun clearBounds() {
|
|
72
|
+
hasBounds = false
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
fun setTappable(value: Boolean) {
|
|
76
|
+
tappable = value
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
fun emitPressEvent() {
|
|
80
|
+
dispatchEvent(TileOverlayPressEvent(this))
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
fun onAfterUpdateTransaction() {
|
|
84
|
+
delegate?.tileOverlayViewDidUpdate(this)
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
fun onDropViewInstance() {
|
|
88
|
+
delegate = null
|
|
89
|
+
tileOverlay?.remove()
|
|
90
|
+
tileOverlay = null
|
|
91
|
+
}
|
|
92
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
package com.luggmaps
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.bridge.ReadableMap
|
|
4
|
+
import com.facebook.react.module.annotations.ReactModule
|
|
5
|
+
import com.facebook.react.uimanager.ThemedReactContext
|
|
6
|
+
import com.facebook.react.uimanager.ViewGroupManager
|
|
7
|
+
import com.facebook.react.uimanager.ViewManagerDelegate
|
|
8
|
+
import com.facebook.react.uimanager.annotations.ReactProp
|
|
9
|
+
import com.facebook.react.viewmanagers.LuggTileOverlayViewManagerDelegate
|
|
10
|
+
import com.facebook.react.viewmanagers.LuggTileOverlayViewManagerInterface
|
|
11
|
+
|
|
12
|
+
@ReactModule(name = LuggTileOverlayViewManager.NAME)
|
|
13
|
+
class LuggTileOverlayViewManager :
|
|
14
|
+
ViewGroupManager<LuggTileOverlayView>(),
|
|
15
|
+
LuggTileOverlayViewManagerInterface<LuggTileOverlayView> {
|
|
16
|
+
private val delegate: ViewManagerDelegate<LuggTileOverlayView> = LuggTileOverlayViewManagerDelegate(this)
|
|
17
|
+
|
|
18
|
+
override fun getDelegate(): ViewManagerDelegate<LuggTileOverlayView> = delegate
|
|
19
|
+
override fun getName(): String = NAME
|
|
20
|
+
override fun createViewInstance(context: ThemedReactContext): LuggTileOverlayView = LuggTileOverlayView(context)
|
|
21
|
+
|
|
22
|
+
override fun getExportedCustomDirectEventTypeConstants(): Map<String, Any> =
|
|
23
|
+
mapOf("topTileOverlayPress" to mapOf("registrationName" to "onTileOverlayPress"))
|
|
24
|
+
|
|
25
|
+
override fun onDropViewInstance(view: LuggTileOverlayView) {
|
|
26
|
+
super.onDropViewInstance(view)
|
|
27
|
+
view.onDropViewInstance()
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
override fun onAfterUpdateTransaction(view: LuggTileOverlayView) {
|
|
31
|
+
super.onAfterUpdateTransaction(view)
|
|
32
|
+
view.onAfterUpdateTransaction()
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
@ReactProp(name = "urlTemplate")
|
|
36
|
+
override fun setUrlTemplate(view: LuggTileOverlayView, value: String?) {
|
|
37
|
+
view.setUrlTemplate(value ?: "")
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
@ReactProp(name = "tileSize", defaultInt = 256)
|
|
41
|
+
override fun setTileSize(view: LuggTileOverlayView, value: Int) {
|
|
42
|
+
view.setTileSize(value)
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
@ReactProp(name = "opacity", defaultDouble = 1.0)
|
|
46
|
+
override fun setOpacity(view: LuggTileOverlayView, value: Double) {
|
|
47
|
+
view.setOverlayOpacity(value.toFloat())
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
@ReactProp(name = "bounds")
|
|
51
|
+
override fun setBounds(view: LuggTileOverlayView, value: ReadableMap?) {
|
|
52
|
+
if (value == null) {
|
|
53
|
+
view.clearBounds()
|
|
54
|
+
return
|
|
55
|
+
}
|
|
56
|
+
val ne = value.getMap("northeast")
|
|
57
|
+
val sw = value.getMap("southwest")
|
|
58
|
+
view.setBounds(
|
|
59
|
+
sw?.getDouble("latitude") ?: 0.0,
|
|
60
|
+
sw?.getDouble("longitude") ?: 0.0,
|
|
61
|
+
ne?.getDouble("latitude") ?: 0.0,
|
|
62
|
+
ne?.getDouble("longitude") ?: 0.0
|
|
63
|
+
)
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
@ReactProp(name = "tappable")
|
|
67
|
+
override fun setTappable(view: LuggTileOverlayView, value: Boolean) {
|
|
68
|
+
view.setTappable(value)
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
@ReactProp(name = "zIndex", defaultFloat = 0f)
|
|
72
|
+
override fun setZIndex(view: LuggTileOverlayView, value: Float) {
|
|
73
|
+
super.setZIndex(view, value)
|
|
74
|
+
view.setZIndex(value)
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
companion object {
|
|
78
|
+
const val NAME = "LuggTileOverlayView"
|
|
79
|
+
}
|
|
80
|
+
}
|