How to auto zoom into your current location using React Native Maps
How to auto zoom into your current location using React Native Maps
React native maps (https://github.com/react-native-community/react-native-maps ) is the go to React Native component for setting up map in your React native application.
In this article, I will show you how to get current user location and zoom into your current location when the map is loaded.
Install the component from the documentation stated in https://github.com/react-native-community/react-native-maps/blob/master/docs/installation.md
npm install react-native-maps --save</span>
Followed by :
react-native link react-native-maps</span>
Remember to re run your Android or Ios application after linking. Import the MapView component :
import MapView, { AnimatedRegion } from “react-native-maps”;</span>
Initialize the following in your state :
mapRegion will store the region of the map after the map is loaded; lastLat and lastLng will be used to store the latest lat and lng values ; initialRegion will be used to store the initial region loaded fetched from the current user location. A region of a map is defined as follows :
region: {
latitude: 37.78825,
longitude: -122.4324,
latitudeDelta: 0.0922,
longitudeDelta: 0.0421
}</span>
Latitude delta is used to control the amount of map you want to display.In short the amount of zoom. As defined in the https://developer.apple.com/documentation/mapkit/mkcoordinatespan/1452417-latitudedelta : The amount of north-to-south distance (measured in degrees) to display on the map.
Create a function to fetch the current location :
Create a function to fetch the current location :
async getCurrentLocation() {
navigator.geolocation.getCurrentPosition(
position => {</span> <span id="7a26" class="de im in bo io b fp is it iu iv iw iq r ir">let region = {
latitude: parseFloat(position.coords.latitude),
longitude: parseFloat(position.coords.longitude),
latitudeDelta: 5,
longitudeDelta: 5
};
await this.setState({
initialRegion: region
});
},
error => console.log(error),
{
enableHighAccuracy: true,
timeout: 20000,
maximumAge: 1000
}
);
}</span>
Call the above function in componentDidMount()
componentDidMount(){
this.getCurrentLocation();
}</span>
Define the Map in the render function :
<MapView
style={customMapStyle}
region={this.state.mapRegion}
followUserLocation={true}
ref={ref => (this.mapView = ref)}
zoomEnabled={true}
showsUserLocation={true}
onMapReady={this.goToInitialRegion.bind(this)}
initialRegion={this.state.initialRegion}>
</MapView></span>
Define the function goToIntialRegion(). The latitude and longitude delta values are lowered to cover a smaller area of the map . animateToRegion() is a function that will animate to region passed as a parameter ( https://github.com/react-native-community/react-native-maps/blob/master/docs/mapview.md ) . This will be called when the map is ready :
goToInitialLocation() {
let initialRegion = Object.assign({}, this.state.initialRegion);
initialRegion["latitudeDelta"] = 0.005;
initialRegion["longitudeDelta"] = 0.005;
this.mapView.animateToRegion(initialRegion, 2000);
}</span>
When you re load your component , you will see that the map zooms into your current location. You can use the lastLat and lastLng values to set a custom marker on the map .