Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Алгоритм] Метры в грудусы, Метры в грудусы 
:(
    Опции темы
Artemon
Дата 18.3.2008, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: нет
Всего: 20



Пытаюсь решить задачу:

Есть точка широта/долгота (55/61),
необходимо от этой точки отложить в любую сторону 12 метров и получить широту и долготу этой новой точки.

Казалось бы все просто, да это только казалось...
Повсюду есть примеры перевода из градусов в метры, но не наоборот.

Вот пример расчета дистанции между двумя точками:
Код

double GetDistance(TMyPoint P1,TMyPoint P2)
{
    TMyPoint P;
    P.lon = (P1.lon - P2.lon)*111378*cos(P1.lat*0.01745329251994329577);
    P.lon = P.lon * P.lon;
    P.lat = (P1.lat - P2.lat)*111378;
    P.lat = P.lat * P.lat;
    return sqrt(P.lon + P.lat);
}


P.S.
Информации о проекции нет, т.к. нет самой карты, понимаю что результат без проекции будет не точным.

Это сообщение отредактировал(а) Artemon - 18.3.2008, 20:25


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
Akina
Дата 18.3.2008, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 17
Всего: 454



 smile Ну так какие проблемы? функция есть, осталось написАть программу решенияч системы с двумя неизвестными smile

Блин, распиши все это на листе бумаги ручкой, а потом выполни аналитическое решение системы.  smile 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Artemon
Дата 19.3.2008, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: нет
Всего: 20



Да действительно, просто почему-то решил что это опять очередная нерлдъемная задача.

Если кому интересно, вот решение:

Xm = lon*111378*cos(lat*0.01745329251994329577);
Ym = lat*111378;

lon = Xm/( 111378*cos(lat*0.01745329251994329577 ) );
lat = Ym/111378;


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
rexti64
Дата 16.5.2008, 06:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 15.5.2008

Репутация: нет
Всего: нет



Код

procedure XY_to_Long_Lati(const AXR,AYR : real; out ALong,ALati : extended);
{ перевод из прямоугольных координат (метры.дес) в географические (градусы.десятки)}

Const
//Константы для перевода из прямоугольных в географические
  radian = 57.29577951;
  C101 = 0.12;
  C102 = 50221746.;
  C103 = 293622.;
  C104 = 2350.;
  C105 = 22.;
  C106 = 0.0000000001;
  C107 = 6367558.4969;
  C108 = 6399698.902;
  C109 = 21562.267;
  C110 = 108.973;
  C1011 = 0.612;
  C112  = 0.5;
  C113  = 0.0033692;
  C114  = 0.333333;
  C115  = 0.166667;
  C116  = 0.001123;
  C117  = 0.25;
  C118  = 0.16161;
  C119  = 0.00562;
  C120  = 0.2;
  C121  = 0.1667;
  C122  = 0.0088;
var
  DN        : Double;
  DBT,CB,SB,CB2,Bx,CBX,SBX,CBX2,B2,B3,B4,B5,DZ,DZ2 : Double;
//  Lt,Bt     : extended;
  XR        : real;
  ADobX     : integer;
begin
  ADobX:=Trunc(AXR / 1000000) * 1000000;
  XR:=AXR - ADobX - 500000;
  DBT:=AYR/C107;
  CB:=Cos(DBT);
  SB:=Sin(DBT);
  CB2:=CB*CB;
  BX:=DBT+(C102+(C103+(C104+C105*CB2)*CB2)*CB2)*C106*SB*CB;
  CBX:=Cos(BX);
  SBX:=Sin(BX);
  CBX2:=CBX*CBX;
  DN:=C108-(C109-(C110-C1011*CBX2)*CBX2)*CBX2;
  B2:=(C112+C113*CBX2)*SBX*CBX;
  B3:=C114-(C115-C116*CBX2)*CBX2;
  B4:=C117+(C118+C119*CBX2)*CBX2;
  B5:=C120-(C121-C122*CBX2)*CBX2;
  DZ:=XR/DN/CBX;
  DZ2:=DZ*DZ;
  ALong:=radian*(1.-(B3-B5*DZ2)*DZ2)*DZ + 75;
  ALati:=radian*(Bx-(1.-(B4-C101*DZ2)*DZ2)*DZ2*B2);
end;

procedure RadToXY13(const Long,Lati : extended; var X13,Y13    : integer);
// в данном случае для 13 зоны
Const
// Константы для перевода из географических в прямоугольные
  C111 = 6367558.4969;
  C1 = 6399698.902;
  C2 = 21562.267;
  C3 = 108.973;
  C4 = 0.612;
  C5 = 32140.404;
  C6 = 135.3302;
  C7 = 0.7092;
  C8 = 0.004;
  C9 = 0.25;
  C10 = 0.00252;
  C11 = 0.04166;
  C12 = 0.166;
  C13 = 0.084;
  C14 = 0.3333333;
  C15 = 0.001123;
  C16 = 0.1666667;
  C17 = 0.0083;
  C18 = 0.1667;
  C19 = 0.1968;
  C20 = 0.004;
var
  DCB,DC2,DL2,DSB,A1,A3,A4,A5,A6,DN : Double;
  DbX  : longint;
begin
  DbX:=13500000; // добавка 13 зоны в метрах
  DCB:=Cos(Lati);
  DC2:=DCB*DCB;
  DL2:=Long*Long;
  DSB:=Sin(Lati);
  A1:=C5-(C6-(C7-C8*DC2)*DC2)*DC2;
  A3:=(C14+C15*DC2)*DC2-C16;
  A4:=(C9+C10*DC2)*DC2-C11;
  A5:=C17-(C18-(C19+C20*DC2)*DC2)*DC2;
  A6:=(C12*DC2-C13)*DC2;
  DN:=C1-(C2-(C3-C4*DC2)*DC2)*DC2;
  Y13:=Round((C111*Lati-(A1-(0.5+(A4+A6*DL2)*DL2)*DL2*DN)*DSB*DCB));
  X13:=Round((1.+(A3+A5*DL2)*DL2)*Long*DN*DCB+DbX);
end;

M
Rodman
Модератор: Используйте подсветку кода!


Это сообщение отредактировал(а) Rodman - 20.5.2008, 16:11
PM MAIL   Вверх
diverkaz
Дата 20.5.2008, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 26.11.2007

Репутация: нет
Всего: нет



слушай, Artemon, что-то я не воткнул у тебя там сплошные константы... так как отступить N метров от точки в сторону?

Это сообщение отредактировал(а) diverkaz - 20.5.2008, 16:07
PM MAIL   Вверх
rexti64
Дата 21.5.2008, 05:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 15.5.2008

Репутация: нет
Всего: нет



Это формулы перевода из географических (Longitude/Latitude Pulkovo 1942) в прямоугольные (Gauss-Kruger - Pulkovo 1942) и обратно а для 6-ти градусной зоны. Добавка по X (прямоугольные) (для меня) 75 градус восточной долготы = 13000000 метров (для 75-6=69 градуса ВД = 12000000 и тд, для 75+6=81 градус ВД = 14000000 и тд.). Сначала переводишь долготу широту в радианах переводишь в метры, потом к метрам добавляешь сколько нужно и метры переводишь в долготу широту в градусах.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0798 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.