🗺 A simple cross-platform library to help perform map actions to the corresponding device's map (Google or Apple Maps)
react-native-open-maps
works by creating a deep link for either Apple maps or Google maps that can be used to open up the relevant map application. In order to maximize compatibility some platform specific parameters are omitted, but simplifies development efforts and ensures a smooth user experience.
Features
- ✅ Open the map coordinates immediately
- ✅ Create a delayed invoked
function
that will open the map - ✅ Create a
string
of the map link - Cross-compatible properties among both map applications
- Install the repository
$ npm install --save react-native-open-maps
- Add an import to the top of your file
import openMap from 'react-native-open-maps';
- Put it all together
import React, { Component } from 'react'; import { Button } from 'react-native'; import openMap from 'react-native-open-maps'; export default class App extends Component { _goToYosemite() { openMap({ latitude: 37.865101, longitude: -119.538330 }); } render() { return ( <Button color={'#bdc3c7'} onPress={this._goToYosemite} title="Click To Open Maps 🗺" /> ); } }
- BONUS: You can also create delayed functions for more of that
1 - 1
mapping flavor 🍦.
import { createOpenLink } from 'react-native-open-maps';
const yosemite = { latitude: 37.865101, longitude: -119.538330 };
const openYosemite = createOpenLink(yosemite);
const openYosemiteZoomedOut = createOpenLink({ ...yosemite, zoom: 30 });
const facebookHQ = { latitude: 37.4847, longitude: 122.1477 };
const openFacebookHQ = createOpenLink(facebookHQ);
// Condensed for Readability...
render() {
return (
<Button
color={'#bdc3c7'}
onPress={openYosemite}
title="Go to Yosemite 🏔" />
<Button
color={'#bdc3c7'}
onPress={openFacebookHQ}
title="Go to Facebook HQ 🕋" />
);
react-native-open-maps
immediately opens the map of the coordinates and the settings
Creates a delayed invoked function to open the map. This is useful for binding functions to onPress()
in a succinct manner. Think of it like ... function openToMe() { open(coordinates) }
Creates the raw link for the map.
🔑 Italicize indicates optional
Properties | Type | Description | Example |
---|---|---|---|
latitude | number |
The latitude | 37.865101 |
longitude | number |
The longitude | -119.538330 |
zoom | number |
The zoom level, only works with latitude and longitude |
18 Default: 15 |
provider | string [ google ,apple ] |
If no provider set, it will determine according to Platform.OS |
apple |
query | string |
Will act according to the map used. Refer to query property | "Yosemite Trail" |
travelType | enumeration : [drive , walk ,public_transport ] |
Use this parameter in conjunction with start and end to determine transportation type. Default is drive |
"drive" |
start | string that geolocation can understand |
The start location that can be interpreted as a geolocation, omit if you want to use current location / "My Location". See Apple and Google docs for more details on how to define geolocations. | "New York City, New York, NY" |
end | string that geolocation can understand. |
The end location that can be interpreted as a geolocation. See Apple and Google docs for more details on how to define geolocations. | "SOHO, New York, NY" |
Note: Combining query with latitude and longitude will override the query parameter.
To perform certain map actions refer these necessary parameters
- Setting Directions:
end
, [start
,travelType
] - Display Map Around Coordinates:
latitude
+longitude
, [zoom
] - Query Map For Location:
query
The query behavior differs per platform:
- Apple Maps: If
latitude
andlongitude
is provided, this will place a marker with thequery
as a label. If nolatitude
orlongitude
is provided, it will center map to closest query match. - Google Maps: Will override
latitude
andlongitude
if present and center map to closest query match. Without aquery
, you may however use<latitude>,<longitude>
as a string value in the query to have a unnamed marker on the map.
MIT © Brandon Him
If you like this repository, check out my other react-native projects or follow me for other open-source projects:
- react-native-masonry: A pure JS react-native component to render a masonry~ish layout for images with support for dynamic columns, progressive image loading, device rotation, on-press handlers, and headers/captions.
- react-native-hero: A super duper easy hero unit react-native component with support for dynamic image, dynamic sizing, color overlays, and more
- rn-component-cookbook: A open-source cookbook with recipes for handling everyday issues when building robust, modular react-native components
- generator-rnc: A yeoman generator to scaffold a ready-to-go, open-source react-native component (Jest, Package dependencies, Travis, etc)