• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            我希望你是我獨(dú)家記憶

            一段永遠(yuǎn)封存的記憶,隨風(fēng)而去
            posts - 263, comments - 31, trackbacks - 0, articles - 3
               :: 首頁(yè) :: 新隨筆 ::  :: 聚合  :: 管理

            google map api 編碼折線算法

            Posted on 2009-08-13 17:21 Hero 閱讀(733) 評(píng)論(0)  編輯 收藏 引用

            今天用C#寫(xiě)了google map api 編碼折線算法,C#用的很不習(xí)慣,感覺(jué)還是C++的好用,中文的翻譯讓我很難讀懂,如果有錯(cuò)誤,請(qǐng)指正

            http://code.google.com/intl/zh-CN/apis/maps/documentation/polylinealgorithm.html

              1 using System;
              2 using System.Collections.Generic;
              3 using System.Text;
              4 
              5 namespace ConsoleApplication1
              6 {
              7     class Program
              8     {
              9         static string trans( double source )
             10         {
             11             //獲得絕對(duì)值
             12             int absSource ;
             13             if ( source >= 0 )
             14             {
             15                 absSource = (int)( source * 100000 + 0.5 );
             16             }
             17             else
             18             {
             19                 absSource = (int)( source * 100000 - 0.5 ) ;
             20             }
             21             absSource = Math.Abs( absSource );
             22             //Console.WriteLine( absSource );
             23 
             24             //獲得二進(jìn)制
             25             StringBuilder binstring1 = new StringBuilder();
             26             binstring1.Append( Convert.ToString( absSource, 2 ) );
             27             //Console.WriteLine( binstring1 );
             28 
             29             StringBuilder binstring2 = new StringBuilder();
             30             for ( int i = 0; i < 32-binstring1.Length; i++ )
             31             {
             32                 binstring2.Append( "0" );
             33             }
             34             binstring2.Append( binstring1 ) ;
             35             //Console.WriteLine( binstring2 ) ;
             36 
             37             //如果是負(fù)數(shù) -- 取反加1
             38             if ( source < 0 )
             39             {
             40                 //Console.WriteLine( "負(fù)數(shù) -- 取反加一" );
             41                 for ( int i = 0; i < binstring2.Length; i++ )
             42                 {
             43                     if ( '0' == binstring2[i] ) binstring2[i] = '1';
             44                     else binstring2[i] = '0';
             45                 }
             46                 //Console.WriteLine( binstring2 ) ;
             47                 int carry = 1
             48                 //binstring2[binstring2.Length - 1]++;
             49                 for ( int i = binstring2.Length - 1 ; i >= 0; i-- )
             50                 {
             51                     while( carry > 0 )
             52                     {
             53                         carry = carry - 1 ;
             54                         binstring2[i] ++ ;
             55                     }
             56 
             57                     if ( '2' == binstring2[i] )
             58                     {
             59                         carry = 1;
             60                         binstring2[i] = '0';
             61                     }
             62                     else
             63                     {
             64                         carry = 0;
             65                     }
             66                 }
             67                 if( carry > 0 )
             68                 {
             69                     binstring2.Insert( 0'1' ) ;
             70                 }
             71                 //Console.WriteLine( binstring2 ) ;
             72             }//取反加一
             73 
             74             //變換二進(jìn)制值
             75             binstring2.Append( "0" ) ;
             76             //Console.WriteLine( binstring2 ) ;
             77 
             78             //如果原來(lái)是負(fù)數(shù) -- 對(duì)編碼求反
             79             if( source < 0 )
             80             {
             81                 forint i=0; i<binstring2.Length; i++ )
             82                 {
             83                     if'0' == binstring2[i] ) binstring2[i] = '1' ;
             84                     else binstring2[i] = '0' ;
             85                 }
             86 
             87                 //Console.WriteLine( "負(fù)數(shù) -- 對(duì)編碼求反" ) ;
             88                 //Console.WriteLine( binstring2 ) ;
             89             }
             90 
             91             //從右側(cè)開(kāi)始五五分組
             92             int[] num = new int[10] ; int cnum = 0 ;
             93             string[] strnum = new string[10] ;
             94 
             95             string binstr = binstring2.ToString();
             96             forint i=binstring2.Length, count=0; i>=0; i--, count++ )
             97             {
             98                 if5 == count || 0 == i )
             99                 {                    
            100                     //strnum[cnum++] = binstring1.ToString() ;
            101                     binstring1.Remove( 0, binstring1.Length ) ;
            102                     binstring1.Append( binstr, i, count );
            103                     strnum[cnum++= binstring1.ToString();
            104                     //Console.WriteLine( strnum[cnum-1] ) ;
            105                     count = 0;
            106                 }
            107             }
            108 
            109             //去除最后的 0 塊
            110             forint i=cnum-1; i>0; i-- )
            111             {
            112                 bool del = true ;
            113                 foreach ( char var in strnum[i] )
            114                 {
            115                     if( var != '0' ) del = false ;
            116                 }
            117 
            118                 if( del ) cnum-- ;
            119                 else break ;
            120             }
            121             //Console.WriteLine( cnum ) ;
            122             
            123 
            124             //與0x20或
            125             forint i=0; i<cnum; i++ )
            126             {
            127                 if( i != cnum - 1 )
            128                 {
            129                     num[i] = Convert.ToInt32( strnum[i], 2 ) ;
            130                     num[i] = num[i] | 0x20 ;
            131                 }
            132                 else
            133                 {
            134                     num[i] = Convert.ToInt32( strnum[i], 2 ) ;
            135                 }
            136                 
            137                 num[i] += 63 ;
            138                 //Console.WriteLine( num[i] ) ;
            139             }
            140 
            141             StringBuilder restring = new StringBuilder() ;
            142             for ( int i = 0; i < cnum; i++ )
            143             {
            144                 restring.Append( Convert.ToChar( num[i] ) );
            145             }
            146 
            147             return restring.ToString();           
            148         }
            149        
            150 
            151         static void Main( string[] args )
            152         {            
            153             //string input = null ;
            154             //while ( (input = Console.ReadLine().Trim().ToUpper() ) != "Q" )
            155             //{
            156             //    double x = Convert.ToDouble( input.Trim() );
            157             //   Console.WriteLine( trans( x ) );
            158             //}
            159 
            160             Console.WriteLine( trans(38.5) );
            161             Console.WriteLine( trans(-120.2) );
            162             Console.WriteLine( trans( 40.7-38.5 ) );
            163             Console.WriteLine( trans( -120.95 - (-120.2) ) );
            164             Console.WriteLine( trans( 43.252-40.7 ) );
            165             Console.WriteLine( trans( -126.453-(-120.95) ) );
            166         }
            167     }
            168 }

            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            亚洲国产天堂久久综合| 99久久成人国产精品免费| 久久婷婷久久一区二区三区| 国产成人精品久久一区二区三区 | 日韩亚洲欧美久久久www综合网 | 亚洲狠狠婷婷综合久久蜜芽| 久久久久人妻精品一区二区三区| 99久久久国产精品免费无卡顿| 免费精品99久久国产综合精品| 久久精品国产一区二区电影| 国产69精品久久久久久人妻精品| 精品久久久无码人妻中文字幕豆芽| 国産精品久久久久久久| 伊人久久综合无码成人网| 国産精品久久久久久久| 亚洲AV无码久久精品狠狠爱浪潮| 亚洲嫩草影院久久精品| 精品一二三区久久aaa片| 日韩精品国产自在久久现线拍| 亚洲精品乱码久久久久久蜜桃不卡| 久久久久九国产精品| 99久久精品国内| 久久精品亚洲中文字幕无码麻豆| 日本精品久久久久影院日本| www.久久热| 久久66热人妻偷产精品9| 久久无码专区国产精品发布| 亚洲国产精品婷婷久久| 久久精品视频网| 国产精品岛国久久久久| 精品久久久久久亚洲精品| A级毛片无码久久精品免费| 久久青青色综合| 久久无码中文字幕东京热| 亚洲人成电影网站久久| 亚洲一区精品伊人久久伊人 | 久久高清一级毛片| 国产无套内射久久久国产| 国产91久久综合| 久久精品免费网站网| 久久国产综合精品五月天|