преобразовать метры в долготу широты из любой точки - PullRequest
11 голосов
/ 21 декабря 2011

В моем проекте мне нужно найти координаты [широты, долготы] из одной точки на расстоянии 500 метров (это может быть любая случайная координата или массив координат вокруг моей точки). Как я могу это сделать?

Примечание: мне это нужно для того, чтобы найти несколько путей между точками, отличными от самой короткой, которая возвращается нам через Google Maps Directions Api..Так, используя мой метод, я определю центр дороги от A до B, а затем найду некоторые координаты ниже и выше этой центральной позиции и использовать ее как другую путевую точку для перехода от А к В - я думаю, это может помочь мне найти несколько путей ...

Есть предложения от специалистов ГИС?

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

Ответы [ 2 ]

6 голосов
/ 21 декабря 2011

Если я правильно понимаю ваш вопрос, у вас есть известная точка в широте / долготе, и вам нужно вычислить широту / долготу другой точки или точек в 500 м от вашей начальной точки.при этом у вас есть несколько вариантов, большинство из которых включают специализированные ГИС API.Тем не менее, я предполагаю, что вы программист / математик, а не географ, поэтому вы можете предпочесть использовать формулу Хаверсайна.Вы можете найти обсуждение на эту тему здесь плюс формула.

Одно предостережение состоит в том, что бедствие, с которым вы работаете (500 м довольно мало), и Земля далеко не идеальнысфера или даже слегка сплющенный сфероид.Это локально "комом", и это может поставить ваш расчет.Если вам нужна большая точность, вам придется учитывать эти недостатки, используя соответствующие локальные данные (модель Земли - их много, например, см. список EPSG ), и для этого вам, вероятно, придется начать использоватьбиблиотеки ГИС как математика становятся очень подробными в противном случае.

0 голосов
/ 18 октября 2017

Это код, используемый картой Google (SphericalUtil.java)

  // from  SphericalUtil.java
  // compile 'com.google.maps.android:android-maps-utils:0.4.4'
  public static LatLng computeOffset(LatLng from, double distance, double heading) {
    distance /= 6371009.0D;  //earth_radius = 6371009 # in meters
    heading = Math.toRadians(heading);
    double fromLat = Math.toRadians(from.latitude);
    double fromLng = Math.toRadians(from.longitude);
    double cosDistance = Math.cos(distance);
    double sinDistance = Math.sin(distance);
    double sinFromLat = Math.sin(fromLat);
    double cosFromLat = Math.cos(fromLat);
    double sinLat = cosDistance * sinFromLat + sinDistance * cosFromLat * Math.cos(heading);
    double dLng = Math.atan2(sinDistance * cosFromLat * Math.sin(heading), cosDistance - sinFromLat * sinLat);
    return new LatLng(Math.toDegrees(Math.asin(sinLat)), Math.toDegrees(fromLng + dLng));
}

, чтобы использовать его, вам просто нужно ввести centerLatLng, расстояние в метрах и курс в градусах от centerLatLng.

вы можете изменить формулу на предпочитаемый вами язык.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...