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}