Trips Layer
Last updated
Was this helpful?
Last updated
Was this helpful?
Was this helpful?
This example shows how to use the TripsLayer to render animated paths that represent vehicle trips.
<!DOCTYPE html>
<html>
<head>
<title>Extrusion</title>
<script src="https://polyfill.io/v3/polyfill.min.js?features=default"></script>
<script src="https://unpkg.com/deck.gl@^8.8.0/dist.min.js"></script>
<script src="https://unpkg.com/@deck.gl/carto@^8.8.0/dist.min.js"></script>
<style>
#map {
height: 100%;
}
html,
body {
height: 100%;
margin: 0;
padding: 0;
}
</style>
</head>
<body>
<div id="map"></div>
<script
src="https://maps.googleapis.com/maps/api/js?key=AIzaSyDvHtBZM79O5uGTBT1ZOWOKW2_FVMstHNs&callback=initMap&libraries=&v=beta"
async></script>
</body>
<script type="text/javascript">
let map;
const LOOP_LENGTH = 1800;
const ANIMATION_SPEED = 0.4;
let time = 0;
let layerData = [];
let deckOverlay;
function initMap() {
map = new google.maps.Map(document.getElementById("map"), {
center: { lat: 40.73, lng: -74 },
zoom: 13,
tilt: 45,
mapId: '2a9fc80dfecb64f8',
fullscreenControl: false,
streetViewControl: false,
zoomControlOptions: {
position: google.maps.ControlPosition.LEFT_BOTTOM,
},
});
deck.carto.setDefaultCredentials({
apiBaseUrl: 'https://gcp-us-east1.api.carto.com',
apiVersion: deck.carto.API_VERSIONS.V3,
accessToken: 'eyJhbGciOiJIUzI1NiJ9.eyJhIjoiYWNfbHFlM3p3Z3UiLCJqdGkiOiI1YjI0OWE2ZCJ9.Y7zB30NJFzq5fPv8W5nkoH5lPXFWQP0uywDtqUg8y8c'
});
// Fetch Data from CARTO
deck.carto.fetchLayerData({
type: deck.carto.MAP_TYPES.QUERY,
source: `SELECT geom, vendor,
TO_JSON_STRING(timestamps) AS timestamps
FROM cartobq.public_account.new_york_trips`,
connection: 'bqconn',
format: deck.carto.FORMATS.GEOJSON
}).then(({ data: geojsonData }) => {
// TripsLayer needs data in the following format
layerData = geojsonData.features.map(f => ({
vendor: f.properties.vendor,
timestamps: JSON.parse(f.properties.timestamps),
path: f.geometry.coordinates
}));
});
deckOverlay = new deck.GoogleMapsOverlay({});
deckOverlay.setMap(map);
initAnimation();
}
function animate() {
time = (time + ANIMATION_SPEED) % LOOP_LENGTH;
window.requestAnimationFrame(animate);
}
function initAnimation() {
setInterval(() => {
deckOverlay.setProps({
layers: [
new deck.TripsLayer({
id: 'trips-layer',
data: layerData,
getPath: d => d.path,
getTimestamps: d => d.timestamps,
getColor: d => (d.vendor === 0 ? [253, 128, 93] : [23, 184, 190]),
opacity: 0.3,
widthMinPixels: 2,
rounded: true,
trailLength: 180,
currentTime: time,
shadowEnabled: false
})
]
});
}, 50);
window.requestAnimationFrame(animate);
}
</script>
</html>