code wiki / _hdl_build / nx_geo_webmerc_gate.nx
nx_geo_webmerc_gate.nx source
↩ module page · 56 lines · 2812 B
1// nx_geo_webmerc_gate.nx -- GATE for GEO-019b Web-Mercator tiles. Proves the projection against known
2// slippy-tile quadrants AND that it genuinely DIFFERS from the geodetic GEO-019 grid:
3// z1 (lat 45, lon -90) -> tile (0,0) [NW quadrant]
4// z1 (lat -45, lon 90) -> tile (1,1) [SE quadrant]
5// z2 (lat 60, lon -45) -> Web-Mercator tile_y = 1, while GEODETIC tile_y = 0 -> they DIFFER,
6// confirming this is the Mercator projection (not the plate-carree grid)
7//
8// Evidence -> knowledge/status/geo_webmerc.log (GEOWEBMERCGATE authored=organ ... verdict=GREEN).
9// license_tier: ORIGINAL
10import "nx_geo_webmerc.nx"
11import "nx_geo_tiles.nx"
12import "nx_syscalls.nx"
13
14const GW_LOG: *u8 = "knowledge/status/geo_webmerc.log"
15
16func gw_w(fd: i64, s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(fd, s, n); return 0 }
17func gw_wn(fd: i64, v: i64) -> i64 { let bb: *u8 = sys_mmap(28); var m: i64=v; if m<0 {m=0-m; sys_write(fd,"-" as *u8,1)}; let t: *u8 = sys_mmap(28); var k: i64=0; if m==0 {t[0]=48;k=1}; while m>0 {t[k]=(48+(m%10)) as u8; m=m/10; k=k+1}; var i: i64=0; while i<k {bb[i]=t[k-1-i]; i=i+1}; sys_write(fd, bb, k); return 0 }
18
19func gw_emit(fd: i64, ax: i64, ay: i64, bx: i64, by: i64, mty: i64, gty: i64, ok: i64) -> i64 {
20 gw_w(fd, "GEOWEBMERCGATE authored=organ proj=epsg3857 nw_z1_tx=" as *u8); gw_wn(fd, ax)
21 gw_w(fd, " nw_z1_ty=" as *u8); gw_wn(fd, ay)
22 gw_w(fd, " se_z1_tx=" as *u8); gw_wn(fd, bx)
23 gw_w(fd, " se_z1_ty=" as *u8); gw_wn(fd, by)
24 gw_w(fd, " merc_z2lat60_ty=" as *u8); gw_wn(fd, mty)
25 gw_w(fd, " geodetic_z2lat60_ty=" as *u8); gw_wn(fd, gty)
26 if ok == 1 { gw_w(fd, " verdict=GREEN\n" as *u8) } else { gw_w(fd, " verdict=RED\n" as *u8) }
27 return 0
28}
29
30func main() -> i64 {
31 let a: *i64 = sys_mmap(16) as *i64
32 geo_webmerc_tile(1, 45000000, 0 - 90000000, a) // -> (0,0)
33 let b: *i64 = sys_mmap(16) as *i64
34 geo_webmerc_tile(1, 0 - 45000000, 90000000, b) // -> (1,1)
35
36 let m2: *i64 = sys_mmap(16) as *i64
37 geo_webmerc_tile(2, 60000000, 0 - 45000000, m2) // Web-Mercator ty = 1
38 let g2: *i64 = sys_mmap(16) as *i64
39 geo_point_tile(2, 60000000, 0 - 45000000, g2) // geodetic ty = 0
40
41 var ok: i64 = 1
42 if a[0] != 0 { ok = 0 }
43 if a[1] != 0 { ok = 0 }
44 if b[0] != 1 { ok = 0 }
45 if b[1] != 1 { ok = 0 }
46 if m2[1] != 1 { ok = 0 } // mercator
47 if g2[1] != 0 { ok = 0 } // geodetic
48 if m2[1] == g2[1] { ok = 0 } // they MUST differ (proves real Mercator)
49
50 gw_emit(1, a[0], a[1], b[0], b[1], m2[1], g2[1], ok)
51 let lf: i64 = sys_openat_append(GW_LOG, 420)
52 if lf >= 0 { gw_emit(lf, a[0], a[1], b[0], b[1], m2[1], g2[1], ok); sys_close(lf) }
53
54 if ok == 1 { return 0 }
55 return 1
56}