2 Referentne površi i koordinatni referentni sistemi
Precizno definisanje lokacija je od suštinskog značaja za dalje razumevenje matematičke kartografije. Ovo poglavlje pretstavlja ukorenjene koncepte geodetskih koordinata i njihovu primenu u različitim koordinatnim referentnim sistemima. U prethodnom poglavlju smo videli da se planeta Zemlja najčešće aproksimira referentnim površima i da se za aproksimaciju koriste: geoid, elipsoid, sfera i ravan. Kroz sledeće sekcije, razmotrićemo različite kocepte koordinata: u ravni, na sferi i elipsoidu, pravougle, polarne, krivolinijske, kao i njihovu konverziju iz jednog oblika u drugi. Pored toga opisana su računanja u ravni, na sferi i elipsoidu za one elemente koja su neophodna za buduća poglavlja koja slede i koja opisuju konkretne kartografske projekcije. Takođe, predstavljen je koncept geodetskog koordinatnog referentnog sistema i koordinatnog referentnog sistema u projekciji. Osim toga, upoznaćemo se sa PROJ
(PROJ contributors 2023) bibliotekom, moćnim alatom za koordinatna računanja, i WKT-2 (Lott 2015) formatom za opis koordinatnih referentnih sistema. Kroz praktične primere ilustrovaćemo kako se računanja na elipsoidu obavljaju pomoću sf
(Pebesma 2018a) i s2
(Dunnington, Pebesma, and Rubak 2023) R paketa.
2.1 Koordinate
Koordinate (lat. co
: zajedno i ordinatus
: uređeni, definisani) su brojevi čijim se zadavanjem opisuje položaj tačaka u ravni, pravcu ili uopšteno u prostoru. Koordinata mora imati definisanu jedinicu (meru) i ishodište (koordinatni početak). Koordinatni sistemi su najčešće jednodimenzioni, dvodimenzioni ili trodimenzioni, Slika 2.1. U geodeziji je usvojeno da koordinata u pravcu severa ima oznaku \(X\) (ili \(x\)), a u pravcu istoka \(Y\) (ili \(y\)). To je zbog analogije da se obično tačka na elipsoidu zadaje redosledom geodetska širina pa geodetska dužina.
2.2 Koordinatne u ravni
Kao što je već rečeno u prethodnom poglavlju (Poglavlje 1), u kartografiji često kooristimo koordinate u ravni. Kad se koriste kartografske projekcije deo planete ili cela planeta može se predstaviti njenom projekcijom u ravni karte. Ravan možemo parametrizovati parametarskim ili koordninatnim linijama. Parametarske linije u ravni odlikuju se time što duž svake od njih parametar ima odgovarajuću konstantnu vrednost (xi=const ili yi=const) koja se menja pri prelazu na drugu liniju istog sistema.
Vrednosti parametara nazivaju se koordinatama, a parametarske linije koordinatnim linijama. Mreža koordinatnih linija postavljenih na konstantnim razmacima (dx=const i dz=const) zamišljeno pokriva celu ravan i deli je na bezbroj malih kvadrata ili na konačan broj, Slika 2.2. Na katastarskim planovima uobičajeno je da su koordinatne linije materijalizovane decimetarskom mrežom.
Code
= c(7500000, 7500100)
E = c(4900000,4900100)
N plot(E, N, asp=1, xlim = c(7500000, 7500110), ylim=c(c(4900000,4900110)))
grid( lty = 2, col = "gray", lwd = 2)
Code
import matplotlib.pyplot as plt
= [7500000, 7500100]
E = [4900000, 4900100]
N
'o')
plt.plot(E, N, 'equal')
plt.gca().set_aspect(7500000-10, 7500110])
plt.xlim([# (7499990.0, 7500110.0)
4900000-10, 4900110])
plt.ylim([# (4899990.0, 4900110.0)
='dashed', color='gray', linewidth=2)
plt.grid(linestyle plt.show()
Razlike koordinata dobiju se izrazima, Slika 2.3:
\[ \begin{aligned} & \Delta \mathrm{E}_{2-1}=\mathrm{E}_2-\mathrm{E}_1=\mathrm{d}_{1-2} \sin \left(\mathrm{\nu}_{1-2}\right) \\ & \Delta \mathrm{N}_{2-1}=\mathrm{N}_2-\mathrm{N}_1=\mathrm{d}_{1-2} \cos \left(\mathrm{\nu}_{1-2}\right) \end{aligned} \]
Direkcioni uglovi (azimut u ravni) definisani su u smeru kazaljke na satu od severne ose.
\[ \nu_{1-2}=\nu_{2-1} \pm 180^{\circ} \]
Rastojanje između dve tačke u ravni računa se koristeći formulu:
\[ d_{12} = \sqrt{(E_2-E_1)^2+(N_2-N_1)^2} \]
Slika 2.4 prikazuje kako se računa direkcioni ugao u zavisnosti od toga koji je predznak razlike koordinata po horizontalnoj i vertikalnoj osi.
Formula za direkcioni ugao data je sledećim izrazom:
\[ \operatorname{direkcioni}(\Delta E, \Delta N) = \begin{cases} \arctan\left(\frac {\Delta E} {\Delta N}\right) &\text{ako je } {\Delta N} > 0 \text{ i } {\Delta E} > 0, \\[5mu] \arctan\left (|\frac {\Delta N} {\Delta E}\right |) +\frac{\pi}{2} &\text{ako je } {\Delta N} < 0 \text{ i } {\Delta E} > 0, \\[5mu] \arctan\left (\frac {\Delta E} {\Delta N}\right ) +\pi &\text{ako je } {\Delta N} < 0 \text{ i } {\Delta E} < 0, \\[5mu] \arctan\left (|\frac {\Delta N} {\Delta E}\right |) +\frac{3\pi}{2} &\text{ako je } {\Delta N} > 0 \text{ i } {\Delta E} < 0, \\[5mu] \end{cases} \]
Formula za direkcioni ugao ako koristimo geodetske oznake koordinata:
\[ \operatorname{direkcioni}(\Delta Y, \Delta X) = \begin{cases} \arctan\left(\frac {\Delta Y} {\Delta X}\right) &\text{ako je } {\Delta X} > 0 \text{ i } {\Delta Y} > 0, \\[5mu] \arctan\left (|\frac {\Delta X} {\Delta Y}\right |) +\frac{\pi}{2} &\text{ako je } {\Delta X} < 0 \text{ i } {\Delta Y} > 0, \\[5mu] \arctan\left (\frac {\Delta Y} {\Delta X}\right ) +\pi &\text{ako je } {\Delta X} < 0 \text{ i } {\Delta Y} < 0, \\[5mu] \arctan\left (|\frac {\Delta X} {\Delta Y}\right |) +\frac{3\pi}{2} &\text{ako je } {\Delta X} > 0 \text{ i } {\Delta Y} < 0, \\[5mu] \end{cases} \]
Sledeći kod daje primer računanja direkcionog ugla. Prvo je kreirana funkcija za računanje direkcionog ugla, a potom on sračunat pozivom funkcije.
<- function(YA, XA, YB, XB, jedinice = "rad") {
direkcioni # Ovo je funkcija koja računa direkcioni iz koordinata za dve zadate tačke
# YA (EA) koordinta u pravcu istoka za tačku A
# XA (NA) koordinta u pravcu severa za tačku A
# YB (EB) koordinta u pravcu istoka za tačku B
# XB (NB) koordinta u pravcu severa za tačku B
# opcija jedinice može biti "rad" ili "st"
<- XB - XA
dx <- YB - YA
dy
if (dx > 0 && dy > 0) {
<- atan(dy / dx) # kv = 1
dir else if (dy > 0 && dx < 0) {
} <- atan(abs(dx / dy)) + pi/2 # kv = 2
dir else if (dy < 0 && dx < 0) {
}<- atan(abs(dx / dy)) + pi # kv = 3
dir else {
}<- atan(abs(dx / dy)) + pi*3/2 # kv = 4
dir
}
if (jedinice != "rad") {
<- 180/pi * dir
dir
}
return(dir)
}
# Poziv funkcije
<- direkcioni(7500000, 4900000, 7500100, 4900100, "st")
dab print(dab)
# [1] 45
# test
direkcioni(0, 0, 1,1, "st")==45
# [1] TRUE
direkcioni(0, 0, 1,-1, "st")==135
# [1] TRUE
direkcioni(0, 0, -1,-1, "st")==225
# [1] TRUE
direkcioni(0, 0, -1,1, "st")==315
# [1] TRUE
def direkcioni(YA,XA,YB,XB, jedinice="rad"):
"""
Ovo je funkcija koja računa direkcioni iz koordinata za dve zadate tačke
YA (EA) koordinta u pravcu istoka za tačku A
XA (NA) koordinta u pravcu severa za tačku A
YB (EB) koordinta u pravcu istoka za tačku B
XB (NB) koordinta u pravcu severa za tačku B
opcija jedinice može biti "rad" ili "st"
"""
import math
# funkcija za arkus tangens je math.atan
= math.atan
atan
= XB-XA
dx = YB - YA
dy
if dx>0 and dy>0:
dir = atan(dy/dx) # kv = 1
elif dy>0 and dx<0 :
dir = atan(abs(dx/dy)) + math.pi/2 # kv = 2
elif dy<0 and dx<0 :
dir = atan(dx/dy) + math.pi # kv = 3
else:
dir = atan(abs(dx/dy)) + math.pi*3/2 # kv = 4
if(jedinice != "rad"): dir= 180/math.pi *dir
return dir
### Poziv funkcije
= direkcioni(7500000,4900000,7500100,4900100,"st")
dab print(dab)
# 45.0
# test
0, 0, 1,1, "st")==45
direkcioni(# True
0, 0, 1,-1, "st")==135
direkcioni(# True
0, 0, -1,-1, "st")==225
direkcioni(# True
0, 0, -1,1, "st")==315
direkcioni(# True
Polarne koordinate u ravni mogu se zadati sa dva parametra, radijus vektorom i uglom koji taj vektor zaklapa sa horizontalnom osom \(\psi\).
Code
# Edzer Pebesma https://r-spatial.org/book
par(mar = rep(0,4))
plot(3, 4, xlim = c(-6,6), ylim = c(-6,6), asp = 1)
axis(1, pos = 0, at = 0:6)
axis(2, pos = 0, at = -6:6)
<- seq(-5, 5, by = .1)
xd lines(xd, sqrt(25 - xd^2), col = 'grey')
lines(xd, -sqrt(25 - xd^2), col = 'grey')
arrows(0, 0, 3, 4, col = 'red', length = .15, angle = 20)
text(1.5, 2.7, label = parse(text = "rho"), col = 'red')
<- seq(3/5, 1, by = .1)
xd lines(xd, sqrt(1 - xd^2), col = 'red')
text(1.2, 0.5, label = parse(text = "psi"), col = 'red')
lines(c(3,3), c(0,4), lty = 2, col = 'blue')
lines(c(0,3), c(4,4), lty = 2, col = 'blue')
text(3.3, 2.5, label = "N", col = 'blue')
text(1.5, 4.3, label = "E", col = 'blue')
Slika 2.5 pokazuje odnos polarnih i pravouglih koordinata u ravni. Tačka sa koordinatama \((E,N) = (3,4)\) je \((\rho,\psi) = (5, \mbox{arctan}(4/3))\), gde je \(\mbox{arctan}(4/3)\) oko \(53^{\circ}\). Jednostavan je odnos ova dva sistema koordinata u ravni.
\[E = \rho~\mbox{cos} \psi,\ \ \ N = \rho~\mbox{sin} \psi, \ \mbox{i}\] \[\rho = \sqrt{E^2 + N^2}, \ \ \ \psi = \mbox{atan2}(N, E)\] Funkcija \(\mbox{atan2}\) uzima u obzir kvadrante u odnosu na horizontalnu osu.
\[ \operatorname{atan2}(N, E) = \begin{cases} \arctan\left(\frac N E\right) &\text{ako je } E > 0, \\[5mu] \arctan\left(\frac N E\right) + \pi &\text{ako je } E < 0 \text{ i } N \ge 0, \\[5mu] \arctan\left(\frac N E\right) - \pi &\text{ako je } E < 0 \text{ i } N < 0, \\[5mu] +\frac{\pi}{2} &\text{ako je } E = 0 \text{ i } N > 0, \\[5mu] -\frac{\pi}{2} &\text{ako je } E = 0 \text{ i } N < 0, \\[5mu] \text{nedefinisano} &\text{ako je } E = 0 \text{ i } N = 0. \end{cases} \]
2.3 Koordinate na sferi
Kad se planeta Zemlja aproksimira sferom (loptom) koja je referentna površ (veće složenosti nego ravan, ali se zanemaruje činjenica da je Zemlja spljoštena na polovima i da je bolja aproksimacija elipsoid, (videti Slika 1.30), podrazumeva se da se centar sfere poklapa sa centrom mase Zemlje. Poluprečnik koji prolazi kroz usvojenu poziciju Severnog i Južnog pola naziva se obrtna osa lopte ili sfere, obrtna osa je prečnik PNPS, (Slika 2.6).
Karakteristične tačke, linije i ravni Zemljine lopte dobijaju se njenim presecanjem sa ravnima postavljenim kroz obrtnu osu (meridijanske ravni), ili sa ravnima upravnim na ovu osu (ravni paralela). Meridijanske ravni seku loptinu površ po velikim krugovima tako da meridijani na lopti odgovaraju velikim krugovima. Paralele predstavljaju male krugove, osim Ekvatora koji prolazi kroz centar sfere.. Koordinatni počekat na sferi definisan je presekom Ekvatora i usvojenog početnog meridijana (koji prolazi kroz Griničku observatoriju).
Meridijani i paralele na sferi predstavljaju parametarske, tj. koordinatne linije, to je jedna od mogućih parametrizacija. Pozicija bilo koje tačke na sferi može se definisati presekom jednog meridijana i jedne paralele. Kod slučaja kada smo imali ravan gde je bilo koja tačka određena presekom samo jedne x i samo jedne y koordinatne linije, to je slučaj regularne parametrizacije površi. Kod sfere imamo slučaj da postoje i singularne tačke, a to su polovi u kojima se sustiče svaki meridijan, a poluprečnik paralele u polovima je 0. Polovi nisu određeni presekom samo jedne paralele i samo jednog meridija, zato su to singularne tačke, pa i parametrizacija sfere meridijanima i paralelama nije u potpunosti regularna parametrizacija površi.
Geografske krivolinijske koordinate \(\varphi\) i \(\lambda\) na sferi
Koordinatne linije paralela zadaju se geografskom širinom \(\varphi\) (ugao koji radijus Zemlje u odnosnoj tački zaklapa sa ekvatorskom ravni) i geografskom dužinom \(\lambda\) (ugao koji ravan meridijana odnosne tačke zaklapa sa ravni početnog meridijana). Tako da je svaka koordinata definisana parom krivolinijskih koordinata geografskom širinom i dužinom, \(\varphi\) i \(\lambda\).
Ako zadamo koordinate tačke GRF sa geografskom širinom (\(\varphi=44.8057705\)) i dužinom (\(\lambda=20.4759749\)) u stepenima, i prestavimo na virtuelnom globusu, dobija se prikaz, Slika 2.7. Dakle tu tačku definiše presek koordinatne linije paralele sa g. širinom 44.8057705 i meridijana sa g. dužinom 20.4759749 stepeni. U narednom primeru su korišćeni R paketi, webglobe (Barnes 2020) i plotKML (Hengl et al. 2015).
Code
# install.packages("webglobe")
library(webglobe)
<- webglobe(immediate=FALSE)
wg <- wg + wgpoints(44.8057705,20.4759749,label="Beograd GRF",alt=0,colour="blue")
wg
wg
# Drugi prikaz na Google Earth
library(sf)
library(plotKML)
= st_point( c(20.4759749, 44.8057705) )
grf = data.frame(Pozicija = c("lon:20.4759749, lat:44.8057705"))
att = st_sf(att, geometry = st_sfc(grf, crs=4326 ) )
grf
#tacke na meridijanu g. dužina je konstanstna
= as.matrix( data.frame(x=rep(20.4759749,100), y=seq(-90,90,length.out=100) ))
m # tacke na paraleli g.širina je konstantana
= as.matrix(data.frame(x=seq(-180,180,length.out=100), y= rep(44.8057705,100)))
p # meridijan i paralela tačke GRF
= st_sf(data.frame(ime=c("meridijan", "paralela"),
mip st_sfc( st_linestring(m),
st_linestring(p),crs=4326) ))
# Grinič
= as.matrix( data.frame(x=rep(0,100), y=seq(-90,90,length.out=100) ))
g # Ekvator
= as.matrix(data.frame(x=seq(-180,180,length.out=100), y= rep(0,100)))
e # Grinič i Ekvator
= st_sf(data.frame(ime=c("meridijan", "paralela"),
gie st_sfc( st_linestring(g),
st_linestring(e),crs=4326) ))
plotKML(grf)
plotKML(mip)
plotKML(gie, colour="red")
Pravougle koordinate na sferi
Slika 2.8 prikazuje pravougle koordinate na sferi.
Formule za pravougle koordinate na sferi, ako su nam poznate krivolinijske zadate geografskom širinom i dužinom, \(\varphi\) i \(\lambda\), i poluprečnik sfere R.
\[ \begin{aligned} & X=R \cos \varphi \cos \lambda, \\ & Y=R \cos \varphi \sin \lambda, \\ & Z=R \sin \varphi . \end{aligned} \]
Obrnuto, ako znamo pravougle možemo doći do krivolinijskih koristeći formulu:
\[
\begin{aligned}
& \varphi=\operatorname{asin}(\mathrm{Z} / \mathrm{R}) \\
& \lambda=\operatorname{atan2}(\mathrm{Y}, \mathrm{X})
\end{aligned}
\]
Polarne sferne koordinate
Sfera ili elipsoid se mogu zadati koristeći i polarne koordinate. U ovom poglavlju biće definisane samo sferne polarne koordinate, a na sličan način mogle bi biti definisane i elipsoidne polarne koordinate.
Odnos polarnih i pravouglih koordinata na sferi je sledeći: \[ \begin{aligned} & X=R \cos u \sin v, \\ & Y=R \sin u \sin v, \\ & Z=R \cos v \end{aligned} \] Gde je R poluprečnik sfere, v je deklinacija i u je pravac projekcije radijusa u ravni u odnosu na X osu.
Poluprečnik krivine meridijana i paralele
Poluprečnik krivine meridijana jeste poluprečnik meridijanskog luka. To je veliki krug na sferi, poluprečnika R.
Poluprečnik krivine paralele za tačku T je poluprečnik paralele (malog kruga) koji prolazi kroz tačku T, Slika 2.8.
\[ r=R \cos \varphi \]
Dužina luka meridijana i paralele
Ako uočimo luk TE, Slika 2.6, jasno je da iz definicije ugla u radijanima važi:
\[ \varphi=\mathrm{TE} / \mathrm{R} \] Odvade sledi: \[ \mathrm{Lm}=\mathrm{TE}=\mathrm{R} \varphi, \quad \varphi \text { je u radijanima } \] Deo luka između \(\varphi_1\) i \(\varphi_2\)
\[ \mathrm{Lm}=\mathrm{R}\left(\varphi_1-\varphi_2\right) \] Slično luk paralele imamo:
\[ \operatorname{Lp}=r\left(\lambda_1-\lambda_2\right)=\operatorname{Rcos} \varphi\left(\lambda_1-\lambda_2\right) \] Uglovi su u radijanima.
Površina sfernog trapeza
Površina sfernog trapeza se odnosi na deo išrafiran na slici, Slika 2.10.
Formula za računanje površine sfernog trapeza je: \[ P=2 R^2\left(\lambda_2-\lambda_1\right) \cos \frac{\varphi_2-\varphi_1}{2} \cos \frac{\varphi_1+\varphi_2}{2} \] Uglovi su dati u radijanima.
Primer računanja elipsoidnog trapeza, koristeći R paket geosphere (Hijmans 2022).
# Instalacija paketa geosphere
# install.packages('geosphere')
library(geosphere)
# Warning: package 'geosphere' was built under R version 4.2.3
options(digits=12) # broj cifara za prikaz brojeva u konzoli
# poluprecnik sfere u m
= 6377000
R # Zadavanje tacaka fi , lam u stepenima
= c(40, 20)
T1_deg = c(48, 24)
T2_deg
# Površina eliposidnog trapeza koristeci funkciju iz geosphere paketa
# ulazni parametar f-je mora da bude matrica(ili dataframe) sa 2 kolone:
# prva je lon, druga lat
# Zadaje se svaka tacka poligona u odabranom smeru
# (kazaljke na satu ili obrnutom), i na kraju opet pocetna tacka
<- rbind(c(T1_deg[2], T1_deg[1]),
p c(T1_deg[2], T2_deg[1]),
c(T2_deg[2], T2_deg[1]),
c(T2_deg[2], T1_deg[1]),
c(T1_deg[2], T1_deg[1]))
# površina u km2
# pošto koristimo sferu parametar sploštenosti je 0
# funkcija može da računa i na elipsoidu
round( areaPolygon(p, a = R , f= 0 ) / 1000000 , 2)
# [1] 284865.96
Geodetska linija i loksodroma na lopti
Po definiciji ‒ matematički, geodetska linija je kriva na datoj površi u čijoj se svakoj tački glavna normala krive poklapa sa odgovarajućom normalnom na površ.
Glavna karakteristika geodetske linije je da predstavlja najkraću liniju koja povezuje dve zadate tačke na bilo kojoj analitički određenoj površi. Ovu osobinu imaju prava u ravni i luk velikog kruga lopte, između dveju tačaka, pa se za njih može reći da su to svojevrsne geodetske linije na ravni, odnosno na lopti. Pri tome, treba imati u vidu da se u matematičkoj kartografiji za najkraću udaljenost između dve tačke na lopti, tj. za luk velikog kruga, koristi termin ortodroma.
Kriva na površi Zemljinog elipsoida, koja sve meridijane seče pod istim uglom (azimutom) naziva se loksodroma. Ovo svojstvo je čini podesnom za navigaciju, jer omogućava da se po njoj putuje (plovi ili leti) sa konstantnim kursom. Slika 2.11 daje shematski prikaz loksodrome između tačaka T1 i T2.
U sledećem primeru je izračunata dužina između Beograda i Tokija po geodetskoj liniji i loksodromi, koristeći R paket geosphere
, (Hijmans 2022), poluprečnik kojim se aproksimira Zemlja je uzet da je 6.377 km.
library(geosphere)
# poluprecnik sfere u m
= 6377000
R options(digits=12) # broj cifara za prikaz brojeva u konzoli
# Zadavanje tacaka fi , lam
= c(44.800153, 20.455727)
T1_deg = c(35.679207, 139.767118)
T2_deg
# funkcija računa geotesku liniju na elipsoidu,
# ako kažemo da je spljoštenost 0
# onda funkcija važi i za sferu
= bearingRhumb( c(T1_deg[2], T1_deg[1]), c(T2_deg[2], T2_deg[1]) )
azimut # Loksodroma = R*(fi2-f1)*sec(alfa)
= R * (T1_deg[1]*pi/180- T2_deg[1]*pi/180 ) / abs(cos(azimut*pi/180))
Loksodroma
= distGeo(c(T1_deg[2], T1_deg[1]), c(T2_deg[2], T2_deg[1]), a=R, f=0)
Ortodroma
options(digits=12)
round(Ortodroma,2)
# [1] 9206566.75
round(Loksodroma,2)
# [1] 10161491.81
#razilka u dužini u m
round(Loksodroma-Ortodroma,2)
# [1] 954925.07
#razilka u dužini u km
round((Loksodroma-Ortodroma)/1000,2)
# [1] 954.93
2.4 Koordinate na elipsoidu
U diferencijalnoj geometriji obrtnom površi smatra se površ nastala obrtanjem neke krive oko zamišljene ose. Linije preseka ove površi sa ravnima koje prolaze kroz obrtnu osu nazivaju se meridijani, a linije preseka sa ravnima upravnim na obrtnu osu nazivaju se paralele. U geodeziji se pod obrtnim Zemljinim elipsoidom podrazumeva geometrijsko telo koje nastaje obrtanjem elipse oko njene male ose, Slika 2.12.
Ravni koje sadrže obrtnu osu elipsoida nazivaju se meridijanske ravni i te ravni koje sadrže obrtnu osu seku površ elipsoida seku po meridijanskim elipsama. Ravan koja je upravna na obrtnu osu i prolazi kroz centar elipsoida naziva se ekvatorijalna ravan. Ona preseca elipsoid po najvećem paralelnom krugu (poluprečnika a, koliko je i velika poluosa elipsoida), koji se naziva Ekvator, sve ostale paralele su manji krugovi. Meridijani i paralele predstavljaju jednu od parametricija elipsoida, slično kao kod sfere. Polovi su singularne tačke.
Elipsoid kojim se aproksimira oblik Zemlje je dvoosni elipsoid i zadaje se sa dva linearno nezavisna parametra. Na primer:
velikom i malom poluosom elipsoida (a, b),
velikom poluosom i spljoštenošću (a, f), ili
velikom osom i prvim numeričkim ekscentricitetom (a, e), Tabela 2.1.
Parametar | Opis |
---|---|
a | Velika poluosa |
f = (a-b)/a | Spljoštenost |
b = a- fa | Mala poluosa |
e2 = 2f -f 2 | Prvi numerički ekscentricitet |
e’ 2 = (2f - f 2)(1 - f )–2 | Drugi numerički ekscentricitet |
U geodeziji se koristi veliki broj elipsoida za aproksimaciju planete Zemlje. Ovde su dati neki zadati sa 2 linearno nezavisna parametra, velikom poluosom i inverznom spljoštenošću (1/f):
MERIT a=6378137.0 rf=298.257 MERIT 1983
SGS85 a=6378136.0 rf=298.257 Soviet Geodetic System 85
GRS80 a=6378137.0 rf=298.257222101 GRS 1980(IUGG, 1980)
IAU76 a=6378140.0 rf=298.257 IAU 1976
airy a=6377563.396 b=6356256.910 Airy 1830
APL4.9 a=6378137.0. rf=298.25 Appl. Physics. 1965
NWL9D a=6378145.0. rf=298.25 Naval Weapons Lab., 1965
mod_airy a=6377340.189 b=6356034.446 Modified Airy
andrae a=6377104.43 rf=300.0 Andrae 1876 (Den., Iclnd.)
aust_SA a=6378160.0 rf=298.25 Australian Natl & S. Amer. 1969
GRS67 a=6378160.0 rf=298.2471674270 GRS 67(IUGG 1967)
bessel a=6377397.155 rf=299.1528128 Bessel 1841
bess_nam a=6377483.865 rf=299.1528128 Bessel 1841 (Namibia)
clrk66 a=6378206.4 b=6356583.8 Clarke 1866
clrk80 a=6378249.145 rf=293.4663 Clarke 1880 mod.
clrk80ign a=6378249.2 rf=293.4660212936269 Clarke 1880 (IGN).
CPM a=6375738.7 rf=334.29 Comm. des Poids et Mesures 1799
delmbr a=6376428. rf=311.5 Delambre 1810 (Belgium)
engelis a=6378136.05 rf=298.2566 Engelis 1985
evrst30 a=6377276.345 rf=300.8017 Everest 1830
evrst48 a=6377304.063 rf=300.8017 Everest 1948
evrst56 a=6377301.243 rf=300.8017 Everest 1956
evrst69 a=6377295.664 rf=300.8017 Everest 1969
evrstSS a=6377298.556 rf=300.8017 Everest (Sabah & Sarawak)
fschr60 a=6378166. rf=298.3 Fischer (Mercury Datum) 1960
fschr60m a=6378155. rf=298.3 Modified Fischer 1960
fschr68 a=6378150. rf=298.3 Fischer 1968
helmert a=6378200. rf=298.3 Helmert 1906
hough a=6378270.0 rf=297. Hough
intl a=6378388.0 rf=297. International 1909 (Hayford)
krass a=6378245.0 rf=298.3 Krassovsky, 1942
kaula a=6378163. rf=298.24 Kaula 1961
lerch a=6378139. rf=298.257 Lerch 1979
mprts a=6397300. rf=191. Maupertius 1738
new_intl a=6378157.5 b=6356772.2 New International 1967
plessis a=6376523. b=6355863. Plessis 1817 (France)
SEasia a=6378155.0 b=6356773.3205 Southeast Asia
walbeck a=6376896.0 b=6355834.8467 Walbeck
WGS60 a=6378165.0 rf=298.3 WGS 60
WGS66 a=6378145.0 rf=298.25 WGS 66
WGS72 a=6378135.0 rf=298.26 WGS 72
WGS84 a=6378137.0 rf=298.257223563 WGS 84
sphere a=6370997.0 b=6370997.0 Normal Sphere (r=6370997)
Geodetske koordinate na elipsoidu
Geodetska širina \(\varphi\) je ugao u ravni meridijana, između ravni Ekvatora i normale na elipsoidu koja prolazi kroz tačku P. Geodetska dužina \(\lambda\) je ugao između ravni početnog meridijana (najčešće Grinički meridijan) i meridijanske ravni koja prolazi kroz tačku P. Geodetska (elipsoidna) visina h je geometrijska udaljenost od površi elipsoida (gde je h=0 m) do tačke P na fizičkoj površi Zemlje merena duž normale na elipsoidu, P’P (Slika 2.13).
Na slici može se oučiti ugao \(\psi\) (Slika 2.13) koji predstavlja geocentričnu širinu.
Normalni preseci i poluprečnici krivina
Ako površ elipsoida presečemo ravnima koje prolaze kroz normalnu na elipsoid u nekoj tački, nastaju krive linije koje nazivamo normalnim presecima. Razumljivo je da se kroz normalu svake tačke može postaviti beskonačno mnogo ravni i da će svaka od njih imati odgovarajući normalni presek. No, između bezbroj normalnih preseka postoje dva, međusobno upravna, tzv. glavni normalni preseci, koji su veoma značajni za površ elipsoida, pa i za primenu u matematičkoj kartografiji.
Meridijansku ravan definiše normala u tački T i pol PN, Slika 2.14. Ravan koja sadrži normalu u tački T, a upravna je na meridijansku ravan jeste ravan prvog vertikala. Presek ravni prvog vertikala sa elipsoidom definiše elipsu prvog vertikala. Meridijanski presek i prvi vertikal su glavni preseci.
Poluprečnik krivine meridijana
Meridijansku ravan definiše normala u tački T i pol PN, Slika 2.15. Da bismo izveli formulu za poluprečnik krivine u tački T, prethodno treba naći vezu između ravanskih pravouglih koordinata \(x\) i \(y\) u ravni meridijana i geodetske širine \(\varphi\).
Jednačina meridijanske elipse je:
\[ \frac{x^2}{a^2}+\frac{y^2}{b^2}=1 \]
Diferenciranjem se dobija:
\[ \frac{2 x d x}{a^2}+\frac{2 y d y}{b^2}=0 \]
Odakle sledi da je prvi izvod y po x:
\[ \frac{d y}{d x}=-\frac{b^2}{a^2} \frac{x}{y} \]
Iz definicije prvog izvoda znamo da je to nagib tangente u posmatranoj tački, pa možemo da znamo i koliki je nagib normale u posmatranoj tački, Slika 2.15. Jasno je sa slike da je ugao koji tangenta zaklapa sa x osom u smeru suprotnom kazaljci na satu, \(90+\varphi\), a još je lakše uočiti da je ugao u smeru kazaljke na satu \(90-\varphi\). Dakle, možemo pisati da važi:
\[ \frac{d y}{d x}=-\frac{b^2}{a^2} \frac{x}{y}=\tan (\varphi+90) \]
Odakle sledi da je:
\[ \begin{aligned} & \tan \varphi=\frac{a^2}{b^2} \frac{y}{x} \\ & y=\frac{b^2}{a^2} x \tan \varphi \end{aligned} \]
Znajući da je prvi numerički ekscentricitet elipse zadat formulom:
\[ e^2=1-\frac{b^2}{a^2} \]
Dobijamo:
\[ y=x\left(1-e^2\right) \tan \varphi \] Ako se vratimo na jednačinu elipse \(\frac{x^2}{a^2}+\frac{y^2}{b^2}=1\), lako možemo rešiti jednačinu elipse po x (zamenimo y), a potom po y i dobiti vezu između ravanskih pravouglih koordinata x i y u ravni meridijana i geodetske širine \(\varphi\).
\[ \begin{aligned} & x=\frac{a \cos \varphi}{\sqrt{1-e^2 \sin ^2 \varphi}} \\ & y=\frac{a\left(1-e^2\right) \sin \varphi}{\sqrt{1-e^2 \sin ^2 \varphi}} \end{aligned} \] Neka su T i T’ tačke koje su na infinitezimalnom rastojanju, Slika 2.16, tako da element ds možemo posmatrati kao linearan. Poluprečnik krivine meridijana u tački T se onda može sračunati kao:
\[ M=\frac{d s}{d \varphi}=\frac{\sqrt{d x^2+d y^2}}{d \varphi} \Rightarrow \quad M=\sqrt{\left(\frac{d x}{d \varphi}\right)^2+\left(\frac{d y}{d \varphi}\right)^2} \] Diferenciranjem pravouglih koordinata x i y dobija se:
\[ \begin{aligned} & \frac{d x}{d \varphi}=\frac{a\left(1-e^2\right) \sin \varphi}{\sqrt{\left(1-e^2 \sin ^2 \varphi\right)^3}} \\ & \frac{d y}{d \varphi}=\frac{a\left(1-e^2\right) \cos \varphi}{\sqrt{\left(1-e^2 \sin ^2 \varphi\right)^3}} \end{aligned} \]
Konačno dobijamo formulu za računanje poluprečnika krivine meridijana:
\[ M=M(\varphi)=\frac{(a b)^2}{\left((a \cdot \cos \varphi)^2+(b \cdot \sin \varphi)^2\right)^{\frac{3}{2}}}=\frac{a\left(1-e^2\right)}{\left(1-e^2 \sin ^2 \varphi\right)^{\frac{3}{2}}} \]
Ceo postupak je mogao biti mnogo kraći, čim smo došli do formula za x i y u zavisnosti od \(\varphi\) mogli smo direktno primeniti formulu za računanje poluprečnika krivine i dobiti rezultat, računajući prvi i drugi izvod.
\[ M=\frac{\left(y^{\prime \prime}\right)^2}{\left(1+\left(y^{\prime}\right)^2\right)^{\frac{3}{2}}}=\frac{\frac{d^2 y}{d x^2}}{\left(1+\left(\frac{d y}{d x}\right)^2\right)^{\frac{3}{2}}} \]
Poluprečnik krivine paralele i poluprečnik krivine po prvom vertikalu
Kao što je već rečeno, ravan koja sadrži normalu u tački T, a upravna je na meridijansku ravan, jeste ravan prvog vertikala. Presek ravni prvog vertikala sa elipsoidom definiše elipsu prvog vertikala u tački T čiji poluprečnik krivine u tački T tražimo, Slika 2.17.
Sa slike se jasno uočava trougao cTn , sa r je označen poluprečnik krivine paralele, odnosno poluprečnik paralele (paralela je mali krug na elipsoidu, paralelna ekvatorijalnom krugu). Takođe, lako je uočiti da je r=x, apscisi u ravni meridijana. Dakle, poluprečnik paralele je:
\[ r=x=\frac{a \cos \varphi}{\sqrt{1-e^2 \sin ^2 \varphi}} \] Iz trougla cTn je jednostavno naći formulu za računanje poluprečnika krivine po prvom vertikalu:
\[ N=N(\varphi)=\frac{r}{\cos \varphi}=\frac{x}{\cos \varphi}=\frac{a}{\sqrt{1-e^2 \sin ^2 \varphi}} \] Znajući formulu za N može se definisati i drugi oblik formule za poluprečnik krivine meridijana:
\[M(\varphi)=\frac{1-e^2}{a^2} N(\varphi)^3\]
Do formule za poluprečnik krivine paralele moglo se doći i koristeći teoremu Menjea, kojom se definiše odnos kosog preseka (u našem slučaju paralele) i normalnog preseka (u ovom slučaju prvog vertikala).
Teorema Menjea: Poluprečnik krivine kosog preseka jednak je proizvodu poluprečnika krivine normalnog preseka i kosinusa ugla između normalnog i kosog preseka.
Poluprečnik krivine u proizvoljnom pravcu
Ojlerova formula za poluprečnik krivine normalnog preseka u proizvoljnom (azimutu) pravcu je:
\[ \frac{1}{r}=\frac{\cos ^2 \alpha}{M}+\frac{\sin ^2 \alpha}{N} \] odakle sledi da je poluprečnik krivine normalnog preseka u pravcu azimuta \(\alpha\):
\[ r=\frac{M N}{N \cos ^2 \alpha+M \sin ^2 \alpha} \]
Srednji poluprečnik krivine
Srednji poluprečnik krivine je aritmetička sredina iz poluprečnika krivina svih normalnih preseka u tački T.
\[ r_0=\frac{1}{2 \pi} \int_0^{2 \pi} \frac{M N}{N \cos ^2 \alpha+M \sin ^2 \alpha}=\sqrt{M N}=\frac{a \sqrt{1-e^2}}{1-e^2 \sin ^2 \varphi} \]
Dužina meridijanskog luka
Uzmimo na meridijanu dve proizvoljno bliske tačke T1 i T2, čije su širine \(\varphi\) i \(\varphi +d\varphi\). Normale u ovim tačkama, odnosno radijusi krivina meridijanskog luka, zaklapaće ugao \(d\varphi\), Slika 2.18. Pošto su tačke na ifinitezimalnoj (nemreljivoj) maloj udaljenosti, možemo smatrati da je poluprečnik krivine meridijana i u jednoj i u drugoj tački M.
Onda imamo da dužinu \(dL_m\) možemo dobiti iz definicije ugla u radijanima:
\[ dL_m= M d \varphi \] Jasno je da možemo dobiti i ukupnu dužinu meridijanskog luka, ako integralimo prethodni izraz:
\[ L_m=\int_{\varphi_1}^{\varphi_2} M d \varphi \]
Rešenje ovog integrala daje nam opštu formulu za dužinu luka meridijana (Jovanović 1984):
\[ \begin{aligned} L_m & =a\left(1-e^2\right)\left[A\left(\varphi_2-\varphi_1\right)-\frac{B}{2}\left(\sin 2 \varphi_2-\sin 2 \varphi_1\right)+\right. \\ & \left.+\frac{C}{4}\left(\sin 4 \varphi_2-\sin 4 \varphi_1\right)-\frac{D}{6}\left(\sin 6 \varphi_2-\sin 6 \varphi_1\right)+\ldots\right] \end{aligned} \]
gde su:
\[ \begin{aligned} & A=1+\frac{3}{4} e^2+\frac{45}{64} e^4+\frac{175}{256} e^6+\ldots \\ & B=\frac{3}{4} e^2+\frac{15}{16} e^4+\frac{525}{512} e^6+\ldots \\ & C=\quad \frac{15}{64} e^4+\frac{105}{256} e^6+\ldots \\ & D=\quad \frac{35}{256} e^6+\ldots \\ & \end{aligned} \]
Uglovi su izraženi u radijanima, e predstavlja prvi numerički ekscentricitet.
U sledećem primeru sračunata je dužina meridijanskog luka na dva načina na Beselovom elipsoidu.
# Zadavanje tacaka fi , lam
= c(43,21)
T1_deg = c(45,23)
T2_deg
# Duzina meridijanskog luka na elipsoidu
= function(fi, a=6377397.155 , rf=299.1528128 ){
M = 1/rf
f = sqrt(2*f - f^2)
e = a*(1-e^2)/(1-e^2*sin(fi)^2)^(3/2)
M return(M)
}= T1_deg[1] * pi/180 # stepeni u radijane
fi1 = T2_deg[1] * pi/180 # stepeni u radijane
fi2 # Integral - numeričko rešenje integrala
= integrate(M, lower=fi1, upper=fi2, rel.tol=0.1)$value
Lm # u m
round(Lm,2)
# [1] 222200
# u km
round(Lm/1000,2)
# [1] 222
# Drugi način po gore datoj formuli
<- function( lat1deg, lat2deg, a=6377397.155 , rf=299.1528128) {
dmer = 1/rf
f = sqrt(2*f - f^2)
e = lat1deg*pi/180
fi1 = lat2deg*pi/180
fi2 = 1 + 3 / 4 * e^2 + 45 / 64 * e^4 + 175 / 256 * e^6
A = 3 / 4 * e^2 + 15 / 16 * e^4 + 525 / 512 * e^6
B = 15 / 64 * e^4 + 105 / 256 * e^6
C= 35/256 *e^6
D
= a*(1-e^2)*(A*(fi2-fi1)-B/2*(sin(2*fi2) - sin(2*fi1)) +
Lm /4*(sin(4*fi2) - sin(4*fi1)) -
C/6 *(sin(6*fi2) - sin(6*fi1) ) )
Dreturn(abs(Lm))
}
= dmer(T1_deg[1], T2_deg[1]) # dmer(43,45)
Lm2
# u m
round(Lm2,2)
# [1] 222200
# u km
round(Lm2/1000,2)
# [1] 222
Dužina luka paralele
Paralele su na obrtnom elipsoidu krugovi, Slika 2.17, računanje dužina lukova paralela svodi se na određivanje kružnih lukova sa centralnim uglom jednakim razlici geodetskih dužina krajnjih tačaka luka:
\[
L_p=N_{\varphi}\left(\lambda_2-\lambda_1\right) \cos \varphi
\]
Površina elipsoidnog trapeza
Uočimo elipsoidni trapez na slici (Slika 2.19). Primenićemo sličan postupak kao kod računanja dužine meridijanskog luka.
Jasno je da površinu elipsoidnog trapeza možemo definisati kao:
\[ P=\int_{\varphi_1}^{\varphi_2} \int_{\lambda_1}^{\lambda_2} M N \cos \varphi d \varphi d \lambda \]
Rešenje integrala je (Jovanović 1984):
\[ \begin{aligned} P= & a^2\left(1-e^2\right) \left(\lambda_2-\lambda_1\right)\left[A\left(\sin \varphi_2-\sin \varphi_1\right)-B\left(\sin 3 \varphi_2-\sin 3 \varphi_1\right)+\right. \\ & \left.+C\left(\sin 5 \varphi_2-\sin 5 \varphi_i\right)-D\left(\sin 7 \varphi_2-\sin 7 \varphi_1\right)+\ldots\right] \end{aligned} \]
gde su: \[ \begin{aligned} & A=1+\frac{e^2}{2}+\frac{3}{8} e^4+\frac{5}{16} e^6+\ldots \\ & B=\frac{e^2}{6}+\frac{3}{10} e^4+\frac{3}{16} e^6+\ldots \\ & C=\quad \frac{3}{80} e^4+\frac{4}{16} e^6+\ldots \\ & D=\quad \frac{1}{112} e^6+\ldots \\ & \end{aligned} \]
e je prvi numerički ekscentricitet elipsoida koji se koristi, uglovi su u radijanima.
Primer računanja elipsoidnog trapeza, koristeći R paket geosphere
(Hijmans 2022), na elipsoidu WGS84.
# Instalacija paketa geosphere
# install.packages('geosphere')
library(geosphere)
options(digits=12) # broj cifara za prikaz brojeva u konzoli
# WGS84 a=6378137.0 rf=298.257223563 WGS 84
=6378137
a=1/298.257223563
f# Zadavanje tacaka fi , lam u stepenima
= c(40, 20)
T1_deg = c(48, 24)
T2_deg
# Površina eliposidnog trapeza koristeci funkciju iz geosphere paketa
# ulazni parametar f-je mora da bude matrica(ili dataframe) sa 2 kolone:
# prva je lon, druga lat
# Zadaje se svaka tacka poligona u odabranom smeru
# (kazaljke na satu ili obrnutom), i na kraju opet pocetna tacka
<- rbind(c(T1_deg[2], T1_deg[1]),
p c(T1_deg[2], T2_deg[1]),
c(T2_deg[2], T2_deg[1]),
c(T2_deg[2], T1_deg[1]),
c(T1_deg[2], T1_deg[1]))
# površina u km2
round( areaPolygon(p, a = a , f= f ) / 1000000 , 2)
# [1] 284892.04
Primer računanja ortodrome i loksodrome na elipsoidu
Sledeći primer računa dužinu geodetske linije i loksodrome na elispoidu WGS84, od Beograda (\(\varphi=44.800153\) i \(\lambda=20.455727\)) do Tokija (\(\varphi=35.679207\) i \(\lambda=139.767118\)).
options(digits=12) # broj cifara za prikaz brojeva u konzoli
# WGS84 a=6378137.0 rf=298.257223563 WGS 84
=6378137
a=1/298.257223563
f# Zadavanje tacaka fi , lam u stepenima
= c(44.800153, 20.455727) # BG
T1_deg = c(35.679207, 139.767118) # TK
T2_deg
# Ortodroma – sf paket sa s2 paketom
library(sf)
# Warning: package 'sf' was built under R version 4.2.3
# Linking to GEOS 3.9.3, GDAL 3.5.2, PROJ 8.2.1; sf_use_s2() is TRUE
= st_as_sfc("POINT(20.455727 44.800153)", crs = 4326)
bg = st_as_sfc("POINT(139.767118 35.679207)", crs = 4326)
tk sf_use_s2(TRUE) # koristi elipsoidna računanja
= st_distance(bg,tk)
Or
# Kako f-ja distRhumb iz paketa geosphere računa dužinu loksodrome samo na sferi,
# potrebno je definisati drugu f-ju koja računa dužinu loksodrome i na elipsoidu
# Loksodroma
<- function(long1, lat1, long2, lat2, a=6378137, e=0.0818191908426215 ) {
lox <- a*sqrt(1-e^2)
b <- (a-b)/a
f = long1*pi/180
l1 = long2*pi/180
l2 = lat1*pi/180
fi1 = lat2*pi/180
fi2 = log( tan(pi/4+fi1/2) * ( (1-e*sin(fi1))/(1+e*sin(fi1)) )^(e/2) )
q1 = log( tan(pi/4+fi2/2) * ( (1-e*sin(fi2))/(1+e*sin(fi2)) )^(e/2) )
q2 = atan2((l2-l1),(q2-q1))
alfa = 1 - 1/4*e^2 - 3/64*e^4 - 5/256*e^6 - 175/16384*e^8
A0 = 3/8*(e^2 + 1/4*e^4 + 15/128*e^6 + 35/512*e^8)
A2 = 15/256*(e^4 + 3/4*e^6 + 35/64*e^8 + 105/256*e^10)
A4 = 35/3072*(e^6 + 5/4*e^8 + 315/256*e^10)
A6 = a*(A0*fi1 - A2*sin(2*fi1) + A4*sin(4*fi1) - A6*sin(6*fi1))
m1 = a*(A0*fi2 - A2*sin(2*fi2) + A4*sin(4*fi2) - A6*sin(6*fi2))
m2 <- (m2 - m1)/cos(alfa)
s
return(s)
}
= lox(T1_deg[2], T1_deg[1], T2_deg[2], T2_deg[1], a=a, e=sqrt(2*f -f*2) )
Lo
options(digits=12)
round(Or,2)
# Units: [m]
# [,1]
# [1,] 9184644.51
round(Lo,2)
# [1] 10163303.58
#razilka u dužini u m
round(Lo-as.numeric(Or),2)
# [1] 978659.06
#razilka u dužini u km
round((Lo-as.numeric(Or))/1000,2)
# [1] 978.66
Odnos geodetske linije i loksodrome sračunat u primeru je prikazan na karti u Azimutnoj ortografskoj projekciji, Slika 6.11.
Pravougle elipsoidne koordinate
Odnos krivolinijskih i pravouglih elipsoidnih koordinata (Slika 2.13) dat je izrazima:
\[ \begin{aligned} & X=(N+h) \cos \varphi \cos \lambda \\ & Y=(N+h) \cos \varphi \sin \lambda \\ & Z=\left(N\left(1-e^2\right)+h\right) \sin \varphi \end{aligned} \]
Takođe, ako znamo elipsoidne pravougle, možemo doći do krivolinijskih:
\[ \lambda=\operatorname{atan2}(\mathrm{Y}, \mathrm{X}) \]
Geodetska dužina i elipsoidna visina se dobijaju iterativnim postupkom (nekoliko iteracija, \(h_0=0\)).
\[ \begin{aligned} & \varphi_0=\arctan \frac{Z}{\sqrt{X^2+Y^2}} \\ & N_i=\frac{a}{\sqrt{1-e^2 \sin ^2 \varphi_i}} \\ & h_i=\frac{\sqrt{X^2+Y^2}}{\cos \varphi_i}-N_i \\ & \varphi_{i+1}=\arctan \left(\frac{Z}{\sqrt{X^2+Y^{-2}}}\left(1-\frac{e^2 N_i}{N_i+h_i}\right)^{-1}\right) \end{aligned} \]
2.5 Geodetski koordinatni referentni sistem
Da bi se znala tačna lokacija neke tačke u prostoru, pored koordinata te tačke na elipsoidu, potrebno je poznavati i druge parametre sistema, a to su oblik elipsoida i geodetski datum. Geodetski datum je set konstanti koje definišu položaj elipsoida u odnosu na Zemlju, u odnosu na centar mase i usvojene ose Zemlje.
Geodetski koordinatni referentni sistem je geometrijski model u kome je definisan:
- Model oblika zemlje (npr: elipsoid sa parametrima a i e);
- Početni meridijan (najčešće Grinički meridijan, što se podrazumeva i često izostavlja iz definicije);
- Geodetski datum.
Datum može biti definisan na dva načina, kao topocentrični datum i geocentrični datum.
Geocentrični datum se definiše sa sedam parametara i to na sledeći način:
- Tri parametra koja definišu položaj referentnog elipsoida u odnosu na centar Zemlje ‒ \((\Delta X,\ \text{ΔY},\ \text{ΔZ})\) (ili tx, ty, tz);
- Tri parametra koja definišu orijentaciju referentnog elipsoida ‒ \((\alpha,\ \beta,\ \gamma)\);
- Parametar razmere ‒ \((\mu\ (\text{ili}\ \mu=1+s))\), parametar \(s\) je najčešće u ppm (eng. parts per million ‒ (jedan) deo na milion) jedinicama.
Slika 2.21 pokayuje odnos referentnog elipsoida (lokalnog, negeocentričnog, referenc elipsoida) i globalnog elipsoida. Globalni geocentrični elipsoid je takav da najbolje aproksimira celokupnu površ Zemlje (geoida).
WGS84 je konvencionalni terestrički referentni sistem uz koji se vezuje globalni elipsoid WGS84 kojim se aproksimira geoid na celoj njegovoj površini. Centar mase elipsoida se poklapa sa centrom mase Zemlje, a ose se poklapaju sa usvojenim osama Zemlje. Prema tome sedam datumskih parametara zadaju se tako da pokazuju koliko je referenc elipsoid transliran po sve tri ose u odnosu na WGS84, koliko je rotiran po sve tri ose i koliki je odnos dužina na WGS84 i referenc elipsoidu. Referenc ili lokalni elipsoid je takav da najbolje aproksimira deo površi zemlje.
Trodimenzionalnom Helmertovom transformacijom mogu se transformisati koordinate između lokalnog elipsoida i globalnog, i obrnuto. Skup pravouglih geocentričnih Dekartovih koordinata XWGS84¸ YWGS84, ZWGS84 može se transformisati u skup negeocentričnih Dekartovih koordinata XBessel¸ YBessel, ZBessel jednačinom, u ovom primeru na Beselovom elipsoidu, koji ima datum Hermanskogel (stari Državni koordinatni sistem u Srbiji), Slika 2.22.
\[ \begin{bmatrix} X^{Besel} \\ Y^{Besel} \\ Z^{Besel} \end{bmatrix} = \begin{bmatrix} t_x \\ t_y \\ t_z \end{bmatrix} + (1 + s\times10^{-6}) \cdot \begin{bmatrix} 1&-r_z&r_y \\ r_z&1&-r_x \\ -r_y & r_x & 1 \end{bmatrix} \cdot \begin{bmatrix} X^{WGS84} \\ Y^{WGS84} \\ Z^{WGS84} \end{bmatrix} \]
gde su:
- tx, ty i tz, parametri translacije po korespondentnim koordinatnim osama,
- s parametar razmere i
- R matrica rotacije oko koordinatnih osa XWGS84, YWGS84 i ZWGS84.
Ukoliko su uglovi rotacije \(\alpha\), \(\beta\) i \(\gamma\) oko koordinatnih osa XWGS84, YWGS84 i ZWGS84 mali (pri transformaciji rezultata iz sistema WGS84 u lokalni koordinatni sistem, oni su reda nekoliko lučnih sekundi), onda se matrica R može predstaviti u obliku:
\[ R=\begin{bmatrix} 1&-r_z&r_y \\ r_z&1&-r_x \\ -r_y & r_x & 1 \end{bmatrix} \approx \begin{bmatrix} 1&-\gamma&\beta \\ \gamma&1&-\alpha \\ -\beta & \alpha & 1 \end{bmatrix} . \]
Prema tome, ako je poznato sedam datumskih parametara (tx, ty, tz, \(\alpha\), \(\beta\), \(\gamma\) i s), vrednosti koordinata XBessel, YBessel, ZBessel mogu se izračunati na osnovu koordinata XWGS84¸ YWGS84, ZWGS84.
\[ \begin{matrix} X^{Bessel} & = & t_x+(1+s\times10^{-6})\cdot (X^{WGS84}-r_z\cdot Y^{WGS84}+r_y\cdot Z^{WGS84}),\\ Y^{Bessel} & = & t_y+(1+s\times10^{-6})\cdot (r_z\cdot X^{WGS84}+Y^{WGS84}-r_x\cdot Z^{WGS84}),\\ Z^{Bessel} & = & t_z+(1+s\times10^{-6})\cdot (-r_y\cdot X^{WGS84}+r_x\cdot Y^{WGS84}+Z^{WGS84}).\\ \end{matrix} \]
2.6 Koordinatni referentni sistem u projekciji
Najčešće su koordinate za prostorne podatke date kao pravougle koordinate u ravni karte, i uobičajeno je da te koordinate imaju oznaku (\(x,y\) ili \(X,Y\) ili \(E,N\)). Formule koje se koriste da se krivolinijske koordinate sa sfere ili elipsoida (geodetske koordinate) transformišu u ravan karte predstavljaju kartografske projekcije. Tada se koordinate definišu u koordinatnom referentnom sistemu u projekciji. Kod kartografskih projekcija u procesu preslikavanja dolazi do deformacija uglova (oblika), dužina i površina. Generalno, prema karakteru deformacija, projekcije se dele na konformne (zadržava se jednakost oblika, uglova), ekvivalentne (nema deformacija površina) i uslovne. Računanje pravouglih koordinata iz krivolinijskih naziva se direktni kartografski zadatak, i obratno kad se računaju krivolinijske iz pravouglih naziva se inverzni kartografski zadatak.
Detaljno o nekim projekcijama biće reči u drugom delu knjige.
Koordinatni referentni sistem u projekciji je geometrijski model u kome je definisana:
- Projekcija;
- Model oblika zemlje (npr: elipsoid sa parametrima a i e);
- Početni meridijan (npr: Grinički meridijan);
- Geodetski datum.
Kad su poznate koordinate u projekciji i definisan koordinatni referentni sistem, onda je moguće transformisati koordinate iz jednog koordinatnog referentnog sistema u drugi, Slika 2.23.
2.7 Uvod u PROJ biblioteku
Biblioteka PROJ ili ranije poznata kao PROJ.4 trenutno raspolaže trima funkcionalnostima za transformaciju koordinata i geodetsko računanje:
- proj/invproj – direktna i inverzna kartografska projekcija,
- cs2cs – konverzija između koordinatnih sistema (geografskih ili u projekciji),
- geod/invgeod – direktna i inverzna geodetska računanja.
Biblioteka PROJ.4 (PROJ contributors 2023) razvijena je početkom 1980. godine kao RATFOR program ((RATional FORtran, programski jezik)) gde većina kodova potiče od GCTP (Geological Survey’s General Cartographic Transformation Package). Program PROJ.4 je rekodiran u C programskom jeziku kada je MAPGEN paket, čiji je sastavni deo program PROJ.4, transformisan u UNIX operativni sistem. U program su dodate mnoge nove projekcije. Biblioteka je zasnovana na radu Geralda Evendena, kasnije ju je održavao Frank Warmerdam, koji je i tvorac GDAL biblioteke, a sada je održava zajednica programera.
PROJ biblioteka dolazi sa MIT (Massachusetts Institute of Technology) licencom koja dozvoljava slobodnu upotrebu, kopiranje, menjanje sadržaja, podlicenciranje, prodaju uz uslov da se uključi izvorna licenca i dopuštenje.
Instalacija PROJ biblioteke zavisi od operativnog sistema, a u daljem tekstu će biti data kratka ilustracija korišćenja biblioteke. U samoj biblioteci su sadržani parametri mnogih elipsoida, kao i predefinisanih geodetskih datuma sa vrednostima parametara.
Koristeći PROJ.4 notaciju može se zadati bilo koji koordinatni referentni sistem, bez ograničenja da se koriste samo predefinisani datumi koji su sadržani u biblioteci, s tim što se datum zadaje u odnosu na WGS84. Treba napomenuti da je sa x označen pravac istoka, a sa y pravac severa, kao u matematici (suprotno od geodetske notacije).
+proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y_0=0 +ellps=bessel +towgs84=574.027,170.175,401.545,4.88786,-0.66524,-13.24673,6.89 +units=m
Zadat je koordinatni referentni sistem u Gaus-Krigerovoj projekciji za Srbiju, sa sledećim parametrima:
+proj=tmerc - Gaus-Kriger (Transverzalna merkatorova) projekcija,
+lat_0=0 +lon_0=21 - koordinatni početak na elipsoidu,
+k=0.9999 - razmera duž srednjeg meridijana,
+x_0=7500000 +y_0=0 - koord. početak u ravni karte pravac ist. i sev.
+ellps=bessel - elipsoid
+towgs84=574.027,170.175,401.545,4.88786,-0.66524,-13.24673,6.89 - 3 translacije, 3 rotacije, razmera u odnosu na WGS84 izražena u ppm (parts per milion)
+=m - jedinice metri.
Pored toga, koordinatni referentni sistem u PROJ.4 notaciji može se zadati i koristeći EPSG kod. EPSG Geodetic Parameter Dataset je kolekcija definicija koordinatnih referentnih sistema i parametara koji opisuju te referentne sisteme.
Na stranici http://spatialreference.org/ ili na http://epsg.io mogu se naći definicije koordinatnih referentnih sistema u više notacija: EPSG, proj4, WKT, GML, JSON,… Na slici (Slika 2.24) dat je primer za WGS84 koordinatni sistem koji ima EPSG kod 4326.
Primer direktnog računanja dat je za Gaus-Krigerovu projekciju:
proj +proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y_0=0 +ellps=bessel
21.33254 45.22587
7526110.73 5009091.15
Pozivanjem proj
komande očekuje se da korisnik unese elipsoidne koordinate preko terminala ili iz tekstualnog fajla da bi se dobile pravougle koordinate. Koristeći linux funkcionalnost komanda se može izvršiti i direktno iz jedne komande linije.
echo 21.33254 45.22587 | proj +proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y_0=0 +ellps=bessel
7526110.73 5009091.15
Kod inverznog kartografskog računanja neophodno je zadati i parametar -I
, komanda očekuje ulazne pravougle koordinate i kao rezultat dobijaju se elipsoidne koordinate longituda i latituda.
proj +proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y_0=0 +ellps=bessel -I
7526110.73 5009091.15
21.332540 45.225870
Koordinatna transformacija iz jednog sistema u drugi ilustrovana je primerom konverzije iz Gaus-Krigerovog starog državnog sistema (elipsoid Bessel i datum Hermanskogel) u novi UTM koordinatni referentni sistem za Srbiju (elipsoid GRS80 sa ETRS89 datumom za Srbiju):
echo 7526110.73 5009091.15 | cs2cs +proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y_0=0 +ellps=bessel +towgs84=574.027,170.175,401.545,4.88786,-0.66524,-13.24673,6.89 +units=m +to +proj=utm +zone=34 +ellps=GRS80 +towgs84=0.26901,0.18246,0.06872,-0.01017,0.00893,-0.01172,0.04 +units=m
525672.87 5008094.39 42.46
Dat je i primer transformacije iz Gaus-Krigera za Srbiju u WGS84, gde je WGS84 zadat EPSG kodom, a detalji o funkciji se mogu naći na url adresi: http://proj4.org/apps/cs2cs.html.
echo 7526110.73 5009091.15 | cs2cs +proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y_0=0 +ellps=bessel +towgs84=574.027,170.175,401.545,4.88786,-0.66524,-13.24673,6.89 +units=m +to +init=epsg:4326 -f %12.6f
21.327021 45.225867 42.986502
U 2018. godini, nakon uspešne inicijative GDAL Coordinate System Barn Raising, brojne kompanije koje su profitirale od širokog spektra geoprostornog softvera otvorenog koda podržale su razvoj modernijeg i zrelijeg sistema transformacije koordinata. Tokom nekoliko godina, PROJ.4 je evoluirao kroz verzije 5, 6, 7, 8 i 9 i stoga je preimenovan u PROJ.
Lista novina u PROJ biblioteci data je taksativno (Pebesma and Bivand 2023):
iako se PROJ.4 notacija i dalje može koristiti za inicijalizaciju koordinatnih referentnih sistema, neki koordinatni sistemi se ne mogu predstaviti koristeći ovu notaciju, novi format koji zamenjuje PROJ4 za zapis koordinatnih referentnih sistemaje WKT-2 (opisan u sledećem odeljku);
WGS84 kao centralni referentni sistem nije obavezno koristiti, transformacije koordinata više ne moraju da prolaze kroz određeni datum;
postoji više putanja konverzije ili transformacije (tzv. piplines) za prelazak sa KRS A na KRS B i mogu sadržati i informacije o odgovarajućoj tačnosti transformacije; PROJ će podrazumevano koristiti najprecizniji, ali je moguća korisnička kontrola;
moguće je ulančavati proizvoljan broj elementarnih operacija transformacije, uključujući zamenu osa i transformacije jedinica;
gridovani datumi, kojih je sada mnogo više, više se ne distribuiraju u biblioteci, već su dostupni iz mreže za isporuku sadržaja (CDN); PROJ omogućava mrežni pristup gridovanim datumima, ali i preuzimanje samo delova grida koji su zaista potrebni, čuvajući ih u keš memoriji ili u stalnoj memoriji korisnika za buduću upotrebu;
transformacije koordinata dobijaju podršku za epohe, transformacije zavisne od vremena (i otuda: četvorodimenzionalne koordinate, uključujući izvorno i ciljno vreme);
skup datoteka sa registrovanim koordinatnim referentnim sistemima skladišti se u SQLite bazi podataka;
redosled geodetskih koordinata je određen u samoj definiciji koordinatnog referentnog sistema, ne forsira se obavezan redosled geodetska dužina pa širina.
Lista svih podržanih projekcija data je na adresi https://proj.org/en/9.2/operations/projections/index.html.
Biblioteka PROJ je implementirana u mnogim GIS softverima i može se jednostavno koristiti kroz grafički interfejs. Takođe, PROJ biblioteka je implementirana u R-u, Pythonu i mnogim drugim programskim jezicima.
2.8 WKT-2
WKT-2 je sintaksa za definisanje i opis koordinatnih referentnih sistema definisana kao OGC standard (Lott 2015). Sintaksa WKT-2 se može koristiti za definisanje sledećih koordinatnih referentnih sistema:
Koordinatni referentni sistem EPSG:4326
koji je u proj4 notaciji ima sledeći zapis:
+proj=longlat +datum=WGS84 +no_defs +type=crs
Dok isti koordinatni sistem ima detaljniji zapis u WKT-2 notaciji:
GEOGCRS["WGS 84",
ENSEMBLE["World Geodetic System 1984 ensemble",
MEMBER["World Geodetic System 1984 (Transit)"],
MEMBER["World Geodetic System 1984 (G730)"],
MEMBER["World Geodetic System 1984 (G873)"],
MEMBER["World Geodetic System 1984 (G1150)"],
MEMBER["World Geodetic System 1984 (G1674)"],
MEMBER["World Geodetic System 1984 (G1762)"],
MEMBER["World Geodetic System 1984 (G2139)"],
ELLIPSOID["WGS 84",6378137,298.257223563,
LENGTHUNIT["metre",1]],
ENSEMBLEACCURACY[2.0]],
PRIMEM["Greenwich",0,
ANGLEUNIT["degree",0.0174532925199433]],
CS[ellipsoidal,2],
AXIS["geodetic latitude (Lat)",north,
ORDER[1],
ANGLEUNIT["degree",0.0174532925199433]],
AXIS["geodetic longitude (Lon)",east,
ORDER[2],
ANGLEUNIT["degree",0.0174532925199433]],
USAGE[
SCOPE["Horizontal component of 3D system."],
AREA["World."],
BBOX[-90,-180,90,180]],
ID["EPSG",4326]]
2.9 Primeri računanja na elipsoidu koristeći sf i s2 paket
Sračunati pravougle elipsoidne koordinate na WGS84 za tačku GRF, zadatu sa geodetskom dužinom \(\lambda=20.4759749\), i širinom \(\varphi=44.8057705\) u stepenima, koristeći sf
paket (Pebesma 2018b).
library(sf)
= st_as_sfc("POINT(20.4759749 44.8057705)", crs = 4326)
p = st_transform(p, "+proj=geocent")
p 1]]
p[[# POINT Z (4246439 1585649 4472060)
Transformisati tačku GRF(lon=20.4759749, lat=44.8057705)) sa WGS84 na Beselov elipsoid sa datumom Hermanskogel.
Izraziti razliku geodetskih koordinata u sekundama. Koliko bi se približno razlikovala pozicija ovih tačaka da su na istom elipsoidu (aproksimirati elipsoid loptom)?
library(sf)
options(digits = 12)
= st_as_sfc("POINT(20.4759749 44.8057705)",
pw crs = 4326)
= st_transform(pw,
pb crs="+proj=longlat +ellps=bessel +towgs84=574.027,170.175,401.545,4.88786,-0.66524,-13.24673,6.89 +units=m +type=crs")
1]] # koordinate na Beselu datum Hermanskogel
pb[[# POINT (20.4813687832 44.8057493124)
round( (as.numeric( pb[[1]] ) - as.numeric( pw[[1]] ) )*3600 ,1 )
# [1] 19.4 -0.1
# Zamislimo da su koordinate na istom elipsoidu.
# Koliko je jedna sekunda metara kružnog luka lopte?
# Ugao u radijanima kod meridijana df = l/R => l=R*df
# Kod paralele dl= l/Rcos(fi) => l=R*cos(fi)*dl
= 6377000* cos(44.8057705*pi/180)* (19.4/3600 *pi/180)
l
# Da su ove koordinate na istom elipsoidu razlikovale bi se približno za
round(l,1) # m
# [1] 425.5
Sračunati dužinu geodetske linije na WGS84 elipsoidu, od Beograda (lon=20.455727, lat=44.800153) do Tokija (lon=139.767118, lat= 35.679207).
library(sf)
options(digits = 12)
= st_as_sfc("POINT(20.455727 44.800153)", crs = 4326)
bg = st_as_sfc("POINT(139.767118 35.679207)", crs = 4326)
tk sf_use_s2(TRUE) # koristi elipsoidna računanja
st_distance(bg,tk)
# Units: [m]
# [,1]
# [1,] 9184644.51421
# u km napomena koristimo pipe karakter |> i paket units
st_distance(bg,tk)|> units::set_units(km)
# Units: [km]
# [,1]
# [1,] 9184.64451421
Sračunati dužinu vektora između tačaka Beograd (lon=20.455727, lat=44.800153) i Tokijo (lon=139.767118, lat= 35.679207) koristeći elipsoidne pravougle koordinate. Uporediti dužinu ovog vektora u prostoru sa pre dobijenom dužinom geodetske linije koja je kriva linija na elipsoidu.
library(sf)
options(digits = 12)
= st_as_sfc("POINT(20.455727 44.800153)", crs = 4326)
bg = st_as_sfc("POINT(139.767118 35.679207)", crs = 4326)
tk
bgXYZ = st_transform(bg, "+proj=cart +ellps=WGS84"))
(# Geometry set for 1 feature
# Geometry type: POINT
# Dimension: XYZ
# Bounding box: xmin: 4247411.12991 ymin: 1584302.22106 xmax: 4247411.12991 ymax: 1584302.22106
# z_range: zmin: 4471616.94533 zmax: 4471616.94533
# Projected CRS: +proj=cart +ellps=WGS84
# POINT Z (4247411.12991 1584302.22106 4471616.94...
tkXYZ = st_transform(tk, "+proj=cart +ellps=WGS84"))
(# Geometry set for 1 feature
# Geometry type: POINT
# Dimension: XYZ
# Bounding box: xmin: -3959765.51423 ymin: 3350158.57583 xmax: -3959765.51423 ymax: 3350158.57583
# z_range: zmin: 3699337.17349 zmax: 3699337.17349
# Projected CRS: +proj=cart +ellps=WGS84
# POINT Z (-3959765.51423 3350158.57583 3699337.1...
= as.numeric(bgXYZ[[1]]) - as.numeric(tkXYZ[[1]])
dXYZ
= sqrt(dXYZ[1]^2 +dXYZ[2]^2 +dXYZ[3]^2)
d
round(d,2) #m
# [1] 8430445.61
round(d/1000,2) #km
# [1] 8430.45
Koristeći s2
(Dunnington, Pebesma, and Rubak 2023) paket sračunati površinu kopnenih masa i pokrivenost Zemlje morima i okeanima. Sve sračunate površine su površine na elipsoidu, ne u projekciji.
options(digits = 12)
library(sf)
library(s2)
# Warning: package 's2' was built under R version 4.2.3
# preuzmimo poligone ili multipoligone granica svih država iz s2 paketa
= s2::s2_data_countries()
co plot(co)
head(co)
# <geodesic s2_geography[6] with CRS=OGC:CRS84>
# [1] POLYGON ((61.2108171 35.6500723, 60.8031934 34.4041019, 60.5284298 33.676446, 60.9637004 33.5288323, 60.5360779 32.9812688...
# [2] MULTIPOLYGON (((16.3265284 -5.8774704, 13.3755974 -5.8642412, 13.0248694 -5.9843889, 12.7351713 -5.9656821, 12.3224317 -6.1000925...
# [3] POLYGON ((20.5902474 41.8554042, 20.52295 42.21787, 20.2837545 42.3202595, 20.0707 42.58863, 19.8016134 42.5000935...
# [4] POLYGON ((51.5795187 24.2454971, 51.6177076 24.0142193, 52.0007333 23.0011545, 55.006803 22.4969475, 55.2083411 22.70833...
# [5] MULTIPOLYGON (((-65.5 -55.2, -65.05 -54.7, -66.45 -54.45, -67.75 -53.85, -68.25 -53.1...
# [6] POLYGON ((43.5827458 41.0921433, 43.7526579 40.7402009, 43.6564364 40.253564, 44.4000086 40.0050003, 44.7939897 39.7130026...
# sračunati površinu celu kopnenu masu
# napravimo prvo uniju svih država
= s2_union_agg(co)
kopno
plot(kopno)
# km2
s2_area(kopno) / 1000000
# [1] 147255540.467
# sračunati odnos okeana i cele površine
= as_s2_geography(TRUE) #ceo elipsoid
g = s2_difference(g, kopno) # okeani
okeani
s2_area(okeani) / s2_area(g)
# [1] 0.711301048574