я хочу преобразовать пиксели карты Google в километры - PullRequest
1 голос
/ 09 апреля 2011

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

1 Ответ

3 голосов
/ 09 апреля 2011

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

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

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

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

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

...