Как перевести широту и долготу от GPS в прямоугольные координаты?

Тема в разделе "Исходные данные", создана пользователем victor64, 8 ноя 2011.

  1. Блин Вы такие умные тут, я аж комплексую))) Ладно, не стоит мне отнимать Ваше время, не мое это. Спасибо большое всем кто ответил, но мне не следовало просить помощи о том, что даже мысленно представить не могу) Всего хорошего Вам
     
  2. В.Шуфотинский

    В.Шуфотинский Модератор Команда форума

    Не стоит. Геодезия, действительно, непростая наука, но разобраться всё же в хитросплетениях систем координат стоит. Тем более, когда кто-то хочет узнать о тех или иных координатах. Координаты не всегда просто числа, и если кому-то зачем-то понадобились координаты режимного объекта, то надо бы понимать, что даже чисто математической задачей по переводу координат он подставляет и себя, и других. Будьте бдительны к просьбам друзей или своей излишней любознательности.
     
  3. добрый день. может кто поможет. задачка в следующем: есть n точек с координатами в градусах с google map в десятичной форме (например, точка1: 56.335430, 36.434692, точка2: 56.271897, 36.809553, точка 3: 56.287438, 36.764313), каждая имеет весовой коэффициент (например, 100, 200, 250). нужно найти центр тяжести (я на сколько понял= задача вебера)? но проблема в том, что это же не координаты на плоскости и, соответственно, "в лоб" нельзя же перемножать координаты на вес и делить на сумму весов? как найти расстояние между этими точками в метрах? точность вычислений не сильно волнует, погрешность устроит большая, к примеру до 1 км.
     
    Последнее редактирование: 3 мар 2015
  4. Geo_major

    Geo_major Форумчанин

    Ну таки если километр вас устроит, тогда забейте точки в Гугл планета земля да и измерьте. ::biggrin24.gif::
     
  5. если бы одна-две точки были даже не городил бы огород.
    да и на вопрос с нахождением центра тяжести это не даcn ответа :). далее нужно измерить расстояние от центра тяжести до точек, плюс цт может по факту поменяться не один раз. "в лоб" я посчитал цт и от него расстояния при помощи того же google map, но, видимо, это неправильно, да и как сказал, если поменять центр тяжести, то все заново пересчитывать.
     
  6. stout

    stout Форумчанин

    Ограничение на расстояние между крайними точками существует?
     
  7. не совсем понял, если Вы про разброс точек, то он не большой. в данном случае, все точки находятся в пределах московской области.
     
  8. stout

    stout Форумчанин

    Решение для сферы известно?
     
  9. нет, не знаю, образумте как координаты выдаваемые гуглом перенести на шарик, а дальше уже сам :) .т.е. свести модель к идеальной сфере?
     
  10. stout

    stout Форумчанин

    Мне видится два альтернативных пути.
    Первый путь — использовать косую стереографическую проекцию. (Oblique Stereographic)
    Формулы в http://www.ogp.org.uk/pubs/373-07-2.pdf Переводите всё на плоскость и решаете всё в плоскости. Затем по найденным прямоугольным координатам вычисляются геодезические центра тяжести.
    Второй путь — отображение эллипсоида на сферу по Гауссу.
    SphereGauss.png
    Здесь L0 — среднеарифметическое из долгот крайних точек.
     
  11. пожалуйста, можно поподробней. как вычислить на конкретном примере из трех точек?
     
  12. В.Шуфотинский

    В.Шуфотинский Модератор Команда форума

    Зачем всё это нужно? Может есть совсем простое решение Вашей задачи, но иным способом.
     
  13. Да тут простейшая задачка по оптимизации перевозок грузов, что-то нигде не смог найти... Может искать не умею.
    Наверняка. Я пришел к выводу, что, в принципе, можно в данном случае использовать нахождение центра масс по координатам(угловым значениям) "в лоб", т.е. Хцентра(широта)=(56.335430*100+56.271897*200+56.287438*250)/550 (то же самое с координатой долготы). Вопрос теперь в другом, для примерного прикидывания расстояния между двумя точками (например: точки1 и точки2) посчитать длину дуги по широте, затем также по долготе и по гипотенузе вывести расстояние Lшироты=(56.335430-56.271897)*2ПR/360, где R-радиус Земли? 0,063533*2*3,14*6371000/360~7060м. т.е. если я возьму, что Земля идеальный шарик, будет ли разность (56.335430-56.271897) давать угол дуги заключенной между этими двумя точками? Или это уж сильно большие допущения???
    --- Сообщения объединены, 3 мар 2015, Оригинальное время сообщения: 3 мар 2015 ---
    или может подскажете какое соотношение лучше взять на 1 минуты широты и одину долготы принять? с широтой вроде как морская миля, т.е. 1 минута=1852 м. на сколько верно утверждение 1 минута долготы ("право/лево/запад/восток") = 1852 м * cos(F), где F=(широта в градусах)?
     
  14. chnav

    chnav Форумчанин

    Фигасе - простейшая... Для решения "Задачи коммивояжера" иногда требуются суперкомпы; не путать с обычной прокладкой маршрута.
    Вы бы сказали - рещаете практическую задачу, и тогда надо воспользоваться каким-либо готовым API, или решаете курсовую.
     
  15. Практическая задача. Единожды, упрощая модель, она решена в принципе. C API не смог разобраться :)))) Где пишется сам запрос?
     
    Последнее редактирование: 3 мар 2015
  16. chnav

    chnav Форумчанин

  17. Yuri V.

    Yuri V. Форумчанин

    Координаты на google maps даны на сфере, радиусом 6378137м.
     
  18. stout

    stout Форумчанин

    Вот набросал
    пример кода (раскрыть)

    Код:
    #include <iostream>
    #include <stdio.h>
    #include <cmath>
    #include <windows.h>
     
    using namespace std;
     
    void FromEllipsToSphere(
    						const double flattening,
    						const double Bo,
    						const double Lo,
    						const double Lat,
    						const double Lon,
    						double &sphericLat,
    						double &sphericLon
    											)
    {
      double ee = flattening*(2-flattening);
      double cosB = cos(Bo);
      double c = sqrt(1 + ee/(1 - ee)*cosB*cosB*cosB*cosB);
      sphericLat = asin(sin(Lat)/c);
      sphericLon = c*(Lon - Lo);
    }
     
    double SpericRadius(
    					const double SemiMajorAxis,
    					const double flattening,
    					const double Bo
    									)
    {
      double ee = flattening*(2-flattening);
      return SemiMajorAxis*(1-flattening)/(1-ee*sin(Bo)*sin(Bo));
    }
     
    double Haversine(double Lat1, double Lon1, double Lat2, double Lon2){
    double dLat = Lat2-Lat1;
    double dLon = Lon2-Lon1;
    double sLat = sin(dLat/2);
    double sLon = sin(dLon/2);
    double a = sLat*sLat +  sLon*sLon*cos(Lat1)*cos(Lat2);
    double c = 2 * atan2(sqrt(a), sqrt(1-a));
    return c;
    }
     
    int main(int argc, char **argv)
    {
      double flattening = 1/298.257223563;
      double SemiMajorAxis = 6378137.0;
      double recipRo = M_PI/180;
     
      double Lat1,Lat2,Lon1,Lon2;
      double sLat1,sLat2,sLon1,sLon2;
      double Bo,Lo;
     
      Bo = 56*recipRo;
      Lo = 37*recipRo;
      Lat1 = 58*recipRo;
      Lat2 = 54*recipRo;
      Lon1 = 35*recipRo;
      Lon2 = 39*recipRo;
     
      FromEllipsToSphere(flattening,Bo,Lo,Lat1,Lon1,sLat1,sLon1);
      FromEllipsToSphere(flattening,Bo,Lo,Lat2,Lon2,sLat2,sLon2);
       
      double R = SpericRadius(SemiMajorAxis,flattening,Bo); 
      cout.precision(12);
      cout<<"\nDistance = "<<R*Haversine(sLat1,sLon1,sLat2,sLon2)<<endl;
     
      cout<<"\nVERSION : "<<__VERSION__<<endl;
      system ( "PAUSE" );
      return EXIT_SUCCESS;
    }
    

    А вот результат сравнения
    Test.png
    с Online geodesic calculations using the GeodSolve utility
     
  19. manikala

    manikala Форумчанин

    Самый простой и короткий алгоритм, для решения твоей задачи - нужно переводить широту и долготу в в геоцентрическую прямоугольную СК (X, Y, Z), далее развернуть ее в горизонтальную (топоцентрическую) систему координат начальной точки. Углами разворота будут широта и долгота начальной точки. Уклонения отвесной линии можно не учитывать.
    --- Сообщения объединены, 3 мар 2015, Оригинальное время сообщения: 3 мар 2015 ---
    Можно поискать еще короче путь. Ищи учебники Машимова. Кажется у него были дифференциальные преобразования геодезических координат в топоцентрические.
     
  20. А разность широты, долготы в данной записи координат дает именно угол дуги (расстояние на поверхности сферы)? или с этими цифрами(координатами) так нельзя?
    --- Сообщения объединены, 3 мар 2015, Оригинальное время сообщения: 3 мар 2015 ---
    Спасибо Вам за помощь, я правильно понимаю, что результаты оч. схожи при данном допущении:

     
  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление
  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление