Jamers Posted February 1, 2015 Report Share Posted February 1, 2015 1980年4月英国伦敦郊外之 Maidenhead第一区会议时议讨结果建议采6文字法前面两个英文字母,中间两个数字,再后面两个英文字母如此报读不易错乱,且可只用前面四文字差在精度。第一字:自西经180°往东每20°经度一字母代,A-R东经100°-120°=O,120-140=P第二字:自南纬90°往北每10°纬度一个字母代 A-R北纬 10°-20°=K,20°-30°=L第三字:经度每20°内以0-9数字代,每2°一数字东经116°-118°=8,118°-120°=9第四字:纬度每10°内以0-9数字代,每1°一数字北纬20°-21°=0,21°-22°=1第五字:经度2°即60'X2°=120'以24个字母代,每5'一个字母,自120°-122°以每5分一个字母A-X第六字:纬度1°即60'以24个字母代,每2'30"一个字母,自A-X共24个字母每个字母2分30秒赤道一周分成360°,400-75.04KM÷360°=111.31955公里÷60'=1.8553258KM。注:赤道半径:6378.14KM,极半径6356.755公里,光速299792.458KM/S(定义值)÷60"=30.92公尺赤道附近20°X10°前两英文字母约(N/S)1110公里X(E,W)2220公里之区域(东西两千,南北壹千公里。第二组数字约经2°纬1°即110X220公里之范围,约100X200公里第三组英文字纬约经5'纬2'30"即9.277公里X4.64公里之区域约10X5公里,但纬度高其东西间距即缩减成为南北4.6公里不变,东西于25°(台北市)减成8.41公里,35°减成7.61公里(大阪),45°时减成6.57公里(哈尔滨)55°5.33公里,欧洲约50°=>5.98公里(东西宽),美国约40°=>7.12公里(东西宽)(南北极时密集0KM) 如张家港的经纬度为:31 52‘ 31.81“N 120 33’ 21.00"E 转换成GRID坐标为:PM01GV 31.87550277777778,120.55583333333333 第一字:120.55/20=6..0.55=7 东经加9 7+9=16 第16个字母为P 第二字:31.87/10=3..1.87=4 北纬加9 4+9=13 第13个字母为M 第三字:120.55%2=0.55=1-1=0 取2的余数 0 第四字:31.875%1=0.875 = 1 取1的余数 1 第五字:120.55%2=0.55*60=33/5=6..3=7 第7个字母为G 第六字:31.8755%1=0.8755*60=52.53/2.5=21..0.03=22 第22个字母为V Link to comment Share on other sites More sharing options...
Jamers Posted February 1, 2015 Author Report Share Posted February 1, 2015 附上相应javascript算法,下列内容仅供参考算法可能无法运行,如需完整代码请移步最下方链接: //经纬度转换为GRID字符串 function deg2loc(x, y, lor, lar) { if(isNaN(x) || isNaN(y)) { alert("Numerical values\nwith decimal point only!\n"); return(false); } if(x>180 || y>90) { alert("Latitude max. 90\nLongitude max. 180"); return(false); } if(x==180) x=179.9999999999999; if(y== 90) y= 89.99999999999999; if(lor) // westliche Hemisphaere? x = -x; x += 180; x /= 2; x_l = letters.charAt(Math.floor(x/10)); x_m = Math.floor(x%10); x_r = letters.charAt(Math.floor(24*(x%1))); if(lar) // suedliche Gefilde? y = -y; y += 90; y_l = letters.charAt(Math.floor(y/10)); y_m = Math.floor(y%10); y_r = letters.charAt(Math.floor(24*(y%1))); return(true); } //GRID字符串转换为经纬度 function loc2deg(loc) // locator to degrees { var ff; if(loc.length == 4) { loc +="MM"; ff = false; } else ff = true; if(loc.length != 6) { alert("The locator must have\n4 chars i.e. JN68 or jn59\nor 6 chars i.e. JN68RN or jn59eg"); return(false); } x_l = letters.indexOf(loc.charAt(0)); // Laenge berechnen x_m = parseInt(loc.charAt(2)); x_r = letters.indexOf(loc.charAt(4)); y_l = letters.indexOf(loc.charAt(1)); // Breite berechnen y_m = parseInt(loc.charAt(3)); y_r = letters.indexOf(loc.charAt(5)); if(x_l<0 || x_l>17 || y_l<0 || y_l>17 || isNaN(x_m) || isNaN(y_m) || x_r<0 || x_r>23 || y_r<0 || y_r>23) { alert("The locator must be\nin the range of\nAA00AA .... RR99XX"); return(false); } x = x_l*10 + x_m + x_r/24; if(ff) x = x + 1/48; x *= 2; x -= 180; if(x < 0) // western hemisphere? long_rad = true; else long_rad = false; y = y_l*10 + y_m + y_r/24; if(ff) y = y + 1/48; y -= 90; if(y < 0) // down under? lat_rad = true; else lat_rad = false; return(true); } 完整调用及测试:http://home.arcor.de/waldemar.kebsch/The_Makrothen_Contest/fmaidenhead.html 完整核心js文件:http://home.arcor.de/waldemar.kebsch/The_Makrothen_Contest/fmaidenhead.js Link to comment Share on other sites More sharing options...
Recommended Posts
Please sign in to comment
You will be able to leave a comment after signing in
Sign In Now