(function($, Drupal) {
Drupal.behaviors.qd30mini = {
attach: function(context, settings) {
Cesium.BingMapsApi.defaultKey = 'mqrOOSbN2SMpDuWhHx0W~HVi_IW2A0UwRAV1xLIZuTQ~AnSezO-xLZ4_s1rf8ydB6Wf0aRdKtw_znPffJQ9qKbntyOPWFvitPVAvxT0v6dib';
var viewer = new Cesium.Viewer('boutique-map-cesium', {
animation: false,
homeButton: false,
vrButton: false,
infoBox: false,
geocoder: false,
sceneModePicker: false,
selectionIndicator: true,
timeline: false,
navigationHelpButton: false,
navigationInstructionsInitiallyVisible: false,
scene3DOnly: false,
shadows: true,
terrainShadows: true,
// imageryProvider : new Cesium.createOpenStreetMapImageryProvider({
// url : 'https://stamen-tiles.a.ssl.fastly.net/toner-background/'
// url : 'http://tile.stamen.com/toner/',
// alpha : 0.5
// brightness : 1.0,
// contrast : 1.0,
// hue : 3.0,
// saturation : 3.0,
// url : 'http://tile.stamen.com/watercolor/',
// 'https://b.tile.openstreetmap.org'
// }),
baseLayerPicker: false
});
var camera = viewer.camera;
var scene = viewer.scene;
var ellipsoid = scene.globe.ellipsoid;
var canvas = viewer.canvas;
var layers = viewer.scene.imageryLayers;
var globe = viewer.scene.globe;
globe.imageryLayers.removeAll();
globe.baseColor = Cesium.Color.fromCssColorString('#f3f3f3');
var tonerLayer = layers.addImageryProvider(Cesium.createOpenStreetMapImageryProvider({
url : 'http://tile.stamen.com/toner/'
}));
tonerLayer.alpha = 0.2;
var terrainProvider = new Cesium.CesiumTerrainProvider({
url : '//assets.agi.com/stk-terrain/world',
requestVertexNormals: true
});
var dataSource = Cesium.GeoJsonDataSource.load('/sites/quartierdix30/files/geojson/quartier_en.json').then(function(data) {
viewer.dataSources.add(data);
var entities = data.entities.values;
var billboards = new Cesium.BillboardCollection();
for (var i = 0; i < entities.length; i++) {
var entity = entities[i];
entity.polygon.outline = true;
entity.polygon.outlineWidth = 1.2;
entity.polygon.outlineColor = Cesium.Color.BLACK;
if (entity.properties.hasOwnProperty('level')) {
entity.polygon.extrudedHeight = 0.5 * (entity.properties.level * 10);
}
if (entity.properties.hasOwnProperty("colour")) {
if (entity.properties.hasOwnProperty("event")) {
entity.polygon.material = new Cesium.StripeMaterialProperty({
evenColor : Cesium.Color.fromCssColorString(entity.properties.colour),
oddColor : Cesium.Color.BLACK,
repeat : 10
});
} else {
entity.polygon.material = Cesium.Color.fromCssColorString(entity.properties.colour);
}
}
if (entity.properties.hasOwnProperty("description")) {
entity.description = '
' + entity.properties.description
+ '
';
}
}
});
function gotoQD30() {
var pos = Cesium.Ellipsoid.WGS84.cartesianToCartographic(new Cesium.Cartesian3(
1278149.1996018, -4297423.8092246,
4522591.15943));
pos.latitude = Cesium.Math.toDegrees(pos.latitude);
pos.longitude = Cesium.Math.toDegrees(pos.longitude);
viewer.camera.flyTo({
destination : Cesium.Cartesian3.fromDegrees(pos.longitude, pos.latitude, pos.height),
orientation : {
heading : 5.51747,
pitch : -1.419427,
roll : 6.2675
},
duration: 0.5
});
}
function colourReset() {
for (var j = 0; j < viewer.dataSources.get(0).entities.values.length; j++) {
var entity = viewer.dataSources.get(0).entities.values[j];
if (entity.properties.hasOwnProperty('colour')) {
entity.polygon.material = new Cesium.Color.fromCssColorString(entity.properties.colour);
}
}
}
function selectStore(entity, data) {
var pCoords = entity.polygon.hierarchy.getValue(viewer.clock.currentTime);
var avgPoint = pCoords.positions.length > 1 ? Math.round(pCoords.positions.length / 2) : 0;
var topPoint = 0;
for (var xy = 0; xy < pCoords.positions.length - 1; xy++) {
if (pCoords.positions[xy+1].x > pCoords.positions[xy].x) {
topPoint = xy;
}
}
var pos = Cesium.Ellipsoid.WGS84.cartesianToCartographic(pCoords.positions[avgPoint]);
pos.latitude = Cesium.Math.toDegrees(pos.latitude);
pos.longitude = Cesium.Math.toDegrees(pos.longitude);
viewer.camera.flyTo({
destination : Cesium.Cartesian3.fromDegrees(pos.longitude +0.0008, pos.latitude -0.0012, 300),
// destination : Cesium.Cartesian3.fromDegrees(pos.longitude, pos.latitude, 300),
orientation : {
heading : 5.982409,
pitch : -1.075697,
roll : 6.281078
},
duration: 1
});
for (var j = 0; j < data.entities.values.length; j++) {
if (entity.id == data.entities.values[j].id) {
for (z = 0; z < viewer.entities.values.length; z++) {
if (viewer.entities.values[z].name == 'selectionOutline') {
viewer.entities.remove(viewer.entities.values[z]);
}
}
viewer.entities.add({
name : 'selectionOutline',
polyline : {
positions : pCoords.positions,
width : 20,
material : new Cesium.PolylineGlowMaterialProperty({
glowPower : 0.9,
color : Cesium.Color.fromCssColorString('#008B8B'),
extrudedHeight : entity.polygon.extrudedHeight + 20
})
}
});
}
}
colourReset();
entity.polygon.material = Cesium.Color.fromCssColorString('#000000');
viewer.selectedEntity = entity;
}
function gotoBoutique(title, data) {
var choice = title.trim();
var found = false;
if (choice == 'Quartier Dix 30') {
gotoQD30();
} else {
var length = data.entities.values.length;
for (var i = 0; i < length; i++) {
var entity = data.entities.values[i];
if (entity.properties.name != undefined) {
if (entity.properties.name.toLowerCase() == choice.toLowerCase()) {
found = true;
if (entity.polygon.hierarchy._value.positions.length > 1) {
selectStore(entity, data);
} else {
gotoQD30();
}
}
}
}
}
if (!found) gotoQD30();
}
window.onload = function() {
var data = viewer.dataSources.get(0);
gotoBoutique(settings.boutique_title, data);
// var frame = viewer.infoBox.frame;
// var cssLink = frame.contentDocument.createElement('link');
// cssLink.href = Cesium.buildModuleUrl('../../../../css/qd30minimap.css');
// cssLink.rel = 'stylesheet';
// cssLink.type = 'text/css';
// frame.contentDocument.head.appendChild(cssLink);
clickHandler = new Cesium.ScreenSpaceEventHandler(scene.canvas);
clickHandler.setInputAction(function(movement) {
var pickedObject = scene.pick(movement.position);
if (Cesium.defined(pickedObject)) {
for (var i = 0; i < data.entities.values.length; i++) {
var entity = data.entities.values[i];
if (entity.properties.name != undefined) {
if (entity.properties.name.toLowerCase().trim() == pickedObject.id.properties.name.toLowerCase().trim()) {
gotoBoutique(pickedObject.id.properties.name, data);
}
}
}
}
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
}
}}})(jQuery, Drupal);