Android 谷歌地图 - 使折线更直/更平滑
Posted
技术标签:
【中文标题】Android 谷歌地图 - 使折线更直/更平滑【英文标题】:Android google maps - make polyline more straighter /smoother 【发布时间】: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;
【问题讨论】:
不确定,但我猜这只是因为您的lastLatLng
和thisLatLng
。经纬度信息总是有点不稳定,所以如果你用它作为直接输入来画一条线……这条线会很不稳定。您可以尝试稍微调整一下您的 latlong 信息以减少噪音,但这可能会很棘手。
你说“调整你的纬度”是什么意思?
【参考方案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。所以你可以缩放、平移等等……只要你得到当前的投影并用它把纬度/经度坐标转换成像素,你就会得到正确的结果。以上是关于Android 谷歌地图 - 使折线更直/更平滑的主要内容,如果未能解决你的问题,请参考以下文章