如何在地图视图中显示不同的位置取决于所选的选取器? (反应原生)

Posted

技术标签:

【中文标题】如何在地图视图中显示不同的位置取决于所选的选取器? (反应原生)【英文标题】:How to show different location in Map Views depends on selected Picker? (React Native) 【发布时间】:2018-11-01 07:10:26 【问题描述】:

每个人。我正在构建一个关于在地图视图中显示不同位置的本机应用程序,这取决于所选的选择器。

我想通过检测字符串中包含的单词来使用条件语句,我使用string-contains 库来检测字符串中的一些单词。这是我的代码示例:

export default class App extends React.Component 
renderMap()
  if(contains(this.state.name, "Branch 1"))
            return <MapView
            initialRegion=
              latitude: 53.433980,
              longitude: -2.950960,
              longitudeDelta: 0.0922,
              latitudeDelta: 0.0421,
            
            style=height: 200, width: 200, padding: 10, flex: 3, justifyContent: 'space-around'
          ><MapView.Marker
          coordinate=
            latitude: 37.78825,
            longitude: -122.4324,
          
        /></MapView>;
         else if(contains(this.state.name, "Branch 2"))
           return <MapView
            initialRegion=
              latitude: 51.491610,
              longitude: -0.135560,
              longitudeDelta: 0.0922,
              latitudeDelta: 0.0421,
            
            style=height: 200, width: 200, padding: 10, flex: 3, justifyContent: 'space-around'
          ><MapView.Marker
          coordinate=
            latitude: 37.78825,
            longitude: -122.4324,
          
        /></MapView>;
        
        else if(contains(this.state.name, "Branch 3"))
           return <MapView
            initialRegion=
              latitude: 53.461220,
              longitude: -2.269540,
              longitudeDelta: 0.0922,
              latitudeDelta: 0.0421,
            
            style=height: 200, width: 200, padding: 10, flex: 3, justifyContent: 'space-around'
          ><MapView.Marker
          coordinate=
            latitude: 37.78825,
            longitude: -122.4324,
          
        /></MapView>;
        
        else if(contains(this.state.name, "Branch 4"))
           return  <MapView
            initialRegion=
              latitude: 51.262290,
              longitude: -1.081610,
              longitudeDelta: 0.0922,
              latitudeDelta: 0.0421,
            
            style=height: 200, width: 200, padding: 10, flex: 3, justifyContent: 'space-around'
          ><MapView.Marker
          coordinate=
            latitude: 37.78825,
            longitude: -122.4324,
          
        /></MapView>;
        

render()
const branchesPicker = this.state.branches.map((item, branch_id)=> 
      return(
            <Picker.Item
            label=item.name
            value=item.address
            key=item.branch_id/>
        )
    );
      this.renderMap();
return(
<View style=styles.container>
      <Picker
          selectedValue=this.state.name
          mode="dropdown"
          style= height: 50, justifyContent: 'center', flex:4, alignItems: 'stretch', 
          onValueChange=(item)=> this.setState(name: item)>
        branchesPicker
    </Picker>
        this.renderMap()
      </View>

当我运行此代码时,选择器工作正常,但是当我尝试更改选择器时,地图并没有像我想象的那样改变。它只显示一个静态的地图视图(但地图视图并不总是来自分支 1,有时当我重新加载它时它会显示分支 2 或 3。但关键是,它没有改变......)

fyi,this.state.name 正在显示所选选择器的分支名称。

非常感谢您的帮助!这真的意味着很多..

【问题讨论】:

【参考方案1】:

假设您使用的是 react-native-maps。

初始区域用于在第一次加载地图时渲染和显示位置。当或如果您想在加载后更改位置,您可以使用 animateToRegion 或许多其他类似的methods。因此,当您想在选择器中选择某物时更改地图上的位置时,只需使用您的输入调用这些方法即可。

这里是sn-p的代码供参考。

 this.map.animateToRegion( latitude: region.latitude, longitude: region.longitude, latitudeDelta: latitudeDelta, longitudeDelta: longitudeDelta , timeToChangeRegionInMilliSeconds);

【讨论】:

以上是关于如何在地图视图中显示不同的位置取决于所选的选取器? (反应原生)的主要内容,如果未能解决你的问题,请参考以下文章

在选项卡内的地图片段底部添加视图

Pickers应用程序

如何在同一视图中使用具有不同数据源的多个选取器视图?

显示选定半径的 MapView 注释

如何获取谷歌地图的屏幕中心位置?

如何在 Swift UI 中将嵌套的 JSON 值显示到选取器视图中?