【问题标题】:How to implement current location blue icon in Here Map如何在此处地图中实现当前位置蓝色图标
【发布时间】:2017-06-27 17:36:26
【问题描述】:

我正在使用Here Map SDK,我需要为当前位置显示一个带有圆形动画的蓝色图标,如图所示。

谁能告诉我怎么做。

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

请注意,mMap 引用是 Map object from the 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));

【问题讨论】:

    标签: android here-api


    【解决方案1】:

    试试这个:

    mMap.setMyLocationEnabled(true);
    

    它启用或禁用我的位置层。 在启用且位置可用时,my-location 图层会持续绘制用户当前位置和方位的指示,并显示允许用户与其位置交互的 UI 控件(例如,启用或禁用对其位置的摄像头跟踪)位置和方位)。

    如果你把它放在下面会更好:

    @Override
    public void onMapReady(GoogleMap googleMap) {
    
    }
    

    【讨论】:

    • 在标题中看到“这里”的地图,仍然来到这里(我需要谷歌地图的解决方案)。值得!
    【解决方案2】:

    您可以通过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)
    

    【讨论】:

      【解决方案3】:

      对于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
        }
      }
      ));
      

      android应该有类似的实现。

      【讨论】:

        【解决方案4】:

        我已成功测试此代码,并使用用户当前位置调用 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 方法等。我在这里使用地图,mMap 是我的地图对象。
        • 是的,兄弟,“mMap”是“com.google.android.gms.maps.GoogleMap”的对象,“Circle”是“com.google.android.gms.maps”的对象。 model.Circle”,“LatLng”类是“com.google.android.gms.maps.model.LatLng”的对象。尝试导入这些类。它肯定会工作......
        • 我正在使用 Here Map SDK。这就是为什么这对我不起作用
        【解决方案5】:

        对于这个用例,最好自己编写位置指示器。

        要做三件事: 1:注册 PositioningManager 回调,将更新的位置传递给您的代码。 2:使用您想要的图像创建一个 MapMarker 并将其添加到地图中。 4:创建一个具有所需颜色的 MapCircle 并将其添加到地图中。圆的半径应设置为定位管理器回调的精度参数。

        执行此操作的逻辑是更新 MapCircle 的半径,并在从 PositioningManager 接收到新位置时更新 MapMarker 和 MapCircle 的 GeoCoordinate。

        您可以通过使用计时器等来为任何精度变化设置动画。

        【讨论】:

          【解决方案6】:
          /* 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));
          

          【讨论】:

            【解决方案7】:

            启用 Google 地图的 MyLocation 图层

            googleMap.setMyLocationEnabled(true);
            

            【讨论】:

            【解决方案8】:

            我遇到了和你一样的问题,在尝试了所有类型的选项两周后,这行代码对我有用,所以你可以显示“蓝色图标”

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

            确保您已请求清单上的所有权限。

            【讨论】:

              猜你喜欢
              • 2016-12-01
              • 1970-01-01
              • 2013-12-10
              • 1970-01-01
              • 2012-01-09
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多