如何在谷歌地图android中显示当前位置的平滑移动

     2023-05-07     31

关键词:

【中文标题】如何在谷歌地图android中显示当前位置的平滑移动【英文标题】:How to display smooth movement of current location in google map android 【发布时间】:2018-03-07 10:30:33 【问题描述】:

我正在实现一个地图导航应用程序。我每 1000 毫秒获取设备的当前位置并绘制一条折线,从当前位置到固定标记点。但是当在车内使用设备时,折线和当前位置更新不像 uber 或 google-map 那样动画。它从一个点突然变化到另一个点。

如何获得当前位置变化的平滑动画。

【问题讨论】:

你不能显示比1s更精确。在您的情况下,您可能需要通过计算速度和方向来推断位置。它可能存在一个这样做的库。 【参考方案1】:

你必须尝试这种方式它会帮助你

private void animateMarkerNew(final LatLng startPosition, final LatLng destination, final Marker marker) 

        if (marker != null) 

            final LatLng endPosition = new LatLng(destination.latitude, destination.longitude);

            final float startRotation = marker.getRotation();
            final LatLngInterpolatorNew latLngInterpolator = new LatLngInterpolatorNew.LinearFixed();

            ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, 1);
            valueAnimator.setDuration(2000); // duration 3 second
            valueAnimator.setInterpolator(new LinearInterpolator());
            valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() 
                @Override
                public void onAnimationUpdate(ValueAnimator animation) 
                    try 
                        float v = animation.getAnimatedFraction();
                        LatLng newPosition = latLngInterpolator.interpolate(v, startPosition, endPosition);
                        marker.setPosition(newPosition);
                        googleMap.moveCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition.Builder()
                                .target(newPosition)
                                .zoom(18f)
                                .build()));

                        marker.setRotation(getBearing(startPosition, new LatLng(destination.latitude, destination.longitude)));
                     catch (Exception ex) 
                        //I don't care atm..
                    
                
            );
            valueAnimator.addListener(new AnimatorListenerAdapter() 
                @Override
                public void onAnimationEnd(Animator animation) 
                    super.onAnimationEnd(animation);

                    // if (mMarker != null) 
                    // mMarker.remove();
                    // 
                    // mMarker = googleMap.addMarker(new MarkerOptions().position(endPosition).icon(BitmapDescriptorFactory.fromResource(R.drawable.icon_car)));

                
            );
            valueAnimator.start();
        
    

注意:标记是指您要为那个标记设置动画的标记。

 private interface LatLngInterpolatorNew 
        LatLng interpolate(float fraction, LatLng a, LatLng b);

        class LinearFixed implements LatLngInterpolatorNew 
            @Override
            public LatLng interpolate(float fraction, LatLng a, LatLng b) 
                double lat = (b.latitude - a.latitude) * fraction + a.latitude;
                double lngDelta = b.longitude - a.longitude;
                // Take the shortest path across the 180th meridian.
                if (Math.abs(lngDelta) > 180) 
                    lngDelta -= Math.signum(lngDelta) * 360;
                
                double lng = lngDelta * fraction + a.longitude;
                return new LatLng(lat, lng);
            
        
    

//求两点方位的方法

private float getBearing(LatLng begin, LatLng end) 
    double lat = Math.abs(begin.latitude - end.latitude);
    double lng = Math.abs(begin.longitude - end.longitude);

    if (begin.latitude < end.latitude && begin.longitude < end.longitude)
        return (float) (Math.toDegrees(Math.atan(lng / lat)));
    else if (begin.latitude >= end.latitude && begin.longitude < end.longitude)
        return (float) ((90 - Math.toDegrees(Math.atan(lng / lat))) + 90);
    else if (begin.latitude >= end.latitude && begin.longitude >= end.longitude)
        return (float) (Math.toDegrees(Math.atan(lng / lat)) + 180);
    else if (begin.latitude < end.latitude && begin.longitude >= end.longitude)
        return (float) ((90 - Math.toDegrees(Math.atan(lng / lat))) + 270);
    return -1;

【讨论】:

我认为这在任何一个方向上随机地将一个点动画到另一个点,它不关心路径..我想通过路径动画。有可能吗? 你说的路径意味着折线正确,折线有纬度和长,这里起始位置是你的标记位置,目标点是你的下一条折线,然后传递使用标记对象。希望它会工作 @Raja 我认为他是正确的,因为此解决方案可能适用于直线折线,但不适用于我们从谷歌获得的哈希图路径或道路以显示两点之间的路线。 这个标记在一段时间后消失如何解决这个问题 @M.Yogeshwaran - 你解决了标记消失的问题吗?

如何使用谷歌 API 客户端在谷歌地图 Android 中显示我的当前位置

】如何使用谷歌API客户端在谷歌地图Android中显示我的当前位置【英文标题】:HowtoshowmycurrentlocationinGoogleMapAndroidusinggoogleAPIclient【发布时间】:2016-02-1719:44:20【问题描述】:我想在地图上显示我的位置并放大它。我想使用GoolgeAPIC... 查看详情

如何在谷歌地图应用程序中从另一个位置显示当前位置?

】如何在谷歌地图应用程序中从另一个位置显示当前位置?【英文标题】:HowtoshowthecurrentlocationfromanotherlocationingooglemapsApp?【发布时间】:2018-12-0706:19:24【问题描述】:我在我的应用程序中集成了谷歌地图。我必须显示从当前位... 查看详情

如何在谷歌地图上移动地图但将标记保留为android中的当前位置?

】如何在谷歌地图上移动地图但将标记保留为android中的当前位置?【英文标题】:howtomovesmapongooglemapbutkeepmarkerascurrentlocationinandroid?【发布时间】:2018-01-2204:59:37【问题描述】:我是android新手。我最近两天受苦了。我研究了很多... 查看详情

如何在谷歌地图上显示当前街道位置?

】如何在谷歌地图上显示当前街道位置?【英文标题】:HowcanigetcurrentstreetlocationshowingonGoogleMap?【发布时间】:2011-12-2707:34:11【问题描述】:我希望我的网站用户在Google地图上显示他们当前的街道位置。就像“Facebook签到”一样... 查看详情

如何拉取用户的当前位置并显示在谷歌地图 api 上? [复制]

】如何拉取用户的当前位置并显示在谷歌地图api上?[复制]【英文标题】:Howtopulluser\'scurrentlocationanddisplayongooglemapapi?[duplicate]【发布时间】:2018-01-2217:57:46【问题描述】:所以我要完成两件事1)拉取用户当前位置2)然后在谷歌地... 查看详情

如何在android的谷歌地图上用标记显示我的当前位置

】如何在android的谷歌地图上用标记显示我的当前位置【英文标题】:howtoshowmycurrentlocationwithmarkerongooglemapinandroid【发布时间】:2012-10-0517:06:27【问题描述】:请帮忙。我尝试了一个代码,它应该在谷歌地图上用标记给出我当前的... 查看详情

在谷歌地图android上显示位置

】在谷歌地图android上显示位置【英文标题】:showlocationongooglemapandroid【发布时间】:2015-05-1112:46:12【问题描述】:我有一个EditText和一个Button我想在地图中查找位置。我正在使用AsyncTask执行这里是我对AsyncTask类的调用。当我使用... 查看详情

Android - 我如何在谷歌地图中实现位置准确性

】Android-我如何在谷歌地图中实现位置准确性【英文标题】:Android-howIcanIachievelocationaccuracyinGoogleMap【发布时间】:2014-06-3023:29:32【问题描述】:我目前正在自学Android编程。我正要编写一个应用程序,它可以在不使用GPS的情况下... 查看详情

在谷歌地图android中更改标记的原点

】在谷歌地图android中更改标记的原点【英文标题】:Changetheoriginofthemarkeringooglemapsandroid【发布时间】:2019-03-1812:54:00【问题描述】:我使用自定义标记来给出我当前的位置,但问题是它在我输入的位置显示图像部分的底部。我... 查看详情

在谷歌地图上显示我的位置?

...描述】:我从w3school获取他的代码。在这里,他们展示了如何将用户直接带到JavaScript代码中编写的地址。我不想将用户带到我在代码中设置的某个位置,而是将用户带到地图中的当前位置,但我可以找到一种方法来做到这一点。... 查看详情

java示例代码_在谷歌地图上显示当前位置附近的多个位置

java示例代码_在谷歌地图上显示当前位置附近的多个位置 查看详情

应用程序启动地图活动后,如何在 android 的地图中显示我的当前位置

】应用程序启动地图活动后,如何在android的地图中显示我的当前位置【英文标题】:Howtoshowmycurrentlocationinmapsinandroidassoonastheappstartsthemapactivity【发布时间】:2017-04-2115:41:21【问题描述】:该怎么做,一旦我打开我的应用程序的... 查看详情

Android:如何使用谷歌地图在我的应用中显示用户当前位置?

】Android:如何使用谷歌地图在我的应用中显示用户当前位置?【英文标题】:Android:HowdoIdisplayuserscurrentlocationinmyapp,usinggooglemaps?【发布时间】:2011-10-0912:58:27【问题描述】:如何使用谷歌地图在我的应用中显示用户当前位置?我... 查看详情

如何在谷歌地图 api v2 上获取设备的当前位置?

】如何在谷歌地图apiv2上获取设备的当前位置?【英文标题】:Howtogetcurrentlocationofdeviceongooglemapsapiv2?【发布时间】:2015-10-1221:59:47【问题描述】:我找到了一些方法可以做到这一点,但已被弃用或不起作用。我想从设备获取当前... 查看详情

在谷歌地图中将当前位置映射到目的地位置

】在谷歌地图中将当前位置映射到目的地位置【英文标题】:mappingcurrentlocationtodestinationlocationingoogleMaps【发布时间】:2011-07-0918:18:29【问题描述】:我的注释上有一个按钮,如下所示调用谷歌地图。我正在尝试将一条路线从我... 查看详情

如何使用 swift 在谷歌地图中更改我的位置按钮的位置

】如何使用swift在谷歌地图中更改我的位置按钮的位置【英文标题】:Howtochangelocationofmylocationbuttoningooglemapsusingswift【发布时间】:2017-11-3008:27:13【问题描述】:我在我的项目中使用谷歌地图我想显示我的位置按钮有点上升我应... 查看详情

谷歌地图中的当前位置与swift

...hswift【发布时间】:2016-04-2914:45:15【问题描述】:我试图在谷歌地图上显示用户的当前位置,但在以下情况下,地图甚至没有显示。我应该改变什么来解决这个问题?varlocationManager=CLLocationManager()overridefuncviewDidLoad()super.viewDidL 查看详情

如何在谷歌地图中设置几个特定的​​位置?

】如何在谷歌地图中设置几个特定的​​位置?【英文标题】:HowtosetseveralspecificlocationsinGoogleMap?【发布时间】:2016-11-2710:26:48【问题描述】:我想为德黑兰的自行车站制作一个安卓应用程序。为此,我需要在地图上显示特定的... 查看详情