Skip to main content

Simple Model Layer

Deomnstrate the use of ModelLayer to render, and Models to associate 3D models with names.

import React from 'react';
import {
MapView,
ShapeSource,
CircleLayer,
Camera,
Models,
ModelLayer,
} from '@rnmapbox/maps';

const styles = {
mapView: { flex: 1 },
circleLayer: {
circleRadiusTransition: { duration: 5000, delay: 0 },
circleColor: '#ff0000',
},
};

const features = {
type: 'FeatureCollection',
features: [
{
type: 'Feature',
id: 'a-feature',
properties: {
icon: 'example',
text: 'example-icon-and-label',
},
geometry: {
type: 'Point',
coordinates: [-74.00597, 40.71427],
},
},
{
type: 'Feature',
id: 'b-feature',
properties: {
text: 'just-label',
},
geometry: {
type: 'Point',
coordinates: [-74.001097, 40.71527],
},
},
{
type: 'Feature',
id: 'c-feature',
properties: {
icon: 'example',
},
geometry: {
type: 'Point',
coordinates: [-74.00697, 40.72427],
},
},
],
};

const modelLayerStyle = {
modelId: 'car',
modelScale: [50, 50, 50],
};

const models = {
car: require('../../assets/sportcar.glb'),
};

class SimpleModelLayer extends React.Component {
state = {
radius: 20,
};

render() {
const circleLayerStyle = {
...styles.circleLayer,
...{ circleRadius: this.state.radius },
};

return (
<>
<MapView style={styles.mapView}>
<Camera centerCoordinate={[-74.00597, 40.71427]} zoomLevel={14} />
<Models models={models} />
<ShapeSource id={'shape-source-id-0'} shape={features}>
<CircleLayer
id={'circle-layer'}
style={circleLayerStyle}
slot={'bottom'}
/>
<ModelLayer id="model-layer-id" style={modelLayerStyle} />
</ShapeSource>
</MapView>
</>
);
}
}

export default SimpleModelLayer;


SimpleModelLayer.png}