React Native Mapbox GL自定义地图创建模块
React Native Mapbox GL 是绑定 Mapbox GL 地图的 React Native 组件。
安装:
npm install react-native-mapbox-gl --save
示例:
'use strict';
var React = require('react-native');
var MapboxGLMap = require('react-native-mapbox-gl');
var mapRef = 'mapRef';
var {
AppRegistry,
StyleSheet,
View,
Text,
StatusBarIOS,
} = React;
var map = React.createClass({
mixins: [MapboxGLMap.Mixin],
getInitialState() {
return {
mapLocation: {
latitude: 0,
longitude: 0
},
center: {
latitude: 40.72052634,
longitude: -73.97686958312988
},
zoom: 11,
direction: 40,
annotations: [{
latitude: 40.72052634,
longitude: -73.97686958312988,
title: 'This is marker 1',
},{
latitude: 40.714541341726175,
longitude: -74.00579452514648,
subtitle: 'Neat, this is a subtitle'
}]
}
},
onChange(e) {
this.setState({ currentZoom: e.zoom });
},
onUpdateUserLocation(location) {
console.log(location)
},
onOpenAnnotation(annotation) {
console.log(annotation)
},
render: function() {
StatusBarIOS.setHidden(true);
return (
<View style={styles.container}>
<Text style={styles.text} onPress={() => this.setDirectionAnimated(mapRef, 0)}>
Set direction to 0
</Text>
<Text style={styles.text} onPress={() => this.setZoomLevelAnimated(mapRef, 6)}>
Zoom out to zoom level 6
</Text>
<Text style={styles.text} onPress={() => this.setCenterCoordinateAnimated(mapRef, 48.8589, 2.3447)}>
Go to Paris at current zoom level {parseInt(this.state.currentZoom)}
</Text>
<Text style={styles.text} onPress={() => this.setCenterCoordinateZoomLevelAnimated(mapRef, 35.68829, 139.77492, 14)}>
Go to Tokyo at fixed zoom level 14
</Text>
<Text style={styles.text} onPress={() => this.addAnnotations(mapRef, [{
latitude: 40.73312,
longitude: -73.989,
title: 'This is a new marker',
}])}>
Add new marker
</Text>
<MapboxGLMap
style={styles.map}
direction={10}
rotateEnabled={true}
showsUserLocation={true}
ref={mapRef}
accessToken={'your-mapbox.com-access-token'}
styleURL={'asset://styles/mapbox-streets-v7.json'}
centerCoordinate={this.state.center}
userLocationVisible={true}
zoomLevel={this.state.zoom}
onRegionChange={this.onChange}
annotations={this.state.annotations}
onOpenAnnotation={this.onOpenAnnotation}
onUpdateUserLocation={this.onUpdateUserLocation}/>
</View>
);
}
});
var styles = StyleSheet.create({
container: {
flexDirection: 'column',
flex: 1
},
map: {
flex:5,
},
text: {
padding: 2
}
});
AppRegistry.registerComponent('yourProjectName', () => map);
评论
