• <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
               :: 首頁 :: 新隨筆 ::  :: 聚合  :: 管理

            google map api 編碼折線算法

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

            今天用C#寫了google map api 編碼折線算法,C#用的很不習(xí)慣,感覺還是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             //獲得二進(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             //如果原來是負(fù)數(shù) -- 對編碼求反
             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ù) -- 對編碼求反" ) ;
             88                 //Console.WriteLine( binstring2 ) ;
             89             }
             90 
             91             //從右側(cè)開始五五分組
             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 }

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


            一本一本久久A久久综合精品| 一本色道久久99一综合| 99久久伊人精品综合观看| 国产成人精品久久亚洲高清不卡| 久久久久99精品成人片牛牛影视| 亚洲AV无码久久精品色欲| 日本一区精品久久久久影院| 久久久久亚洲AV无码专区首JN| 精品久久久久久亚洲精品| 色综合久久夜色精品国产 | 久久婷婷五月综合97色直播| 69SEX久久精品国产麻豆| 欧美激情精品久久久久久| 久久久久亚洲精品无码蜜桃| 狠狠色丁香久久婷婷综合蜜芽五月| 久久―日本道色综合久久| 精产国品久久一二三产区区别 | av国内精品久久久久影院| 国产精品久久久久免费a∨| 久久久久免费精品国产| 亚洲国产另类久久久精品黑人| 久久国产乱子伦精品免费午夜| 91精品国产91久久综合| 亚洲精品国产字幕久久不卡 | 色婷婷综合久久久中文字幕| 亚洲性久久久影院| 久久se精品一区精品二区国产 | 伊人久久亚洲综合影院| 日韩一区二区久久久久久| 久久精品麻豆日日躁夜夜躁| 无码人妻久久一区二区三区| 精品久久久一二三区| 色播久久人人爽人人爽人人片AV| 久久久久一本毛久久久| 久久久久人妻精品一区三寸蜜桃| 嫩草影院久久国产精品| 大香网伊人久久综合网2020| 国产精品综合久久第一页| 久久久久久亚洲精品不卡 | 免费一级做a爰片久久毛片潮| 精品免费久久久久国产一区|