я хочу преобразовать пиксели карты Google в километры

1

Привет, друзья в моем приложении gps, я преобразовал точку Geo в пиксели. У меня есть две точки геометрии, поэтому я конвертирую эти две точки в пиксели, теперь я беру разницу между этими двумя точками пикселей, и я хочу преобразовать эту разницу в километры.

  • 0
    Я не понимаю Вы можете сопоставить каждый пиксель с его широтой и долготой? если вы можете, то формула Хаверсайна может дать вам довольно точное расстояние.
  • 0
    я хочу отобразить пиксели в километрах ..
Показать ещё 1 комментарий
Теги:
geopositioning

1 ответ

3
Лучший ответ

Я бы не рекомендовал использовать пиксели представления для расчета расстояния. Если у вас есть точки геометрии, вы должны использовать их. Все сводится к некоторым геодезическим расчетам. И точность зависит от того, как вы моделируете землю. Вы хотите использовать геодезические большие линии круга для выполнения расчетов расстояний.

Если вы моделируете землю как сферу (используя закон косинусов):

double earthAverageRadius = 6378137; //Average mean in meters when modeling the world as a sphere
double angle = Math.acos(Math.sin(point1.x) * Math.sin(point2.x)
                  + Math.cos(point1.x) * Math.cos(point2.x) * Math.cos(point1.y- point2.y));
double distance = angle * pi * earthAverageRadius; // distance in metres

Я бы также рекомендовал изучить формулу Haversine, которая численно более стабильна. Используя формулу haversine, угол, рассчитанный в предыдущем коде, будет:

double a = Math.pow(Math.sin((point2.x-point1.x)/2.0), 2.0)
                 + Math.cos(point1.x) * Math.cos(point2.x) * Math.pow(Math.sin((point2.y-point1.y)/2.0), 2.0);
double angle = 2 * Math.asin(Math.min(1.0, Math.sqrt(a)));

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

РЕДАКТИРОВАТЬ: Также обратите внимание, что указанное выше выполняется только в том случае, если вы даете долготу и широту в радианах. Таким образом, вам также придется сделать это преобразование.

  • 0
    это haversine, с 'n', от 'полуосного синуса'.
  • 0
    Хороший улов. Исправлена опечатка.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню