main.js!eval 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. (function() { var __moduleName = "js/main"; var __moduleAddress = "http://projects.delimited.io/webgl-globes/js/main.js";System.register(['./common/scene', './common/setEvents', './common/geoHelpers', './common/mapTexture', './common/utils', 'topojson', 'THREE', 'd3'], function (_export) {
  2. 'use strict';
  3. var scene, camera, renderer, setEvents, convertToXYZ, getEventCenter, geodecoder, mapTexture, getTween, memoize, topojson, THREE, d3;
  4. function animate() {
  5. requestAnimationFrame(animate);
  6. renderer.render(scene, camera);
  7. }
  8. return {
  9. setters: [function (_commonScene) {
  10. scene = _commonScene.scene;
  11. camera = _commonScene.camera;
  12. renderer = _commonScene.renderer;
  13. }, function (_commonSetEvents) {
  14. setEvents = _commonSetEvents.setEvents;
  15. }, function (_commonGeoHelpers) {
  16. convertToXYZ = _commonGeoHelpers.convertToXYZ;
  17. getEventCenter = _commonGeoHelpers.getEventCenter;
  18. geodecoder = _commonGeoHelpers.geodecoder;
  19. }, function (_commonMapTexture) {
  20. mapTexture = _commonMapTexture.mapTexture;
  21. }, function (_commonUtils) {
  22. getTween = _commonUtils.getTween;
  23. memoize = _commonUtils.memoize;
  24. }, function (_topojson) {
  25. topojson = _topojson['default'];
  26. }, function (_THREE) {
  27. THREE = _THREE['default'];
  28. }, function (_d3) {
  29. d3 = _d3['default'];
  30. }],
  31. execute: function () {
  32. d3.json('data/world.json', function (err, data) {
  33. d3.select('#loading').transition().duration(500).style('opacity', 0).remove();
  34. var currentCountry, overlay;
  35. var segments = 155; // number of vertices. Higher = better mouse accuracy
  36. // Setup cache for country textures
  37. var countries = topojson.feature(data, data.objects.countries);
  38. var geo = geodecoder(countries.features);
  39. var textureCache = memoize(function (cntryID, color) {
  40. var country = geo.find(cntryID);
  41. return mapTexture(country, color);
  42. });
  43. // Base globe with blue "water"
  44. var blueMaterial = new THREE.MeshPhongMaterial({ color: '#2B3B59', transparent: true });
  45. var sphere = new THREE.SphereGeometry(200, segments, segments);
  46. var baseGlobe = new THREE.Mesh(sphere, blueMaterial);
  47. baseGlobe.rotation.y = Math.PI;
  48. baseGlobe.addEventListener('click', onGlobeClick);
  49. baseGlobe.addEventListener('mousemove', onGlobeMousemove);
  50. // add base map layer with all countries
  51. var worldTexture = mapTexture(countries, '#647089');
  52. var mapMaterial = new THREE.MeshPhongMaterial({ map: worldTexture, transparent: true });
  53. var baseMap = new THREE.Mesh(new THREE.SphereGeometry(200, segments, segments), mapMaterial);
  54. baseMap.rotation.y = Math.PI;
  55. // create a container node and add the two meshes
  56. var root = new THREE.Object3D();
  57. root.scale.set(2.5, 2.5, 2.5);
  58. root.add(baseGlobe);
  59. root.add(baseMap);
  60. scene.add(root);
  61. function onGlobeClick(event) {
  62. // Get pointc, convert to latitude/longitude
  63. var latlng = getEventCenter.call(this, event);
  64. // Get new camera position
  65. var temp = new THREE.Mesh();
  66. temp.position.copy(convertToXYZ(latlng, 900));
  67. temp.lookAt(root.position);
  68. temp.rotateY(Math.PI);
  69. for (var key in temp.rotation) {
  70. if (temp.rotation[key] - camera.rotation[key] > Math.PI) {
  71. temp.rotation[key] -= Math.PI * 2;
  72. } else if (camera.rotation[key] - temp.rotation[key] > Math.PI) {
  73. temp.rotation[key] += Math.PI * 2;
  74. }
  75. }
  76. var tweenPos = getTween.call(camera, 'position', temp.position);
  77. d3.timer(tweenPos);
  78. var tweenRot = getTween.call(camera, 'rotation', temp.rotation);
  79. d3.timer(tweenRot);
  80. }
  81. function onGlobeMousemove(event) {
  82. var map, material;
  83. // Get pointc, convert to latitude/longitude
  84. var latlng = getEventCenter.call(this, event);
  85. // Look for country at that latitude/longitude
  86. var country = geo.search(latlng[0], latlng[1]);
  87. if (country !== null && country.code !== currentCountry) {
  88. // Track the current country displayed
  89. currentCountry = country.code;
  90. // Update the html
  91. d3.select('#msg').html(country.code);
  92. // Overlay the selected country
  93. map = textureCache(country.code, '#CDC290');
  94. material = new THREE.MeshPhongMaterial({ map: map, transparent: true });
  95. if (!overlay) {
  96. overlay = new THREE.Mesh(new THREE.SphereGeometry(201, 40, 40), material);
  97. overlay.rotation.y = Math.PI;
  98. root.add(overlay);
  99. } else {
  100. overlay.material = material;
  101. }
  102. }
  103. }
  104. setEvents(camera, [baseGlobe], 'click');
  105. setEvents(camera, [baseGlobe], 'mousemove', 10);
  106. });animate();
  107. }
  108. };
  109. });
  110. //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHA6Ly9wcm9qZWN0cy5kZWxpbWl0ZWQuaW8vd2ViZ2wtZ2xvYmVzL2pzL21haW4uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUE0R0EsV0FBUyxPQUFPLEdBQUc7QUFDakIseUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDL0IsWUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7R0FDaEM7OzsyQkEvR1EsS0FBSzs0QkFBRSxNQUFNOzhCQUFFLFFBQVE7O21DQUN2QixTQUFTOzt1Q0FDVCxZQUFZO3lDQUFFLGNBQWM7cUNBQUUsVUFBVTs7cUNBQ3hDLFVBQVU7OzhCQUNWLFFBQVE7NkJBQUUsT0FBTzs7Ozs7Ozs7OztBQUsxQixRQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLFVBQVUsR0FBRyxFQUFFLElBQUksRUFBRTs7QUFFOUMsVUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQzdDLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7O0FBRWhDLFlBQUksY0FBYyxFQUFFLE9BQU8sQ0FBQzs7QUFFNUIsWUFBSSxRQUFRLEdBQUcsR0FBRyxDQUFDOzs7QUFHbkIsWUFBSSxTQUFTLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMvRCxZQUFJLEdBQUcsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDOztBQUV6QyxZQUFJLFlBQVksR0FBRyxPQUFPLENBQUMsVUFBVSxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQ25ELGNBQUksT0FBTyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDaEMsaUJBQU8sVUFBVSxDQUFDLE9BQU8sRUFBRSxLQUFL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QUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUMxRSxxQkFBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM3QixrQkFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUNuQixNQUFNO0FBQ0wscUJBQU8sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO2FBQzdCO1dBQ0Y7U0FDRjs7QUFFRCxpQkFBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3hDLGlCQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO09BQ2pELENBQUMsQ0FBQyxBQU1ILE9BQU8sRUFBRSxDQUFDIiwiZmlsZSI6Imh0dHA6Ly9wcm9qZWN0cy5kZWxpbWl0ZWQuaW8vd2ViZ2wtZ2xvYmVzL2pzL21haW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzY2VuZSwgY2FtZXJhLCByZW5kZXJlciB9IGZyb20gJy4vY29tbW9uL3NjZW5lJztcbmltcG9ydCB7IHNldEV2ZW50cyB9IGZyb20gJy4vY29tbW9uL3NldEV2ZW50cyc7XG5pbXBvcnQgeyBjb252ZXJ0VG9YWVosIGdldEV2ZW50Q2VudGVyLCBnZW9kZWNvZGVyIH0gZnJvbSAnLi9jb21tb24vZ2VvSGVscGVycyc7XG5pbXBvcnQgeyBtYXBUZXh0dXJlIH0gZnJvbSAnLi9jb21tb24vbWFwVGV4dHVyZSc7XG5pbXBvcnQgeyBnZXRUd2VlbiwgbWVtb2l6ZSB9IGZyb20gJy4vY29tbW9uL3V0aWxzJztcbmltcG9ydCB0b3BvanNvbiBmcm9tICd0b3BvanNvbic7XG5pbXBvcnQgVEhSRUUgZnJvbSAnVEhSRUUnO1xuaW1wb3J0IGQzIGZyb20gJ2QzJztcblxuZDMuanNvbignZGF0YS93b3JsZC5qc29uJywgZnVuY3Rpb24gKGVyciwgZGF0YSkge1xuXG4gIGQzLnNlbGVjdChcIiNsb2FkaW5nXCIpLnRyYW5zaXRpb24oKS5kdXJhdGlvbig1MDApXG4gICAgLnN0eWxlKFwib3BhY2l0eVwiLCAwKS5yZW1vdmUoKTtcblxuICB2YXIgY3VycmVudENvdW50cnksIG92ZXJsYXk7XG5cbiAgdmFyIHNlZ21lbnRzID0gMTU1OyAvLyBudW1iZXIgb2YgdmVydGljZXMuIEhpZ2hlciA9IGJldHRlciBtb3VzZSBhY2N1cmFjeVxuXG4gIC8vIFNldHVwIGNhY2hlIGZvciBjb3VudHJ5IHRleHR1cmVzXG4gIHZhciBjb3VudHJpZXMgPSB0b3BvanNvbi5mZWF0dXJlKGRhdGEsIGRhdGEub2JqZWN0cy5jb3VudHJpZXMpO1xuICB2YXIgZ2VvID0gZ2VvZGVjb2Rlcihjb3VudHJpZXMuZmVhdHVyZXMpO1xuXG4gIHZhciB0ZXh0dXJlQ2FjaGUgPSBtZW1vaXplKGZ1bmN0aW9uIChjbnRyeUlELCBjb2xvcikge1xuICAgIHZhciBjb3VudHJ5ID0gZ2VvLmZpbmQoY250cnlJRCk7XG4gICAgcmV0dXJuIG1hcFRleHR1cmUoY291bnRyeSwgY29sb3IpO1xuICB9KTtcblxuICAvLyBCYXNlIGdsb2JlIHdpdGggYmx1ZSBcIndhdGVyXCJcbiAgbGV0IGJsdWVNYXRlcmlhbCA9IG5ldyBUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbCh7Y29sb3I6ICcjMkIzQjU5JywgdHJhbnNwYXJlbnQ6IHRydWV9KTtcbiAgbGV0IHNwaGVyZSA9IG5ldyBUSFJFRS5TcGhlcmVHZW9tZXRyeSgyMDAsIHNlZ21lbnRzLCBzZWdtZW50cyk7XG4gIGxldCBiYXNlR2xvYmUgPSBuZXcgVEhSRUUuTWVzaChzcGhlcmUsIGJsdWVNYXRlcmlhbCk7XG4gIGJhc2VHbG9iZS5yb3RhdGlvbi55ID0gTWF0aC5QSTtcbiAgYmFzZUdsb2JlLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgb25HbG9iZUNsaWNrKTtcbiAgYmFzZUdsb2JlLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG9uR2xvYmVNb3VzZW1vdmUpO1xuXG4gIC8vIGFkZCBiYXNlIG1hcCBsYXllciB3aXRoIGFsbCBjb3VudHJpZXNcbiAgbGV0IHdvcmxkVGV4dHVyZSA9IG1hcFRleHR1cmUoY291bnRyaWVzLCAnIzY0NzA4OScpO1xuICBsZXQgbWFwTWF0ZXJpYWwgID0gbmV3IFRIUkVFLk1lc2hQaG9uZ01hdGVyaWFsKHttYXA6IHdvcmxkVGV4dHVyZSwgdHJhbnNwYXJlbnQ6IHRydWV9KTtcbiAgdmFyIGJhc2VNYXAgPSBuZXcgVEhSRUUuTWVzaChuZXcgVEhSRUUuU3BoZXJlR2VvbWV0cnkoMjAwLCBzZWdtZW50cywgc2VnbWVudHMpLCBtYXBNYXRlcmlhbCk7XG4gIGJhc2VNYXAucm90YXRpb24ueSA9IE1hdGguUEk7XG5cbiAgLy8gY3JlYXRlIGEgY29udGFpbmVyIG5vZGUgYW5kIGFkZCB0aGUgdHdvIG1lc2hlc1xuICB2YXIgcm9vdCA9IG5ldyBUSFJFRS5PYmplY3QzRCgpO1xuICByb290LnNjYWxlLnNldCgyLjUsIDIuNSwgMi41KTtcbiAgcm9vdC5hZGQoYmFzZUdsb2JlKTtcbiAgcm9vdC5hZGQoYmFzZU1hcCk7XG4gIHNjZW5lLmFkZChyb290KTtcblxuICBmdW5jdGlvbiBvbkdsb2JlQ2xpY2soZXZlbnQpIHtcblxuICAgIC8vIEdldCBwb2ludGMsIGNvbnZlcnQgdG8gbGF0aXR1ZGUvbG9uZ2l0dWRlXG4gICAgdmFyIGxhdGxuZyA9IGdldEV2ZW50Q2VudGVyLmNhbGwodGhpcywgZXZlbnQpO1xuXG4gICAgLy8gR2V0IG5ldyBjYW1lcmEgcG9zaXRpb25cbiAgICB2YXIgdGVtcCA9IG5ldyBUSFJFRS5NZXNoKCk7XG4gICAgdGVtcC5wb3NpdGlvbi5jb3B5KGNvbnZlcnRUb1hZWihsYXRsbmcsIDkwMCkpO1xuICAgIHRlbXAubG9va0F0KHJvb3QucG9zaXRpb24pO1xuICAgIHRlbXAucm90YXRlWShNYXRoLlBJKTtcblxuICAgIGZvciAobGV0IGtleSBpbiB0ZW1wLnJvdGF0aW9uKSB7XG4gICAgICBpZiAodGVtcC5yb3RhdGlvbltrZXldIC0gY2FtZXJhLnJvdGF0aW9uW2tleV0gPiBNYXRoLlBJKSB7XG4gICAgICAgIHRlbXAucm90YXRpb25ba2V5XSAtPSBNYXRoLlBJICogMjtcbiAgICAgIH0gZWxzZSBpZiAoY2FtZXJhLnJvdGF0aW9uW2tleV0gLSB0ZW1wLnJvdGF0aW9uW2tleV0gPiBNYXRoLlBJKSB7XG4gICAgICAgIHRlbXAucm90YXRpb25ba2V5XSArPSBNYXRoLlBJICogMjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgdHdlZW5Qb3MgPSBnZXRUd2Vlbi5jYWxsKGNhbWVyYSwgJ3Bvc2l0aW9uJywgdGVtcC5wb3NpdGlvbik7XG4gICAgZDMudGltZXIodHdlZW5Qb3MpO1xuXG4gICAgdmFyIHR3ZWVuUm90ID0gZ2V0VHdlZW4uY2FsbChjYW1lcmEsICdyb3RhdGlvbicsIHRlbXAucm90YXRpb24pO1xuICAgIGQzLnRpbWVyKHR3ZWVuUm90KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uR2xvYmVNb3VzZW1vdmUoZXZlbnQpIHtcbiAgICB2YXIgbWFwLCBtYXRlcmlhbDtcblxuICAgIC8vIEdldCBwb2ludGMsIGNvbnZlcnQgdG8gbGF0aXR1ZGUvbG9uZ2l0dWRlXG4gICAgdmFyIGxhdGxuZyA9IGdldEV2ZW50Q2VudGVyLmNhbGwodGhpcywgZXZlbnQpO1xuXG4gICAgLy8gTG9vayBmb3IgY291bnRyeSBhdCB0aGF0IGxhdGl0dWRlL2xvbmdpdHVkZVxuICAgIHZhciBjb3VudHJ5ID0gZ2VvLnNlYXJjaChsYXRsbmdbMF0sIGxhdGxuZ1sxXSk7XG5cbiAgICBpZiAoY291bnRyeSAhPT0gbnVsbCAmJiBjb3VudHJ5LmNvZGUgIT09IGN1cnJlbnRDb3VudHJ5KSB7XG5cbiAgICAgIC8vIFRyYWNrIHRoZSBjdXJyZW50IGNvdW50cnkgZGlzcGxheWVkXG4gICAgICBjdXJyZW50Q291bnRyeSA9IGNvdW50cnkuY29kZTtcblxuICAgICAgLy8gVXBkYXRlIHRoZSBodG1sXG4gICAgICBkMy5zZWxlY3QoXCIjbXNnXCIpLmh0bWwoY291bnRyeS5jb2RlKTtcblxuICAgICAgIC8vIE92ZXJsYXkgdGhlIHNlbGVjdGVkIGNvdW50cnlcbiAgICAgIG1hcCA9IHRleHR1cmVDYWNoZShjb3VudHJ5LmNvZGUsICcjQ0RDMjkwJyk7XG4gICAgICBtYXRlcmlhbCA9IG5ldyBUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbCh7bWFwOiBtYXAsIHRyYW5zcGFyZW50OiB0cnVlfSk7XG4gICAgICBpZiAoIW92ZXJsYXkpIHtcbiAgICAgICAgb3ZlcmxheSA9IG5ldyBUSFJFRS5NZXNoKG5ldyBUSFJFRS5TcGhlcmVHZW9tZXRyeSgyMDEsIDQwLCA0MCksIG1hdGVyaWFsKTtcbiAgICAgICAgb3ZlcmxheS5yb3RhdGlvbi55ID0gTWF0aC5QSTtcbiAgICAgICAgcm9vdC5hZGQob3ZlcmxheSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdmVybGF5Lm1hdGVyaWFsID0gbWF0ZXJpYWw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2V0RXZlbnRzKGNhbWVyYSwgW2Jhc2VHbG9iZV0sICdjbGljaycpO1xuICBzZXRFdmVudHMoY2FtZXJhLCBbYmFzZUdsb2JlXSwgJ21vdXNlbW92ZScsIDEwKTtcbn0pO1xuXG5mdW5jdGlvbiBhbmltYXRlKCkge1xuICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYW5pbWF0ZSk7XG4gIHJlbmRlcmVyLnJlbmRlcihzY2VuZSwgY2FtZXJhKTtcbn1cbmFuaW1hdGUoKTtcbiJdfQ==
  111. }).call(__global);