阅读:2105回复:7
[求助]写一个GPS定位的软件时,坐标问题如何处理
<P>请问写一个GPS定位的软件时,处理坐标问题的顺序应该如何,读出的数据要如何处理,地图又如何处理,这个问题困扰了我很久了,有个大体流程也可以了,请各位帮忙,先谢了。(主要是出现定位不准的问题,地图设成bj54也没用)</P>
|
|
1楼#
发布于:2005-12-20 14:03
我的地图是广东省1:50000,有的文章说用高斯-克吕格投影,有的又说要用兰勃特投影,我下载了Mapinfow.prj文件把地图设成bj54,要用6度还是3度分带还没找到答案,又使用了以下程序(从网上找的):
<P>procedure TMain.DefineMapParam(); <BR>var <BR> MapDatum: Variant;//地球基准面 <BR>begin <BR> try <BR> MapDatum := CreateOleObject('MapX.Datum.4'); <BR> //建立基准面对象 <BR> //定义北京54坐标系基准面 <BR> // (Ellipsoid, ShiftX, ShiftY, ShiftZ, RotateX, RotateY, RotateZ, ScaleAdjust,PrimeMeridian) <BR> MapDatum.set(3, 24, -123, -94, -0.02, 0.25, 0.13, 1.1, 0); <BR> //定义北京54坐标系经纬度作为内部计算坐标系 <BR> Map1.NumericCoordSys.Set_(1, MapDatum); <BR> //定义北京54坐标系30度标准纬线麦卡托投影作为显示坐标系,单位为米 <BR> Map1.DisplayCoordSys.Set_(26,MapDatum,7,0,0,30); <BR> finally <BR> VarClear(MapDatum); <BR>end; </P> <P>我从GARMIN 15 H/L GPS 模块中读出经纬度转换成</P> <P>经度X:113.178667 纬度Y:23.061669</P> <P>写入MapX,结果往左下偏移到另一个城市去了。</P> <P><IMG src="http://bbs.gissky.net/images/Emotions/10.gif" border=0><IMG src="http://bbs.gissky.net/images/Emotions/10.gif" border=0><IMG src="http://bbs.gissky.net/images/Emotions/10.gif" border=0></P> <P>知道的朋友请发挥网络互助的精神告知一下,本人有很多GPS相关的开发资料可以跟大家分享,不作任何有偿交换。</P> |
|
2楼#
发布于:2005-12-24 13:59
<P>也碰到同样的问题,请高手回复 !</P>
[此贴子已经被作者于2005-12-24 14:11:05编辑过]
|
|
3楼#
发布于:2006-07-25 13:39
你的地图是什么坐标系就用什么坐标系吧,GPS的坐标系最好处理,WGS84。
|
|
4楼#
发布于:2006-07-28 18:56
那不行,地图如果上什么坐标用什么坐标系那经度纬度,弄出来后,偏移很大。
|
|
5楼#
发布于:2006-08-03 10:41
GPS使用WGS84坐标系,最好把地图也设为84坐标系。
|
|
6楼#
发布于:2006-08-05 14:49
你看看所接受的GPS数据是采用度 分 秒的格式,还是度.你的应用程序处理的数据要采用相同的格式.不同就需要转换. 至于坐标应该要 GPS使用的WGS84坐标系.
|
|
7楼#
发布于:2006-08-19 17:06
<P>GPS使用WGS84坐标系,最好把地图也设为84坐标系。</P>
<P>然后把 GPS中的数据转换一下.</P> <P>/// <summary><BR> /// Converts Longitude and Latitude to Degrees<BR> /// </summary><BR> /// <param name="original"></param><BR> /// <param name="direction"></param><BR> /// <returns></returns><BR> public double LonLatToDegrees(double original, string direction)<BR> {<BR> // y = m_dLatOrig / 100<BR> // m_dLat = (((y - Int(y)) * 100) / 60) + Int(y)<BR> double temp = original / 100 ;<BR> int tempAsInt = (int) temp ;<BR> double result = (((temp - tempAsInt) * 100) / 60) + tempAsInt ;</P> <P> return direction == "S" || direction == "W" ? -result : result ;<BR> }</P> <P>然后 换算完,显示在地图上就可以勒</P> |
|