как направить стрелку на вершине компаса, чтобы указать направление c. Например, текущая позиция в Саудовской Аравии - PullRequest
0 голосов
/ 01 апреля 2020

Я создаю приложение Ioni c 4 с angular и хочу создать компас, который будет указывать в направлении c. Это направление будет показано стрелкой над компасом. До сих пор я создал компас и компас работает нормально и поместил стрелку над ним. Снимок экрана приложения. enter image description here

Что я знаю, так это то, что мне нужно вычислить угол от текущей позиции до целевой позиции. Я использовал некоторые решения для переполнения стека, чтобы найти угол и использовать этот угол, чтобы указать стрелку в нужное место. Но, к сожалению, я не могу получить желаемый угол.

Это код для определения угла.

  angleFromCoordinate() {
    let lat1 = this.latCoords
    let lon1 = this.lngCoords
    let lat2 = this.destLat;
    let lon2 = this.destLong;
    var p1 = {
      x: lat1,
      y: lon1
    };

    var p2 = {
      x: lat2,
      y: lon2
    };
    var angleDeg = Math.atan2(p2.y - p1.y, p2.x - p1.x) * 180 / Math.PI;
    console.log(angleDeg);
    return angleDeg;
  }

Я также хочу, чтобы стрелка двигалась вперед, если устройство поворачивается. Я вращаю свой компас с помощью плагина ioni c 4'sOrientation

  this.deviceSubscription = this.deviceOrientation.watchHeading().subscribe(
      (data: DeviceOrientationCompassHeading) => {
        //to torate compass
        this.rotateCompass(data.magneticHeading);
        //to rotate the arrow
        this.rotateArrow(data.magneticHeading);
      }
    );

1 Ответ

0 голосов
/ 19 апреля 2020

У меня все работает нормально. Я просто хочу прояснить, если кто-то ищет решение этой проблемы, что вышеупомянутый код для получения угла от одной точки к другой точке работает нормально. Код для получения угла.

angleFromCoordinate() {
    let lat1 = this.latCoords
    let lon1 = this.lngCoords
    let lat2 = this.destLat;
    let lon2 = this.destLong;
    var p1 = {
      x: lat1,
      y: lon1
    };

    var p2 = {
      x: lat2,
      y: lon2
    };
    var angleDeg = Math.atan2(p2.y - p1.y, p2.x - p1.x) * 180 / Math.PI;
    console.log(angleDeg);
    return angleDeg;
  }

Этот метод возвращает угол, и вы можете использовать этот угол, чтобы направить компас в нужное место.

...