рассчитать широту и долготу по окружности известного круга с известным расстоянием - PullRequest
1 голос
/ 24 января 2011

Мне не нужна помощь с языком программирования, мне нужна помощь от кого-то, чтобы вычислить координаты GPS точек определенного расстояния, а именно 22 фута на расстоянии, по окружности круга. Я знаю начало координат GPS и радиус. Я почти уверен, что ответом является хаверсин или закон сферических косинусов, но прошло уже много времени с тех пор, как я использовал какие-либо формулы триггера и не могу понять это. Я использую десятичные градусы и программирую на этом vb.net. Если бы кто-то смог мне это объяснить, это было бы очень полезно.

Ответы [ 3 ]

0 голосов
/ 24 января 2011

Вот основной алгоритм:

Calculate the angular measure whose arc length is 22 feet, with the given radius
numPoints = Math.PI * 2 / angularMeasure
for i in range(numPoints):
    calculate proportion around the circle we are, in terms of degrees or radians
    calculate the location of the endpoint of a great circle or rhumb arc from the center point moving in the specific azimuth direction (from the proportion around the circle) the given radius

Этот последний пункт - самая трудная часть.Вот код из WorldWind SDK (доступно: http://worldwind.arc.nasa.gov/java/) (Примечание: вам придется рассчитывать радиус в углах, что вы можете сделать довольно легко, учитывая радиус / окружность земли)

/*
Copyright (C) 2001, 2006 United States Government
as represented by the Administrator of the
National Aeronautics and Space Administration.
All Rights Reserved.
*/
/**
 * Computes the location on a rhumb line with the given starting location, rhumb azimuth, and arc distance along the
 * line.
 *
 * @param p            LatLon of the starting location
 * @param rhumbAzimuth rhumb azimuth angle (clockwise from North)
 * @param pathLength   arc distance to travel
 *
 * @return LatLon location on the rhumb line.
 */
public static LatLon rhumbEndPosition(LatLon p, Angle rhumbAzimuth, Angle pathLength)
{
    if (p == null)
    {
        String message = Logging.getMessage("nullValue.LatLonIsNull");
        Logging.logger().severe(message);
        throw new IllegalArgumentException(message);
    }
    if (rhumbAzimuth == null || pathLength == null)
    {
        String message = Logging.getMessage("nullValue.AngleIsNull");
        Logging.logger().severe(message);
        throw new IllegalArgumentException(message);
    }

    double lat1 = p.getLatitude().radians;
    double lon1 = p.getLongitude().radians;
    double azimuth = rhumbAzimuth.radians;
    double distance = pathLength.radians;

    if (distance == 0)
        return p;

    // Taken from http://www.movable-type.co.uk/scripts/latlong.html
    double lat2 = lat1 + distance * Math.cos(azimuth);
    double dPhi = Math.log(Math.tan(lat2 / 2.0 + Math.PI / 4.0) / Math.tan(lat1 / 2.0 + Math.PI / 4.0));
    double q = (lat2 - lat1) / dPhi;
    if (Double.isNaN(dPhi) || Double.isNaN(q) || Double.isInfinite(q))
    {
        q = Math.cos(lat1);
    }
    double dLon = distance * Math.sin(azimuth) / q;
    // Handle latitude passing over either pole.
    if (Math.abs(lat2) > Math.PI / 2.0)
    {
        lat2 = lat2 > 0 ? Math.PI - lat2 : -Math.PI - lat2;
    }
    double lon2 = (lon1 + dLon + Math.PI) % (2 * Math.PI) - Math.PI;

    if (Double.isNaN(lat2) || Double.isNaN(lon2))
        return p;

    return new LatLon(
        Angle.fromRadians(lat2).normalizedLatitude(),
        Angle.fromRadians(lon2).normalizedLongitude());
}
0 голосов
/ 24 января 2011

Вы ищете уравнение того, что называется «маленький круг». Посмотрите на эту книгу для уравнения малого круга и уравнения длины дуги для этого маленького круга. Однако, поскольку ваши расстояния очень малы, вы можете считать свою область плоской и использовать более простую геометрию. Использование координат UTM сделало бы вычисления намного проще, чем использование широты / долготы.

Формула Haversine относится к большим кругам, а не к маленьким кругам ...

0 голосов
/ 24 января 2011

Как я понимаю, у вас есть:

  1. Координата центра окружности.
  2. Расстояние между двумя точками на окружности круга.
  3. Радиус окружности.

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

...