如何在react-native-map中放大/缩小?

时间:2016-04-18 04:13:30

标签: react-native react-native-maps

我使用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;

4 个答案:

答案 0 :(得分:49)

您应该使用animateToRegion方法(请参阅here

它需要一个具有latitudeDeltalongitudeDelta的区域对象。使用这些来设置缩放级别。

<强>更新

Region对象中,latitudelongitude指定中心位置,latitudeDeltalongitudeDelta指定可查看地图区域的范围。

来自this博客文章的图片很好地说明了这一点(LatΔ和LngΔ)。 enter image description here

答案 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,
  };                                                                                  
}