diff --git a/README.md b/README.md index 56f7fb5b39cd6ef9d30cfa622ec4408e4cddd580..5f753da44dcd0a83cab329ad69d48a211cdd6f91 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,8 @@ Connection settings "extractedAttributes": { "batteryChargeLevel": 70, "loadedItems": [23, 1, 25, 17], - "errors": [2, 1, 6] + "errors": [2, 1, 6], + "theta": -0.9 }, "lastPosUpdate": "2021-09-14T09:41:20+00:00", "zoneDescriptors": [ diff --git a/src/app/components/map/map.component.ts b/src/app/components/map/map.component.ts index 4d67808ae7e04f7d5d53255f40fdbe5047046ed2..e4068cea02afcfb7e170f74a0a7776049c4dc097 100644 --- a/src/app/components/map/map.component.ts +++ b/src/app/components/map/map.component.ts @@ -6,7 +6,7 @@ import 'leaflet-arrowheads'; import { IMqttMessage, MqttService } from 'ngx-mqtt'; import { environment, MarkerColorMap } from 'src/environments/environment'; -import {Position, PositionUpdate, RelativePos, Quaternion, WGS84} from 'src/app/model/base-model'; +import {Position, PositionUpdate, RelativePos, WGS84} from 'src/app/model/base-model'; @Component({ @@ -82,39 +82,12 @@ export class MapComponent implements OnInit { // Rotaion let quter = desc.orientation - // if (quter) { - // // console.log("Init:", orient) - // let orient = this.calcOrient(quter.w, quter.x, quter.y, quter.z) - // // console.log("Orient:", orient) - // let orientPoint: RelativePos = { - // "x": orient[0] + pos.point.x, - // "y": orient[1] + pos.point.y, - // "z": orient[2] + pos.point.z - // } - - // let globPointOrient = this.ref2root(orientPoint) - - // if ('x' in pos.point) { - // var globPos = this.ref2root(pos.point) - // } else { - // var globPos = L.latLng([pos.point.latitude, pos.point.longitude]); - // } - - // // add arrow - // var arrow = L.polyline([globPos, globPointOrient], {color: 'grey'}).arrowheads( - // { - // fill: true, - // // size: '30%', - // color: 'grey' - // } - // ).addTo(this.map); - - // } - - this.addMarker(key, pos, props, quter) + + + this.addMarker(key, pos, props, desc.extractedAttributes?.theta) } - addMarker(key: string, pos: Position, popup: string, quter: Quaternion) { + addMarker(key: string, pos: Position, popup: string, theta: number) { let point = pos.point if ('x' in point) { @@ -149,20 +122,18 @@ export class MapComponent implements OnInit { } // --- Orientation - if (quter && 'x' in point) { - let orient = this.calcOrient(quter.w, quter.x, quter.y, quter.z) - let orientPoint: RelativePos = { - "x": orient[0] + point.x, - "y": orient[1] + point.y, - "z": orient[2] + if (theta && 'x' in point) { + let orient: RelativePos = { + "x": point.x + Math.sin(theta) * 3, + "y": point.y + Math.cos(theta) * 3, + "z": point.z } - let globPointOrient = this.ref2root(orientPoint) + let globPointOrient = this.ref2root(orient) // add arrow var arrow = L.polyline([globPos, globPointOrient], {color: 'grey'}).arrowheads( { fill: true, - // size: '30%', color: 'grey' } ); @@ -171,23 +142,6 @@ export class MapComponent implements OnInit { } } - quaternionMult(q: number[], r: number[]) { - return [r[0]*q[0]-r[1]*q[1]-r[2]*q[2]-r[3]*q[3], - r[0]*q[1]+r[1]*q[0]-r[2]*q[3]+r[3]*q[2], - r[0]*q[2]+r[1]*q[3]+r[2]*q[0]-r[3]*q[1], - r[0]*q[3]-r[1]*q[2]+r[2]*q[1]+r[3]*q[0]] - } - - calcOrient(w: number, x: number, y: number, z: number) { - // Rotation transforms from one orientation to another - let point = [0,0,3,0] // point vector - let qConj = [w,-1*x,-1*y,-1*z] - let q = [w,x,y,z] - let point_new = this.quaternionMult(this.quaternionMult(q,point),qConj) - return point_new.slice(1) - } - - // @https://asymmetrik.com/ngx-leaflet-tutorial-angular-cli/ // --- Layers: Define base layers so we can reference them multiple times streetMaps = L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { diff --git a/src/app/model/base-model.ts b/src/app/model/base-model.ts index 7f07338169fc2157c757df142bcb42a0a4dad058..17bd669c56a56581a7d86ca997a5bbc4d9dd565c 100644 --- a/src/app/model/base-model.ts +++ b/src/app/model/base-model.ts @@ -67,6 +67,7 @@ interface ExtAttribute { batteryChargeLevel: number loadedItems: number[] errors: number[] + theta: number }