<script language="javascript">

  var EncodeKey = 699;
  //加密密钥,数值型;可以每个客户都不一样
  
  function Decode(encodedcoord)
  //解密坐标
  {
    var MaxNumPos=-1;
    //最大数位的位置
    var MaxNum=0;
    //最大数
    var Org='';
    //出除修改后的原始值
    for(var i=0;i<encodedcoord.length;i++)
    {
      var Tmp=parseInt(encodedcoord.charAt(i),36)-10;
      if(Tmp>=10)
        Tmp=Tmp-7;
      Org+=(Tmp).toString(36);
      if(Tmp>MaxNum)
      {
        MaxNumPos=i;
        MaxNum=Tmp
      }
      //获取最大数及其位置
    } 
    var Diff=parseInt(Org.substring(0,MaxNumPos),16);
    //纬度-经度
     var Sum=parseInt(Org.substring(MaxNumPos+1),16);
     //纬度+经度
     var Coord=new Array();
     //坐标
     Coord[0]=(Diff+Sum-parseInt(EncodeKey))/2;
     //纬度
     Coord[1]=(Sum-Coord[0])/100000.0;
     //经度
     Coord[0]/=100000.0;
     return Coord
  };
  //解密坐标的实例
  document.write('这是IJSVSDZVJACRV解密后的值:<br>'+Decode('IJSVSDZVJACRV')+'<br><br>');
  
  //加密坐标
  function Encode(Lat,Lng)
    {
        var BLat=parseInt(parseFloat(Lat)*100000);
        // 纬度
        var BLng=parseInt(parseFloat(Lng)*100000);
        // 经度
        var Diff=(BLng-BLat+parseInt(EncodeKey)).toString(16); //之差
        var Sum=(BLng+BLat).toString(16);  //之和
        var EncodedCoord=''; //编码后的坐标
        for(var i=0;i<Diff.length;i++)
        {
            var TmpInt=parseInt(Diff.charAt(i),16);
             EncodedCoord+=(((TmpInt>=10)?(TmpInt+7):TmpInt)+10).toString(36)
        }
        //对差进行36位编码,大于10的+7,再全部加10
        EncodedCoord+='z';
        //加上分隔符
        for(var i=0;i<Sum.length;i++)
        {
            var TmpInt=parseInt(Sum.charAt(i),16);
             EncodedCoord+=(((TmpInt>=10)?(TmpInt+7):TmpInt)+10).toString(36)
        }
        //对和进行36位编码
        return EncodedCoord.toUpperCase()
     }
     //加密实例
     document.write('这是31.2336597442627,121.472076416016加密后的值:<br>'+Encode('31.2336597442627','121.472076416016'));   
</script>

posted on 2008-04-09 11:46  Alic  阅读(2265)  评论(2编辑  收藏  举报