GPS 经纬度换算方法和定位误差计算

经纬度的表示

   1884年国际经度会议规定,以通过英国伦敦格林威治天文台子午仪中心的经线为0°经线。从0°经线往东叫东经,往西叫西经,东、西各分180°。习惯上以西经20°和东经160°为分界把地球分为东西两个半球。假如从地轴的正中间将地球切成南北两半,上边的一半叫北半球,下边的一半叫南半球。被切的这个平面,叫赤道面。赤道面与地球表面相交的线叫赤道。纬线从赤道往两极越来越短,到了两极就缩小成一个点了。科学家们把赤道定为0°纬线,从赤道向两极各分为90°,赤道以南叫南纬,赤道以北叫北纬。在计算机或GPS上经纬度经常用度、分、秒和度.度、分.分、秒.秒的混合方式进行表示,度、分、秒间的进制是60进制,度.度、分.分、秒.秒的进制是100进制,换算时一定要注意。可以近似地认为每个纬度之间的距离是不变的111KM,每分间1.85KM,每秒间30.83M。经度间的距离随纬度增高逐渐减小,可按一下公式计算:

   经度1°长度=111.413cosφ一0.094cos3φ公里(纬度φ处)。

   一般从GPS得到的数据是经纬度。经纬度有多种表示方法。

   1.) ddd.ddddd, 度 . 度的十进制小数部分(5位)例如:31.12035º

   2.) ddd.mm.mmm,度 . 分 . 分的十进制小数部分(3位)例如 31º10.335'

   3.)ddd.mm.ss, 度 . 分 . 秒 例如 31º12'42"

   地球上任何一个固定的点都可以用确定的经纬度表示出来。

 

关于经纬度坐标转换的方法

一、时分秒转换成十进制经纬度

    Decimal Degrees = Degrees + minutes/60 + seconds/3600

   例:57°55'56.6" =57+55/60+56.6/3600=57.9323888888888

   114°65'24.6"=114+65/60+24.6/3600 = 115.09016663

 

二、十进制转换成时分秒经纬度

   如把经纬度 (longitude,latitude) (205.395583333332,57.9323888888888)转换据成坐标(Degrees,minutes,seconds)(205°23'44.1",57°55'56.6")。

   步骤如下:

   1, degree = 205

     2,(205.395583333332-205)*60=23.734999999920 得到"分":23

   3,(23.734999999920-23)*60=44.099999995200 得到"秒":44.1

  采用同样的方法可以得到纬度坐标:57°55'56.6" 

 

分秒表示的实际距离

可以如下推算:
      地球子午线长是39940.67公里,纬度改变一度合110.94公里,一分合1.849公里,一秒合30.8米,赤道圈是40075.36公里,北京地区纬在北纬40度左右,纬度圈长为40075*sin(90-40),此地经度一度合276公里,一分合1.42公里一秒合23.69米。

误差计算

在时分秒模式:

经度:1秒误差为23.69米

纬度:1秒误差为30.8米

在十进制模式:

经度:0.000012误差为1米

纬度:0.000009误差为1米

 

  • 6
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity3d是一款常用的游戏引擎,而GPS经纬度与空间坐标在游戏开发中也经常被使用。Unity3d中提供了方法完成经纬度和空间坐标的转换。 在Unity3d中,使用LocationService类获取GPS经纬度信息,获取到的经纬度信息为WGS84坐标系下的经纬度。而Unity3d中的坐标系是以Vector3三维向量形式存在,需要将WGS84坐标系下的经纬度转换为Unity3d中的坐标系。 可以使用以下方法经纬度转换为Unity3d中的坐标系: 1. 使用WGS84坐标系下的经纬度计算出该点在地球球面上的X、Y、Z坐标。 2. 使用转化矩阵将地球球面坐标系下的X、Y、Z转换为Unity3d中的坐标系。 以下是代码示例: ```csharp using UnityEngine; using System; public class GPSToUnity : MonoBehaviour { // 地球平均半径 private const double EarthRadius = 6378137.0; // 转化矩阵 private static readonly Matrix4x4 wgs84ToUnity = Matrix4x4.TRS(Vector3.zero, Quaternion.Euler(-90, 0, 0), Vector3.one); // 将GPS经纬度转换为Unity3d中的坐标系 public static Vector3 GPSToUnityCoord(double longitude, double latitude) { double lonRad = longitude * (Math.PI / 180.0); double latRad = latitude * (Math.PI / 180.0); double x = EarthRadius * Math.Cos(latRad) * Math.Cos(lonRad); double z = EarthRadius * Math.Cos(latRad) * Math.Sin(lonRad); double y = EarthRadius * Math.Sin(latRad); Vector3 coord = wgs84ToUnity.MultiplyPoint3x4(new Vector3((float)x, (float)y, (float)z)); return coord; } } ``` 以上方法是将经纬度转换为Unity3d中的坐标系,也可以使用相反的方法将Unity3d中的坐标系转换为经纬度。需要注意的是,在坐标系转换中,我们一般使用的WGS84坐标系转化矩阵并不适用于所有情况,可能会存在一定误差。因此在使用中需要根据实际情况选择正确的转换方法,减少误差

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值