Jump to content
新域网络技术论坛

世界分区方格(Grid Square)定位法


Jamers
 Share

Recommended Posts

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

附上相应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

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
 Share

×
×
  • Create New...