第一次处理地理位置的数据的人,没什么经验,往往掉入很多坑浪费不少时间。我也是刚刚从坑里爬出来。这篇博文主要是把入门GPS轨迹分析的经验总结一下,以方便大家少走些弯路。

(1)可视化 GPS 路径

刚拿到一堆GPS轨迹数据,想看看它长什么样?于是先想办法把它们可视化出来。有很多地图的API可以用,如果不是想搞演示,只是为了快速随便看一眼的话,推荐用百度的在线示例API  http://developer.baidu.com/map/jsdemo.htm#c1_3  里面有比较详细的例子,很丰富的操作,修改代码也比较简单。 当然也可以把源代码copy下来在本地操作。

(2) 坐标格式

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

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

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

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

在应用程序中基本都用格式1),所以首先要确定你的原始数据格式是否是格式1),如果不是,需要转换,方法比较简单。 一个从2)转换成1)的程序如下:

public Point(double longitude, doublelatitude )

{int degree = (int)(longitude);this.longitude = (longitude - degree) * 100 / 60 +degree;

degree= (int)(latitude);this.latitude = (latitude - degree) *100 / 60 +degree;

}

(3)坐标纠偏

刚拿到GPS轨迹数据的时候,直接print到地图上,发现路线比较奇怪,没有和道路完全吻合,很像偏移了一些,甚至会穿越没有道路的地方。 起初以为是GPS精度的问题。后来经人提醒,GPS坐标是有好几套标准的。 有兴趣的同学可以资料例如 http://yanue.net/post-121.html , 这里简单的说明什么是坐标偏移:

天朝为了保卫国家安全,对真实坐标系统进行人为的加偏处理,把真实的坐标加密成虚假的坐标,称为火星坐标。这种偏移是非线性的,偏移方向也不确定。  除了火星坐标系统,不同的地图数据商也可能使用自己的坐标系统,例如百度。 国内各地图API坐标系统比较详情请见http://www.cnblogs.com/Tangf/archive/2012/03/15/2398397.html 。  所以天朝所有准许上市的地图类产品都不是真实坐标系统。要想在某个地图API上正确的显示GPS轨迹,必须要先把数据转换成它的坐标系统。

这里还是以百度地图为例。假如我有原始(真实的)GPS数据,要在百度地图上正确显示,就需要先变成百度坐标系。 坐标转换的API说明在 http://lbsyun.baidu.com/index.php?title=webapi/guide/changeposition  可以看到,这个API支持从很多种不同的坐标系统转换到百度坐标系(但是不支持转换到百度坐标系以外的模式,吐槽一下)。 自己写个程序批量地转换,速度有点慢,一次只能发10个点左右。  在线演示在http://developer.baidu.com/map/jsdemo.htm#c1_3

把其中的坐标改成你自己的数据,再找到这行代码:

convertor.translate(pointArr, 3, 5, translateCallback)

其中的3,5表示从火星坐标转换到百度坐标; 如果改成1 , 5 则是从原始坐标转换到百度坐标,点击运行。

在我自己的数据上的效果如下:

很明显经过处理之后,路径才是正确的。

另外,高德地图采用的是火星坐标,也可以玩玩 http://lbs.amap.com/api/javascript-api/example/marker/marker-content/

原始坐标和火星坐标是可以相互转换的,需要一个小型辅助数据库,这里就不贴代码了,如有需要请留言。

这里附上百度坐标和火星坐标的c#转换代码:

public staticPoint Baidu2Mars(Point a)

{

Point b= newPoint();double x = a.longitude - 0.0065;double y= a.latitude - 0.006;double z = Math.Sqrt(x * x + y * y) - 0.00002 * Math.Sin(y * Math.PI / 180);double theta = Math.Atan2(y, x) - 0.000003 * Math.Cos(x * Math.PI / 180);

b.longitude= z *Math.Cos(theta);

b.latitude= z *Math.Sin(theta);returnb;

}public staticPoint Mars2Baidu(Point a){

Point b= newPoint();double x =a.longitude;double y=a.latitude;double z = Math.Sqrt(x * x + y * y) + 0.00002 * Math.Sin(y * Math.PI / 180);double theta = Math.Atan2(y, x) + 0.000003 * Math.Cos(x * Math.PI / 180);

b.longitude= z * Math.Cos(theta) + 0.0065;

b.latitude= z * Math.Sin(theta) + 0.006;returnb;

}

最后顺便贴一个求两个GPS点间距离的代码:

public static double Degree2Radian(doubledegree)

{double radian = degree * Math.PI / 180;returnradian;

}//http://www.movable-type.co.uk/scripts/latlong.html

public static doubleDistance(Point a, Point b)

{double R = 6371000;double phi1 =Degree2Radian(a.latitude);double phi2 =Degree2Radian(b.latitude);double deltaPhi = Degree2Radian(a.latitude -b.latitude);double deltaLam = Degree2Radian(a.longitude -b.longitude);double aa = Math.Sin(deltaPhi / 2) * Math.Sin(deltaPhi / 2) + Math.Cos(phi1) * Math.Cos(phi2) * Math.Sin(deltaLam / 2) * Math.Sin(deltaLam / 2);double c = 2 * Math.Atan2(Math.Sqrt(aa), Math.Sqrt(1 -aa));double d = R *c;returnd;

}

坐标计算距离公式 火星坐标系_地图坐标转换 -- 火星坐标与GPS坐标相关推荐

  1. 坐标计算距离公式 火星坐标系_根据经纬度计算距离的公式、百度坐标转换成GPS坐标(PHP版)...

    //百度坐标转换成GPS坐标 $lnglat = '121.437518,31.224665'; function FromBaiduToGpsXY($lnglat){ // 经度,纬度 $lngla ...

  2. 坐标计算距离公式 火星坐标系_WGS84、GCJ02、BD09地图坐标系间的坐标转换及坐标距离计算...

    坐标转换转载来源:http://nightfarmer.github.io/2016/12/01/GPSUtil/ 坐标系 解释 使用地图 WGS84 地球坐标系,国际上通用的坐标系.设备一般包含GP ...

  3. 给定经纬度计算距离_通过经纬度坐标计算距离的方法(经纬度距离计算)ZZ

    通过经纬度坐标计算距离的方法(经纬度距离计算) 最近在网上搜索"通过经纬度坐标计算距离的方法",发现网上大部分都是如下的代码: #define PI 3.14159265 stat ...

  4. 通过经纬度坐标计算距离的方法(实为通过一个经纬度和距离角度求另一个经纬度)

    转自:https://www.cnblogs.com/softfair/p/lat_lon_distance_bearing_new_lat_lon.html 通过经纬度坐标计算距离的方法(经纬度距离 ...

  5. 通过经纬度坐标计算距离的方法(经纬度距离计算)

    通过经纬度坐标计算距离的方法(经纬度距离计算) 最近在网上搜索"通过经纬度坐标计算距离的方法",发现网上大部分都是如下的代码: #define PI 3.14159265 stat ...

  6. php经纬度换算距离,PHP根据经纬度坐标计算距离

    PHP根据经纬度坐标计算距离 在有些应用中需要用到计算距离的功能,例如附近的商家.离我最近等功能. W为纬度对应的弧度,J为经度对应的弧度,如上图所示 下面代码  lat是纬度  lng是经度 看类代 ...

  7. 地图坐标转换 -- 火星坐标与GPS坐标

    第一次处理地理位置的数据的人,没什么经验,往往掉入很多坑浪费不少时间.我也是刚刚从坑里爬出来.这篇博文主要是把入门GPS轨迹分析的经验总结一下,以方便大家少走些弯路. (1)可视化 GPS 路径 刚拿 ...

  8. python学习-108-根据经纬度坐标计算距离

    前言: 根据经纬度坐标计算两点距离,并不能直接使用欧氏距离,因为经纬度是在曲面上的要计算弧度的影响.因此本文根据经纬度坐标公式代码实现. 参考链接: https://blog.csdn.net/xie ...

  9. 经纬度计算距离公式 java_Java计算两点间经纬度距离(两种方式)

    反余弦计算方式: private static final double EARTH_RADIUS = 6371000; // 平均半径,单位:m:不是赤道半径.赤道为6378左右 public st ...

  10. 点到面距离公式向量法_点到线或面的距离公式

    我们知道高中解析几何或立体几何题中时常需要知道点到线的距离或点到面的距离.下面我们给出这两个公式以及它们的巧妙证明. 点到线的距离 已知直线 的方程为 ,平面上任意一点 到该直线的距离 的公式为: 证 ...

最新文章

  1. TensorFlow(2)图(默认图与自定义图) TensorBoard可视化
  2. java、上转型对象
  3. git 发布android 系统版本 修改版本型号 查看指定文件的修改记录
  4. 移除镜像_这是否是你心目中的英雄联盟手游?镜像地图。水晶塔,传送移除
  5. 物联网平台探秘之74个平台浅析
  6. expect免互交 常用编辑文本
  7. 真正的善良,在于收钱办事
  8. 在嵌入式uClibc上移植valgrind
  9. 微信小程序项目源码在线考试系统+后台含论文+PPT+源码
  10. 《周易》中的君子形象--http://cul.china.com.cn/guoxue/2018-06/04/content_40369049.htm
  11. SHA-3标准(NIST.FIPS.202)阅读笔记
  12. 安卓玩机搞机技巧综合资源-----修改rom 制作rom 解包rom的一些问题解析【二十一】
  13. 委托学习——4. 委托的高级使用
  14. PyQt5教程(二):日期与时间
  15. 第八章 实践 运行代码
  16. Python获取代理池和提取可用IP
  17. 小程序上传文字和图片到服务器并保存在数据库
  18. 微星msi GS66黑苹果安装引导包(OpenCore for macOS Monterey)
  19. wordpress 插件开发
  20. 电脑里的记事本文件永久删除怎么办

热门文章

  1. SQL Server 2000安装教程
  2. 爬虫项目#4567电影网scrapy数据爬取moviePro/持久化储存handReqPro
  3. react在线编辑器
  4. 2.7 矩阵分块及矩阵乘法的四种方式
  5. 2021年高压电工考试及高压电工考试资料
  6. HMM(隐马尔可夫模型)
  7. Tools介绍:最快的DicomViewer软件 - RadiAnt Dicom Viewer
  8. 值得收藏!教你如何在火星直播中使用分享码
  9. 免费手机电脑同屏神器——Mirroid
  10. 大数据告诉你,上海二手房到底难不难卖?