blob: 794d0595cbbb4f79e73d602aa0f8ac766cc4407b [file] [log] [blame]
/*
title: Taxi routes of Cape Town
category: lines3D
titleCN: Taxi routes of Cape Town
*/
mapboxgl.accessToken = mapboxglToken;
var ENCODE_SCALE = 1e6;
function decodeLine(line) {
var result = [];
var prevX = line[0];
var prevY = line[1];
for (var i = 0; i < line[2].length; i += 2) {
var x = line[2].charCodeAt(i) - 64;
var y = line[2].charCodeAt(i + 1) - 64;
// ZigZag decoding
x = (x >> 1) ^ (-(x & 1));
y = (y >> 1) ^ (-(y & 1));
// Delta deocding
x += prevX;
y += prevY;
prevX = x;
prevY = y;
// Dequantize
result.push([x / ENCODE_SCALE, y / ENCODE_SCALE, 10]);
}
return result;
}
var geoJSON = {
features: []
};
var regions = [];
var readShp = new Promise(function (resolve, reject) {
shapefile.open(ROOT_PATH + '/asset/get/s/data-1498751177695-rkzAeiGEb.shp', ROOT_PATH + '/asset/get/s/data-1498751184605-rJYAxjMVW.dbf')
.then(source => source.read()
.then(function append(result) {
if (result.done) {
resolve();
return;
}
var feature = result.value;
feature.properties.name = geoJSON.features.length + '';
regions.push({
name: geoJSON.features.length + '',
value: 1,
height: feature.properties.SHAPE_leng * 10000
})
geoJSON.features.push(feature);
return source.read().then(append);
})
);
});
myChart.showLoading();
Promise.all([$.getJSON(ROOT_PATH + '/asset/get/s/data-1498751206824-HkkgZsfEW.json'), readShp])
.then(function ([data, lastFeature]) {
var lines = data.map(function (track) {
return {
coords: decodeLine(track)
};
});
myChart.hideLoading();
echarts.registerMap('buildings', geoJSON);
myChart.setOption({
mapbox: {
center: [18.424552361777955, -33.92188144682616],
zoom: 14,
pitch: 50,
bearing: -10,
altitudeScale: 2,
style: 'mapbox://styles/mapbox/dark-v9',
postEffect: {
enable: true,
screenSpaceAmbientOcclusion: {
enable: true,
intensity: 1.2,
radius: 6,
quality: 'high'
},
screenSpaceReflection: {
enable: true
}
},
light: {
main: {
intensity: 1,
shadow: true,
shadowQuality: 'high'
},
ambient: {
intensity: 0.
},
ambientCubemap: {
texture: ROOT_PATH + '/data-gl/asset/pisa.hdr',
exposure: 1,
diffuseIntensity: 0.5,
specularIntensity: 2
}
}
},
series: [{
type: 'lines3D',
coordinateSystem: 'mapbox',
effect: {
show: true,
constantSpeed: 5,
trailWidth: 2,
trailLength: 0.8,
trailOpacity: 1,
spotIntensity: 10
},
blendMode: 'lighter',
polyline: true,
lineStyle: {
width: 0.1,
color: 'rgb(200, 40, 0)',
opacity: 0.
},
data: {
count: function () {
return lines.length;
},
getItem: function (idx) {
return lines[idx]
}
}
}, {
type: 'map3D',
map: 'buildings',
coordinateSystem: 'mapbox',
shading: 'realistic',
silent: true,
instancing: true,
data: regions,
realisticMaterial: {
metalness: 1,
roughness: 0.2,
}
}]
});
});
window.addEventListener('keydown', function () {
myChart.dispatchAction({
type: 'lines3DToggleEffect',
seriesIndex: 0
});
});