根据经纬度计算图幅号

来源:互联网 发布:linux magic number 编辑:程序博客网 时间:2024/05/22 17:17
最近项目中需要一个使用经纬度计算图幅号的功能,在网上找了一个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; }}}

0 0