Я хочу конвертировать пиксели карты Google в километрах

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

1 ответ

Решение

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

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

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, угол, вычисленный в предыдущем коде, будет:

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)));

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

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

Другие вопросы по тегам