【问题标题】:Android google maps - make polyline more straighter /smootherAndroid 谷歌地图 - 使折线更直/更平滑
【发布时间】:2013-08-14 19:04:58
【问题描述】:

我正在创建应用程序来通过 GPS 绘制我的步行路径。一切都很好,当我走路时路径正在绘制,但我有一个问题 - 有可能以某种方式以编程方式使路径线更直吗?

例如。首先,走后我看到我的路径是这样的(它不是折线,在示例中是多边形,但我想你会明白的): https://www.dropbox.com/s/763mq0wja6x7lpy/11.png

但保存后,应用程序使路径更直/更平滑: https://www.dropbox.com/s/npwkz9coqve7m4g/22.png

如何做到这一点?因为我没有任何想法。

我正在用LocationListener绘制路径:

位置管理器位置管理器 = (LocationManager)this.getSystemService(Context.LOCATION_SERVICE);

    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 );

和 onLocationChanged 监听器:

@Override
public void onLocationChanged(位置位置) {

          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;             
  }

【问题讨论】:

  • 不确定,但我猜这只是因为您的lastLatLngthisLatLng。经纬度信息总是有点不稳定,所以如果你用它作为直接输入来画一条线……这条线会很不稳定。您可以尝试稍微调整一下您的 latlong 信息以减少噪音,但这可能会很棘手。
  • 你说“调整你的纬度”是什么意思?

标签: android location android-maps polyline


【解决方案1】:

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

所以,在绘制路径的时候,可以考虑使用Android's Path API

有关这方面的一些代码,请查看此答案:

Android How to draw a smooth line following your finger

【讨论】:

  • 我在哪里可以找到地图的 quadTo 函数?因为我认为这是我一直在寻找的。或者以某种方式使用地图的路径功能?
  • 这比这个空间所能容纳的要远一些。简而言之:您需要创建自己的叠加层并将其添加到地图中。在 Overlay 中,您覆盖 draw(Canvas canvas, MapView mv, ...) 方法。画布很重要,因为您现在可以直接在地图上绘制。要将位置转换为地图上的相应像素,您必须获取投影并转换为像素,如下所示:mapView.getProjection().toPixels(...)。此时,您现在必须应用 Path.quadTo() 方法来绘制平滑路径。
  • 好吧,我知道了,但我认为它不能正常工作。因为您可以在行走的同时拖动地图(或者地图相机可以跟随您的移动),所以我认为您的方法可以将线画到错误的像素上。但顺便说一句,查看您给定的链接,我不小心找到了这个链接 johan.karlsteen.com/2011/07/30/… ,这是我迄今为止找到的最佳解决方案。感谢您的帮助!
  • 不错的链接。关于错误的像素:这不会发生。每次更新都会在空画布上调用 draw。所以你可以缩放、平移等等……只要你得到当前的投影并用它把纬度/经度坐标转换成像素,你就会得到正确的结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-25
  • 2013-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多