Ahoj!
> > mam ;-). Bohuzel je v pascalu.
>
> Prepsat to do C++ nebo Javy by nemel byt problem :) Posli do mailing listu ...
Javu uz pry nekdo ma... (Nemelo by tohle umet proj?). Pascali zdrojaky
prilozeny.
> > V jakym formatu ma byt vystup? Predpokladam ze .osm soubor pro
> > josm... kde je we wikine popsany format adresniho bodu / muze mi nekdo
> > par adresnich bodu poslat? (Jsem na *hodne* pomaly lince :-().
>
> na git.wz.cz doslo misto, takze to dam jinam:
>
> http://nasa.kx.cz/doc.7z - dokumentace, 70kb
> http://nasa.kx.cz/demo_sql.7z - demo data v sql formatu, 2.5 mb
> http://nasa.kx.cz/demo.7z - demo data v csv formau, 2.5 mb
...dik, ty uz ma. Ja myslel adresni bod ze streetmapy abych vedel jak
to ma vypadat. Vim ze nekde v praze uz jsou, ale uz si nepamatuju kde
a nemuzu to najit :-(.
--
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures)
http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
{
Copyright 2005 Zdenek Hrdina, distribute under GPLv2
}
procedure jtsk_wgs( X,Y,Hel:double; var B,L,H:double);
{Vypocet zemepisnych souradnic v systemu WGS-84 z rovinnych souradnic
S-JTSK a elipsoidicke vysky}
procedure transformace_BLH(var B,L,H: double);
{Transformace zemepisnych souradnic z JTSK do WGS}
var lat,lon,alt,x1,y1,z1,x2,y2,z2:double;
procedure transformace(xs,ys,zs:double; var xn,yn,zn:double);
{transformace pravouhlych souradnic}
const
{koeficienty transformace ze systemu S-JTSK do systemu WGS-84}
dx=570.69; dy=85.69; dz=462.84; {posunuti}
wz=-5.2611/3600*pi/180; wy=-1.58676/3600*pi/180; wx=-4.99821/3600*pi/180; {rotace}
m=3.543e-6; {meritko}
begin
xn:=dx+(1+m)*(xs+wz*ys-wy*zs);
yn:=dy+(1+m)*(-wz*xs+ys+wx*zs);
zn:=dz+(1+m)*(wy*xs-wx*ys+zs);
end;
procedure BLH_xyz(B,L,H:double; var x,y,z:double);
{vypocet pravouhlych souradnic ze zemepisnych souradnic}
const
{parametry Besselova elipsoidu}
a=6377397.15508; f_1=299.152812853;
var
ro,e2:double;
begin
e2:=1-sqr(1-1/f_1); ro:=a/sqrt(1-e2*sqr(sin(B)));
x:=(ro+H)*cos(B)*cos(L); y:=(ro+H)*cos(B)*sin(L); z:=((1-e2)*ro+H)*sin(B);
end;
procedure xyz_BLH(x,y,z:double; var B,L,H:double);
{vypocet zemepisnych souradnic z pravouhlych souradnic}
const
{parametry elipsoidu WGS-84}
a=6378137.0; f_1=298.257223563;
var
a_b,e2,theta,st,ct,p,t:double;
begin
a_b:=f_1/(f_1-1); p:=sqrt(sqr(x)+sqr(y)); e2:=1-sqr(1-1/f_1);
theta:=arctan(z*a_b/p);st:=sin(theta);ct:=cos(theta);
t:=(z+e2*a_b*a*sqr(st)*st)/(p-e2*a*sqr(ct)*ct);
B:=arctan(t);
H:=sqrt(1+sqr(t))*(p-a/sqrt(1+(1-e2)*sqr(t)));
L:=2*arctan(y/(p+x));
end;
begin
BLH_xyz(B,L,H,x1,y1,z1);
transformace(x1,y1,z1,x2,y2,z2);
xyz_BLH(x2,y2,z2,B,L,H);
end;
procedure XY_BL(X,Y:double; var B,L: double);
{Vypocet zemepisnych souradnic z rovinnych souradnic}
const
a=6377397.15508; e=0.081696831215303;
n=0.97992470462083; konst_u_ro=12310230.12797036;
sinUQ=0.863499969506341; cosUQ=0.504348889819882;
sinVQ=0.420215144586493; cosVQ=0.907424504992097;
alfa=1.000597498371542; k=1.003419163966575;
var
ro,epsilon,D,sinS,cosS,sinU,cosU,cosDV,sinDV,S,sinV,cosV,sinB,t,pom:double;
begin
ro:=sqrt(sqr(x)+sqr(y));
epsilon:=2*arctan(y/(ro+x));
D:=epsilon/n; S:=2*arctan(exp(1/n*ln(konst_u_ro/ro)))-pi/2;
sinS:=sin(S);cosS:=cos(S);
sinU:=sinUQ*sinS-cosUQ*cosS*cos(D);cosU:=sqrt(1-sqr(sinU));
sinDV:=sin(D)*cosS/cosU;cosDV:=sqrt(1-sqr(sinDV));
sinV:=sinVQ*cosDV-cosVQ*sinDV;cosV:=cosVQ*cosDV+sinVQ*sinDV;
L:=2*arctan(sinV/(1+cosV))/alfa;
t:=exp(2/alfa*ln((1+sinU)/cosU/k));
pom:=(t-1)/(t+1);
repeat
sinB:=pom;
pom:=t*exp(e*ln((1+e*sinB)/(1-e*sinB)));
pom:=(pom-1)/(pom+1);
until abs(pom-sinB)<1e-15;
B:=arctan(pom/sqrt(1-sqr(pom)));
end;
begin
XY_BL(X,Y,B,L); H:=Hel; transformace_BLH(B,L,H);
end; { jtsk_wgs }
var X,Y,Hel:double; var B,L,H:double;
begin
readln(x, y, Hel);
jtsk_wgs(x, y, hel, b, l, h);
writeln(b/(2*pi)*360 :10:7, ' ', l/(2*pi)*360 :10:7, h :10:3);
end.
{
Copyright 2005 Zdenek Hrdina, distribute under GPLv2
Usage: ( echo lat; echo lon; echo alt ) | wgs2jtsk
lat and lon are in degrees.
}
program prepocet;
procedure transformace(xs,ys,zs:double; var xn,yn,zn:double);
{transformace pravouhlych souradnic}
const
{koeficienty transformace ze systemu WGS-84 do systemu S-JTSK}
dx=-574.4; dy=-119.4; dz=-421.6;
wz=2.5e-5;wy=3.825e-6;wx=3.162e-5;
m=-7.39e-6;
begin
xn:=dx+(1+m)*(xs+wz*ys-wy*zs);
yn:=dy+(1+m)*(-wz*xs+ys+wx*zs);
zn:=dz+(1+m)*(wy*xs-wx*ys+zs);
end;
procedure BLH_xyz(B,L,H:double; var x,y,z:double);
{vypocet pravouhlych souradnic z geodetickych souradnic}
const
{parametry elipsoidu WGS-84}
a=6378137.0;f_1=298.257223563;
var
ro,e2:double;
begin
e2:=1-sqr(1-1/f_1); ro:=a/sqrt(1-e2*sqr(sin(B)));
x:=(ro+H)*cos(B)*cos(L);
y:=(ro+H)*cos(B)*sin(L);
z:=((1-e2)*ro+H)*sin(B);
end;
procedure xyz_BLH(x,y,z:double; var B,L,H:double);
{vypocet geodetickych souradnic z pravouhlych souradnic}
const
{parametry Besselova elipsoidu}
a=6377397.15508; f_1=299.152812853;
var
a_b,e2,theta,st,ct,p,t:double;
begin
a_b:=f_1/(f_1-1); p:=sqrt(sqr(x)+sqr(y)); e2:=1-sqr(1-1/f_1);
theta:=arctan(z*a_b/p);st:=sin(theta);ct:=cos(theta);
t:=(z+e2*a_b*a*sqr(st)*st)/(p-e2*a*sqr(ct)*ct);
B:=arctan(t);
H:=sqrt(1+sqr(t))*(p-a/sqrt(1+(1-e2)*sqr(t)));
L:=2*arctan(y/(p+x));
end; { xyz_BLH }
function WGS84toBessel(var Latitude, Longitude, Altitude: Double): Boolean;
//------------------------------------------------------------------------------
var B, L, H, xl, yl, zl, x2, y2, z2 : double;
begin
B := Latitude;
L := Longitude;
H := Altitude;
BLH_xyz(B,L,H,xl,yl,zl);
transformace(xl,yl,zl,x2,y2,z2);
xyz_BLH(x2,y2,z2,B,L,H);
Latitude := B;
Longitude := L;
Altitude := H;
end;
function BesseltoJTSK(Latitude, Longitude: Double; var C_X, C_Y : double): Boolean;
// vraci JTSK souřadnice pro zadanou Severní sířku a východní délku
// není třeba odečítat Ferro
//******************************************************************************
const a = 6377397.15508;
e = 0.081696831215303;
n = 0.97992470462083;
rho_0 = 12310230.12797036;
sinUQ = 0.863499969506341;
cosUQ = 0.504348889819882;
sinVQ = 0.420215144586493;
cosVQ = 0.907424504992097;
alfa = 1.000597498371542;
k_2 = 1.00685001861538;
var rho, eps, V, t, B, L : Double;
sinS, cosS, sinU, cosU, cosDV, sinDV, sinV, cosV, sinB, sinD, cosD : Double;
begin
B := Latitude;
L := Longitude;
sinB := sin(B);
t := (1-e*sinB)/(1+e*sinB);
t := sqr(1+sinB)/(1-sqr(sinB)) * exp(e*ln(t));
t := k_2 * exp(alfa*ln(t));
sinU := (t-1)/(t+1);
cosU := sqrt(1-sinU*sinU);
V := alfa*L;
sinV := sin(V);
cosV := cos(V);
cosDV := cosVQ*cosV + sinVQ*sinV;
sinDV := sinVQ*cosV - cosVQ*sinV;
sinS := sinUQ*sinU + cosUQ*cosU*cosDV;
cosS := sqrt(1-sinS*sinS);
sinD := sinDV*cosU/cosS;
cosD := sqrt(1-sinD*sinD);
eps := n*arctan(sinD/cosD);
rho := rho_0*exp(-n*ln((1+sinS)/cosS));
C_X := rho*sin(eps);
C_Y := rho*cos(eps);
end;
function WGS84toJTSK(Latitude, Longitude : Double; var X, Y :double): Boolean;
// vraci JTSK souřadnice pro zadanou severní sířku a východní délku
// změřenou GPS v souřadném systému elipsoidu WGS84
var fake_alt : double;
begin
fake_alt := 0;
WGS84toBessel(Latitude, Longitude, fake_alt);
BesseltoJtsk(Latitude, Longitude, X, Y);
end;
var lat,lon,alt,x,y :double;
begin
read(lat);
read(lon);
lat := lat*pi/180;
lon := lon*pi/180;
WGS84toJTSK(lat, lon, x, y);
writeln(x:10:5, ' ', y:10:5);
end.
_______________________________________________
Talk-cz mailing list
Talk-cz@openstreetmap.org
http://lists.openstreetmap.org/listinfo/talk-cz