Android谷歌地图-使多段线更直/更平滑

Android谷歌地图-使多段线更直/更平滑,android,location,android-maps,polyline,Android,Location,Android Maps,Polyline,我正在创建应用程序,通过GPS绘制我的行走路径。一切都很好,当我走路的时候,路径是画出来的,但我有一个问题——是否有可能通过编程使路径线更直 比如说。首先,在行走之后,我看到的路径是这样的(示例中不是多段线,而是多边形,但我想你会明白的): 但保存后,应用程序使路径更直/更平滑: 如何做到这一点?因为我不知道 我正在使用LocationListener绘制路径: 位置管理器位置管理器= (LocationManager)this.getSystemService(Context.LOCATI

我正在创建应用程序,通过GPS绘制我的行走路径。一切都很好,当我走路的时候,路径是画出来的,但我有一个问题——是否有可能通过编程使路径线更直

比如说。首先,在行走之后,我看到的路径是这样的(示例中不是多段线,而是多边形,但我想你会明白的):

但保存后,应用程序使路径更直/更平滑:

如何做到这一点?因为我不知道

我正在使用
LocationListener
绘制路径:

位置管理器位置管理器= (LocationManager)this.getSystemService(Context.LOCATION\u服务)

和onLocationChanged侦听器:

@覆盖
已更改位置上的公共无效(位置){


LocationManager永远不会为您提供准确的位置。因此,虽然您可能不会以非平稳的方式行走,但您获得的GPS坐标将始终不稳定,即使您在标准中设置了非常高的精度

< P> >,当您绘制路径时,可以考虑使用

有关这方面的一些代码,请参阅以下答案:


不确定,但我猜这只是因为你的
lastLatLng
thisLatLng
。Lat和long信息总是有点不稳定,所以如果你用它作为直线输入来画一条线……这条线会不稳定。你可以尝试调整你的latlong信息以减少噪音,但这可能会很棘手。s是什么意思aying“adjust your latlong”?以及我在哪里找到地图的quadTo函数?因为我认为这就是我一直在寻找的。或者以某种方式使用地图的路径函数?这比这个空间能够包含的要远一点。简言之:您需要创建自己的覆盖并将其添加到地图中。在覆盖中,您覆盖了绘图(Canvas Canvas,MapView mv,…)方法。画布很重要,因为您现在可以直接在地图上绘制。要将位置转换为地图上相应的像素,您必须获得投影并转换为像素,如下所示:
MapView.getProjection().toPixels(…)
。此时,您必须应用Path.quadTo()方法来绘制平滑的路径。好的,我知道了,但我认为它不会正常工作。因为你可以在行走的同时拖动地图(或者地图摄影机可以跟踪你的运动),因此我认为您的方法可能会将线绘制到错误的像素。但是,顺便说一句,查看您给定的链接时,我意外地发现了此链接,这是迄今为止我找到的最佳解决方案。感谢您的帮助!链接不错。关于错误的像素:这不会发生。在空画布上的每次更新都会调用draw。因此,您可以缩放、平移,无论什么…只要当您获得当前投影并使用该投影将lat/long坐标转换为像素时,您将得到正确的结果。
    Criteria criteria = new Criteria();
  //criteria.setPowerRequirement(Criteria.POWER_LOW); 
    criteria.setAccuracy(Criteria.ACCURACY_FINE);
    criteria.setAltitudeRequired(false);
    criteria.setBearingRequired(false);
    criteria.setCostAllowed(true);
    criteria.setSpeedRequired(false);       
    String bestProvider = locationManager.getBestProvider(criteria, true);
    locationManager.requestLocationUpdates(bestProvider, 500, 3, this );
          if(lastLocationloc == null) 
                          lastLocationloc = location;     
          LatLng lastLatLng= locationToLatLng(lastLocationloc);
          LatLng thisLatLng= locationToLatLng(location);
          mMap.addPolyline
                       (new PolylineOptions().add(lastLatLng).add(thisLatLng).width(4).color(Color.RED));
          lastLocationloc = location;             
  }