123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- (function() { var __moduleName = "js/common/geoHelpers"; var __moduleAddress = "http://projects.delimited.io/webgl-globes/js/common/geoHelpers.js";System.register([], function (_export) {
- 'use strict';
- var geodecoder, pointInPolygon;
- _export('getPoint', getPoint);
- _export('getEventCenter', getEventCenter);
- _export('convertToXYZ', convertToXYZ);
- function getPoint(event) {
- // Get the vertices
- var a = this.geometry.vertices[event.face.a];
- var b = this.geometry.vertices[event.face.b];
- var c = this.geometry.vertices[event.face.c];
- // Averge them together
- var point = {
- x: (a.x + b.x + c.x) / 3,
- y: (a.y + b.y + c.y) / 3,
- z: (a.z + b.z + c.z) / 3
- };
- return point;
- }
- function getEventCenter(event, radius) {
- radius = radius || 200;
- var point = getPoint.call(this, event);
- var latRads = Math.acos(point.y / radius);
- var lngRads = Math.atan2(point.z, point.x);
- var lat = (Math.PI / 2 - latRads) * (180 / Math.PI);
- var lng = (Math.PI - lngRads) * (180 / Math.PI);
- return [lat, lng - 180];
- }
- function convertToXYZ(point, radius) {
- radius = radius || 200;
- var latRads = (90 - point[0]) * Math.PI / 180;
- var lngRads = (180 - point[1]) * Math.PI / 180;
- var x = radius * Math.sin(latRads) * Math.cos(lngRads);
- var y = radius * Math.cos(latRads);
- var z = radius * Math.sin(latRads) * Math.sin(lngRads);
- return { x: x, y: y, z: z };
- }
- return {
- setters: [],
- execute: function () {
- geodecoder = function geodecoder(features) {
- var store = {};
- for (var i = 0; i < features.length; i++) {
- store[features[i].id] = features[i];
- }
- return {
- find: function find(id) {
- return store[id];
- },
- search: function search(lat, lng) {
- var match = false;
- var country = undefined,
- coords = undefined;
- for (var i = 0; i < features.length; i++) {
- country = features[i];
- if (country.geometry.type === 'Polygon') {
- match = pointInPolygon(country.geometry.coordinates[0], [lng, lat]);
- if (match) {
- return {
- code: features[i].id,
- name: features[i].properties.name
- };
- }
- } else if (country.geometry.type === 'MultiPolygon') {
- coords = country.geometry.coordinates;
- for (var j = 0; j < coords.length; j++) {
- match = pointInPolygon(coords[j][0], [lng, lat]);
- if (match) {
- return {
- code: features[i].id,
- name: features[i].properties.name
- };
- }
- }
- }
- }
- return null;
- }
- };
- };
- _export('geodecoder', geodecoder);
- // http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html
- pointInPolygon = function pointInPolygon(poly, point) {
- var x = point[0];
- var y = point[1];
- var inside = false,
- xi = undefined,
- xj = undefined,
- yi = undefined,
- yj = undefined,
- xk = undefined;
- for (var i = 0, j = poly.length - 1; i < poly.length; j = i++) {
- xi = poly[i][0];
- yi = poly[i][1];
- xj = poly[j][0];
- yj = poly[j][1];
- xk = yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi;
- if (xk) {
- inside = !inside;
- }
- }
- return inside;
- };
- }
- };
- });
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImh0dHA6Ly9wcm9qZWN0cy5kZWxpbWl0ZWQuaW8vd2ViZ2wtZ2xvYmVzL2pzL2NvbW1vbi9nZW9IZWxwZXJzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztNQTRDVyxVQUFVLEVBZ0RqQixjQUFjOztzQkEzRkYsUUFBUTs7NEJBaUJSLGNBQWM7OzBCQWFkLFlBQVk7O0FBOUJyQixXQUFTLFFBQVEsQ0FBQyxLQUFLLEVBQUU7OztBQUc5QixRQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLFFBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0MsUUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzs7O0FBRzdDLFFBQUksS0FBSyxHQUFHO0FBQ1YsT0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUEsR0FBSSxDQUFDO0FBQ3hCLE9BQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFBLEdBQUksQ0FBQztBQUN4QixPQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQSxHQUFJLENBQUM7S0FDekIsQ0FBQzs7QUFFRixXQUFPLEtBQUssQ0FBQztHQUNkOztBQUVNLFdBQVMsY0FBYyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUU7QUFDNUMsVUFBTSxHQUFHLE1BQU0sSUFBSSxHQUFHLENBQUM7O0FBRXZCLFFBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDOztBQUV2QyxRQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7QUFDMUMsUUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQyxRQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQSxJQUFLLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFBLEFBQUMsQ0FBQztBQUNwRCxRQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFBLElBQUssR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUEsQUFBQyxDQUFDOztBQUVoRCxXQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztHQUN6Qjs7QUFFTSxXQUFTLFlBQVksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFO0FBQzFDLFVBQU0sR0FBRyxNQUFNLElBQUksR0FBRyxDQUFDOztBQUV2QixRQUFJLE9BQU8sR0FBRyxDQUFFLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUEsR0FBSSxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUMvQyxRQUFJLE9BQU8sR0FBRyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUEsR0FBSSxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQzs7QUFFL0MsUUFBSSxDQUFDLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN2RCxRQUFJLENBQUMsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcs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QUUsRUFBRSxZQUFBO1lBQUUsRUFBRSxZQUFBO1lBQUUsRUFBRSxZQUFBO1lBQUUsRUFBRSxZQUFBLENBQUM7O0FBRXZDLGFBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUU7QUFDN0QsWUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixZQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLFlBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsWUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7QUFFaEIsWUFBRSxHQUFHLEFBQUMsQUFBQyxFQUFFLEdBQUcsQ0FBQyxLQUFPLEVBQUUsR0FBRyxDQUFDLEFBQUMsSUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFBLElBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQSxBQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQSxBQUFDLEdBQUcsRUFBRSxBQUFDLENBQUM7QUFDNUUsY0FBSSxFQUFFLEVBQUU7QUFDTCxrQkFBTSxHQUFHLENBQUMsTUFBTSxDQUFDO1dBQ25CO1NBQ0Y7O0FBRUQsZUFBTyxNQUFNLENBQUM7T0FDZiIsImZpbGUiOiJodHRwOi8vcHJvamVjdHMuZGVsaW1pdGVkLmlvL3dlYmdsLWdsb2Jlcy9qcy9jb21tb24vZ2VvSGVscGVycy5qcyIsInNvdXJjZXNDb250ZW50IjpbIlxuZXhwb3J0IGZ1bmN0aW9uIGdldFBvaW50KGV2ZW50KSB7XG5cbiAgLy8gR2V0IHRoZSB2ZXJ0aWNlc1xuICBsZXQgYSA9IHRoaXMuZ2VvbWV0cnkudmVydGljZXNbZXZlbnQuZmFjZS5hXTtcbiAgbGV0IGIgPSB0aGlzLmdlb21ldHJ5LnZlcnRpY2VzW2V2ZW50LmZhY2UuYl07XG4gIGxldCBjID0gdGhpcy5nZW9tZXRyeS52ZXJ0aWNlc1tldmVudC5mYWNlLmNdO1xuXG4gIC8vIEF2ZXJnZSB0aGVtIHRvZ2V0aGVyXG4gIGxldCBwb2ludCA9IHtcbiAgICB4OiAoYS54ICsgYi54ICsgYy54KSAvIDMsXG4gICAgeTogKGEueSArIGIueSArIGMueSkgLyAzLFxuICAgIHo6IChhLnogKyBiLnogKyBjLnopIC8gM1xuICB9O1xuXG4gIHJldHVybiBwb2ludDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEV2ZW50Q2VudGVyKGV2ZW50LCByYWRpdXMpIHtcbiAgcmFkaXVzID0gcmFkaXVzIHx8IDIwMDtcblxuICB2YXIgcG9pbnQgPSBnZXRQb2ludC5jYWxsKHRoaXMsIGV2ZW50KTtcblxuICB2YXIgbGF0UmFkcyA9IE1hdGguYWNvcyhwb2ludC55IC8gcmFkaXVzKTtcbiAgdmFyIGxuZ1JhZHMgPSBNYXRoLmF0YW4yKHBvaW50LnosIHBvaW50LngpO1xuICB2YXIgbGF0ID0gKE1hdGguUEkgLyAyIC0gbGF0UmFkcykgKiAoMTgwIC8gTWF0aC5QSSk7XG4gIHZhciBsbmcgPSAoTWF0aC5QSSAtIGxuZ1JhZHMpICogKDE4MCAvIE1hdGguUEkpO1xuXG4gIHJldHVybiBbbGF0LCBsbmcgLSAxODBdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFRvWFlaKHBvaW50LCByYWRpdXMpIHtcbiAgcmFkaXVzID0gcmFkaXVzIHx8IDIwMDtcblxuICB2YXIgbGF0UmFkcyA9ICggOTAgLSBwb2ludFswXSkgKiBNYXRoLlBJIC8gMTgwO1xuICB2YXIgbG5nUmFkcyA9ICgxODAgLSBwb2ludFsxXSkgKiBNYXRoLlBJIC8gMTgwO1xuXG4gIHZhciB4ID0gcmFkaXVzICogTWF0aC5zaW4obGF0UmFkcykgKiBNYXRoLmNvcyhsbmdSYWRzKTtcbiAgdmFyIHkgPSByYWRpdXMgKiBNYXRoLmNvcyhsYXRSYWRzKTtcbiAgdmFyIHogPSByYWRpdXMgKiBNYXRoLnNpbihsYXRSYWRzKSAqIE1hdGguc2luKGxuZ1JhZHMpO1xuXG4gIHJldHVybiB7eDogeCwgeTogeSwgejogen07XG59XG5cbmV4cG9ydCB2YXIgZ2VvZGVjb2RlciA9IGZ1bmN0aW9uIChmZWF0dXJlcykge1xuXG4gIGxldCBzdG9yZSA9IHt9O1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZmVhdHVyZXMubGVuZ3RoOyBpKyspIHtcbiAgICBzdG9yZVtmZWF0dXJlc1tpXS5pZF0gPSBmZWF0dXJlc1tpXTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZmluZDogZnVuY3Rpb24gKGlkKSB7XG4gICAgICByZXR1cm4gc3RvcmVbaWRdO1xuICAgIH0sXG4gICAgc2VhcmNoOiBmdW5jdGlvbiAobGF0LCBsbmcpIHtcblxuICAgICAgbGV0IG1hdGNoID0gZmFsc2U7XG5cbiAgICAgIGxldCBjb3VudHJ5LCBjb29yZHM7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmVhdHVyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY291bnRyeSA9IGZlYXR1cmVzW2ldO1xuICAgICAgICBpZihjb3VudHJ5Lmdlb21ldHJ5LnR5cGUgPT09ICdQb2x5Z29uJykge1xuICAgICAgICAgIG1hdGNoID0gcG9pbnRJblBvbHlnb24oY291bnRyeS5nZW9tZXRyeS5jb29yZGluYXRlc1swXSwgW2xuZywgbGF0XSk7XG4gICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBjb2RlOiBmZWF0dXJlc1tpXS5pZCxcbiAgICAgICAgICAgICAgbmFtZTogZmVhdHVyZXNbaV0ucHJvcGVydGllcy5uYW1lXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChjb3VudHJ5Lmdlb21ldHJ5LnR5cGUgPT09ICdNdWx0aVBvbHlnb24nKSB7XG4gICAgICAgICAgY29vcmRzID0gY291bnRyeS5nZW9tZXRyeS5jb29yZGluYXRlcztcbiAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvb3Jkcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgbWF0Y2ggPSBwb2ludEluUG9seWdvbihjb29yZHNbal1bMF0sIFtsbmcsIGxhdF0pO1xuICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY29kZTogZmVhdHVyZXNbaV0uaWQsXG4gICAgICAgICAgICAgICAgbmFtZTogZmVhdHVyZXNbaV0ucHJvcGVydGllcy5uYW1lXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfTtcbn07XG5cbi8vIGh0dHA6Ly93d3cuZWNzZS5ycGkuZWR1L0hvbWVwYWdlcy93cmYvUmVzZWFyY2gvU2hvcnRfTm90ZXMvcG5wb2x5Lmh0bWxcbnZhciBwb2ludEluUG9seWdvbiA9IGZ1bmN0aW9uKHBvbHksIHBvaW50KSB7XG5cbiAgbGV0IHggPSBwb2ludFswXTtcbiAgbGV0IHkgPSBwb2ludFsxXTtcblxuICBsZXQgaW5zaWRlID0gZmFsc2UsIHhpLCB4aiwgeWksIHlqLCB4aztcblxuICBmb3IgKGxldCBpID0gMCwgaiA9IHBvbHkubGVuZ3RoIC0gMTsgaSA8IHBvbHkubGVuZ3RoOyBqID0gaSsrKSB7XG4gICAgeGkgPSBwb2x5W2ldWzBdO1xuICAgIHlpID0gcG9seVtpXVsxXTtcbiAgICB4aiA9IHBvbHlbal1bMF07XG4gICAgeWogPSBwb2x5W2pdWzFdO1xuXG4gICAgeGsgPSAoKHlpID4geSkgIT09ICh5aiA+IHkpKSAmJiAoeCA8ICh4aiAtIHhpKSAqICh5IC0geWkpIC8gKHlqIC0geWkpICsgeGkpO1xuICAgIGlmICh4aykge1xuICAgICAgIGluc2lkZSA9ICFpbnNpZGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGluc2lkZTtcbn07XG5cblxuIl19
- }).call(__global);
|