• <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>

            我希望你是我獨家記憶

            一段永遠封存的記憶,隨風而去
            posts - 263, comments - 31, trackbacks - 0, articles - 3
               :: 首頁 :: 新隨筆 ::  :: 聚合  :: 管理

            google map api 編碼折線算法

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

            今天用C#寫了google map api 編碼折線算法,C#用的很不習慣,感覺還是C++的好用,中文的翻譯讓我很難讀懂,如果有錯誤,請指正

            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             //獲得絕對值
             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             //獲得二進制
             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             //如果是負數 -- 取反加1
             38             if ( source < 0 )
             39             {
             40                 //Console.WriteLine( "負數 -- 取反加一" );
             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             //變換二進制值
             75             binstring2.Append( "0" ) ;
             76             //Console.WriteLine( binstring2 ) ;
             77 
             78             //如果原來是負數 -- 對編碼求反
             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( "負數 -- 對編碼求反" ) ;
             88                 //Console.WriteLine( binstring2 ) ;
             89             }
             90 
             91             //從右側開始五五分組
             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 }
            日本一区精品久久久久影院| 999久久久免费国产精品播放| 欧美与黑人午夜性猛交久久久| 日本高清无卡码一区二区久久 | 亚洲中文字幕无码久久2020 | 亚洲嫩草影院久久精品| 久久精品国产精品亚洲| 狠狠色丁香久久婷婷综合| 精品久久久久久久| 色播久久人人爽人人爽人人片AV | 久久婷婷五月综合色99啪ak| 久久婷婷五月综合97色| 久久亚洲天堂| 久久综合久久综合久久| 伊人久久大香线蕉av不卡| 精品久久人人妻人人做精品| 久久综合给合久久狠狠狠97色| 久久www免费人成看国产片| 久久精品国产亚洲AV麻豆网站| 热综合一本伊人久久精品| 久久精品国产半推半就| 色婷婷综合久久久久中文| 亚洲伊人久久成综合人影院| 国产A级毛片久久久精品毛片| 久久久久免费看成人影片| 波多野结衣AV无码久久一区| 久久国产成人午夜aⅴ影院| 久久香蕉一级毛片| 久久婷婷综合中文字幕| 久久九九全国免费| 久久精品成人国产午夜| 久久国产精品久久久| yellow中文字幕久久网| 久久99国产精品一区二区| 777米奇久久最新地址| 72种姿势欧美久久久久大黄蕉| 三上悠亚久久精品| 精品久久久久久成人AV| 狠狠色噜噜狠狠狠狠狠色综合久久| 国产精品久久成人影院| 国产精品熟女福利久久AV|