I have been searching the web for proper documentation in regards to this error, am in in no luck as i am unable to determine the cause of this error.
Here is the my entire code:
First section: setting the states
export default class Whereto extends Component<{}> {
constructor(props) {
super(props);
this.state = {
latitude: null,
longitude: null,
location: null,
error: null,
markers:[],
};
}
Second section Component did Mount
componentDidMount() {
navigator.geolocation.getCurrentPosition(
(position) => {
this.setState({
latitude: position.coords.latitude,
longitude: position.coords.longitude,
error: null,
});
//geocode api
var myApiKey = '';
fetch('https://maps.googleapis.com/maps/api/geocode/json?address=' + position.coords.latitude + ',' + position.coords.longitude + '&key=' + myApiKey)
.then((response) => response.json())
.then((responseJson) => {
//console.log('ADDRESS GEOCODE is BACK!! => ' + JSON.stringify(responseJson));
var locationName = responseJson.results[0].address_components.filter(x => x.types.filter(t => t === 'administrative_area_level_2').length > 0)[0].short_name;
//console.log(locationName);
this.setState({
location: locationName,
})
})
//nearby api
var apiPlaceskey = '';
//https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=-33.8670522,151.1957362&radius=500&type=restaurant&keyword=cruise&key=YOUR_API_KEY
fetch('https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=' + position.coords.latitude + ',' + position.coords.longitude + '&radius=2000&type=bus_station&key=' + apiPlaceskey)
.then((respplaces) => respplaces.json())
.then((responseJson2) => {
const markers = responseJson2.results.map((result) => ({
latlng: {
latitude: result.geometry.location.lat,
longitude: result.geometry.location.lng,
}
}));
this.setState({ markers });
});
},
(error) => this.setState({error: error.message}),
{enableHighAccuracy: true, timeout: 20000, maximumAge: 1000},
);
}
Third section: A function reserved when a a touchable button is tapped on my render and View section
fetchDirections = () => {
//directions api
var apiDirectionskey = '';
//const {location} = this.state;
const {latitude} = this.state;
const {longitude} = this.state;
fetch('https://maps.googleapis.com/maps/api/directions/json?origin=' + latitude + ',' + longitude + '&destination=' + goingto + '&mode=transit&transit_mode=bus&key=' + apiDirectionskey)
.then((resdirections) => resdirections.json())
.then((responseJson3) => {
console.log(responseJson3);
});
}
render(){
return(
<View style={styles.container}>
<Mainlogo/>
<TextInput style={styles.boxInput} underlineColorAndroid='rgba(0,0,0,0)' placeholder="Going To?"
underlineColorAndroid='transparent'
onChangeText={(dest) => this.setState({goingto : dest})}
/>
<TouchableOpacity style={styles.button} onPress={this.fetchDirections.bind(this)}>
<Text style={styles.textButton}> Go {this.props.type}</Text>
</TouchableOpacity>
<MapView style={styles.map}
region={{
latitude: this.state.latitude,
longitude: this.state.longitude,
latitudeDelta: 0.02,
longitudeDelta: 0.02
}}
>
</MapView>
<MapView.Marker
coordinate={{
latitude: this.state.latitude,
longitude: this.state.longitude,
latitudeDelta: 0.02,
longitudeDelta: 0.02
}}
image={require('../img/my-pin-512.png')}
title={'you are here'}
/>
{this.state.markers.map(marker => (
<MapView.Marker
coordinate={marker.latlng}
image={require('../img/busstop.png')}
/>
))}
</View>
)
}
}
To get to this stage a touchableopacity is tapped from my main profile page. I realised that i am using componendDidMount and a seperate fetch function to call another API call. It seems that it is not getting enough time to pupulate the states to cause the null values
Set initial state values to 0 instead of null.
this.state = {
latitude:0,
longitude: 0,
latitudeDelta: 0.09,
longitudeDelta: 0.02,
};
I was receiving the lat, lng value as props so what worked for me was:
<Marker
coordinate={{
longitude: longitude ? longitude : 0,
latitude: latitude ? latitude : 0
}}
title={'owner location'}
/>
Changing the initial value in coordinates from null
to []
solved the issue.
<MapView.Polyline
strokeWidth={2}
strokeColor="#00ff00"
coordinates={coords}
/>
passing this helped me solve this:
coordinate={{
latitude: props && props.position && Number(props.position.latitude) ? Number(props.position.latitude) : 0,
longitude: props && props.position && Number(props.position.longitude) ? Number(props.position.longitude) : 0
}}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With