Как вычислить гипотенузу и осанку - PullRequest
0 голосов
/ 19 августа 2011

Я получил приведенный ниже код от @DanS по этой ссылке Как отобразить файл карты с неподвижным изображением и текущим местоположением

onCurrentPosition(Location current){
    double hypotenuse = upperLeft.distanceTo(current);
    double bearing = upperLeft.bearingTo(current);
    double currentDistanceX = Math.cos(bearing) * hypotenuse;
    //                     "percentage to mark the position"
    double currentPixelX = (currentDistanceX / upperLeft.distanceTo(lowerRight) * Math.cos(upperLeft.bearingTo(lowerRight))) * mapWidth;

    moveIndicatorX(currentPixelX);
}

Вот значения:

  • ток: 41.850033, -87.65005229999997
  • upperLeft: 41,866514127810355, -87,6720142364502
  • LowerRight: 41,83397145565242, -87,62824058532715
  • mapWidth: 512 x 512 px

Вот онлайн калькулятор для определения местоположения, гипотенузы (расстояния), азимута (азимутов)

Я получил результаты:

  • гипотенуза = 2581
  • подшипник = 135,21
  • currentDistanceX = -2562
  • currentPixelX = 311,9

Хотел бы попросить вас, ребята:

  1. для подтверждения правильности моих вычисленных результатов.
  2. о том, как вычислить currentPixelY (еще одну точку)?

Кстати, я планирую использовать это, чтобы вычислить местоположение данного реального LatLng (тока) против моей карты неподвижного изображения, которая связывала верхние и нижние правые углы неподвижного изображения с реальным LatLng.

Если вы хотите увидеть фактический и ожидаемый результат и хотите легко понять всю картину. Пожалуйста, обратитесь по этой ссылке -> Как пометить текущее местоположение на карту неподвижного изображения

1 Ответ

1 голос
/ 19 августа 2011

Это фактический код, который я использую, а не псевдокод, опубликованный ранее:

Location upperLeft = new Location("");
upperLeft.setLatitude(41.866514127810355);
upperLeft.setLongitude(-87.6720142364502);
Location lowerRight = new Location("");
lowerRight.setLatitude(41.83397145565242);
lowerRight.setLongitude(-87.62824058532715);
Location current = new Location("");
current.setLatitude(41.850033);
current.setLongitude(-87.65005229999997);
double hypotenuse = upperLeft.distanceTo(current);
double bearing = upperLeft.bearingTo(current);
double currentDistanceX = Math.cos(bearing * Math.PI / 180.0) * hypotenuse;
//                     "percentage to mark the position"
double totalHypotenuse = upperLeft.distanceTo(lowerRight);
double totalDistanceX = totalHypotenuse * Math.cos(upperLeft.bearingTo(lowerRight) * Math.PI / 180.0);
double currentPixelX = currentDistanceX / totalDistanceX * 512;

System.out.println(currentPixelX); // 259.3345493341548

Ваш расчетный ответ выглядит немного не так.Чтобы вычислить Y, измените копии всех X-отмеченных вычислений и переменных, чтобы использовать Math.sin() вместо Math.cos().

...