Mus*_*bal 12 android google-maps
我想在谷歌地图上绘制路径.
基本上我在特定时间间隔后跟踪用户位置.当用户到达某个目的地时,我需要画出他到达目的地的路径.
它工作正常,但问题是它显示之字形路径.见下图.
我想要的是:
我想绘制一条正确的路径,然后跟踪我在跟踪期间得到的点.
我试过的
我搜索并找到了这个链接,我们可以通过最多8点来获取方向.这是Google地图的非商业用户允许的最高限额.有没有其他方法来实现这一目标.因为我在地图上画了很多分.
绘制折线的代码
private void drawPath() {
if (mMap != null)
mMap.clear();
int count = 0;
LatLng prev = null;
String[] mProjection = {LocTable.COLUMN_ID, LocTable.COLUMN_LONGITUDE, LocTable.COLUMN_LATITUDE};
String mSelectionClause = LocTable.COLUMN_ID + "> ?";
String[] mSelectionArgs = {"0"};
String mSortOrder = LocTable.COLUMN_ID;
Cursor mCursor = getContentResolver().query(
LocContentProvider.CONTENT_URI, // The content URI of the words table
mProjection, // The columns to return for each row
mSelectionClause, // Selection criteria
mSelectionArgs, // Selection criteria
mSortOrder);
if(mCursor != null && mCursor.getCount()!=0) {
Log.i("cursor", "Count: " + mCursor.getCount() + "|Column count: " + mCursor.getColumnCount());
if (mCursor.moveToFirst()) {
do {
if (mMap != null) {
float lon = mCursor.getFloat(1);
float lat = mCursor.getFloat(2);
LatLng current = new LatLng(lat, lon);
markerPoints.add(current);
if (count == 0){
prev = current;
}
CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(current, 19);
mMap.animateCamera(cameraUpdate);
mMap.addPolyline((new PolylineOptions())
.add(prev, current).width(6).color(Color.BLUE)
.visible(true));
prev=current;
count++;
}
} while (mCursor.moveToNext());
}
mCursor.close();
}
}
Run Code Online (Sandbox Code Playgroud)
我同意安东尼奥的回答.问题不在于你的绘图功能.您只需绘制路径,无论您的位置是什么设备.问题是您的设备没有给出准确的位置.
让我简单介绍一下位置功能.
设备中有三种提供商提供位置.
该提供商使用卫星确定位置.根据条件,此提供程序可能需要一段时间才能返回位置修复程序.需要权限ACCESS_FINE_LOCATION.
GPS位置提供程序的附加包可以包含以下键/值对:
卫星 - 用于导出修复的卫星数量
该提供商根据蜂窝塔和WiFi接入点的可用性确定位置.通过网络查找检索结果.
当其他应用程序或服务请求时,此提供程序可用于被动地接收位置更新,而无需自己实际请求位置.此提供程序将返回其他提供程序生成的位置.您可以查询getProvider()方法以确定位置更新的来源.需要权限ACCESS_FINE_LOCATION,但如果未启用GPS,则此提供程序可能仅返回粗略修复.
参考:
根据我的经验,我可以说
GPS Provider是给你准确的位置比较Network Provider但需要开放的环境,GPS provider在建筑物内部没有给出准确的位置.
返回描述此提供程序的水平精度的常量.如果提供者返回更精细的谷物或确切位置,ACCURACY_FINE则返回,否则如果该位置仅为近似,则ACCURACY_COARSE返回.
当位置从GPS提供商更改时,此方法将返回精确值,否则将返回近似值或0值.
解:
仅使用GPS提供商
建议使用Google客户端 示例示例.
问题不在于您的绘图功能,而在于您使用接收到的位置获取路径点的方法。
您需要考虑两个因素:
Location.getAccuracy()您可以使用方法(文档)获得准确性。精度以米为单位,因此越低越好。结合这两种考虑的示例:
private static final float MINIMUM_ACCURACY = 10; // If the accuracy of the measurement is worse than 10 meters, we will not take the location into account
private static final float MINIMUM_DISTANCE_BETWEEN_POINTS = 20; // If the user hasn't moved at least 20 meters, we will not take the location into account
private Location lastLocationloc;
// ...
public void onLocationChanged(Location mylocation) {
if (mylocation.getAccuracy() < MINIMUM_ACCURACY) {
if (lastLocationloc == null || lastLocationloc.distanceTo(mylocation) > MINIMUM_DISTANCE_BETWEEN_POINTS) {
// Add the new location to your polyline
lastLocationloc = mylocation;
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1451 次 |
| 最近记录: |