Multi-platform Geocoding library for React Native apps.
The project is originally forked from devfd/react-native-geocoder. Since 1.0 the project have been refactored and supports more features includes web support, maximum results limit, search boundary and request headers for Google Maps API.
Note: This is a pre-release version.
If you're looking for v0.x verison, please go to v0.x branch.
Please check the GitHub Release page for Version 1.0.0 Full Changelog and Migration Guide. [WORKING IN PROGRESS]
npm install @timwangdev/react-native-geocoderor
yarn add @timwangdev/react-native-geocoderPlease review autolinking docs for detials.
If "Autolinking" is not available for you, please try the following:
Use `react-native link`
react-native link @timwangdev/react-native-geocoder
Manually
If automatic linking fails you can follow the manual installation steps- Add
pod 'react-native-geocoder', :path => '../node_modules/@timwangdev/react-native-geocoder/react-native-geocoder.podspec'to your Podfile. - Run
pod install.
- In the XCode's "Project navigator", right click on Libraries folder under your project β
Add Files to <...> - Go to
node_modulesβ@timwangdev/react-native-geocoderand addios/RNGeocoder.xcodeprojfile - Add
libGeocoder.ato "Build Phases" -> "Link Binary With Libraries"
- In
android/setting.gradleadd:
...
include ':react-native-geocoder', ':app'
project(':react-native-geocoder').projectDir = new File(rootProject.projectDir, '../node_modules/@timwangdev/react-native-geocoder/android')- In
android/app/build.gradle
...
dependencies {
...
implementation project(':react-native-geocoder')
}- Register module (in MainApplication.java)
import com.timwangdev.reactnativegeocoder.GeocoderPackage; // <--- Add this line
public class MainActivity extends ReactActivity {
...
@Override
protected List<ReactPackage> getPackages() {
...
packages.add(new GeocoderPackage()); // <--- Add this line
return packages;
}
...
}import Geocoder from '@timwangdev/react-native-geocoder';
try {
...
const position = { lat: 1.2, lng: -3.4 };
await Geocoder.geocodePosition(position);
...
await Geocoder.geocodeAddress('Paris', {
locale: 'fr',
maxResults: 2,
});
...
} catch(err) {
...
}-
Geocoder.geocodeAddress(address: string, options?: GeocoderOptions)-
Returns
Promise<GeocodingObject[]> -
Supports
regionIoson iOS for preferred search boundary. -
Supports
boundson Android and Google Maps API.
-
-
Geocoder.geocodePosition(position: { lat: number, lng: number }, options?: GeocoderOptions)- Returns
Promise<GeocodingObject[]>
- Returns
{
// Your Google Maps API key, required if `fallbackToGoogle` or `forceGoogleOnIos` is `true`.
apiKey?: string;
// Preferred Locale for outputs, defaults to 'en'. (See Note 1)
locale?: string;
// Max number of addresses to return, defaults to 2. (See Note 2)
maxResults?: number;
// (Android and Google only) Set the bounds for address geocoding. (See Note 3)
bounds?: {
// Lower left corner
sw: { lat: number, lng: number },
// Upper right corner
ne: { lat: number, lng: number },
};
// (iOS native only) Set circular region for address geocoding. (See Note 3)
regionIos?: {
// Center of the circular region
center: { lat: number, lng: number },
// Radius of the circular region. Unit: km
radius: number,
};;
// Should use Google Maps API if native query fails, defaults to false.
fallbackToGoogle?: boolean;
// Should always use Google Maps API on iOS, defaults to false. (See Note 4)
forceGoogleOnIos?: boolean;
}-
Platforms may have different implantations for locale preference. Here is Google Maps API supported language list.
-
Generally, only one entry will return, though the geocoder may return several results when address queries are ambiguous. Smaller numbers (1 to 5) for
maxResultsare recommended. -
On iOS the preferred search boundary for address geocoding only support "circular" region, while on Android and Google Maps API it using "rectangular" bounds.
regionIoswill have no effect ifforceGoogleOnIosistrue. -
Use
forceGoogleOnIosif you want consistent result on both iOS and Android platform, due to the limitation of iOS native implantation. -
REMOVED
requestHeadersis useful together with Google API credentials restrictions by setting theRefererheader. See #20. -
In order to avoid hitting rate limit or reducing API queries, you should cache the results in your program whenever possible.
{
position: { lat: number, lng: number };
// The full formatted address
formattedAddress: string;
// Example: Yosemite Park, Eiffel Tower
feature: string | null;
streetNumber: string | null;
streetName: string | null;
postalCode: string | null;
// City name
locality: string | null;
country: string;
countryCode: string;
adminArea: string | null;
subAdminArea: string | null;
subLocality: string | null;
}MIT