@maydon_tech/react-native-nitro-maps 0.1.4 → 0.2.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/LICENSE +1 -1
- package/NitroMap.podspec +1 -1
- package/README.md +82 -9
- package/android/CMakeLists.txt +4 -1
- package/android/build.gradle +6 -2
- package/android/gradle.properties +4 -4
- package/android/src/main/cpp/ClusterEngineJNI.cpp +198 -0
- package/android/src/main/kotlin/com/margelo/nitro/nitromap/NitroMap.kt +397 -0
- package/android/src/main/kotlin/com/margelo/nitro/nitromap/NitroMapConfig.kt +53 -0
- package/android/src/main/{java → kotlin}/com/margelo/nitro/nitromap/NitroMapPackage.kt +4 -4
- package/android/src/main/kotlin/com/margelo/nitro/nitromap/NitroMapView.kt +73 -0
- package/android/src/main/kotlin/com/margelo/nitro/nitromap/UserLocationManager.kt +295 -0
- package/android/src/main/kotlin/com/margelo/nitro/nitromap/clustering/ClusterIconRenderer.kt +111 -0
- package/android/src/main/kotlin/com/margelo/nitro/nitromap/clustering/ClusteringManager.kt +104 -0
- package/android/src/main/kotlin/com/margelo/nitro/nitromap/clustering/NitroClusterEngine.kt +166 -0
- package/android/src/main/kotlin/com/margelo/nitro/nitromap/markers/MarkerIconFactory.kt +303 -0
- package/android/src/main/kotlin/com/margelo/nitro/nitromap/markers/MarkerSelectionHandler.kt +72 -0
- package/android/src/main/kotlin/com/margelo/nitro/nitromap/markers/PriceMarkerRenderer.kt +159 -0
- package/android/src/main/kotlin/com/margelo/nitro/nitromap/providers/MapProviderFactory.kt +24 -0
- package/android/src/main/kotlin/com/margelo/nitro/nitromap/providers/MapProviderInterface.kt +128 -0
- package/android/src/main/kotlin/com/margelo/nitro/nitromap/providers/google/GoogleMapDelegate.kt +317 -0
- package/android/src/main/kotlin/com/margelo/nitro/nitromap/providers/google/GoogleMapProvider+Clustering.kt +524 -0
- package/android/src/main/kotlin/com/margelo/nitro/nitromap/providers/google/GoogleMapProvider+Markers.kt +358 -0
- package/android/src/main/kotlin/com/margelo/nitro/nitromap/providers/google/GoogleMapProvider+Overlays.kt +272 -0
- package/android/src/main/kotlin/com/margelo/nitro/nitromap/providers/google/GoogleMapProvider+UserLocation.kt +296 -0
- package/android/src/main/kotlin/com/margelo/nitro/nitromap/providers/google/GoogleMapProvider.kt +815 -0
- package/android/src/main/kotlin/com/margelo/nitro/nitromap/providers/google/MarkerTagData.kt +19 -0
- package/ios/Location/NitroLocationManager.swift +116 -0
- package/ios/MarkerRenderer/MarkerIconFactory.swift +1 -3
- package/ios/MarkerRenderer/PriceMarkerRenderer.swift +10 -6
- package/ios/NitroMap.swift +279 -13
- package/ios/NitroMapConfig/NitroMapConfig.swift +45 -0
- package/ios/Providers/{GoogleMapDelegate.swift → Google/GoogleMapDelegate.swift} +48 -23
- package/ios/Providers/Google/GoogleMapProvider+Camera.swift +180 -0
- package/ios/Providers/Google/GoogleMapProvider+Clustering.swift +541 -0
- package/ios/Providers/Google/GoogleMapProvider+Markers.swift +270 -0
- package/ios/Providers/Google/GoogleMapProvider+Overlays.swift +245 -0
- package/ios/Providers/Google/GoogleMapProvider+UserLocation.swift +180 -0
- package/ios/Providers/Google/GoogleMapProvider.swift +342 -0
- package/ios/Providers/MapProviderFactory.swift +17 -0
- package/ios/Providers/MapProviderProtocol.swift +48 -1
- package/ios/Shared/ClusterConfig+Factory.swift +2 -2
- package/ios/Shared/MapStyleProvider.swift +6 -4
- package/ios/Shared/MarkerSelectionHandler.swift +4 -1
- package/ios/Utils/ColorValueExtension.swift +46 -67
- package/lib/module/components/ImageMarker.js +39 -29
- package/lib/module/components/ImageMarker.js.map +1 -1
- package/lib/module/components/Marker.js +118 -0
- package/lib/module/components/Marker.js.map +1 -0
- package/lib/module/components/NitroCircle.js +92 -0
- package/lib/module/components/NitroCircle.js.map +1 -0
- package/lib/module/components/NitroMap.js +216 -76
- package/lib/module/components/NitroMap.js.map +1 -1
- package/lib/module/components/NitroPolygon.js +137 -0
- package/lib/module/components/NitroPolygon.js.map +1 -0
- package/lib/module/components/NitroPolyline.js +115 -0
- package/lib/module/components/NitroPolyline.js.map +1 -0
- package/lib/module/components/PriceMarker.js +16 -29
- package/lib/module/components/PriceMarker.js.map +1 -1
- package/lib/module/context/NitroMapContext.js.map +1 -1
- package/lib/module/hooks/useNitroCircle.js +18 -0
- package/lib/module/hooks/useNitroCircle.js.map +1 -0
- package/lib/module/hooks/useNitroMarker.js +26 -9
- package/lib/module/hooks/useNitroMarker.js.map +1 -1
- package/lib/module/hooks/useNitroOverlay.js +59 -0
- package/lib/module/hooks/useNitroOverlay.js.map +1 -0
- package/lib/module/hooks/useNitroPolygon.js +18 -0
- package/lib/module/hooks/useNitroPolygon.js.map +1 -0
- package/lib/module/hooks/useNitroPolyline.js +18 -0
- package/lib/module/hooks/useNitroPolyline.js.map +1 -0
- package/lib/module/index.js +5 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/types/overlay.js +4 -0
- package/lib/module/types/overlay.js.map +1 -0
- package/lib/module/types/theme.js +4 -0
- package/lib/module/types/theme.js.map +1 -0
- package/lib/module/utils/colors.js +41 -13
- package/lib/module/utils/colors.js.map +1 -1
- package/lib/module/utils/validation.js +45 -0
- package/lib/module/utils/validation.js.map +1 -0
- package/lib/typescript/src/components/ImageMarker.d.ts.map +1 -1
- package/lib/typescript/src/components/Marker.d.ts +34 -0
- package/lib/typescript/src/components/Marker.d.ts.map +1 -0
- package/lib/typescript/src/components/NitroCircle.d.ts +70 -0
- package/lib/typescript/src/components/NitroCircle.d.ts.map +1 -0
- package/lib/typescript/src/components/NitroMap.d.ts +60 -3
- package/lib/typescript/src/components/NitroMap.d.ts.map +1 -1
- package/lib/typescript/src/components/NitroPolygon.d.ts +86 -0
- package/lib/typescript/src/components/NitroPolygon.d.ts.map +1 -0
- package/lib/typescript/src/components/NitroPolyline.d.ts +84 -0
- package/lib/typescript/src/components/NitroPolyline.d.ts.map +1 -0
- package/lib/typescript/src/components/PriceMarker.d.ts +0 -5
- package/lib/typescript/src/components/PriceMarker.d.ts.map +1 -1
- package/lib/typescript/src/context/NitroMapContext.d.ts +2 -0
- package/lib/typescript/src/context/NitroMapContext.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useNitroCircle.d.ts +7 -0
- package/lib/typescript/src/hooks/useNitroCircle.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useNitroMarker.d.ts +20 -0
- package/lib/typescript/src/hooks/useNitroMarker.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useNitroOverlay.d.ts +26 -0
- package/lib/typescript/src/hooks/useNitroOverlay.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useNitroPolygon.d.ts +7 -0
- package/lib/typescript/src/hooks/useNitroPolygon.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useNitroPolyline.d.ts +7 -0
- package/lib/typescript/src/hooks/useNitroPolyline.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +15 -2
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/specs/NitroMap.nitro.d.ts +248 -6
- package/lib/typescript/src/specs/NitroMap.nitro.d.ts.map +1 -1
- package/lib/typescript/src/types/map.d.ts +34 -4
- package/lib/typescript/src/types/map.d.ts.map +1 -1
- package/lib/typescript/src/types/marker.d.ts +24 -36
- package/lib/typescript/src/types/marker.d.ts.map +1 -1
- package/lib/typescript/src/types/overlay.d.ts +84 -0
- package/lib/typescript/src/types/overlay.d.ts.map +1 -0
- package/lib/typescript/src/types/theme.d.ts +93 -0
- package/lib/typescript/src/types/theme.d.ts.map +1 -0
- package/lib/typescript/src/utils/colors.d.ts +6 -8
- package/lib/typescript/src/utils/colors.d.ts.map +1 -1
- package/lib/typescript/src/utils/validation.d.ts +12 -0
- package/lib/typescript/src/utils/validation.d.ts.map +1 -0
- package/nitrogen/generated/android/c++/JCircleData.hpp +94 -0
- package/nitrogen/generated/android/c++/JClusterConfig.hpp +5 -7
- package/nitrogen/generated/android/c++/JCoordinateRing.hpp +77 -0
- package/nitrogen/generated/android/c++/JFunc_void_UserLocationChangeEvent.hpp +79 -0
- package/nitrogen/generated/android/c++/JFunc_void_UserTrackingMode.hpp +77 -0
- package/nitrogen/generated/android/c++/JFunc_void_std__string.hpp +76 -0
- package/nitrogen/generated/android/c++/JHybridNitroMapSpec.cpp +332 -21
- package/nitrogen/generated/android/c++/JHybridNitroMapSpec.hpp +53 -2
- package/nitrogen/generated/android/c++/JMarkerAnimation.hpp +3 -6
- package/nitrogen/generated/android/c++/JMarkerData.hpp +15 -3
- package/nitrogen/generated/android/c++/JPolygonData.hpp +133 -0
- package/nitrogen/generated/android/c++/JPolylineData.hpp +113 -0
- package/nitrogen/generated/android/c++/JUserLocationChangeEvent.hpp +70 -0
- package/nitrogen/generated/android/c++/JUserTrackingMode.hpp +62 -0
- package/nitrogen/generated/android/c++/views/JHybridNitroMapStateUpdater.cpp +72 -4
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/CircleData.kt +62 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/ClusterConfig.kt +4 -4
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/CoordinateRing.kt +38 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/Func_void_UserLocationChangeEvent.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/Func_void_UserTrackingMode.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/Func_void_std__string.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/HybridNitroMapSpec.kt +228 -2
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/MarkerAnimation.kt +1 -2
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/MarkerData.kt +12 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/PolygonData.kt +62 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/PolylineData.kt +62 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/UserLocationChangeEvent.kt +47 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/{ClusterAnimationStyle.kt → UserTrackingMode.kt} +6 -8
- package/nitrogen/generated/android/nitromapOnLoad.cpp +6 -0
- package/nitrogen/generated/ios/NitroMap-Swift-Cxx-Bridge.cpp +24 -0
- package/nitrogen/generated/ios/NitroMap-Swift-Cxx-Bridge.hpp +178 -17
- package/nitrogen/generated/ios/NitroMap-Swift-Cxx-Umbrella.hpp +18 -3
- package/nitrogen/generated/ios/c++/HybridNitroMapSpecSwift.hpp +252 -16
- package/nitrogen/generated/ios/c++/views/HybridNitroMapComponent.mm +90 -5
- package/nitrogen/generated/ios/swift/CircleData.swift +143 -0
- package/nitrogen/generated/ios/swift/ClusterConfig.swift +22 -15
- package/nitrogen/generated/ios/swift/CoordinateRing.swift +48 -0
- package/nitrogen/generated/ios/swift/Func_void_UserLocationChangeEvent.swift +47 -0
- package/nitrogen/generated/ios/swift/Func_void_UserTrackingMode.swift +47 -0
- package/nitrogen/generated/ios/swift/Func_void_std__string.swift +47 -0
- package/nitrogen/generated/ios/swift/HybridNitroMapSpec.swift +35 -1
- package/nitrogen/generated/ios/swift/HybridNitroMapSpec_cxx.swift +582 -8
- package/nitrogen/generated/ios/swift/MarkerAnimation.swift +4 -8
- package/nitrogen/generated/ios/swift/MarkerData.swift +54 -2
- package/nitrogen/generated/ios/swift/PolygonData.swift +167 -0
- package/nitrogen/generated/ios/swift/PolylineData.swift +155 -0
- package/nitrogen/generated/ios/swift/UserLocationChangeEvent.swift +69 -0
- package/nitrogen/generated/ios/swift/UserTrackingMode.swift +44 -0
- package/nitrogen/generated/shared/c++/CircleData.hpp +113 -0
- package/nitrogen/generated/shared/c++/ClusterConfig.hpp +5 -8
- package/nitrogen/generated/shared/c++/CoordinateRing.hpp +77 -0
- package/nitrogen/generated/shared/c++/HybridNitroMapSpec.cpp +53 -2
- package/nitrogen/generated/shared/c++/HybridNitroMapSpec.hpp +75 -6
- package/nitrogen/generated/shared/c++/MarkerAnimation.hpp +4 -8
- package/nitrogen/generated/shared/c++/MarkerData.hpp +14 -2
- package/nitrogen/generated/shared/c++/PolygonData.hpp +117 -0
- package/nitrogen/generated/shared/c++/PolylineData.hpp +114 -0
- package/nitrogen/generated/shared/c++/UserLocationChangeEvent.hpp +88 -0
- package/nitrogen/generated/shared/c++/UserTrackingMode.hpp +80 -0
- package/nitrogen/generated/shared/c++/views/HybridNitroMapComponent.cpp +216 -12
- package/nitrogen/generated/shared/c++/views/HybridNitroMapComponent.hpp +23 -1
- package/nitrogen/generated/shared/json/NitroMapConfig.json +18 -1
- package/package.json +36 -5
- package/src/components/ImageMarker.tsx +58 -42
- package/src/components/Marker.tsx +161 -0
- package/src/components/NitroCircle.tsx +183 -0
- package/src/components/NitroMap.tsx +328 -78
- package/src/components/NitroPolygon.tsx +229 -0
- package/src/components/NitroPolyline.tsx +208 -0
- package/src/components/PriceMarker.tsx +23 -48
- package/src/context/NitroMapContext.tsx +4 -0
- package/src/hooks/useNitroCircle.ts +25 -0
- package/src/hooks/useNitroMarker.ts +49 -10
- package/src/hooks/useNitroOverlay.ts +68 -0
- package/src/hooks/useNitroPolygon.ts +25 -0
- package/src/hooks/useNitroPolyline.ts +25 -0
- package/src/index.tsx +28 -2
- package/src/specs/NitroMap.nitro.ts +294 -5
- package/src/types/map.ts +36 -4
- package/src/types/marker.ts +24 -44
- package/src/types/overlay.ts +87 -0
- package/src/types/theme.ts +101 -0
- package/src/utils/colors.ts +48 -16
- package/src/utils/validation.ts +69 -0
- package/android/src/main/java/com/margelo/nitro/nitromap/ClusterIconGenerator.kt +0 -108
- package/android/src/main/java/com/margelo/nitro/nitromap/ColorUtils.kt +0 -63
- package/android/src/main/java/com/margelo/nitro/nitromap/HybridNitroMap.kt +0 -408
- package/android/src/main/java/com/margelo/nitro/nitromap/HybridNitroMapConfig.kt +0 -68
- package/android/src/main/java/com/margelo/nitro/nitromap/MarkerIconCache.kt +0 -176
- package/android/src/main/java/com/margelo/nitro/nitromap/MarkerIconFactory.kt +0 -252
- package/android/src/main/java/com/margelo/nitro/nitromap/clustering/NitroClusterEngine.kt +0 -252
- package/android/src/main/java/com/margelo/nitro/nitromap/clustering/QuadTree.kt +0 -195
- package/android/src/main/java/com/margelo/nitro/nitromap/providers/GoogleMapProvider.kt +0 -912
- package/android/src/main/java/com/margelo/nitro/nitromap/providers/MapProviderInterface.kt +0 -70
- package/cpp/QuadTree.hpp +0 -246
- package/ios/NitroMapConfig/HybridNitroMapConfig.swift +0 -33
- package/ios/Providers/GoogleMapProvider+Camera.swift +0 -164
- package/ios/Providers/GoogleMapProvider.swift +0 -924
- package/nitrogen/generated/android/c++/JClusterAnimationStyle.hpp +0 -68
- package/nitrogen/generated/ios/swift/ClusterAnimationStyle.swift +0 -52
- package/nitrogen/generated/shared/c++/ClusterAnimationStyle.hpp +0 -88
package/LICENSE
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
MIT License
|
|
2
2
|
|
|
3
|
-
Copyright (c) 2025
|
|
3
|
+
Copyright (c) 2025 Maydon Tech LLC
|
|
4
4
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
5
5
|
of this software and associated documentation files (the "Software"), to deal
|
|
6
6
|
in the Software without restriction, including without limitation the rights
|
package/NitroMap.podspec
CHANGED
|
@@ -20,7 +20,7 @@ Pod::Spec.new do |s|
|
|
|
20
20
|
|
|
21
21
|
# C++ settings for ClusterEngine
|
|
22
22
|
s.pod_target_xcconfig = {
|
|
23
|
-
'CLANG_CXX_LANGUAGE_STANDARD' => 'c++
|
|
23
|
+
'CLANG_CXX_LANGUAGE_STANDARD' => 'c++20',
|
|
24
24
|
'CLANG_CXX_LIBRARY' => 'libc++',
|
|
25
25
|
'HEADER_SEARCH_PATHS' => '"${PODS_TARGET_SRCROOT}/cpp"',
|
|
26
26
|
'GCC_PREPROCESSOR_DEFINITIONS' => '$(inherited)'
|
package/README.md
CHANGED
|
@@ -50,14 +50,18 @@ import {
|
|
|
50
50
|
NitroMap,
|
|
51
51
|
NitroMapInitialize,
|
|
52
52
|
PriceMarker,
|
|
53
|
+
type NitroMapRef,
|
|
53
54
|
} from '@maydon_tech/react-native-nitro-maps';
|
|
54
55
|
|
|
55
56
|
// Initialize once at app startup
|
|
56
|
-
NitroMapInitialize('
|
|
57
|
+
NitroMapInitialize({ provider: 'google', googleApiKey: 'YOUR_API_KEY' });
|
|
57
58
|
|
|
58
59
|
export default function App() {
|
|
60
|
+
const mapRef = useRef<NitroMapRef>(null);
|
|
61
|
+
|
|
59
62
|
return (
|
|
60
63
|
<NitroMap
|
|
64
|
+
ref={mapRef}
|
|
61
65
|
provider="google"
|
|
62
66
|
initialRegion={{
|
|
63
67
|
latitude: 41.2995,
|
|
@@ -81,11 +85,36 @@ export default function App() {
|
|
|
81
85
|
}
|
|
82
86
|
```
|
|
83
87
|
|
|
88
|
+
### Imperative Methods (via ref)
|
|
89
|
+
|
|
90
|
+
```tsx
|
|
91
|
+
// Animate to a region
|
|
92
|
+
mapRef.current?.animateToRegion({
|
|
93
|
+
latitude: 41.31,
|
|
94
|
+
longitude: 69.28,
|
|
95
|
+
latitudeDelta: 0.01,
|
|
96
|
+
longitudeDelta: 0.01,
|
|
97
|
+
}, 500);
|
|
98
|
+
|
|
99
|
+
// Fit to coordinates
|
|
100
|
+
mapRef.current?.fitToCoordinates([
|
|
101
|
+
{ latitude: 41.29, longitude: 69.24 },
|
|
102
|
+
{ latitude: 41.31, longitude: 69.28 },
|
|
103
|
+
]);
|
|
104
|
+
|
|
105
|
+
// Get current camera
|
|
106
|
+
const camera = await mapRef.current?.getCamera();
|
|
107
|
+
|
|
108
|
+
// Center on user's current location
|
|
109
|
+
// (requires showsUserLocation={true} and location permissions)
|
|
110
|
+
mapRef.current?.centerOnUserLocation();
|
|
111
|
+
```
|
|
112
|
+
|
|
84
113
|
## Providers
|
|
85
114
|
|
|
86
115
|
| Provider | iOS | Android | API Key | Notes |
|
|
87
116
|
|-----------------|-----|---------|----------|------------------------|
|
|
88
|
-
| **Google Maps** | ✅ |
|
|
117
|
+
| **Google Maps** | ✅ | ✅ | Required | Best global coverage |
|
|
89
118
|
| **Apple Maps** | 🔜 | — | Free | iOS only, zero SDK |
|
|
90
119
|
| **Yandex Maps** | 🔜 | 🔜 | Required | Best for CIS countries |
|
|
91
120
|
|
|
@@ -126,14 +155,57 @@ Best for real estate, hospitality — what Zillow and Airbnb use.
|
|
|
126
155
|
|
|
127
156
|
## Documentation
|
|
128
157
|
|
|
158
|
+
### Getting Started
|
|
159
|
+
|
|
160
|
+
| Guide | Description |
|
|
161
|
+
|---|---|
|
|
162
|
+
| [**Installation**](docs-new/getting-started/installation.md) | Package install, peer dependencies, platform setup |
|
|
163
|
+
| [**Google Maps Setup**](docs-new/getting-started/google-maps-setup.md) | API keys, iOS Podfile, Android manifest |
|
|
164
|
+
| [**Quick Start**](docs-new/getting-started/quick-start.md) | Minimal working example in 30 lines |
|
|
165
|
+
|
|
166
|
+
### Guides
|
|
167
|
+
|
|
168
|
+
| Guide | Description |
|
|
169
|
+
|---|---|
|
|
170
|
+
| [**Map Configuration**](docs-new/guides/map-configuration.md) | Map type, gestures, traffic, buildings, padding, dark mode |
|
|
171
|
+
| [**Camera & Regions**](docs-new/guides/camera-and-regions.md) | initialRegion vs region, controlled camera, fit to coordinates |
|
|
172
|
+
| [**Markers**](docs-new/guides/markers.md) | Marker, PriceMarker, ImageMarker — all 3 types |
|
|
173
|
+
| [**Marker Selection**](docs-new/guides/marker-selection.md) | Select/deselect, visual states, info windows |
|
|
174
|
+
| [**Clustering**](docs-new/guides/clustering.md) | Supercluster vs hideOnOverlap, config, performance |
|
|
175
|
+
| [**Overlays**](docs-new/guides/overlays.md) | Polylines, polygons, circles |
|
|
176
|
+
| [**User Location**](docs-new/guides/user-location.md) | Blue dot, custom marker, tracking modes, permissions |
|
|
177
|
+
| [**Styling & Themes**](docs-new/guides/styling-and-themes.md) | Provider-aware themes, Google JSON styles, dark mode |
|
|
178
|
+
| [**Colors**](docs-new/guides/colors.md) | ColorValue, hex(), rgb(), color presets |
|
|
179
|
+
|
|
180
|
+
### API Reference
|
|
181
|
+
|
|
182
|
+
| Reference | Description |
|
|
183
|
+
|---|---|
|
|
184
|
+
| [**NitroMap**](docs-new/api-reference/nitro-map.md) | All props, events, and ref methods |
|
|
185
|
+
| [**Marker**](docs-new/api-reference/marker.md) | Default pin marker props |
|
|
186
|
+
| [**PriceMarker**](docs-new/api-reference/price-marker.md) | Price tag marker props |
|
|
187
|
+
| [**ImageMarker**](docs-new/api-reference/image-marker.md) | Custom image marker props |
|
|
188
|
+
| [**NitroPolyline**](docs-new/api-reference/polyline.md) | Polyline overlay props |
|
|
189
|
+
| [**NitroPolygon**](docs-new/api-reference/polygon.md) | Polygon overlay props |
|
|
190
|
+
| [**NitroCircle**](docs-new/api-reference/circle.md) | Circle overlay props |
|
|
191
|
+
| [**Initialization**](docs-new/api-reference/initialization.md) | NitroMapInitialize, config |
|
|
192
|
+
| [**Types**](docs-new/api-reference/types.md) | All exported TypeScript types |
|
|
193
|
+
|
|
194
|
+
### Advanced
|
|
195
|
+
|
|
196
|
+
| Guide | Description |
|
|
197
|
+
|---|---|
|
|
198
|
+
| [**Imperative API**](docs-new/advanced/imperative-api.md) | Ref methods, declarative vs imperative |
|
|
199
|
+
| [**Performance**](docs-new/advanced/performance.md) | Large datasets, clustering tuning, memo optimization |
|
|
200
|
+
| [**Provider System**](docs-new/advanced/provider-system.md) | Multi-provider architecture, roadmap |
|
|
201
|
+
| [**Accessibility**](docs-new/advanced/accessibility.md) | VoiceOver, TalkBack, best practices |
|
|
202
|
+
|
|
203
|
+
### Other
|
|
204
|
+
|
|
129
205
|
| Guide | Description |
|
|
130
206
|
|---|---|
|
|
131
|
-
| [**
|
|
132
|
-
| [**
|
|
133
|
-
| [**Clustering**](docs/clustering.md) | Strategies, live clustering, render buffer, performance |
|
|
134
|
-
| [**Feature Support**](docs/features.md) | What's available on each provider |
|
|
135
|
-
| [**Examples**](docs/examples.md) | Selection, dragging, clustering, overlays |
|
|
136
|
-
| [**Migration**](docs/migration.md) | Breaking changes between versions |
|
|
207
|
+
| [**Migration**](docs-new/migration.md) | Breaking changes, migrating from react-native-maps |
|
|
208
|
+
| [**Troubleshooting**](docs-new/troubleshooting.md) | Common errors, platform gotchas, FAQ |
|
|
137
209
|
|
|
138
210
|
## Architecture
|
|
139
211
|
|
|
@@ -157,7 +229,8 @@ Best for real estate, hospitality — what Zillow and Airbnb use.
|
|
|
157
229
|
▼ ▼ ▼
|
|
158
230
|
Google Apple Yandex
|
|
159
231
|
Provider Provider Provider
|
|
160
|
-
(Swift
|
|
232
|
+
(Swift/ (Swift) (Swift/
|
|
233
|
+
Kotlin) Kotlin)
|
|
161
234
|
│ │ │
|
|
162
235
|
▼ ▼ ▼
|
|
163
236
|
GMSMapView MKMapView YMKMapView
|
package/android/CMakeLists.txt
CHANGED
|
@@ -9,7 +9,10 @@ set(CMAKE_CXX_STANDARD 20)
|
|
|
9
9
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,max-page-size=16384")
|
|
10
10
|
|
|
11
11
|
# Define C++ library and add all sources
|
|
12
|
-
add_library(${PACKAGE_NAME} SHARED
|
|
12
|
+
add_library(${PACKAGE_NAME} SHARED
|
|
13
|
+
src/main/cpp/cpp-adapter.cpp
|
|
14
|
+
src/main/cpp/ClusterEngineJNI.cpp
|
|
15
|
+
)
|
|
13
16
|
|
|
14
17
|
# Add Nitrogen specs :)
|
|
15
18
|
include(${CMAKE_SOURCE_DIR}/../nitrogen/generated/android/nitromap+autolinking.cmake)
|
package/android/build.gradle
CHANGED
|
@@ -106,8 +106,12 @@ android {
|
|
|
106
106
|
}
|
|
107
107
|
|
|
108
108
|
compileOptions {
|
|
109
|
-
sourceCompatibility JavaVersion.
|
|
110
|
-
targetCompatibility JavaVersion.
|
|
109
|
+
sourceCompatibility JavaVersion.VERSION_17
|
|
110
|
+
targetCompatibility JavaVersion.VERSION_17
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
kotlinOptions {
|
|
114
|
+
jvmTarget = "17"
|
|
111
115
|
}
|
|
112
116
|
|
|
113
117
|
sourceSets {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
NitroMap_kotlinVersion=2.
|
|
2
|
-
NitroMap_minSdkVersion=
|
|
3
|
-
NitroMap_targetSdkVersion=
|
|
4
|
-
NitroMap_compileSdkVersion=
|
|
1
|
+
NitroMap_kotlinVersion=2.1.20
|
|
2
|
+
NitroMap_minSdkVersion=26
|
|
3
|
+
NitroMap_targetSdkVersion=36
|
|
4
|
+
NitroMap_compileSdkVersion=36
|
|
5
5
|
NitroMap_ndkVersion=27.1.12297006
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JNI bridge for C++ ClusterEngine.
|
|
3
|
+
* Mirrors iOS ClusterEngineWrapper.mm — same C++ engine, JNI interface.
|
|
4
|
+
*
|
|
5
|
+
* L-6: JNI class/method IDs are cached on first use to avoid repeated lookups.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#include <jni.h>
|
|
9
|
+
#include <string>
|
|
10
|
+
#include <mutex>
|
|
11
|
+
#include "ClusterEngine.hpp"
|
|
12
|
+
|
|
13
|
+
using namespace nitromap;
|
|
14
|
+
|
|
15
|
+
// ============================================================================
|
|
16
|
+
// L-6: Cached JNI class/method IDs (populated once, thread-safe)
|
|
17
|
+
// ============================================================================
|
|
18
|
+
|
|
19
|
+
static struct {
|
|
20
|
+
jclass resultClass = nullptr;
|
|
21
|
+
jclass clusterClass = nullptr;
|
|
22
|
+
jclass singleClass = nullptr;
|
|
23
|
+
jclass stringClass = nullptr;
|
|
24
|
+
jmethodID resultCtor = nullptr;
|
|
25
|
+
jmethodID clusterCtor = nullptr;
|
|
26
|
+
jmethodID singleCtor = nullptr;
|
|
27
|
+
std::once_flag initFlag;
|
|
28
|
+
} jniCache;
|
|
29
|
+
|
|
30
|
+
static void ensureJniCacheInitialized(JNIEnv *env) {
|
|
31
|
+
std::call_once(jniCache.initFlag, [env]() {
|
|
32
|
+
// Use global refs so they survive across JNI calls
|
|
33
|
+
jclass localResult = env->FindClass("com/margelo/nitro/nitromap/clustering/NitroClusterEngine$ClusteringResultJNI");
|
|
34
|
+
jclass localCluster = env->FindClass("com/margelo/nitro/nitromap/clustering/NitroClusterEngine$ClusterDataJNI");
|
|
35
|
+
jclass localSingle = env->FindClass("com/margelo/nitro/nitromap/clustering/NitroClusterEngine$SingleMarkerJNI");
|
|
36
|
+
jclass localString = env->FindClass("java/lang/String");
|
|
37
|
+
|
|
38
|
+
jniCache.resultClass = (jclass)env->NewGlobalRef(localResult);
|
|
39
|
+
jniCache.clusterClass = (jclass)env->NewGlobalRef(localCluster);
|
|
40
|
+
jniCache.singleClass = (jclass)env->NewGlobalRef(localSingle);
|
|
41
|
+
jniCache.stringClass = (jclass)env->NewGlobalRef(localString);
|
|
42
|
+
|
|
43
|
+
jniCache.resultCtor = env->GetMethodID(jniCache.resultClass, "<init>",
|
|
44
|
+
"([Lcom/margelo/nitro/nitromap/clustering/NitroClusterEngine$ClusterDataJNI;"
|
|
45
|
+
"[Lcom/margelo/nitro/nitromap/clustering/NitroClusterEngine$SingleMarkerJNI;)V");
|
|
46
|
+
jniCache.clusterCtor = env->GetMethodID(jniCache.clusterClass, "<init>", "(DDI[Ljava/lang/String;D)V");
|
|
47
|
+
jniCache.singleCtor = env->GetMethodID(jniCache.singleClass, "<init>", "(Ljava/lang/String;DD)V");
|
|
48
|
+
|
|
49
|
+
env->DeleteLocalRef(localResult);
|
|
50
|
+
env->DeleteLocalRef(localCluster);
|
|
51
|
+
env->DeleteLocalRef(localSingle);
|
|
52
|
+
env->DeleteLocalRef(localString);
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
extern "C" {
|
|
57
|
+
|
|
58
|
+
// ============================================================================
|
|
59
|
+
// Lifecycle
|
|
60
|
+
// ============================================================================
|
|
61
|
+
|
|
62
|
+
JNIEXPORT jlong JNICALL
|
|
63
|
+
Java_com_margelo_nitro_nitromap_clustering_NitroClusterEngine_nativeCreate(JNIEnv *, jobject) {
|
|
64
|
+
return reinterpret_cast<jlong>(new ClusterEngine());
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
JNIEXPORT void JNICALL
|
|
68
|
+
Java_com_margelo_nitro_nitromap_clustering_NitroClusterEngine_nativeDestroy(JNIEnv *, jobject, jlong ptr) {
|
|
69
|
+
delete reinterpret_cast<ClusterEngine *>(ptr);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// ============================================================================
|
|
73
|
+
// Configuration
|
|
74
|
+
// ============================================================================
|
|
75
|
+
|
|
76
|
+
JNIEXPORT void JNICALL
|
|
77
|
+
Java_com_margelo_nitro_nitromap_clustering_NitroClusterEngine_nativeSetClusterRadius(
|
|
78
|
+
JNIEnv *, jobject, jlong ptr, jdouble radius) {
|
|
79
|
+
reinterpret_cast<ClusterEngine *>(ptr)->setClusterRadius(radius);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
JNIEXPORT void JNICALL
|
|
83
|
+
Java_com_margelo_nitro_nitromap_clustering_NitroClusterEngine_nativeSetMinClusterSize(
|
|
84
|
+
JNIEnv *, jobject, jlong ptr, jint size) {
|
|
85
|
+
reinterpret_cast<ClusterEngine *>(ptr)->setMinClusterSize(size);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
JNIEXPORT void JNICALL
|
|
89
|
+
Java_com_margelo_nitro_nitromap_clustering_NitroClusterEngine_nativeSetMaxZoom(
|
|
90
|
+
JNIEnv *, jobject, jlong ptr, jdouble zoom) {
|
|
91
|
+
reinterpret_cast<ClusterEngine *>(ptr)->setMaxZoom(zoom);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// ============================================================================
|
|
95
|
+
// Marker Management
|
|
96
|
+
// ============================================================================
|
|
97
|
+
|
|
98
|
+
JNIEXPORT void JNICALL
|
|
99
|
+
Java_com_margelo_nitro_nitromap_clustering_NitroClusterEngine_nativeAddMarker(
|
|
100
|
+
JNIEnv *env, jobject, jlong ptr, jstring jId, jdouble lat, jdouble lon) {
|
|
101
|
+
const char *idChars = env->GetStringUTFChars(jId, nullptr);
|
|
102
|
+
std::string id(idChars);
|
|
103
|
+
env->ReleaseStringUTFChars(jId, idChars);
|
|
104
|
+
|
|
105
|
+
MarkerPoint marker(id, lat, lon);
|
|
106
|
+
reinterpret_cast<ClusterEngine *>(ptr)->addMarker(marker);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
JNIEXPORT void JNICALL
|
|
110
|
+
Java_com_margelo_nitro_nitromap_clustering_NitroClusterEngine_nativeRemoveMarker(
|
|
111
|
+
JNIEnv *env, jobject, jlong ptr, jstring jId) {
|
|
112
|
+
const char *idChars = env->GetStringUTFChars(jId, nullptr);
|
|
113
|
+
std::string id(idChars);
|
|
114
|
+
env->ReleaseStringUTFChars(jId, idChars);
|
|
115
|
+
|
|
116
|
+
reinterpret_cast<ClusterEngine *>(ptr)->removeMarker(id);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
JNIEXPORT void JNICALL
|
|
120
|
+
Java_com_margelo_nitro_nitromap_clustering_NitroClusterEngine_nativeClearMarkers(
|
|
121
|
+
JNIEnv *, jobject, jlong ptr) {
|
|
122
|
+
reinterpret_cast<ClusterEngine *>(ptr)->clearMarkers();
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
JNIEXPORT jint JNICALL
|
|
126
|
+
Java_com_margelo_nitro_nitromap_clustering_NitroClusterEngine_nativeMarkerCount(
|
|
127
|
+
JNIEnv *, jobject, jlong ptr) {
|
|
128
|
+
return static_cast<jint>(reinterpret_cast<ClusterEngine *>(ptr)->markerCount());
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// ============================================================================
|
|
132
|
+
// Clustering (L-6: uses cached JNI IDs)
|
|
133
|
+
// ============================================================================
|
|
134
|
+
|
|
135
|
+
JNIEXPORT jobjectArray JNICALL
|
|
136
|
+
Java_com_margelo_nitro_nitromap_clustering_NitroClusterEngine_nativeCluster(
|
|
137
|
+
JNIEnv *env, jobject, jlong ptr,
|
|
138
|
+
jdouble minLat, jdouble maxLat, jdouble minLon, jdouble maxLon,
|
|
139
|
+
jdouble zoom, jdouble mapW, jdouble mapH) {
|
|
140
|
+
|
|
141
|
+
auto *engine = reinterpret_cast<ClusterEngine *>(ptr);
|
|
142
|
+
ClusterResult result = engine->cluster(minLat, maxLat, minLon, maxLon, zoom, mapW, mapH);
|
|
143
|
+
|
|
144
|
+
// L-6: Ensure cached IDs are initialized
|
|
145
|
+
ensureJniCacheInitialized(env);
|
|
146
|
+
|
|
147
|
+
// Build cluster array
|
|
148
|
+
jobjectArray clusterArray = env->NewObjectArray(
|
|
149
|
+
static_cast<jsize>(result.clusters.size()), jniCache.clusterClass, nullptr);
|
|
150
|
+
|
|
151
|
+
for (size_t i = 0; i < result.clusters.size(); i++) {
|
|
152
|
+
const auto &c = result.clusters[i];
|
|
153
|
+
|
|
154
|
+
// Build marker ID string array
|
|
155
|
+
jobjectArray idArray = env->NewObjectArray(
|
|
156
|
+
static_cast<jsize>(c.markerIds.size()),
|
|
157
|
+
jniCache.stringClass, nullptr);
|
|
158
|
+
for (size_t j = 0; j < c.markerIds.size(); j++) {
|
|
159
|
+
jstring jStr = env->NewStringUTF(c.markerIds[j].c_str());
|
|
160
|
+
env->SetObjectArrayElement(idArray, static_cast<jsize>(j), jStr);
|
|
161
|
+
env->DeleteLocalRef(jStr);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
jobject clusterObj = env->NewObject(jniCache.clusterClass, jniCache.clusterCtor,
|
|
165
|
+
c.latitude, c.longitude, c.count, idArray,
|
|
166
|
+
Cluster::iconSize(c.count));
|
|
167
|
+
env->SetObjectArrayElement(clusterArray, static_cast<jsize>(i), clusterObj);
|
|
168
|
+
env->DeleteLocalRef(idArray);
|
|
169
|
+
env->DeleteLocalRef(clusterObj);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// Build single markers array
|
|
173
|
+
jobjectArray singleArray = env->NewObjectArray(
|
|
174
|
+
static_cast<jsize>(result.singleMarkers.size()), jniCache.singleClass, nullptr);
|
|
175
|
+
|
|
176
|
+
for (size_t i = 0; i < result.singleMarkers.size(); i++) {
|
|
177
|
+
const auto &s = result.singleMarkers[i];
|
|
178
|
+
jstring jId = env->NewStringUTF(s.id.c_str());
|
|
179
|
+
jobject singleObj = env->NewObject(jniCache.singleClass, jniCache.singleCtor,
|
|
180
|
+
jId, s.latitude, s.longitude);
|
|
181
|
+
env->SetObjectArrayElement(singleArray, static_cast<jsize>(i), singleObj);
|
|
182
|
+
env->DeleteLocalRef(jId);
|
|
183
|
+
env->DeleteLocalRef(singleObj);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
// Create result
|
|
187
|
+
jobject resultObj = env->NewObject(jniCache.resultClass, jniCache.resultCtor, clusterArray, singleArray);
|
|
188
|
+
env->DeleteLocalRef(clusterArray);
|
|
189
|
+
env->DeleteLocalRef(singleArray);
|
|
190
|
+
|
|
191
|
+
// Return as single-element array (workaround for returning object)
|
|
192
|
+
jobjectArray wrapper = env->NewObjectArray(1, jniCache.resultClass, resultObj);
|
|
193
|
+
env->DeleteLocalRef(resultObj);
|
|
194
|
+
|
|
195
|
+
return wrapper;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
} // extern "C"
|