geoHelpers.js!eval 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. (function() { var __moduleName = "js/common/geoHelpers"; var __moduleAddress = "http://projects.delimited.io/webgl-globes/js/common/geoHelpers.js";System.register([], function (_export) {
  2. 'use strict';
  3. var geodecoder, pointInPolygon;
  4. _export('getPoint', getPoint);
  5. _export('getEventCenter', getEventCenter);
  6. _export('convertToXYZ', convertToXYZ);
  7. function getPoint(event) {
  8. // Get the vertices
  9. var a = this.geometry.vertices[event.face.a];
  10. var b = this.geometry.vertices[event.face.b];
  11. var c = this.geometry.vertices[event.face.c];
  12. // Averge them together
  13. var point = {
  14. x: (a.x + b.x + c.x) / 3,
  15. y: (a.y + b.y + c.y) / 3,
  16. z: (a.z + b.z + c.z) / 3
  17. };
  18. return point;
  19. }
  20. function getEventCenter(event, radius) {
  21. radius = radius || 200;
  22. var point = getPoint.call(this, event);
  23. var latRads = Math.acos(point.y / radius);
  24. var lngRads = Math.atan2(point.z, point.x);
  25. var lat = (Math.PI / 2 - latRads) * (180 / Math.PI);
  26. var lng = (Math.PI - lngRads) * (180 / Math.PI);
  27. return [lat, lng - 180];
  28. }
  29. function convertToXYZ(point, radius) {
  30. radius = radius || 200;
  31. var latRads = (90 - point[0]) * Math.PI / 180;
  32. var lngRads = (180 - point[1]) * Math.PI / 180;
  33. var x = radius * Math.sin(latRads) * Math.cos(lngRads);
  34. var y = radius * Math.cos(latRads);
  35. var z = radius * Math.sin(latRads) * Math.sin(lngRads);
  36. return { x: x, y: y, z: z };
  37. }
  38. return {
  39. setters: [],
  40. execute: function () {
  41. geodecoder = function geodecoder(features) {
  42. var store = {};
  43. for (var i = 0; i < features.length; i++) {
  44. store[features[i].id] = features[i];
  45. }
  46. return {
  47. find: function find(id) {
  48. return store[id];
  49. },
  50. search: function search(lat, lng) {
  51. var match = false;
  52. var country = undefined,
  53. coords = undefined;
  54. for (var i = 0; i < features.length; i++) {
  55. country = features[i];
  56. if (country.geometry.type === 'Polygon') {
  57. match = pointInPolygon(country.geometry.coordinates[0], [lng, lat]);
  58. if (match) {
  59. return {
  60. code: features[i].id,
  61. name: features[i].properties.name
  62. };
  63. }
  64. } else if (country.geometry.type === 'MultiPolygon') {
  65. coords = country.geometry.coordinates;
  66. for (var j = 0; j < coords.length; j++) {
  67. match = pointInPolygon(coords[j][0], [lng, lat]);
  68. if (match) {
  69. return {
  70. code: features[i].id,
  71. name: features[i].properties.name
  72. };
  73. }
  74. }
  75. }
  76. }
  77. return null;
  78. }
  79. };
  80. };
  81. _export('geodecoder', geodecoder);
  82. // http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html
  83. pointInPolygon = function pointInPolygon(poly, point) {
  84. var x = point[0];
  85. var y = point[1];
  86. var inside = false,
  87. xi = undefined,
  88. xj = undefined,
  89. yi = undefined,
  90. yj = undefined,
  91. xk = undefined;
  92. for (var i = 0, j = poly.length - 1; i < poly.length; j = i++) {
  93. xi = poly[i][0];
  94. yi = poly[i][1];
  95. xj = poly[j][0];
  96. yj = poly[j][1];
  97. xk = yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi;
  98. if (xk) {
  99. inside = !inside;
  100. }
  101. }
  102. return inside;
  103. };
  104. }
  105. };
  106. });
  107. //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHA6Ly9wcm9qZWN0cy5kZWxpbWl0ZWQuaW8vd2ViZ2wtZ2xvYmVzL2pzL2NvbW1vbi9nZW9IZWxwZXJzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztNQTRDVyxVQUFVLEVBZ0RqQixjQUFjOztzQkEzRkYsUUFBUTs7NEJBaUJSLGNBQWM7OzBCQWFkLFlBQVk7O0FBOUJyQixXQUFTLFFBQVEsQ0FBQyxLQUFLLEVBQUU7OztBQUc5QixRQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLFFBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0MsUUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzs7O0FBRzdDLFFBQUksS0FBSyxHQUFHO0FBQ1YsT0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUEsR0FBSSxDQUFDO0FBQ3hCLE9BQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFBLEdBQUksQ0FBQztBQUN4QixPQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQSxHQUFJLENBQUM7S0FDekIsQ0FBQzs7QUFFRixXQUFPLEtBQUssQ0FBQztHQUNkOztBQUVNLFdBQVMsY0FBYyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUU7QUFDNUMsVUFBTSxHQUFHLE1BQU0sSUFBSSxHQUFHLENBQUM7O0FBRXZCLFFBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDOztBQUV2QyxRQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7QUFDMUMsUUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQyxRQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQSxJQUFLLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFBLEFBQUMsQ0FBQztBQUNwRCxRQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFBLElBQUssR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUEsQUFBQyxDQUFDOztBQUVoRCxXQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztHQUN6Qjs7QUFFTSxXQUFTLFlBQVksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFO0FBQzFDLFVBQU0sR0FBRyxNQUFNLElBQUksR0FBRyxDQUFDOztBQUV2QixRQUFJLE9BQU8sR0FBRyxDQUFFLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUEsR0FBSSxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUMvQyxRQUFJLE9BQU8sR0FBRyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUEsR0FBSSxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQzs7QUFFL0MsUUFBSSxDQUFDLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN2RCxRQUFJLENBQUMsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcs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QUUsRUFBRSxZQUFBO1lBQUUsRUFBRSxZQUFBO1lBQUUsRUFBRSxZQUFBO1lBQUUsRUFBRSxZQUFBLENBQUM7O0FBRXZDLGFBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUU7QUFDN0QsWUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixZQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLFlBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsWUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7QUFFaEIsWUFBRSxHQUFHLEFBQUMsQUFBQyxFQUFFLEdBQUcsQ0FBQyxLQUFPLEVBQUUsR0FBRyxDQUFDLEFBQUMsSUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFBLElBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQSxBQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQSxBQUFDLEdBQUcsRUFBRSxBQUFDLENBQUM7QUFDNUUsY0FBSSxFQUFFLEVBQUU7QUFDTCxrQkFBTSxHQUFHLENBQUMsTUFBTSxDQUFDO1dBQ25CO1NBQ0Y7O0FBRUQsZUFBTyxNQUFNLENBQUM7T0FDZiIsImZpbGUiOiJodHRwOi8vcHJvamVjdHMuZGVsaW1pdGVkLmlvL3dlYmdsLWdsb2Jlcy9qcy9jb21tb24vZ2VvSGVscGVycy5qcyIsInNvdXJjZXNDb250ZW50IjpbIlxuZXhwb3J0IGZ1bmN0aW9uIGdldFBvaW50KGV2ZW50KSB7XG5cbiAgLy8gR2V0IHRoZSB2ZXJ0aWNlc1xuICBsZXQgYSA9IHRoaXMuZ2VvbWV0cnkudmVydGljZXNbZXZlbnQuZmFjZS5hXTtcbiAgbGV0IGIgPSB0aGlzLmdlb21ldHJ5LnZlcnRpY2VzW2V2ZW50LmZhY2UuYl07XG4gIGxldCBjID0gdGhpcy5nZW9tZXRyeS52ZXJ0aWNlc1tldmVudC5mYWNlLmNdO1xuXG4gIC8vIEF2ZXJnZSB0aGVtIHRvZ2V0aGVyXG4gIGxldCBwb2ludCA9IHtcbiAgICB4OiAoYS54ICsgYi54ICsgYy54KSAvIDMsXG4gICAgeTogKGEueSArIGIueSArIGMueSkgLyAzLFxuICAgIHo6IChhLnogKyBiLnogKyBjLnopIC8gM1xuICB9O1xuXG4gIHJldHVybiBwb2ludDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEV2ZW50Q2VudGVyKGV2ZW50LCByYWRpdXMpIHtcbiAgcmFkaXVzID0gcmFkaXVzIHx8IDIwMDtcblxuICB2YXIgcG9pbnQgPSBnZXRQb2ludC5jYWxsKHRoaXMsIGV2ZW50KTtcblxuICB2YXIgbGF0UmFkcyA9IE1hdGguYWNvcyhwb2ludC55IC8gcmFkaXVzKTtcbiAgdmFyIGxuZ1JhZHMgPSBNYXRoLmF0YW4yKHBvaW50LnosIHBvaW50LngpO1xuICB2YXIgbGF0ID0gKE1hdGguUEkgLyAyIC0gbGF0UmFkcykgKiAoMTgwIC8gTWF0aC5QSSk7XG4gIHZhciBsbmcgPSAoTWF0aC5QSSAtIGxuZ1JhZHMpICogKDE4MCAvIE1hdGguUEkpO1xuXG4gIHJldHVybiBbbGF0LCBsbmcgLSAxODBdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFRvWFlaKHBvaW50LCByYWRpdXMpIHtcbiAgcmFkaXVzID0gcmFkaXVzIHx8IDIwMDtcblxuICB2YXIgbGF0UmFkcyA9ICggOTAgLSBwb2ludFswXSkgKiBNYXRoLlBJIC8gMTgwO1xuICB2YXIgbG5nUmFkcyA9ICgxODAgLSBwb2ludFsxXSkgKiBNYXRoLlBJIC8gMTgwO1xuXG4gIHZhciB4ID0gcmFkaXVzICogTWF0aC5zaW4obGF0UmFkcykgKiBNYXRoLmNvcyhsbmdSYWRzKTtcbiAgdmFyIHkgPSByYWRpdXMgKiBNYXRoLmNvcyhsYXRSYWRzKTtcbiAgdmFyIHogPSByYWRpdXMgKiBNYXRoLnNpbihsYXRSYWRzKSAqIE1hdGguc2luKGxuZ1JhZHMpO1xuXG4gIHJldHVybiB7eDogeCwgeTogeSwgejogen07XG59XG5cbmV4cG9ydCB2YXIgZ2VvZGVjb2RlciA9IGZ1bmN0aW9uIChmZWF0dXJlcykge1xuXG4gIGxldCBzdG9yZSA9IHt9O1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZmVhdHVyZXMubGVuZ3RoOyBpKyspIHtcbiAgICBzdG9yZVtmZWF0dXJlc1tpXS5pZF0gPSBmZWF0dXJlc1tpXTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZmluZDogZnVuY3Rpb24gKGlkKSB7XG4gICAgICByZXR1cm4gc3RvcmVbaWRdO1xuICAgIH0sXG4gICAgc2VhcmNoOiBmdW5jdGlvbiAobGF0LCBsbmcpIHtcblxuICAgICAgbGV0IG1hdGNoID0gZmFsc2U7XG5cbiAgICAgIGxldCBjb3VudHJ5LCBjb29yZHM7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmVhdHVyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY291bnRyeSA9IGZlYXR1cmVzW2ldO1xuICAgICAgICBpZihjb3VudHJ5Lmdlb21ldHJ5LnR5cGUgPT09ICdQb2x5Z29uJykge1xuICAgICAgICAgIG1hdGNoID0gcG9pbnRJblBvbHlnb24oY291bnRyeS5nZW9tZXRyeS5jb29yZGluYXRlc1swXSwgW2xuZywgbGF0XSk7XG4gICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBjb2RlOiBmZWF0dXJlc1tpXS5pZCxcbiAgICAgICAgICAgICAgbmFtZTogZmVhdHVyZXNbaV0ucHJvcGVydGllcy5uYW1lXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChjb3VudHJ5Lmdlb21ldHJ5LnR5cGUgPT09ICdNdWx0aVBvbHlnb24nKSB7XG4gICAgICAgICAgY29vcmRzID0gY291bnRyeS5nZW9tZXRyeS5jb29yZGluYXRlcztcbiAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvb3Jkcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgbWF0Y2ggPSBwb2ludEluUG9seWdvbihjb29yZHNbal1bMF0sIFtsbmcsIGxhdF0pO1xuICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY29kZTogZmVhdHVyZXNbaV0uaWQsXG4gICAgICAgICAgICAgICAgbmFtZTogZmVhdHVyZXNbaV0ucHJvcGVydGllcy5uYW1lXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfTtcbn07XG5cbi8vIGh0dHA6Ly93d3cuZWNzZS5ycGkuZWR1L0hvbWVwYWdlcy93cmYvUmVzZWFyY2gvU2hvcnRfTm90ZXMvcG5wb2x5Lmh0bWxcbnZhciBwb2ludEluUG9seWdvbiA9IGZ1bmN0aW9uKHBvbHksIHBvaW50KSB7XG5cbiAgbGV0IHggPSBwb2ludFswXTtcbiAgbGV0IHkgPSBwb2ludFsxXTtcblxuICBsZXQgaW5zaWRlID0gZmFsc2UsIHhpLCB4aiwgeWksIHlqLCB4aztcblxuICBmb3IgKGxldCBpID0gMCwgaiA9IHBvbHkubGVuZ3RoIC0gMTsgaSA8IHBvbHkubGVuZ3RoOyBqID0gaSsrKSB7XG4gICAgeGkgPSBwb2x5W2ldWzBdO1xuICAgIHlpID0gcG9seVtpXVsxXTtcbiAgICB4aiA9IHBvbHlbal1bMF07XG4gICAgeWogPSBwb2x5W2pdWzFdO1xuXG4gICAgeGsgPSAoKHlpID4geSkgIT09ICh5aiA+IHkpKSAmJiAoeCA8ICh4aiAtIHhpKSAqICh5IC0geWkpIC8gKHlqIC0geWkpICsgeGkpO1xuICAgIGlmICh4aykge1xuICAgICAgIGluc2lkZSA9ICFpbnNpZGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGluc2lkZTtcbn07XG5cblxuIl19
  108. }).call(__global);