Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Obliczanie odleglosci miedzy punktami o podanych wspolrzednych geograficznych

1,564 views
Skip to first unread message

Marek

unread,
Mar 9, 2003, 3:16:18 PM3/9/03
to
Witam,

Pisze program, w ktorym musze zaimplementowac obliczanie odleglosci miedzy
dwoma punktami majac dane ich wspolrzedne geograficzne.
Probowalem obliczyc ta odleglosc przy zalozeniu, ze Ziemia jest
kula korzystajac ze wzorow z gemetrii analitycznej oraz planimetrii...
( dlugosc luku ). Jednak wyniki jakie uzyskuje sa malo dokladne:)

Slyszalem, ze jest metoda sredniej szerokosci Gaussa do obliczania
odległości do około 200km oraz inne metody dla wiekszych odleglosci.
Niestety w internecie nie potrafie znalesc zadnych informacji na ten temat.


Pozdrawiam,
Marek

jerry

unread,
Mar 9, 2003, 3:41:54 PM3/9/03
to
> Slyszalem, ze jest metoda sredniej szerokosci Gaussa do obliczania
> odległości do około 200km oraz inne metody dla wiekszych odleglosci.
> Niestety w internecie nie potrafie znalesc zadnych informacji na ten
temat.

Mam to w MathCadzie.

Na większe odległości można całkować równanie linii geodezyjnej.

Marek

unread,
Mar 10, 2003, 11:03:45 AM3/10/03
to
Witam,

Użytkownik "jerry" <5...@impreza.neostrada.pl> napisał w wiadomości
news:b4g96c$29j$1...@atlantis.news.tpi.pl...


> > Slyszalem, ze jest metoda sredniej szerokosci Gaussa do obliczania
> > odległości do około 200km oraz inne metody dla wiekszych odleglosci.
> > Niestety w internecie nie potrafie znalesc zadnych informacji na ten
> temat.
>
> Mam to w MathCadzie.

Nie mam MathCada ale chetnie zobacze jakis kod:)
Chce to napisac w C++. Moze umialbys mi opisac algorytm,
albo wskazac gdzie szukac materialow z opisana metoda
sredniej szerokosci Gaussa?


> Na większe odległości można całkować równanie linii geodezyjnej.

Niestety nie mialem stycznosci z geodezja wiec nie za wiele mi to mowi:)
Moze cos jasniej?

Pozdrawiam,
Marek


Andrzej

unread,
Mar 10, 2003, 12:16:24 PM3/10/03
to
Cześć!

A można prosić o plik z MathCada-a. Też jestem bardzo zainteresowany.
Pozdrawiam!
Andrzej
a.bi...@wp.pl


Użytkownik "jerry" <5...@impreza.neostrada.pl> napisał w wiadomości
news:b4g96c$29j$1...@atlantis.news.tpi.pl...

jerry

unread,
Mar 10, 2003, 12:54:03 PM3/10/03
to
Jak będe miał chwilkę to przepiszę to do C++.

Szukac można w książkach do geodezji wyższej.


Pozdrawiam


Darek Strojecki

unread,
Mar 11, 2003, 7:39:37 AM3/11/03
to
Cześć Wszystkim.

>Slyszalem, ze jest metoda sredniej szerokosci Gaussa do obliczania
>odległości do około 200km oraz inne metody dla wiekszych odleglosci.
>Niestety w internecie nie potrafie znalesc zadnych informacji na ten temat.

W systemie Grass (Open Sorce)
jest taki program "d.geodesic" oto fragment pomocy:
"NAME
d.geodesic - Displays a geodesic line,
tracing the shortest distance between two
geographic points along a great circle,
in a longitude/latitude data set. (GRASS Display Program)

SYNOPSIS
d.geodesic [coor=lon1,lat1,lon2,lat2] [lcolor=name] [tcolor=name] ""

a to jest link do polskiego mirrora Grass'a:
http://grass.meteo.uni.wroc.pl tam są źródła więc może Cię coś zainteresuje

Pozdrawiam Darek


Marek

unread,
Mar 11, 2003, 9:30:33 AM3/11/03
to
Witam,

Użytkownik "jerry" <5...@impreza.neostrada.pl> napisał w wiadomości

news:b4ijld$kkr$1...@nemesis.news.tpi.pl...


> Jak będe miał chwilkę to przepiszę to do C++.
>

Dzieki!
Bede czekac:)

Pozdrawiam,
Marek


TomekS

unread,
Mar 14, 2003, 2:38:58 AM3/14/03
to
>
> >Slyszalem, ze jest metoda sredniej szerokosci Gaussa do obliczania
> >odległości do około 200km oraz inne metody dla wiekszych odleglosci.
> >Niestety w internecie nie potrafie znalesc zadnych informacji na ten
temat.
>
> W systemie Grass (Open Sorce)
> jest taki program "d.geodesic" oto fragment pomocy:
> "NAME
> d.geodesic - Displays a geodesic line,
> tracing the shortest distance between two
> geographic points along a great circle,
> in a longitude/latitude data set. (GRASS Display Program)

Tylko "display" czy też "liczy"?
A kto mógłby pokazać jakiś algorytm do policzenia odległości za pomocą
Excela? Może być w zaokrągleniu, bo liczę tylko po Polsce... Jestem w stanie
zaakceptować błąd 2%

Proszę o pomoc...

TS


Jacek Soplica

unread,
Jun 17, 2022, 2:53:05 PM6/17/22
to
Kiedyś znalazłem w sieci dwie metody jedna wykorzystuje promień Ziemi uśredniony do promienia kuli o tej samej objętości co objętość Ziemi
Druga wykorzystuje dwa promienie - równikowy i biegunowy , w tej metodzie założono że modelem Ziemi jest spłaszczona elipsoida obrotowa

Wynik dostajemy oczywiście przybliżony
Według mnie druga metoda jest dokładniejsza

Mam kod napisany w C


#include<stdio.h>
#include<conio.h>
#include<math.h>

#define sqr(a) ((a)*(a))

#define a 6378.137
#define f ((21.385)/(6378.137))
#define Rm 6371

double deg2dms(double deg);
double dms2deg(double dms);
double rad2deg(double rad);
double deg2rad(double deg);

double dms2rad(double dms);

double distance01(double,double,double,double);
double distance02(double,double,double,double);

int main(){
char ch;
double phi[2],theta[2];
//clrscr();
do{

printf("Podaj wspolrzedne geograficzne punktu 1 \n");
scanf("%lf %lf",&phi[0],&theta[0]);
printf("Podaj wspolrzedne geograficzne punktu 2 \n");
scanf("%lf %lf",&phi[1],&theta[1]);
printf("Przyblizona odleglosc miedzy punktami to : %.10lf\n",distance01(phi[0],theta[0],phi[1],theta[1]));
printf("Przyblizona odleglosc miedzy punktami to : %.10lf\n",distance02(phi[0],theta[0],phi[1],theta[1]));

ch=getch();
}
while(ch!=27);
return 0;
}

double rad2deg(double rad){
return 180*rad/M_PI;
}
double deg2rad(double deg){
return deg*M_PI/180;
}
double deg2dms(double deg){
double m,s;
m=((deg-(int)deg)*60);
s=((m-(int)m)*60);
return ((int)(deg)+m/100.0+s/10000.0);
}
double dms2deg(double dms){
double d,m,s;
d=(int)(dms);
m=(int)(100*(dms-d));
s=100*((100*(dms-d)-m));
return (int)(d)+m/60.0+s/3600.0;
}

double dms2rad(double dms){
double min,sec,r;
min=100*(dms-(int)(dms));
sec=100*(min-(int)(min));
r=(int)dms+(int)(min)/60.0+sec/3600.0;
return M_PI*r/180.0;
}

double distance01(double phi0,double theta0,double phi1, double theta1){
double phi[2],theta[2];
double d,q;
phi[0]=deg2rad(dms2deg(phi0));
phi[1]=deg2rad(dms2deg(phi1));
theta[0]=deg2rad(dms2deg(theta0));
theta[1]=deg2rad(dms2deg(theta1));
q=rad2deg(acos(sin(phi[0])*sin(phi[1])+cos(phi[0])*cos(phi[1])*cos(theta[0]-theta[1])));
d=(2*M_PI*Rm*q)/360;
return d;
}

double distance02(double phi1,double L1,double phi2,double L2){
double F,G,lambda,S,C,omega,R,D,s,H1,H2;
F=(dms2rad(phi1)+dms2rad(phi2))/2.0;
G=(dms2rad(phi1)-dms2rad(phi2))/2.0;
lambda=(dms2rad(L1)-dms2rad(L2))/2.0;
S=sqr(sin(G))*sqr(cos(lambda))+sqr(cos(F))*sqr(sin(lambda));
C=sqr(cos(G))*sqr(cos(lambda))+sqr(sin(F))*sqr(sin(lambda));
if(C!=0.0) omega=atan(sqrt(S/C));
else omega=M_PI/2.0;
R=sqrt(S*C)/omega;
D=2.0*omega*a;
H1=((3.0*R-1.0)/(2.0*C));
H2=((3.0*R+1.0)/(2.0*C));
s=D*(1+f*H1*sqr(sin(F))*sqr(cos(G))-f*H2*sqr(cos(F))*sqr(sin(G)));
return s;
}
0 new messages