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