2011-01-24 1 views
1

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

+0

Вы должны определить свои предположения первым. Какая модель земли (сферический, продолговатый сфероид, нулевой элемент и элипсоид)? Географические координаты или проецируемые координаты? – Benjamin

+0

Спасибо за все ответы, я сделаю некоторое исследование по уравнению малого круга. Я, вероятно, мог бы использовать координаты UTM, потому что я использую эти точки для построения файла shp для карты доходности, абсолютное географическое местоположение не так важно, как согласованность. Не могли бы вы показать мне, как это сделать с координатами UTM. Я нашел довольно сложную формулу для преобразования обратно в десятичные градусы, если мне нужно использовать десятичные градусы. – gw73

ответ

0

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

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

По-моему, этого недостаточно для расчета координат другой точки. Вы должны иметь как минимум одну координату, потому что мы можем только предположить, где точки расположены по окружности.

0

Вот базовый алгоритм:

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

Вопрос заключается в том, как получить координаты точек, расположенных по окружности круга на земле. Я не вижу, как этот круг может быть представлен линиями рельсов, подшипник, будет изменить в разных местах на круге. Скорее, мы говорим о небольшом круге: http://en.wikipedia.org/wiki/Small_circle – Benjamin

0

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

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

Смежные вопросы