GPS项目小结
2012-08-07 11:23 javaspring 阅读(423) 评论(0) 编辑 收藏 举报 GPS项目中涉及到的技术有地图纠偏,js与winform c#的交互等方面:
1 google地图纠偏,可以私下call我...QQ(964877814)....,其实主要因为考虑到政治以及军事安全的问题,所以国内的地图存在偏差,而且不同地方的偏差不同,但是相应的计算偏差的算法不可能公开的缘故,所以只能依靠一些纠偏数据来纠正。
纠偏数据可以自己获得,因为地图所谓的偏差值只是:(例加入使用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;...其实这就是计算方法...循环几次之后,可以通过什么拟合东东的数学公式(球体上两点等等),来计算其周围的偏差...但是不同的城市甚至镇 乡都要取几次值...
2 winform c#与通过方式post与服务器交互:
引入using System.Net;
using System.Collections.Specialized;
代码如下:
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 = http://www.网址; 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调试代理。它能够记录所有客户端和服务器间的http请求,允许你监视,设置断点,甚至修改输入输出数据,fiddler包含了一个强大的基于事件脚本的子系统,并且能够使用.net框架语言扩展。),他可以抓取http包:
其实总结起来,winform c#与服务器交互,而winform这方其实就是一个“http包”发送方...而服务器只要知道这是身份即可,の...也就是说本来浏览器要办的事,你winform来做...“http模拟”....其实最主要知道:通过Fiddle所得的Body部分来确定发送的数据集合+URL....(待续....)
3 winform中webbrowser设置url:
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转换后,再编译时经常会遇到字符串转换的问题,搞得你很郁闷呀。
但在2005中就不行,必须要强制转换后才能通过编译,但转换后显示的又是乱码,很让人郁闷呀。
typedef LPCTSTR LPTSTR ; #ifndef _UNICODE typedef TCHAR char; #else typedef TCHAR wchar_t; #endif
解决方案如下:
在项目属性-->配置属性-->常规-->字符集, 将其换为:使用多字节字符集,编译就通过了。