我使用react-native来构建地图应用程序。我正在使用的API来自此链接:https://github.com/lelandrichardson/react-native-maps。下面是我在我的应用上带来地图的代码。我徘徊如何在该地图上给出缩放值。以及当用户单击地图上的按钮时,如何更改缩放值。我应该用什么缩放API来实现这个目标?
import React, {
AppRegistry,
Component,
StyleSheet,
Text,
View,
Image,
ListView,
TextInput,
TouchableHighlight,
Dimensions,
//MapView,
} from 'react-native';
import MapView from 'react-native-maps';
const styles = StyleSheet.create({
map: {
position: 'absolute',
top: 0,
left: 0,
right: 0,
bottom: 0,
},
container: {
flexDirection: 'row',
justifyContent: 'space-between',
padding: 30,
flex: 1,
alignItems: 'center'
},
inputText: {
height: 36,
padding: 4,
marginRight: 5,
flex: 4,
fontSize: 18,
borderWidth: 1,
borderColor: '#48BBEC',
borderRadius: 8,
color: '#48BBEC'
}
});
class MapPage extends Component{
constructor(props){
super(props);
this.state = {
region:{
latitude: 4.21048,
longitude: 101.97577,
latitudeDelta: 10,
longitudeDelta: 5
}
}
}
render() {
return(
<View style={styles.container}>
<TextInput style={styles.inputText}></TextInput>
<MapView
style={ styles.map }
mapType={"standard"}
region={this.state.region}
zoomEnabled={true}
scrollEnabled={true}
showsScale={true}
></MapView>
</View>
)
}
}
module.exports = MapPage;
答案 0 :(得分:49)
您应该使用animateToRegion
方法(请参阅here)
它需要一个具有latitudeDelta
和longitudeDelta
的区域对象。使用这些来设置缩放级别。
<强>更新强>
在Region
对象中,latitude
和longitude
指定中心位置,latitudeDelta
和longitudeDelta
指定可查看地图区域的范围。
来自this博客文章的图片很好地说明了这一点(LatΔ和LngΔ)。
答案 1 :(得分:2)
我能够使用Dimensions.get('window');
const window = Dimensions.get('window');
const { width, height } = window
LONGITUDE_DELTA = LATITUD_DELTA + (width / height)
并默认设置为LATITUD_DELTA = 0.0922
。
然后,只需使用onRegionChangeComplete
<MapView>
更新此值
答案 2 :(得分:1)
新的 React Native Maps API 为您提供了使用 animateCamera
参数调用 zoom
方法的选项。
const MapComponent= (props: any) => {
const map: LegacyRef<MapView> = useRef(null);
const onZoomInPress = () => {
map?.current?.getCamera().then((cam: Camera) => {
cam.zoom += 1;
map?.current?.animateCamera(cam);
});
};
return (
<View>
<MapView
ref={map}
provider={PROVIDER_GOOGLE}
region={region}>
</MapView>
<ButtonComponent
style={{position: 'absolute', bottom: 400, left: 0}}
onPress={onZoomInPress}>
Zoom In
</MainButtonBlue>
</View>
);
}
答案 3 :(得分:-1)
这就是我所做的,对我来说效果很好:
function getRegion(origin, destination, zoom) {
const oLat = Math.abs(origin.latitude);
const oLng = Math.abs(origin.longitude);
const dLat = Math.abs(destination.latitude);
const dLng = Math.abs(destination.longitude);
return {
latitude: (origin.latitude + destination.latitude) / 2,
longitude: (origin.longitude + destination.longitude) / 2,
latitudeDelta: Math.abs(oLat - dLat) + zoom,
longitudeDelta: Math.abs(oLng - dLng) + zoom,
};
}