 |
pavi
0.0
Map Path Viewer
|
|
Go to the documentation of this file.
10 DECLARE FUNCTION atanh CDECL ALIAS"atanh"(
BYVAL AS DOUBLE)
AS DOUBLE
11 DECLARE FUNCTION tanh CDECL ALIAS"tanh"(
BYVAL AS DOUBLE)
AS DOUBLE
18 #INCLUDE ONCE "datetime.bi"
30 IF _V_ > Mx##_V_
THEN Mx##_V_ = _V_
ELSE IF _V_ < Mn##_V_
THEN Mn##_V_ = _V_
43 FUNCTION lat2pixel(
BYVAL V
AS float,
BYVAL Z
AS LONG)
AS LONG
59 FUNCTION lon2pixel(
BYVAL V
AS float,
BYVAL Z
AS LONG)
AS LONG
60 VAR x = V *
TILESIZE * (1
SHL Z) / PIx2
75 FUNCTION pixel2lon(
BYVAL Z
AS long,
BYVAL X
AS LONG)
AS float
76 RETURN ((X - (
EXP(LN2 * Z) *
TILESIZEd2)) * PIx2) _
91 FUNCTION pixel2lat(
BYVAL Z
AS long,
BYVAL Y
AS LONG)
AS float
92 VAR lat_m = ((
EXP(LN2 * Z) *
TILESIZEd2 - Y) * PIx2) _
94 RETURN ASIN(
tanh(lat_m))
98 #DEFINE LOG2(_X_)
LOG(_X_) / LN2
100 #DEFINE MIN(V1, V2)
IIF(V1 > V2, V2, V1)
120 ,
BYVAL La0
AS float _
121 ,
BYVAL La1
AS float _
122 ,
BYVAL Lo0
AS float _
123 ,
BYVAL Lo1
AS float)
AS LONG
124 DIM AS DOUBLE dlon = Lo1 - Lo0
125 dlon =
IIF(dlon, LOG2(
ABS(W * PIx2 /
TILESIZE / dlon)), 20.)
126 DIM AS DOUBLE dlat =
atanh(
SIN(La1)) -
atanh(
SIN(La0))
127 dlat =
IIF(dlat, LOG2(
ABS(H * PIx2 /
TILESIZE / dlat)), 20.)
128 RETURN MIN(
INT(dlon),
INT(dlat))
145 CONSTRUCTOR TrackLoader(
BYVAL Fnam
AS CONST ZSTRING PTR)
146 STATIC AS UINTEGER dile =
CAST(
UINTEGER, -1)
SHR 1
147 IF 0 = Fnam
ORELSE Fnam[0] = 0
THEN Errr = @
"no file name" :
EXIT CONSTRUCTOR
149 IF OPEN(*Fnam
FOR INPUT AS fnr)
THEN Errr = @
"open failed" :
EXIT CONSTRUCTOR
151 VAR want =
LOF(fnr) :
IF 0 = want
THEN CLOSE #fnr : Errr = @
"no contents" :
EXIT CONSTRUCTOR
152 IF want = dile
THEN CLOSE #fnr : Errr = @
"directory" :
EXIT CONSTRUCTOR
153 Buff =
ALLOCATE(want+1) :
IF 0 = Buff
THEN CLOSE #fnr : Errr = @
"out of memory" :
EXIT CONSTRUCTOR
154 GET #fnr, ,*Buff, want, Byt
158 IF UCASE(
RIGHT(*Fnam, 4)) =
".GPX" THEN
159 WITH TYPE<GPX>(@
THIS)
162 & .Trk &
" track[s] (" & .Seg &
" segments[s]), " _
163 & .Pnt &
" point[s] (" & .Ext & !
" extension[s])\n\n" _
164 & .TiX + .LoX + .LaX + .ElX + .SpX + .AnX &
" err/miss: " _
165 & .TiX &
" <time>, " _
166 & .LoX &
" <lon>, " _
167 & .LaX &
" <lat>, " _
168 & .ElX &
" <ele>, " _
169 & .SpX &
" <g_spd>, " _
173 WITH TYPE<NMEA>(@
THIS)
175 " bytes (file/mem): " & Byt &
"/" & Siz &
": " _
176 & .Lin &
" lines, " & (Siz \
SIZEOF(TrP)) &
" points (" _
177 & .Enr &
" error[s])"
180 IF Siz <= 0
THEN Errr = @
"no track points" :
EXIT CONSTRUCTOR
181 VAR x =
REALLOCATE(Buff, Siz) :
IF x
THEN Buff = x
183 Az = Siz \
SIZEOF(TrP) - 1
184 V =
CAST(TrP
PTR, Buff)
187 Mx = V[0] : Mx.Tim = V[Az].Tim
188 FOR i
AS INTEGER = 1
TO Az
214 FUNCTION TrackLoader.Pixel(
BYVAL X
AS LONG,
BYVAL Y
AS LONG,
BYVAL Z
AS LONG)
AS BYTE
215 IF 0 = Az
THEN RETURN 1
217 IF Co_X = X
ANDALSO Co_Y = Y
THEN RETURN 0
218 VAR dx = Co_X - X, dy = Co_Y - Y
219 FOR i
AS INTEGER = 0
TO Az
225 FOR i
AS INTEGER = 0
TO Az
248 SELECT CASE AS CONST Typ
251 CASE 1 : st = 1 : e = Az
252 CASE 2 : Di *= 5 : st = 1 : e = Az
253 CASE ELSE :
RETURN Cur
255 FOR i
AS LONG = Cur + st
TO e
STEP st
256 IF Dist(Cur, i) > Di
THEN RETURN i
271 VAR a =
CAST(
DOUBLE, V[0].Spd)
272 FOR i
AS INTEGER = 1
TO Az
289 IF Az < 1
THEN RETURN NaN
291 FOR i
AS INTEGER = 2
TO Az
308 IF P0 > Az
ORELSE P1 > Az
THEN RETURN NaN
309 VAR r0 = V[P0].Ele + ERA , r1 = V[P1].Ele + ERA _
310 , a0 =
COS(V[P0].Lat) * r0, a1 =
COS(V[P1].Lat) * r1 _
311 , dx =
COS(V[P0].Lon) * a0 -
COS(V[P1].Lon) * a1 _
312 , dy =
SIN(V[P0].Lon) * a0 -
SIN(V[P1].Lon) * a1 _
313 , dz =
SIN(V[P0].Lat) * r0 -
SIN(V[P1].Lat) * r1
314 RETURN SQR(dx*dx + dy*dy + dz*dz)
330 VAR a = V[0].Lat - Lat, o = V[0].Lon - Lon, d =
SQR(a*a + o*o)
332 FOR i
AS LONG = 1
TO Az
333 a = V[i].Lat - Lat : o = V[i].Lon - Lon :
VAR x =
SQR(a*a + o*o)
334 IF x < d
THEN d = x : Tmp = i
350 UsLo = .5 * (Mx.Lon + Mn.Lon)
351 UsLa = .5 * (Mx.Lat + Mn.Lat)
352 UsZo =
latlon2zoom(W, H, Mn.Lat, Mx.Lat, Mn.Lon, Mx.Lon)
TrackLoader(BYVAL_AS_CONST_ZSTRING_PTR)
CTOR loading track data.
FUNCTION_AS_LONG SkipOut(BYVAL_AS_LONG Typ, BYVAL_AS_float Di)
Compute exit of cloud.
FUNCTION_AS_BYTE Pixel(BYVAL_AS_LONG, BYVAL_AS_LONG, BYVAL_AS_LONG)
Compute pixel values for given center and zoom.
Header code for GPX parser.
FUNCTION_CDECL_AS_LONG latlon2zoom(BYVAL_AS_LONG W, BYVAL_AS_LONG H, BYVAL_AS_float La0, BYVAL_AS_float La1, BYVAL_AS_float Lo0, BYVAL_AS_float Lo1)
Evaluate the matching zoom level for BBox.
FUNCTION_AS_LONG lon2pixel(BYVAL_AS_float V, BYVAL_AS_LONG Z)
Transform world longitude to map X-pixel.
const LONG TILESIZE
size of tile used in osm_gps_map
FUNCTION_AS_float pixel2lon(BYVAL_AS_long Z, BYVAL_AS_LONG X)
Transform map X-pixel to world longitude.
Header code for NMEA parser.
FUNCTION_AS_float Nearest(BYVAL_AS_float, BYVAL_AS_float)
Find point nearest to the given [radians] position.
FUNCTION_CDECL_ALIAS_AS_DOUBLE atanh(BYVAL_AS_DOUBLE)
SUB MapCenter(BYVAL_AS_LONG W, BYVAL_AS_LONG H)
Compute center and zoom to plot complete track.
FUNCTION_AS_DOUBLE Dist(BYVAL_AS_ULONG, BYVAL_AS_ULONG)
Compute distance between two points.
FUNCTION_CDECL_ALIAS_AS_DOUBLE tanh(BYVAL_AS_DOUBLE)
const LONG TILESIZEd2
half size
PROPERTY_AS_float ASpd()
Compute the speed avarage.
PROPERTY_AS_float LTrk()
Compute track length.
FUNCTION_AS_float pixel2lat(BYVAL_AS_long Z, BYVAL_AS_LONG Y)
Transform map Y-pixel to world latitude.
FUNCTION_AS_LONG lat2pixel(BYVAL_AS_float V, BYVAL_AS_LONG Z)
Transform world latitude to map Y-pixel.