Добро пожаловать!

Войдите или зарегистрируйтесь сейчас!

Войти

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

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

  1. NatGol7891

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

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

    Регистрация:
    10 дек 2008
    Сообщения:
    17.374
    Симпатии:
    4.993
    Не стоит. Геодезия, действительно, непростая наука, но разобраться всё же в хитросплетениях систем координат стоит. Тем более, когда кто-то хочет узнать о тех или иных координатах. Координаты не всегда просто числа, и если кому-то зачем-то понадобились координаты режимного объекта, то надо бы понимать, что даже чисто математической задачей по переводу координат он подставляет и себя, и других. Будьте бдительны к просьбам друзей или своей излишней любознательности.
     
    #102
  3. Anton123

    Регистрация:
    15 сен 2013
    Сообщения:
    10
    Симпатии:
    0
    добрый день. может кто поможет. задачка в следующем: есть n точек с координатами в градусах с google map в десятичной форме (например, точка1: 56.335430, 36.434692, точка2: 56.271897, 36.809553, точка 3: 56.287438, 36.764313), каждая имеет весовой коэффициент (например, 100, 200, 250). нужно найти центр тяжести (я на сколько понял= задача вебера)? но проблема в том, что это же не координаты на плоскости и, соответственно, "в лоб" нельзя же перемножать координаты на вес и делить на сумму весов? как найти расстояние между этими точками в метрах? точность вычислений не сильно волнует, погрешность устроит большая, к примеру до 1 км.
     
    #103
    Последнее редактирование: 3 мар 2015
  4. Geo_major

    Форумчанин

    Регистрация:
    28 мар 2010
    Сообщения:
    4.404
    Симпатии:
    5.458
    Адрес:
    Военный городок Москва-74
    Ну таки если километр вас устроит, тогда забейте точки в Гугл планета земля да и измерьте. ::biggrin24.gif::
     
    #104
  5. Anton123

    Регистрация:
    15 сен 2013
    Сообщения:
    10
    Симпатии:
    0
    если бы одна-две точки были даже не городил бы огород.
    да и на вопрос с нахождением центра тяжести это не даcn ответа :). далее нужно измерить расстояние от центра тяжести до точек, плюс цт может по факту поменяться не один раз. "в лоб" я посчитал цт и от него расстояния при помощи того же google map, но, видимо, это неправильно, да и как сказал, если поменять центр тяжести, то все заново пересчитывать.
     
    #105
  6. stout

    Форумчанин

    Регистрация:
    5 янв 2008
    Сообщения:
    4.172
    Симпатии:
    11.939
    Адрес:
    Златоглавая и Белокаменная
    Ограничение на расстояние между крайними точками существует?
     
    #106
  7. Anton123

    Регистрация:
    15 сен 2013
    Сообщения:
    10
    Симпатии:
    0
    не совсем понял, если Вы про разброс точек, то он не большой. в данном случае, все точки находятся в пределах московской области.
     
    #107
  8. stout

    Форумчанин

    Регистрация:
    5 янв 2008
    Сообщения:
    4.172
    Симпатии:
    11.939
    Адрес:
    Златоглавая и Белокаменная
    Решение для сферы известно?
     
    #108
  9. Anton123

    Регистрация:
    15 сен 2013
    Сообщения:
    10
    Симпатии:
    0
    нет, не знаю, образумте как координаты выдаваемые гуглом перенести на шарик, а дальше уже сам :) .т.е. свести модель к идеальной сфере?
     
    #109
  10. stout

    Форумчанин

    Регистрация:
    5 янв 2008
    Сообщения:
    4.172
    Симпатии:
    11.939
    Адрес:
    Златоглавая и Белокаменная
    Мне видится два альтернативных пути.
    Первый путь — использовать косую стереографическую проекцию. (Oblique Stereographic)
    Формулы в http://www.ogp.org.uk/pubs/373-07-2.pdf Переводите всё на плоскость и решаете всё в плоскости. Затем по найденным прямоугольным координатам вычисляются геодезические центра тяжести.
    Второй путь — отображение эллипсоида на сферу по Гауссу.
    SphereGauss.png
    Здесь L0 — среднеарифметическое из долгот крайних точек.
     
    #110
  11. Anton123

    Регистрация:
    15 сен 2013
    Сообщения:
    10
    Симпатии:
    0
    пожалуйста, можно поподробней. как вычислить на конкретном примере из трех точек?
     
    #111
  12. В.Шуфотинский

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

    Регистрация:
    10 дек 2008
    Сообщения:
    17.374
    Симпатии:
    4.993
    Зачем всё это нужно? Может есть совсем простое решение Вашей задачи, но иным способом.
     
    #112
  13. Anton123

    Регистрация:
    15 сен 2013
    Сообщения:
    10
    Симпатии:
    0
    Да тут простейшая задачка по оптимизации перевозок грузов, что-то нигде не смог найти... Может искать не умею.
    Наверняка. Я пришел к выводу, что, в принципе, можно в данном случае использовать нахождение центра масс по координатам(угловым значениям) "в лоб", т.е. Хцентра(широта)=(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=(широта в градусах)?
     
    #113
  14. chnav

    Форумчанин

    Регистрация:
    5 янв 2011
    Сообщения:
    999
    Симпатии:
    940
    Адрес:
    Москва
    Фигасе - простейшая... Для решения "Задачи коммивояжера" иногда требуются суперкомпы; не путать с обычной прокладкой маршрута.
    Вы бы сказали - рещаете практическую задачу, и тогда надо воспользоваться каким-либо готовым API, или решаете курсовую.
     
    #114
  15. Anton123

    Регистрация:
    15 сен 2013
    Сообщения:
    10
    Симпатии:
    0
    Практическая задача. Единожды, упрощая модель, она решена в принципе. C API не смог разобраться :)))) Где пишется сам запрос?
     
    #115
    Последнее редактирование: 3 мар 2015
  16. chnav

    Форумчанин

    Регистрация:
    5 янв 2011
    Сообщения:
    999
    Симпатии:
    940
    Адрес:
    Москва
    #116
  17. Yuri V.

    Форумчанин

    Регистрация:
    31 мар 2009
    Сообщения:
    2.374
    Симпатии:
    2.103
    Координаты на google maps даны на сфере, радиусом 6378137м.
     
    #117
  18. stout

    Форумчанин

    Регистрация:
    5 янв 2008
    Сообщения:
    4.172
    Симпатии:
    11.939
    Адрес:
    Златоглавая и Белокаменная
    Вот набросал
    пример кода (раскрыть)

    Код:
    #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
     
    #118
  19. manikala

    Форумчанин

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

    Регистрация:
    15 сен 2013
    Сообщения:
    10
    Симпатии:
    0
    А разность широты, долготы в данной записи координат дает именно угол дуги (расстояние на поверхности сферы)? или с этими цифрами(координатами) так нельзя?
    --- Сообщения объединены, 3 мар 2015, Оригинальное время сообщения: 3 мар 2015 ---
    Спасибо Вам за помощь, я правильно понимаю, что результаты оч. схожи при данном допущении:

     
    #120

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

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