React Native / Expo AMap (Gaode Map) solution for China map apps, with map rendering, location, search, navigation, and offline map support.
A fully-featured Amap (Gaode Map) React Native library, built with Expo Modules API, using Monorepo architecture. It provides complete functionality including map display, location, search, navigation, and Web API.
๐ก This library is built using Expo Modules API, providing type-safe native module interfaces and an excellent developer experience.
๐ Online Documentation ยท ๐ Example Repository
Includes complete API documentation, usage guides, and example code:
- Getting Started
- Initialization Guide
- Search Functionality
- Navigation Functionality
- Web API
- API Reference
- Usage Examples
If your target is China map products with Expo integration, New Architecture readiness, and a unified stack for map + search + navigation + offline capabilities,
expo-gaode-mapis built as a production-first default.
| Comparison | expo-gaode-map | react-native-maps (general map stack) | react-native-amap3d (older community AMap stack) |
|---|---|---|---|
| China map readiness (AMap) | โ Designed around native AMap capabilities | โ Core AMap capabilities | |
| Expo integration experience | โ Expo Modules + Config Plugin (auto key/permission setup) | ||
| React Native New Architecture (Fabric/TurboModules) | โ Explicit New + Old Architecture support | โ
/ |
|
| Unified stack (Map + Search + Navigation + Web API) | โ Four coordinated packages in one monorepo | โ Usually multi-library assembly | โ Primarily map-layer scope |
| Navigation (route planning + nav view) | โ
expo-gaode-map-navigation |
โ | โ |
| Search stack (POI/nearby/geocode) | โ
expo-gaode-map-search + web-api |
โ | |
| Offline maps | โ Built-in APIs | ||
| Geometry utilities (TS + C++) | โ Built in (distance/area/simplification/nearest point, etc.) | โ | โ |
| Privacy compliance + typed error guidance | โ Built in with solution links | ||
| Maintenance signal | โ Active releases + docs + example repo | โ Active but general-map focused |
Note: Comparison is based on public documentation and common engineering usage patterns as of 2026-04-15.
- โ Complete map functionality (multiple map types, gesture controls, camera operations, offline maps)
- โ Precise location (continuous location, single location, coordinate conversion)
- โ Rich overlays (Circle, Marker, Polyline, Polygon, HeatMap, Cluster, etc.)
- โ Friendly error notification system (detailed solutions and documentation links)
- โ Complete TypeScript type definitions
- โ Cross-platform support (Android, iOS)
- โ Supports both new and old React Native architectures (Paper & Fabric)
- โ High test coverage
- โ User-friendly error notification system
- โ Custom Marker overlay support
- โ Lean native implementation with simpler lifecycle management and lower maintenance cost
- ๐ Search Functionality (expo-gaode-map-search) - POI search, nearby search, keyword search, geocoding, etc.
- ๐งญ Navigation Functionality (expo-gaode-map-navigation) - Driving, walking, cycling, truck route planning, real-time navigation
- ๐ Web API (expo-gaode-map-web-api) - Pure JavaScript implementation of route planning, geocoding, POI search, etc.
โ ๏ธ Version Compatibility:
- If you are using Expo SDK 54+, please install the Latest version.
- If you are using Expo SDK 53 or lower (e.g., 50, 51, 52, 53), please use the V1 version (Tag:
v1).Note: V1 version does not support World Map functionality. Please upgrade to Expo SDK 54+ for World Map support.npm install expo-gaode-map@v1.2.3
npm install expo-gaode-map
# Optional modules
npm install expo-gaode-map-search # Search functionality
npm install expo-gaode-map-web-api # Web APInpm install expo-gaode-map-navigation # Includes map + navigation
# Optional modules
npm install expo-gaode-map-web-api # Web API
โ ๏ธ Important:expo-gaode-mapandexpo-gaode-map-navigationcannot be installed simultaneously due to SDK conflicts. Choose one.
This library is built with Expo Modules. If your app is a plain React Native project (not Expo managed), install Expo Modules first:
npx install-expo-modules@latestThen install this package and rebuild native projects:
npm install expo-gaode-map
cd ios && pod install && cd ..
npx react-native run-ios
npx react-native run-androidIf your project already has Expo Modules integrated, you can skip install-expo-modules.
Configure in app.json to automatically set up native API keys and permissions:
{
"expo": {
"plugins": [
[
"expo-gaode-map", // or "expo-gaode-map-navigation"
{
"androidKey": "your-android-key",
"iosKey": "your-ios-key"
}
]
]
}
}After configuration, rebuild:
npx expo prebuild --clean
npx expo run:android
npx expo run:iosWith Config Plugin (androidKey / iosKey) configured, the native map SDK is auto-initialized by default on app startup.
ExpoGaodeMapModule.initSDK({ webKey }) is only needed when you use expo-gaode-map-web-api (or when you want to set a runtime webKey manually).
If you do not use Config Plugin, you must call:
ExpoGaodeMapModule.initSDK({
androidKey: 'your-android-key',
iosKey: 'your-ios-key',
});before using map/location/navigation/search capabilities.
On a fresh install (or after your privacy policy version changes), you must complete privacy consent before rendering MapView.
After consent is granted once, native iOS / Android now persist and auto-restore the privacy state on later cold starts, so you do not need to call setPrivacyConfig() again on every app launch.
import { ExpoGaodeMapModule } from 'expo-gaode-map';
const privacyStatus = ExpoGaodeMapModule.getPrivacyStatus();
if (!privacyStatus.isReady) {
// Call these in your own privacy dialog "Agree" callback
ExpoGaodeMapModule.setPrivacyConfig({
hasShow: true,
hasContainsPrivacy: true,
hasAgree: true,
privacyVersion: '2026-03-13',
});
}
// With Config Plugin: only needed when you use expo-gaode-map-web-api
ExpoGaodeMapModule.initSDK({ webKey: 'your-web-api-key' });If privacy consent is missing on a fresh install, the library now throws a clear PRIVACY_NOT_AGREED error instead of leaving the native SDK to fail unpredictably.
For detailed initialization and usage guides, please see:
| Feature | Core Package | Search Package | Navigation Package | Web API |
|---|---|---|---|---|
| Map Display | โ | โ | โ | โ |
| Location | โ | โ | โ | โ |
| Overlays | โ | โ | โ | โ |
| POI Search | โ | โ | โ | โ |
| Geocoding | โ | โ | โ | โ |
| Route Planning | โ | โ | โ | โ |
| Real-time Navigation | โ | โ | โ | โ |
| Platform | Native | Native | Native | Web/Native |
expo-gaode-map/
โโโ packages/
โ โโโ core/ # expo-gaode-map (Core package)
โ โ โโโ Map display, location, overlays
โ โโโ search/ # expo-gaode-map-search (Search package)
โ โ โโโ POI search, geocoding
โ โโโ navigation/ # expo-gaode-map-navigation (Navigation package)
โ โ โโโ Map + navigation (replaces core)
โ โโโ web-api/ # expo-gaode-map-web-api (Web API)
โ โโโ Pure JS route planning, etc.
โโโ Note: core and navigation cannot be installed together
- Only need map and location โ Install
expo-gaode-map - Need navigation functionality โ Install
expo-gaode-map-navigation(includes map functionality) - Cannot install both: Due to native SDK conflicts, you can only choose one
- Search package (
expo-gaode-map-search): Native implementation, better performance, requires native environment configuration - Web API (
expo-gaode-map-web-api): Pure JavaScript, no native configuration needed, better cross-platform compatibility
It's recommended to use Config Plugin for automatic configuration. See: Initialization Guide
expo-gaode-map provides a comprehensive error handling system:
import ExpoGaodeMapModule, { GaodeMapError, ErrorType } from 'expo-gaode-map';
try {
await ExpoGaodeMapModule.getCurrentLocation();
} catch (error) {
if (error instanceof GaodeMapError) {
console.error(error.message); // Friendly error message
console.log(error.solution); // Detailed solution
console.log(error.docUrl); // Related documentation link
}
}Complete Error Handling Guide: ERROR_HANDLING_GUIDE.md
Supported error types:
SDK_NOT_INITIALIZED- SDK not initializedINVALID_API_KEY- API key configuration errorPERMISSION_DENIED- Permission not grantedLOCATION_FAILED- Location failedMAP_VIEW_NOT_INITIALIZED- Map view not initialized- More error types...
Issues and Pull Requests are welcome!
MIT
- Online Documentation
- Error Handling Guide ๐
- GitHub Repository
- Example Project
- Amap Open Platform
- Expo Modules API
This project referenced the following excellent projects during development:
- react-native-amap3d - An excellent React Native Amap component
Thank you to all contributors of these open-source projects!
If you encounter any issues or have any suggestions during usage, please feel free to:
- ๐ Submit a GitHub Issue
- ๐ฌ Join Discussions
- โญ Give the project a Star to show your support
- QQ๏ผ582752848 ๏ผๅฆๆๆๅจ่ฏข็๏ผ้ๆถ่็ณปๆ๏ผ