Привет, друзья в моем приложении gps, я преобразовал точку Geo в пиксели. У меня есть две точки геометрии, поэтому я конвертирую эти две точки в пиксели, теперь я беру разницу между этими двумя точками пикселей, и я хочу преобразовать эту разницу в километры.
Я бы не рекомендовал использовать пиксели представления для расчета расстояния. Если у вас есть точки геометрии, вы должны использовать их. Все сводится к некоторым геодезическим расчетам. И точность зависит от того, как вы моделируете землю. Вы хотите использовать геодезические большие линии круга для выполнения расчетов расстояний.
Если вы моделируете землю как сферу (используя закон косинусов):
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)));
Если вы хотите увеличить точность (на больших расстояниях), вам следует подумать о моделировании Земли как эллипсоида, хотя расчеты для этого значительно сложнее.
РЕДАКТИРОВАТЬ: Также обратите внимание, что указанное выше выполняется только в том случае, если вы даете долготу и широту в радианах. Таким образом, вам также придется сделать это преобразование.