UNPKG

@jibestream-dev/jmap-navigation-kit

Version:

Kit for the Jibestream SDK to create Navigation Instructions based on a wayfinding path

1 lines 17.1 kB
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports["jmap-navigation-kit"]=e():t["jmap-navigation-kit"]=e()}(this,function(){return function(t){function e(i){if(n[i])return n[i].exports;var r=n[i]={i:i,l:!1,exports:{}};return t[i].call(r.exports,r,r.exports,e),r.l=!0,r.exports}var n={};return e.m=t,e.c=n,e.i=function(t){return t},e.d=function(t,n,i){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:i})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=10)}([function(t,e,n){"use strict";var i,r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};i=function(){return this}();try{i=i||Function("return this")()||(0,eval)("this")}catch(t){"object"===("undefined"==typeof window?"undefined":r(window))&&(i=window)}t.exports=i},function(t,e,n){"use strict";(function(e){function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var i=function(){function t(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}return function(e,n,i){return n&&t(e.prototype,n),i&&t(e,i),e}}(),r=e||window,o=r.jungle.util,a=function(){function t(e,i,a){var s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:20,u=arguments.length>4&&void 0!==arguments[4]?arguments[4]:45;n(this,t),this.a=e,this.b=i,this.c=a,this._threshold=o.validate(s,Number,20),this._uTurnThreshold=o.validate(u,Number,45);var c=r.jmap.core.Waypoint;if(o.validate(a,c)){var l=o.getDegreesBetweenPoints(i.coordinates,a.coordinates),f=o.getDegreesBetweenPoints(e.coordinates,i.coordinates);this.angle=l-f,this.value=this.getValue()}else this.value=t.ARRIVE}return i(t,null,[{key:"RIGHT",get:function(){return"Right"}},{key:"LEFT",get:function(){return"Left"}},{key:"FORWARD",get:function(){return"Forward"}},{key:"UTURN",get:function(){return"UTurn"}},{key:"ARRIVE",get:function(){return"Arrive"}}]),i(t,[{key:"getValue",value:function(){var e=this._threshold,n=this.angle,i=this._uTurnThreshold;return 270-i>n&&n>90+i||-270+i<n&&n<-90-i?t.UTURN:n>e&&n<180-e||n<-180-e&&n>-360+e?t.LEFT:n<0-e&&n>-180+e||n>180+e&&n<360-e?t.RIGHT:t.FORWARD}}],[{key:"isValid",value:function(e){return e&&e.constructor===t}}]),t}();t.exports=a}).call(e,n(0))},function(t,e,n){"use strict";(function(e){function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var i=e||window,r=i.jungle.util,o=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};n(this,t),this.map=e.map,this.point=e.point,this.gazeDirection=r.validate(e.gazeDirection,Number,0),this.visualRange=r.validate(e.visualRange,Number,250),this.visualLimitLeft=r.validate(e.visualLimitLeft,Number,20),this.visualLimitRight=r.validate(e.visualLimitRight,Number,20),this.layersOfInterest=r.validate(e.layersOfInterest,Array,["units"]),this.visualObstacles=r.validate(e.visualObstacles,Array,[])};t.exports=o}).call(e,n(0))},function(t,e,n){"use strict";(function(e){function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var i=e||window,r=i.jungle.util,o=function t(e,i,o){n(this,t),this.distance=r.validate(e,Number,0),this.angle=r.validate(i,Number,0),this.layerName=r.validate(o,String,"")};t.exports=o}).call(e,n(0))},function(t,e,n){"use strict";(function(e){function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var r=function(){function t(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}return function(e,n,i){return n&&t(e.prototype,n),i&&t(e,i),e}}(),o=n(1),a=n(6),s=n(9),u=n(8),c=n(7),l=n(2),f=e||window,h=f.jungle.util,d=function(){function t(n,r){if(i(this,t),n instanceof e.jmap.JController==!1)throw new Error("NavigationKit uses JController as its first argument.");this._control=n,this._angleThreshold=h.validate(r.angleThreshold,Number,20),this._instructionFactory=new a({control:this._control,navigationKit:this,visualLimitLeft:h.validate(r.visualLimitLeft,Number,60),visualLimitRight:h.validate(r.visualLimitRight,Number,60),layersOfInterest:h.validate(r.layersOfInterest,Array,["units"]),visualObstacles:h.validate(r.obstacles,Array,[]),visualRange:h.validate(r.visualRange,Number,250)}),this.activeInstructionComponents=[]}return r(t,[{key:"setAngleThreshold",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:20;this._angleThreshold=h.validate(t,Number,20)}},{key:"setUTurnThreshold",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:45;this.uTurnThreshold=h.validate(t,Number,45)}},{key:"getSurroundingElements",value:function(e){var n=this;if(h.validate(e,l)){var i=e.point,r=e.visualRange,o=t.getMovedPoint(i,e.gazeDirection,r),a=t._createGazeShapes(e),f=a.gazeBounds,d=a.gazePolygon,p=a.gazeCircle,v=[].concat(e.layersOfInterest,e.visualObstacles),y=[],g=v.reduce(function(i,r){var o=n._control.getShapesInLayer(r,e.map),a=o.reduce(function(e,n){var i=n.points?h.getBoundingBoxFromPoints(n.points):h.getBoundingBoxFromPoints(n.data[0]),r=[];return t.doBoundsIntersect(f,i)&&(r=n.segments.reduce(function(e,i){return t.isSegmentInCircle(i[0],i[1],p)&&e.push({segment:i,shape:n}),e},[])),e.concat(r)},[]);return i.concat(a)},[]),m=1/0,b=g.reduce(function(t,e){if(h.doLinesIntersect(e.segment,[i,o])){var n=h.getPointOfIntersection(e.segment,[i,o]),r=h.distanceBetweenPoints(i,n);if(r<m)return m=r,e.segment}return t},null),w=g.reduce(function(e,n){return n===b&&-1===y.indexOf(n.shape)&&y.push(n.shape),t.segmentInPolygon(n.segment,d)&&n.segment.forEach(function(t){var r=[i,t];if(!g.reduce(function(e,i){if(!e&&i.shape!==n.shape&&h.doLinesIntersect(r,i.segment)){var o=h.getPointOfIntersection(r,i.segment);if(o[0]!==t[0]||o[1]!==t[1])return!0}return e},!1)){e.push(n);var o={x:i[0],y:i[1]},a=[{x:n.segment[0][0],y:n.segment[0][1]},{x:n.segment[1][0],y:n.segment[1][1]}],s=h._getClosestPointOnLine(o,a).position,u=h.distanceBetweenPoints(i,s);n.shape.distance=Math.min(u,n.shape.distance||1/0),n.shape.angle=h.getDegreesBetweenPoints(i,s),-1===y.indexOf(n.shape)&&y.push(n.shape)}}),e},[]),_=y.map(function(t){var e=t.distance,n=t.angle,i=t.parent.name;return new s(t,e,n,i)}),P=e.layersOfInterest.reduce(function(t,i){var r=n._control.stage.getMapViewById(e.map.id),o=r.getLayerByName(i);return o?t.concat(o.getIcons()):t},[]),x=P.filter(function(t){if(d.containsPoint(t.point)){var e=[i,t.point];return!w.reduce(function(t,n){return!(!t&&!h.doLinesIntersect(e,n.segment))||t},!1)}return!1}),O=x.map(function(t){var e=h.distanceBetweenPoints(i,t.point),n=h.getDegreesBetweenPoints(i,t.point),r=t.parent.name;return new u(t,e,n,r)});return _.sort(function(t,e){return+t.distance-+e.distance}),O.sort(function(t,e){return+t.distance-+e.distance}),new c({shapes:_,icons:O})}return new c}},{key:"createInstructionsFromPath",value:function(t){var e=this;return t&&Array.isArray(t)?t.reduce(function(n,i,r){var a=i.points,s=a[a.length-1],u=0;if(a.forEach(function(t,i){var r=a[i+1],s=a[i+2];if(t&&r&&s){var c=new o(t,r,s,e._threshold,e._uTurnThreshold);if(c.value!==o.FORWARD){var l=e._instructionFactory.createFromDirection(c);l.pixelDistance+=u,u=0,n.push(l)}else u+=h.distanceBetweenPoints(t.coordinates,r.coordinates)}}),t[r+1]){var c=e._control.currentBuilding.floors,l=c.find(function(t){return t.map.id===i.mapId}),f=c.find(function(e){return e.map.id===t[r+1].mapId}),d=i.mover.typeName,p=e._instructionFactory.createEmpty();p.direction=f.level>l.level?"up":"down",p.text="Take the "+d+" "+p.direction+" to "+f.name,p.completionPoint=s,p.pathType=i.mover,p.nextFloor=f,n.push(p)}else{var v=a[a.length-2],y=s,g=new o(v,y,null,null),m=e._instructionFactory.createFromDirection(g);m.pixelDistance+=u,n.push(m)}return n},[]):[]}},{key:"hasUserVeeredOffRoute",value:function(t,e){var n=this;if(Array.isArray(t)){var i={x:this._control.userLocation.position[0],y:this._control.userLocation.position[1]};return t.filter(function(t){return t.mapId===n._control.userLocation.map.id}).reduce(function(t,e){var n=e.points.reduce(function(t,e,n,r){if(n){var o={x:e.coordinates[0],y:e.coordinates[1]},a={x:r[n-1].coordinates[0],y:r[n-1].coordinates[1]},s=h.getClosestPointOnLine(i,[o,a]).dist;return Math.min(t,s)}return t},1/0);return Math.min(n,t)},1/0)*this._control.currentMap.mmPerPixel>e}return!1}},{key:"drawPathWithInstructions",value:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._control.defaultPathStyle,i=this,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:new jmap.Style({}),o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:new jmap.Font({fill:"#FFFFFF",fontSize:12});if(!Array.isArray(e)||!e.length)return null;var a=this.createInstructionsFromPath(e);return this.activeInstructionComponents.forEach(function(t){i._control.removeComponent(t.element,t.map)}),a.forEach(function(e){var a=e.decisionPoint||e.completionPoint;if(a){var s=i._control.activeVenue.maps.getById(a.mapId),u=e.direction;"up"!==u&&"down"!==u||(u+=" "+e.text.split(u)[1]);var c=new jmap.Style({fill:n.stroke,opacity:1,strokeOpacity:1,strokeWidth:void 0,stroke:void 0}),l=Object.keys(r).reduce(function(t,e){return t[e]=r[e]||c[e],t},{}),f={fontFamily:"sans-serif",fontSize:"6px",fill:"#FFFFFF"},h=["wordWrap","wordWrapWidth","align","fontSize","fontFamily","fill","stroke","strokeWidth"],d=h.reduce(function(t,e){return t[e]=o[e]||f[e],t},{}),p='<span class="instruction badge badge-primary">'+u+"</span>",v=document.createElement("div");if(v.classList.add("step"),v.style.padding="2px 4px",v.style.backgroundColor=l.fill,v.style.opacity=l.opacity,v.style.borderWidth=void 0!==l.strokeWidth?l.strokeWidth+"px":0,v.style.borderStyle="solid",void 0!==l.stroke){var y=t.hexToRgb(l.stroke);v.style.borderColor="rgba("+y.r+", "+y.g+", "+y.b+", "+l.strokeOpacity+")"}v.style.color="#"+d.fill.toString(16),v.style.fontFamily=d.fontFamily,v.style.fontSize=d.fontSize,v.innerHTML=p,i._control.addComponent(v,s,a.coordinates),i.activeInstructionComponents.push({element:v,map:s})}}),this._control.drawWayfindingPath(e,n),this}}],[{key:"_createGazeShapes",value:function(e){var n=e.point,i=e.visualRange,r=e.gazeDirection,o=e.gazeDirection-e.visualLimitLeft,a=e.gazeDirection+e.visualLimitRight,s=t.getMovedPoint(n,o,i),u=t.getMovedPoint(n,r,i),c=t.getMovedPoint(n,a,i);return{gazeBounds:h.getBoundingBoxFromPoints([n,s,u,c]),gazePolygon:new f.jungle.shape.Polygon({points:[n,s,u,c]}),gazeCircle:new f.jungle.shape.Circle({point:e.point,radius:e.visualRange})}}},{key:"getMovedPoint",value:function(t,e,n){if(n&&Array.isArray(t)&&"number"==typeof e&&"number"==typeof n){var i=h.degreesToRadians(e);return[t[0]-n*Math.sin(i),t[1]-n*Math.cos(i)]}return null}},{key:"doBoundsIntersect",value:function(t,e){var n=Math.max(0,Math.min(t.x+t.width,e.x+e.width)-Math.max(t.x,e.x)),i=Math.max(0,Math.min(t.y+t.height,e.y+e.height)-Math.max(t.y,e.y));return n>0&&i>0}},{key:"isSegmentInCircle",value:function(t,e,n){if(n&&Array.isArray(t)&&Array.isArray(e)&&"Circle"===n.baseTypeName){if(n.containsPoint(t)||n.containsPoint(e))return!0;var i={x:n.point[0],y:n.point[1]},r=[{x:t[0],y:t[1]},{x:e[0],y:e[1]}],o=h._getClosestPointOnLine(i,r).position;return h.distanceBetweenPoints(i,o)<=n.radius}return null}},{key:"segmentInPolygon",value:function(t,e){if(e&&Array.isArray(t)&&"Polygon"===e.baseTypeName){var n=t.reduce(function(t,n){return!!e.containsPoint(n)||t},!1),i=e.points.reduce(function(n,i,r){var o=e.points[r+1]||e.points[0],a=[i,o];return!!h.doLinesIntersect(t,a)||n},!1);return n||i}return null}},{key:"hexToRgb",value:function(t){var e=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t);return e?{r:parseInt(e[1],16),g:parseInt(e[2],16),b:parseInt(e[3],16)}:null}}]),t}();t.exports=d}).call(e,n(0))},function(t,e,n){"use strict";(function(e){function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var r=function(){function t(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}return function(e,n,i){return n&&t(e.prototype,n),i&&t(e,i),e}}(),o=e||window,a=o.jungle.util,s=n(1),u=function(){function t(e){i(this,t),s.isValid(e)&&(this._setPoints(e),this._setText(e),this._setDistance(e.a,e.b))}return r(t,[{key:"_setDistance",value:function(t,e){var n=o.jmap.core.Waypoint;if(a.validate(t,n)&&a.validate(e,n)){var i=Math,r=t.coordinates,s=e.coordinates;this.pixelDistance=i.round(i.sqrt(i.pow(s[0]-r[0],2)+i.pow(s[1]-r[1],2)))}}},{key:"_setPoints",value:function(t){this.originPoint=t.a,this.decisionPoint=t.c?t.b:null,this.completionPoint=t.c||t.b}},{key:"_setText",value:function(t){this.direction=t.value,t.c?this.text="UTurn"===t.c?"Make a U-Turn":"Turn "+t.value:this.text="Arrive at your destination"}}]),t}();t.exports=u}).call(e,n(0))},function(t,e,n){"use strict";(function(e){function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var r=function(){function t(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}return function(e,n,i){return n&&t(e.prototype,n),i&&t(e,i),e}}(),o=n(5),a=n(1),s=n(2),u=e||window,c=u.jungle.util,l=function(){function t(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(i(this,t),n.control instanceof e.jmap.JController==!1)throw new Error("NavigationKit requires an instance of JController in the options object.");this._control=n.control,this._navKit=n.navigationKit,this._visualLimitLeft=c.validate(n.visualLimitLeft,Number,60),this._visualLimitRight=c.validate(n.visualLimitRight,Number,60),this._layersOfInterest=c.validate(n.layersOfInterest,[String],["units"]),this._visualRange=c.validate(n.visualRange,Number,250),this.createEmpty=t.createEmpty}return r(t,[{key:"createFromDirection",value:function(t){if(a.isValid(t)){var e=new o(t);return this.setSurroundingDefinition(e),this.setSurroundingElements(e),e}return null}},{key:"setSurroundingElements",value:function(t){c.validate(t,o)&&(t.surroundingElements=this._navKit.getSurroundingElements(t.surroundingDefinition))}},{key:"setSurroundingDefinition",value:function(t){if(c.validate(t,o)){var n=this._control.activeVenue.maps,i=t.originPoint,r=t.decisionPoint||t.completionPoint,a=e.jungle.util.getDegreesBetweenPoints(i.coordinates,r.coordinates);t.surroundingDefinition=new s({map:n.getById(i.mapId),point:i.coordinates,gazeDirection:a,visualLimitRight:this._visualLimitRight,visualLimitLeft:this._visualLimitLeft,layersOfInterest:this._layersOfInterest,visualRange:this._visualRange})}}}],[{key:"createEmpty",value:function(){return new o}}]),t}();t.exports=l}).call(e,n(0))},function(t,e,n){"use strict";function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var r=function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};i(this,t),this.icons=e.icons,this.shapes=e.shapes};t.exports=r},function(t,e,n){"use strict";function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function r(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function o(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var a=n(3),s=function(t){function e(t,n,o,a){i(this,e);var s=r(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,n,o,a));return s.icon=t,s}return o(e,t),e}(a);t.exports=s},function(t,e,n){"use strict";function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function r(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function o(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var a=n(3),s=function(t){function e(t,n,o,a){i(this,e);var s=r(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,n,o,a));return s.shape=t,s}return o(e,t),e}(a);t.exports=s},function(t,e,n){"use strict";(function(e){var i=n(4);e.NavigationKit=i,t.exports=i}).call(e,n(0))}])});