6 votes

Comment afficher/cacher une couche matricielle (propriété de visibilité visible/none) au moment de l'exécution dans react-native-mapbox-gl

J'ai défini l'url du style personnalisé dans l'initialisation de la carte. Par exemple :

<Mapbox.MapView
   styleURL="asset://mystyle.json"
   logoEnabled={false}
   attributionEnabled={false}
   ref={(e) => { this.oMap = e }}
   animate={true}
   zoomLevel={6}
   centerCoordinate={[54.0, 24.0]}
   style={{ flex: 1 }}
   showUserLocation={true}>
</Mapbox.MapView>

Dans le fichier mystyle.json, j'ai deux cartes de base comme ci-dessous :

 {
      "id": "Satellite",
      "type": "raster",
      "source": "Satellite",
      "layout": {
        "visibility": "visible"
      },
      "paint": {
        "raster-opacity": 1
      }
    },
 {
      "id": "Satellite2",
      "type": "raster",
      "source": "Satellite",
      "layout": {
        "visibility": "none"
      },
      "paint": {
        "raster-opacity": 1
      }
    }

Le satellite est visible par défaut.

Comment définir la visibilité de la propriété satellite sur none et la visibilité de satellite2 sur visible au moment de l'exécution ?

Mapbox gl :

"@mapbox/react-native-mapbox-gl": "^6.1.3"

React native :

"react-native": "0.58.9",

4voto

Khurshid Ansari Points 279

J'ai enfin trouvé la solution :

constructor() {
   this.state = {
      lightMap: 'visible', 
      darkMap: 'none'
   };
} 

changeMap(){
   this.setState({darkMap:'visible'})
}

<MapboxGL.MapView
   styleURL="asset://mystyle.json"
   logoEnabled={false}
   attributionEnabled={false}
   ref={(e) => { this.oMap = e }}
   zoomLevel={6}
   centerCoordinate={[54.0, 24.0]}
   style={{ flex: 1 }}>

<MapboxGL.RasterSource
   id="idLightMap" 
   url="LAYERURL1"
   tileSize={256}>
   <MapboxGL.RasterLayer 
      id="idLightMap"
      sourceID="idLightMap"
      style={{visibility: this.state.lightMap}}>
   </MapboxGL.RasterLayer>
</MapboxGL.RasterSource>

<MapboxGL.RasterSource
   id="idDarkMap" 
   url="LAYERURL2"
   tileSize={256}>
   <MapboxGL.RasterLayer
      id="idDarkMap"
      sourceID="idDarkMap"
      style={{visibility: this.state.darkMap}}>
   </MapboxGL.RasterLayer>
</MapboxGL.RasterSource>

</MapboxGL.MapView>

J'ai ajouté un calque matriciel et je l'ai fait basculer par programme.

3voto

Jaydeep Galani Points 3773

Disons que nous avons un État isStateliteVisible:false ,

modifie maintenant cet état en true quand vous voulez de la visibilité

et utiliser mapbox comme ceci,

<Mapbox.MapView
   styleURL={this.state.isStateliteVisible?...visiblityStyle:....noneStyle} // use this as per your case
   logoEnabled={false}
   attributionEnabled={false}
   ref={(e) => { this.oMap = e }}
   animate={true}
   zoomLevel={6}
   centerCoordinate={[54.0, 24.0]}
   style={{ flex: 1 }}
   showUserLocation={true}>
</Mapbox.MapView>

2voto

Akshay Mulgavkar Points 1546

Je vois que vous utilisez une ancienne version dépréciée de mapbox-gl. Ce paquet est obsolète, veuillez utiliser cette au lieu de cela.

Installation

Dépendances

node
npm
React Native recommended version 0.50 or greater

Git

git clone git@github.com:mapbox/react-native-mapbox-gl.git
cd react-native-mapbox-gl

Fil

yarn add @mapbox/react-native-mapbox-gl

Npm

npm install @mapbox/react-native-mapbox-gl --save

Vous êtes prêt à partir !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X