根据经纬度计算图幅号

最近项目中需要一个使用经纬度计算图幅号的功能,在网上找了一个C语言版的代码,翻译成了ActionScript。
package map
{
	public class MapSheetTool
	{
		private static const LatCharArray:Array = ['A','B','C','D','E','F','G','H','I','J','K'
											,'L','M','N','O','P','Q','R','S','T','U','V'];
		private static const scaleArray:Array    = [1000000,500000,250000,100000,50000,25000,10000,5000]; // 图幅比例尺   
		private static const  latDArray:Array    = [14400,7200,3600,1200,600,300,150,75]; // 图幅纬差,单位秒    
		private static const  lonDArray:Array    = [21600,10800,5400,1800,900,450,225,112.5]; // 图幅经差单位秒   
		public static const SCALE_1000000:Number= 0;
		public static const SCALE_500000:Number = 1;
		public static const SCALE_250000:Number = 2;
		public static const SCALE_100000:Number = 3;
		public static const SCALE_50000:Number  = 4;
		public static const SCALE_25000:Number  = 5;
		public static const SCALE_10000:Number  = 6;
		public static const SCALE_5000:Number   = 7;
		public function MapSheetTool()
		{
		}
		
		 /**
		 *  @param lat:纬度  10进制表示
		 *  @param lon:经度  10进制表示
		 *  @param scaleID  比例尺编号(0-7)  可以使用 MapSheet.SCALE_1000000,MapSheet.SCALE_500000...输入
		  */
		public static function getSheetNumber(lat:Number,lon:Number,scaleID:Number):String{
		  	var f:Number = lat*3600;//以秒表示的纬度
		  	var r:Number = lon*3600;//以秒表示的经度
			var MapNo:Array = new Array(10);
			var numString:String = "";
			var a:int = f/(4*3600);     //纬度序号
			var b:int = r/(6*3600)+31;     //经度序号  
			var c:int = (int)(4*3600/latDArray[scaleID])-(int)((f%(4*3600))/latDArray[scaleID]); //在1:1000000万图幅中的序号 纬度 
			var d:int = (int)((r%(6*3600))/lonDArray[scaleID])+1;   //在1:1000000万图幅中的序号  经度
			
			numString += LatCharArray[a];
			numString += ""+b;
			
			if(scaleID==0){    //1:1000000万
				return numString;    
			}      
			numString +=LatCharArray[scaleID];
			if(c<10){          
				numString+="00"; 
				numString+=c; 
			}else if(c<100) 
			{        
				numString +="0";
				numString+=c; 
			}    
			else if(c<1000)
			{          
				numString += c; 
			}else{      
				return "";    
			}      
			if(d<10){         
				numString +="00";      
				numString +=d; 
			}else if(d<100) {       
				numString +="0"; 
				numString+=d; 
			}else if(d<1000){         
				numString +=d;   
			}else{      
				return ""; 
			}        
			return numString; 
		}
	}
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值