посчитать расстояние

Тема в разделе "Навигация и Картография", создана пользователем Кислый в0ждь, 29 июн 2008.

  1. от одной точки до другой
    ну скажем имеем

    от 75.3645057 & 94.21875 до 55.8753108 & 37.7929688 = ?

    как это чисто математически решается ?
     
  2. Ответ: посчитать расстояние

    Можно более-менее точно посчитать использую таблицу значений расстояния одного градуса с запада на восток при разных широтах.
    Самое простое - найти обе точки на Google Earth и провести линейку между ними. Так будет намного точнее. И надо хотя бы указывать в координатах северную/южную широту, восточную/западную долготу.
     
  3. Ответ: посчитать расстояние

    не это не катит. необходим имеено подсчет математикой с переводом конечного результата в километраж.
     
  4. Re: Ответ: посчитать расстояние

    Ключевое слово - уравнения геодезических линий. Дальше - в справочники.
     
  5. А я викимапией мерил: указываешь точку (add place) устанавливаешь курсор на вторую точку и в поиске набираешь название первой. Километраж будет указан :)
     
  6. Re: Ответ: посчитать расстояние

    В своё время решил проблему минут за 20 копанием в гугле. Ключевые слова - distance, WGS84. Например: http://www.movable-type.co.uk/scripts/latlong-vincenty.html
    Есть рабочий код на C#. Если надо, могу скинуть.
     
  7. Re: Ответ: посчитать расстояние

    Искомый код со ссылками.

    Код:
    // http://www.codeproject.com/KB/cs/distancebetweenlocations.aspx
    
            public static double Calc(double Lat1, double Long1, double Lat2, double Long2)
            {
                /*
                    The Haversine formula according to Dr. Math.
                    http://mathforum.org/library/drmath/view/51879.html
                        
                    dlon = lon2 - lon1
                    dlat = lat2 - lat1
                    a = (sin(dlat/2))^2 + cos(lat1) * cos(lat2) * (sin(dlon/2))^2
                    c = 2 * atan2(sqrt(a), sqrt(1-a)) 
                    d = R * c
                        
                    Where
                        * dlon is the change in longitude
                        * dlat is the change in latitude
                        * c is the great circle distance in Radians.
                        * R is the radius of a spherical Earth.
                        * The locations of the two points in 
                            spherical coordinates (longitude and 
                            latitude) are lon1,lat1 and lon2, lat2.
                */
                double dDistance = Double.MinValue;
                double dLat1InRad = Lat1 * (Math.PI / 180.0);
                double dLong1InRad = Long1 * (Math.PI / 180.0);
                double dLat2InRad = Lat2 * (Math.PI / 180.0);
                double dLong2InRad = Long2 * (Math.PI / 180.0);
    
                double dLongitude = dLong2InRad - dLong1InRad;
                double dLatitude = dLat2InRad - dLat1InRad;
    
                // Intermediate result a.
    
                double a = Math.Pow(Math.Sin(dLatitude / 2.0), 2.0) +
                           Math.Cos(dLat1InRad) * Math.Cos(dLat2InRad) *
                           Math.Pow(Math.Sin(dLongitude / 2.0), 2.0);
    
                // Intermediate result c (great circle distance in Radians).
    
                double c = 2.0 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1.0 - a));
    
                // Distance.
    
                // const Double kEarthRadiusMiles = 3956.0;
    
                const Double kEarthRadiusKms = 6376.5;
                dDistance = kEarthRadiusKms * c;
    
                return dDistance;
            }
     

Поделиться этой страницей