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
- private void GetInfo()
- {
- WebClient w = new WebClient();
-
- NameValueCollection VarPost = new NameValueCollection();
-
- VarPost.Add("lng", textBox1.Text.Trim());
- //将textBox1中的数据变为用a标识的參数。并用POST传值方式传给网页
-
- VarPost.Add("lat", textBox2.Text.Trim());
- VarPost.Add("__VIEWSTATE", "/wEPDwULLTIwNzQwMDQ3MTVkZKHa1lpe/9+nyHf2xzOHEEt1eGFB");
- VarPost.Add("__EVENTVALIDATION", "/wEWBAL65/7NAgKL1Y7VCgKKhszBCQKM54rGBglQFPnfb0garkdt736MDNGGoKlX");
- VarPost.Add("Button1","经纬度定位");
- //将參数列表VarPost中的所有数据用POST传值的方式传给http://申请好的域名或用IIs配置好的地址/Default.aspx,
-
- //并将从网页上返回的数据以字节流存放到byRemoteInfo中)(注:IIS配置的时候经常没配置好会提示错误,嘿)
- string url = <a href="http://www">http://www.</a>网址;
-
- try
- {
- byte[] byRemoteInfo = w.UploadValues(new Uri(url), "post", VarPost);
-
- string sRemoteInfo = System.Text.Encoding.UTF8.GetString(byRemoteInfo);
-
- //StreamReader sr = new StreamReader(@"C:\temp.txt", Encoding.Default);
- //string html = sr.ReadToEnd();
- foreach (Match m in Regex.Matches(sRemoteInfo, @"(?<=markpoint\().*(?=,')"))
- {
- string[] splitstring = m.Value.ToString().Split(',');
- label1.Text=splitstring[0]+" "+splitstring[1];
- // webBrowser_map.Document.InvokeScript("markpoint", new Object[] {});
- }
-
- using (StreamWriter sw = new StreamWriter("TestFile.txt"))
- {
- // Add some text to the file.
- sw.Write(sRemoteInfo);
-
- }
- }
- catch (WebException ex)
- {
- label1.Text = ex.ToString();
- }
-
- }
或许你们会对这一段代码产生疑问:浏览器
- VarPost.Add("lng", textBox1.Text.Trim());
- //将textBox1中的数据变为用a标识的參数,并用POST传值方式传给网页
-
- VarPost.Add("lat", textBox2.Text.Trim());
- VarPost.Add("__VIEWSTATE", "/wEPDwULLTIwNzQwMDQ3MTVkZKHa1lpe/9+nyHf2xzOHEEt1eGFB");
- VarPost.Add("__EVENTVALIDATION", "/wEWBAL65/7NAgKL1Y7VCgKKhszBCQKM54rGBglQFPnfb0garkdt736MDNGGoKlX");
- 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
- System.IO.FileInfo file = new System.IO.FileInfo("../../GoogleMap.htm");
- // WebBrowser控件显示的网页路径
- webBrowser_map.Url = new Uri(file.FullName);
- // 将当前类设置为可由脚本訪问
- webBrowser_map.ObjectForScripting = this;
4 c#引用c++编写的Dll时。当c++中的函数声明为:..int add(int& a,int& b);时
应该在.cs文件里做例如如下处理:
- class RectifyTest
- {
- [DllImport("..\\..\\Lib\\RectifyDll.dll")]
- public static extern int Rectify(ref float lng, ref float lan);
- }
5 VC2005 中char 转换 LPCWSTR 问题
网上很是多code都是用VC6.0写成的。用VC2005转换后,再编译时经常会遇到字符串转换的问题,搞得你很是郁闷呀。
如MessageBox函数定义一个 char ch[10]; 给ch 写进字符而后调用 MessageBox((LPCWSTR)ch); 编译是没问题,但是显示出来的是乱码,LPCWSTR 类型是多少位的啊?在VC6.0中 可以这样使用 MessageBox(ch); 无须强制转换。
但在2005中就不行,必须要强制转换后才干经过编译。但转换后显示的又是乱码,很是让人郁闷呀。
在windows平台中对LPCTSTR 有例如如下定义
- typedef LPCTSTR LPTSTR ;
- #ifndef _UNICODE
- typedef TCHAR char;
- #else
- typedef TCHAR wchar_t;
- #endif
解决方式例如如下:
在项目属性-->配置属性-->常规-->字符集, 将其换为:使用多字节字符集,编译就经过了。