如何在Here地图中实现当前位置的蓝色图标

8
我正在使用Here Map SDK,需要展示一个带有圆形动画的蓝色图标,用于显示当前位置,就像图片中的一样。

enter image description here

有人能告诉我如何做吗。

现在我有一段代码,只设置了图标,是蓝点。我不知道如何添加圆形动画。

请注意,mMap 引用是来自 Here Android SDK 的 地图对象

 mMap.getPositionIndicator().setVisible(true);
                    mMap.getPositionIndicator().setZIndex(0);
                    mMap.setZoomLevel(15);
                    mMap.getPositionIndicator().setAccuracyIndicatorVisible(true);
                    mMap.getPositionIndicator().setMarker(createImage(R.drawable.ic_location_dot));
8个回答

4
尝试这个:
mMap.setMyLocationEnabled(true);

此功能可启用或禁用“我的位置”图层。 当启用并且位置可用时,“我的位置”图层将持续绘制用户当前位置和方向的指示,并显示UI控件,使用户可以与其位置进行交互(例如,启用或禁用相机跟踪他们的位置和方向)。

如果您将其放在下面,效果会更好:

@Override
public void onMapReady(GoogleMap googleMap) {

}

看到标题中有“Here”地图,还是来到了这里(我需要一个谷歌地图的解决方案)。非常值得!! - Ishaan Kumar

1
你可以通过com.here.android.mpa.mapping.PositionIndicator类来控制HERE Maps当前位置图标。
该类的实例保存在com.here.android.mpa.mapping.MapView中,可能会被包装在像com.here.android.mpa.mapping.SupportMapFragment这样的片段中。
示例:
mapFragment.getPositionIndicator().setVisible(true)
mapView.getPositionIndicator().setAccuracyIndicatorVisible(true)

0

对于这个使用场景,最好编写自己的位置指示器。

需要做三件事情: 1:注册 PositioningManager 回调函数,将更新的位置传递给您的代码。 2:创建一个 MapMarker 并添加到地图上,该标记使用您所需的图像。 4:创建一个带有所需颜色的 MapCircle 并将其添加到地图上。 圆的半径应设置为 Positioning Manager 回调的精度参数。

实现这一点的逻辑是在接收到来自 PositioningManager 的新位置时更新 MapCircle 的半径,并更新 MapMarker 和 MapCircle 的 GeoCoordinate。

您可以通过使用定时器等动画来使任何精度更改产生动画效果。


0

我和你有同样的问题,在尝试了各种选项两周后,这些代码行对我起作用了,因此你可以显示“蓝色图标”

m_map.setCenter(new GeoCoordinate(latitudeGPS, longitudeGPS, 0.0),Map.Animation.NONE);
                m_mapFragment.getPositionIndicator().setVisible(true);
                m_map.getPositionIndicator().setAccuracyIndicatorVisible(true);
                Log.d("initialize bolita", "" + 1.1 );
                PositioningManager.getInstance().start(PositioningManager.LocationMethod.GPS_NETWORK);m_map.addMapObject(m_positionIndicatorFixed);

请确保您在清单文件中请求了所有权限。


0

对于 JavaScript,您可以使用

map.addObject(new H.map.Circle(
// The central point of the circle
{lat:28.6071, lng:77.2127},
// The radius of the circle in meters
1000,
{
  style: {
    strokeColor: 'rgba(55, 85, 170, 0.6)', // Color of the perimeter
    lineWidth: 2,
    fillColor: 'rgba(0, 128, 0, 0.1)'  // Color of the circle
  }
}
));

应该有一个类似的实现适用于安卓。


0

我已经成功地测试了这段代码,并使用用户当前位置调用addPulsatingEffect(Location userLocation)方法。

private Circle lastUserCircle;
private static final long PULSE_DURATION = 2000;
private static final float RADIUS = 200.0f;
private ValueAnimator lastPulseAnimator;

private void addPulsatingEffect(Location userLocation){

final LatLng userLatlng = new LatLng(userLocation.getLatitude(), userLocation.getLongitude());

if(lastPulseAnimator != null){
    lastPulseAnimator.cancel();
}

if(lastUserCircle != null) {
    lastUserCircle.setCenter(userLatlng);
}

lastPulseAnimator = valueAnimate(RADIUS, new ValueAnimator.AnimatorUpdateListener() {

    @Override
    public void onAnimationUpdate(ValueAnimator animation) {

        if(lastUserCircle != null)
            lastUserCircle.setRadius((Float) animation.getAnimatedValue());
        else {
            lastUserCircle = mMap.addCircle(new CircleOptions()
                    .center(userLatlng)
                    .radius((Float) animation.getAnimatedValue())
                    .strokeColor(Color.BLUE)
                    .strokeWidth(4.0f));
        }
    }
});
}

protected ValueAnimator valueAnimate(float radius, ValueAnimator.AnimatorUpdateListener updateListener){

ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, radius);
valueAnimator.setDuration(PULSE_DURATION);
valueAnimator.addUpdateListener(updateListener);
valueAnimator.setRepeatCount(ValueAnimator.INFINITE);
valueAnimator.setRepeatMode(ValueAnimator.RESTART);

valueAnimator.start();
return valueAnimator;
}

我找不到许多类,比如Circle、LatLng、addCircle方法等等。我正在使用Here Map,而mMap是我的地图对象。 - djk
是的,兄弟,“mMap”是“com.google.android.gms.maps.GoogleMap”的对象,“Circle”是“com.google.android.gms.maps.model.Circle”的对象,“LatLng”类是“com.google.android.gms.maps.model.LatLng”的对象。尝试导入这些类。它一定会起作用... - Amila
我正在使用Here Map SDK。所以这对我来说不起作用。 - djk

0
启用Google地图的MyLocation层。
googleMap.setMyLocationEnabled(true);

http://wptrafficanalyzer.in/blog/showing-current-location-in-google-maps-using-api-v2-with-supportmapfragment/ - Mukesh Kumar Swami
请参考此链接。 - Mukesh Kumar Swami
1
这个问题是关于Here地图而不是谷歌地图。 - luckyhandler

0
/* create a MarkerOptions */
MarkerOptions mOptions = new MarkerOptions();

/* create a MarkerInfoAdapter */
MarkerInfoAdapter infoAdapter = new MarkerInfoAdapter(MapsActivity.this.getLayoutInflater());

/* set MarkerInfoAdapter into your Map object */
MapFragment googleMap = FragmentManager.FindFragmentById<MapFragment> (Resource.Id.map);

/* get the GoogleMap object */
GoogleMap myMap = googleMap.getMapAsync(this);

/* set myMap type */
myMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);

/* set the MarkerInfoAdapter */
myMap.clear(); /* 
myMap.setInfoWindowAdapter(infoAdapter);


/* you must have your current location's LatLng  */
mOptions.position(currentLatLng); /* reach the position of the LatLng for that mark */

/* set the icon for your current location using BitmapDescriptorFactory */
mOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE));
myMap.addMarker(mOptions);

/* modify your marker icon to HUE_BLUE */                       mOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接