草庐IT

Android GPS 坐标散点

coder 2023-11-29 原文

下面的代码看起来运行良好:

    // GPS Reader
    // Criteria
    Criteria criteria = new Criteria();
    //criteria.setAccuracy(Criteria.ACCURACY_COARSE); // Used when we can't get a GPS Fix
    criteria.setAccuracy(Criteria.ACCURACY_FINE); // Used when we can get a GPS Fix

    criteria.setAltitudeRequired(false);
    criteria.setBearingRequired(false);
    criteria.setCostAllowed(true);
    criteria.setPowerRequirement(Criteria.POWER_LOW);

    LocationListener locationListener = new MyLocationListener();
    LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    lm.requestLocationUpdates(lm.getBestProvider(criteria, true), 0, 0,
            locationListener);

但是,当我在 Google map 上绘制我收集的数据时,在某些情况下 GPS 坐标非常分散,或者它会沿着我正在走的路径前进,只是找到然后突然跳到一个点一英里远,然后返回。有没有什么办法解决这一问题?我猜是某种准确性检查?

更新:

基本上我的问题看起来像这样作为一个例子 - GPS Jitter

更新 2:

我考虑过不把它作为赏金,但我想我也可以全面了解这里发生的事情,看看我的方法是否过头了。我仍然有同样的问题,尽管我的精度为 3m 等,但我的坐标仍然存在抖动。现在这可能是可用卫星等。我不知道,但基本上我想了解如何所有这些其他应用程序,尤其是运动应用程序,是否能够在相同情况下获得如此流畅的读数。

我在 Quora 上找到了这个 Does any running app have a feature of filtering GPS data to get more accurate tracking?不幸的是,它并没有对我的问题提供太多的洞察力,除非你愿意的话可以使用卡尔曼滤波器,但肯定有不那么复杂的方法,因为我怀疑大多数应用程序都在实现这个。

无论如何,如果开发人员愿意分享他们正在使用一些伪代码所做的事情,我们将不胜感激。我的意思是,如果我坚持使用卡尔曼,但我确信必须有更容易实现的算法,并且希望学习这些算法以及如何实现它们,这很合适。

上下文:这是一个行人移动应用。

我试图从中收集信息的相关 SO 问题 Create a smooth curve from a series of GPS coordinates Smooth gps data :这是一个好的开始,虽然我不确定我需要实现什么伪代码才能正确地让最小二乘拟合正常工作,这样我就会有一个样条 GPS 数据,然后我可以在谷歌地图之类的东西上查看以确认我做对了。我认为问题是如果这是我正在处理的一般 X 和 Y 数据,而不是 GEO 坐标,我可以在 matlab 中写一些东西来测试它,然后继续。

更新 3

我收到的乱七八糟的 GPS 数据的图像 https://www.dropbox.com/s/ilsf8snao2no65e/gpsdata2.png

代码 https://gist.github.com/4505688

最佳答案

GPS 数据本身容易出错。即使您已正确设置了所有 LocationManager(看起来就像您设置的那样),您仍会在位置中看到偶尔的抖动。

准确性

需要注意的一件事是,GPS 精度只能让您估计在接收到 GPS 信号的情况下计算的好坏。系统误差可以为您提供良好的精度数字 (<10m),但仍然代表较大的位置误差。这就是为什么即使您的准确性非常好,您也会看到抖动。精度测量可以很好地消除非常大的误差(>100m),但在较低的水平上,它只是给你一个计算收敛的指示。

过滤

过滤和很多事情一样,越少越好。精度过滤器应该能够消除大的错误,如果您最终得到一个好的阈值,您可能能够获得平滑的数据。

如果您对正在运行的应用程序的位置变化设置阈值,您也可能会获得一些好处。例如,随着时间的推移,运行者只能跑一段特定的距离,并且通过设置上限阈值(Usain Bolt Cutoff),您应该能够移除坏点。这样做的问题是,如果您的第一点是错误的,您最终会删除所有其他点。

卡尔曼滤波器

卡尔曼滤波器是一个很好的解决方案,我已经在我正在开发的导航应用程序上实现了它。结果非常合理,甚至可以在 GPS 不佳或不可用的情况下进行有限的航位推算。不幸的是,我不能分享源代码,但如果你决定这样做,我可以给你一些指导。最好的结果来自 6 DoF 滤波器,您可以在其中计算加速度和速度并使用它来估计位置。这不是最简单的解决方案,但我们已经从中看到了良好的结果。

最小二乘法

卡尔曼滤波器非常棒,因为它可以实时用于过滤位置。它会跟踪自己的状态,您不需要存储旧位置。但另一方面,如果您想对路线进行后处理,则最小二乘法拟合是最佳方法。 (卡尔曼是从 LSQ 公式推导出来的)。我没有做很多后期处理,但我想我可以翻出一些关于它的旧教科书。然而,理论应该是相同的。

大多数 GPS 设备都非常好,从我看到的所有测试来看,我并不经常看到您在示例中看到的抖动。然而,我实现卡尔曼滤波器的一大优势和原因是您的行进距离和速度计算更加准确

关于Android GPS 坐标散点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14202062/

有关Android GPS 坐标散点的更多相关文章

  1. ruby-on-rails - 使用 geokit 或其他 ruby​​ gem 计算一系列地理坐标的中心 - 2

    我使用geokit和geokit-railsgemforrails有一段时间了,但我还没有找到答案的一个问题是如何找到一组点的计算聚合中心。我知道如何计算两点之间的距离,但不会超过2。我的理由是,我在同一个城市中有一系列的点……一切都完美的城市会有一个我可以使用的中心,但有些城市,比如柏林没有一个完美的中心。他们有多个中心,我只想使用我数据库中的所有地点列表来计算特定分布的中心。还有其他人遇到过这个问题吗?有什么建议吗?谢谢 最佳答案 之前从未使用过Geokit,这个操作背后的数学原理相对容易自己实现。假设这些点由纬度和经度组成,您

  2. Unity3D : 本地坐标系,世界坐标系,和TransformPoint,TransformVector,TransformDirection的区别 - 2

    目录一、世界坐标系与本地坐标系二、srcGameObject.transform.TransformPoint(Vector3 vec)三、srcGameObject.transform.TransformVector(Vector3 vec)四、srcGameObject.transform.TransformDirection(Vector3 vec)五:示例一、世界坐标系与本地坐标系    世界坐标很好理解,就是模型的transform.position,通常在无父物体的情况下,创建出来的模型默认位置就是世界坐标系的原点。    每个物体都有自身的坐标系,此坐标系就是本地坐标系。本地坐标

  3. ruby-on-rails - 如何转换 Shapefile 的坐标? - 2

    我正在尝试将邻域数据导入我的应用程序,但我在使用从here获得的数据时遇到了问题。此文件包含一个包含旧金山街区的shapefile。我正在运行RubyonRails框架,目前正在使用GeoRuby来解析shapefile。代码如下所示:defself.run_importshpfile='/path/to/realtor_neighborhoods/realtor_neighborhoods'ShpFile.open(shpfile)do|shp|shp.eachdo|shape|#Thisgetsthefirst(andonly)PolygonfromeachMultiPolygon

  4. 图形学-变换(平移矩阵,旋转矩阵,缩放矩阵,线性变换,仿射变换,齐次坐标) - 2

    1.变换1.1什么是变换?变换(Transform)是计算机图形学中非常重要的一部分。变换包含模型变换(Modelingtransform)以及视图变换(Viewtransform)。模型变换指的是变换模型(被拍摄物体)的位置,大小和角度;视图变换指的是变换照相机的位置和角度。从相对运动的角度来看,两种变换是可以相互转化的。1.2模型变换1.2.1二维变换缩放变换缩放变换(Scale)中,如果一个图片以原点(0,0)为中心缩放𝑠倍。那么点(𝑥,𝑦)变换后数学形式可以表示为写成矩阵形式为:当然,我们也可以给x轴和y轴不同的缩放倍数𝑠𝑥和𝑠𝑦。在非均匀情况下,缩放变换的矩阵形式为反射变换反射变换(

  5. ruby - 如何在不使用 Google Maps API 的情况下计算两个 GPS 坐标之间的距离? - 2

    我想知道是否有一种方法可以在不依赖GoogleMapsAPI的情况下计算两个GPS坐标的距离。我的应用程序可能会收到float坐标,否则我将不得不对地址执行反向GEO。 最佳答案 地球上两个坐标之间的距离通常使用Haversineformula来计算.该公式考虑了地球形状和半径。这是我用来计算以米为单位的距离的代码。defdistance(loc1,loc2)rad_per_deg=Math::PI/180#PI/180rkm=6371#Earthradiusinkilometersrm=rkm*1000#Radiusinmeter

  6. javascript - 如何在 Leaflet 中将点从 [x,y] 坐标投影到 LatLng? - 2

    我正在使用Leaflet1.0.0rc3并且需要使用绝对像素值来修改map上的某些内容。因此,我想知道用户点击像素的位置,然后将其转换回LatLng坐标。我尝试使用map.unproject(),这似乎是正确的方法(unproject()Leafletdocumentation)。但该方法产生的La​​tLng值与e.latlng的输出有很大不同。(例如,输入LatLng(52,-1.7)并输出LatLng(84.9,-177))。所以我一定是做错了什么。问题:将点从层(x,y)空间投影到LatLng空间的正确方法是什么?这是一个代码片段(fiddle:https://jsfiddle

  7. javascript - 在谷歌浏览器扩展中获取鼠标坐标 - 2

    我拼命寻找在单击上下文菜单或使用快捷键时检索用户鼠标坐标的方法如果可能的话,我希望不必使用需要用户移动的onmousemove事件:/你知道怎么做吗?提前感谢您的回复 最佳答案 这只是一个简单的示例,仅适用于:文件->更改manifest.json中的"matches":["file:"]以添加新功能上下文菜单选择->更改上下文:contextMenus.create(bg.js)中的["selection"]以添加新功能辅助鼠标按钮->在(c.js)中更改(mousePos.button==2)以添加新功能你也可以试试moused

  8. javascript - 将 Leaflet LatLng 投影到平铺像素坐标 - 2

    对于Canvas图层,如何访问特定图block的点击像素?给定像{lat:37.68816,lng:-119.76196}这样的LatLng,我如何:#1,检索正确的点击block,#2,block内的像素坐标?这两个都应该考虑maxNativeZoom。 最佳答案 需要像L.CRS.EPSG3857这样的CRS。map的CRS可通过map.options.crs访问。需要真正的缩放、图block大小(如256,但可能为512或更高maxNativeZoom)和像素原点,如map.getPixelOrigin():constlatl

  9. javascript - IE8事件坐标 - 2

    我似乎找不到在IE8中获取事件坐标的方法,它只会触发诸如“pageXundefined”、“clientXundefined”等错误。虽然它在其他浏览器中工作正常。这就是我想要做的:document.onmousemove=setcoord;functionsetcoord(e){varxxcoord=e.pageX||(e.clientX+document.body.scrollLeft);varyycoord=e.pageY||(e.clientY+document.body.scrollTop);}是否有任何解决方法来获取该鼠标位置? 最佳答案

  10. javascript - 带有图例和其他颜色的 Google Charts API 散点图 - 2

    我有一个例子://LoadtheVisualizationAPIandthepiechartpackage.google.load('visualization','1.0',{'packages':['corechart']});//SetacallbacktorunwhentheGoogleVisualizationAPIisloaded.google.setOnLoadCallback(drawChart1);//Callbackthatcreatesandpopulatesadatatable,//instantiatesthepiechart,passesinthedataa

随机推荐