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


            久久精品国产亚洲7777| 韩国无遮挡三级久久| 热综合一本伊人久久精品| 亚洲精品成人网久久久久久| 伊人 久久 精品| 久久91综合国产91久久精品| 蜜桃麻豆www久久国产精品| 怡红院日本一道日本久久| 久久99精品久久久久久不卡| 2021久久精品免费观看| 久久99中文字幕久久| 伊人久久大香线蕉综合网站| 国产精品99久久精品| 色综合久久中文字幕综合网| 久久精品国产亚洲AV电影 | 亚洲国产精品热久久| 久久伊人五月丁香狠狠色| 精品久久久久中文字| 久久久精品人妻一区二区三区蜜桃 | 国产亚洲精午夜久久久久久 | 久久综合综合久久97色| 狠狠精品久久久无码中文字幕| 久久精品这里热有精品| 亚洲αv久久久噜噜噜噜噜| 色老头网站久久网| 伊人色综合久久天天网| 久久精品国产精品亚洲人人 | 久久免费高清视频| 性欧美大战久久久久久久久 | 热re99久久精品国产99热| 亚洲愉拍99热成人精品热久久| 久久综合九色综合久99| 久久综合精品国产一区二区三区 | 国产成年无码久久久免费| 欧美亚洲另类久久综合婷婷| 成人精品一区二区久久 | 伊色综合久久之综合久久| 久久精品国产亚洲5555| 久久影视综合亚洲| 亚洲国产成人久久综合野外| 久久久久亚洲国产|