GPS項目小結

GPS項目中涉及到的技術有地圖糾偏,js與winform c#的交互等方面:

 1   google地圖糾偏,可以私下call我...QQ(964877814)....,事實上主要因爲考慮到政治以及軍事安全的問題。因此國內的地圖存在誤差。而且不一樣地方的誤差不一樣,但是對應的計算誤差的算法不可能公開的緣故。因此僅僅能依靠一些糾偏數據來糾正。html



   糾偏數據可以本身得到,因爲地圖所謂的誤差值僅僅是:(例增長使用google map 代碼加GPS經緯度),明顯,GPS經緯度不可能出現錯誤,人家是衛星各類東東定位。商業產品...因此出錯就是在於google map與 GPS經緯度的交互後,也就是說實際在google把準確的值換成誤差後的值啦...甚至是說...那些地質測繪的廠商原本給他們的就是通過有關部門..的數據.... 因此實際上GPS+衛星地圖的這樣的定位是沒有通過誤差處理的...而假如你想得到糾偏數據..

步驟:
   比方你在珠海...
      1  而後你首先經過GPS定位裝置得到一個座標點(經緯度)point_1;
      2  在「衛星「模式下,可以在point_1處標記一個marker_1,事實上此時不存在誤差的顯示;
      3  在」地圖「模式下,可以再point_1經緯度處標記一個marker_2,嘿嘿。此時呢,就是準確的經緯度+加上誤差的不許確地圖;
      4  の...而後將模式轉變成」衛星模式「下。の...由此得到marker_2現在實際的經緯度值點point_2;の...現在咱們手上就有兩個經緯度啦。
      5  作差吧。point_2.x-point.x=dx;point_2.y-point.y=dy;...事實上這就是計算方法...循環幾回以後,可以經過什麼擬合東東的數學公式(球體上兩點等等),來計算其周圍的誤差...但是不一樣的城市甚至鎮 鄉都要取幾回值...c++

 

2  winform c#與經過方式post與server交互:web

            引入using System.Net;算法

             using System.Collections.Specialized;     c#

 代碼例如如下:windows

  1. private void GetInfo()  
  2.        {  
  3.            WebClient w = new WebClient();  
  4.   
  5.            NameValueCollection VarPost = new NameValueCollection();  
  6.   
  7.            VarPost.Add("lng", textBox1.Text.Trim());  
  8.            //將textBox1中的數據變爲用a標識的參數。並用POST傳值方式傳給網頁 ­  
  9.   
  10.            VarPost.Add("lat", textBox2.Text.Trim());  
  11.            VarPost.Add("__VIEWSTATE", "/wEPDwULLTIwNzQwMDQ3MTVkZKHa1lpe/9+nyHf2xzOHEEt1eGFB");  
  12.            VarPost.Add("__EVENTVALIDATION", "/wEWBAL65/7NAgKL1Y7VCgKKhszBCQKM54rGBglQFPnfb0garkdt736MDNGGoKlX");  
  13.            VarPost.Add("Button1","經緯度定位");   
  14.    //將參數列表VarPost中的所有數據用POST傳值的方式傳給http://申請好的域名或用IIs配置好的地址/Default.aspx,  
  15.   
  16.    //並將從網頁上返回的數據以字節流存放到byRemoteInfo中)(注:IIS配置的時候經常沒配置好會提示錯誤,嘿) ­         
  17.            string url = <a href="http://www">http://www.</a>網址;  
  18.   
  19.            try  
  20.            {  
  21.                byte[] byRemoteInfo = w.UploadValues(new Uri(url), "post", VarPost);  
  22.   
  23.                string sRemoteInfo = System.Text.Encoding.UTF8.GetString(byRemoteInfo);  
  24.   
  25.                //StreamReader sr = new StreamReader(@"C:\temp.txt", Encoding.Default);  
  26.                //string html = sr.ReadToEnd();  
  27.                foreach (Match m in Regex.Matches(sRemoteInfo, @"(?<=markpoint\().*(?=,')"))  
  28.                {  
  29.                        string[] splitstring = m.Value.ToString().Split(',');  
  30.                        label1.Text=splitstring[0]+"   "+splitstring[1];  
  31.                        // webBrowser_map.Document.InvokeScript("markpoint", new Object[] {});  
  32.                }  
  33.   
  34.                using (StreamWriter sw = new StreamWriter("TestFile.txt"))  
  35.                {  
  36.                    // Add some text to the file.  
  37.                    sw.Write(sRemoteInfo);  
  38.   
  39.                }  
  40.            }  
  41.            catch (WebException ex)  
  42.            {  
  43.                label1.Text = ex.ToString();  
  44.            }  
  45.   
  46.        }  


 或許你們會對這一段代碼產生疑問:瀏覽器

   

  1. VarPost.Add("lng", textBox1.Text.Trim());  
  2.  //將textBox1中的數據變爲用a標識的參數,並用POST傳值方式傳給網頁 ­  
  3.   
  4.  VarPost.Add("lat", textBox2.Text.Trim());  
  5.  VarPost.Add("__VIEWSTATE", "/wEPDwULLTIwNzQwMDQ3MTVkZKHa1lpe/9+nyHf2xzOHEEt1eGFB");  
  6.  VarPost.Add("__EVENTVALIDATION", "/wEWBAL65/7NAgKL1Y7VCgKKhszBCQKM54rGBglQFPnfb0garkdt736MDNGGoKlX");  
  7.  VarPost.Add("Button1","經緯度定位");   


       這個是http的requst的body部分(具體瞭解HTTP協議),能夠經過Fiddler(Fiddler是一個web調試代理。它能夠記錄所有client和server間的http請求。贊成你監視,設置斷點。甚至改動輸入輸出數據,fiddler包括了一個強大的基於事件腳本的子系統,並且可使用.net框架語言擴展。),他能夠抓取http包:安全


 

      事實上總結起來,winform c#與server交互,而winform這方事實上就是一個「http包」發送方...而server僅僅要知道這是身份就能夠。の...也就是說原本瀏覽器要辦的事。你winform來作...「http模擬」....事實上最主要知道:經過Fiddle所得的Body部分來肯定發送的數據集合+URL....(待續....) 框架

3 winform中webbrowser設置url:ide

  1. System.IO.FileInfo file = new System.IO.FileInfo("../../GoogleMap.htm");  
  2.  // WebBrowser控件顯示的網頁路徑    
  3.  webBrowser_map.Url = new Uri(file.FullName);  
  4.  // 將當前類設置爲可由腳本訪問  
  5.  webBrowser_map.ObjectForScripting = this;  

4 c#引用c++編寫的Dll時。當c++中的函數聲明爲:..int add(int& a,int& b);時

應該在.cs文件裏做例如如下處理:

  1. class RectifyTest  
  2.   {  
  3.       [DllImport("..\\..\\Lib\\RectifyDll.dll")]  
  4.       public static extern int Rectify(ref float lng, ref float lan);  
  5.   }  

5  VC2005 中char 轉換 LPCWSTR 問題

   網上很是多code都是用VC6.0寫成的。用VC2005轉換後,再編譯時經常會遇到字符串轉換的問題,搞得你很是鬱悶呀。


    如MessageBox函數定義一個 char ch[10]; 給ch 寫進字符而後調用 MessageBox((LPCWSTR)ch); 編譯是沒問題,但是顯示出來的是亂碼,LPCWSTR 類型是多少位的啊?在VC6.0中 可以這樣使用 MessageBox(ch); 無須強制轉換。


但在2005中就不行,必須要強制轉換後才幹經過編譯。但轉換後顯示的又是亂碼,很是讓人鬱悶呀。

在windows平臺中對LPCTSTR 有例如如下定義
    

  1. typedef LPCTSTR LPTSTR ;  
  2.  #ifndef _UNICODE  
  3.  typedef TCHAR char;  
  4.  #else   
  5. typedef TCHAR wchar_t;  
  6.  #endif  

解決方式例如如下:

在項目屬性-->配置屬性-->常規-->字符集, 將其換爲:使用多字節字符集,編譯就經過了。

相關文章
相關標籤/搜索