折线未在地图上绘制

Posted

技术标签:

【中文标题】折线未在地图上绘制【英文标题】:Polyline is not being drawn on the Map 【发布时间】:2013-05-23 16:07:53 【问题描述】:

我正在尝试在地图上绘制一条折线来跟踪我的位置。出于某种原因,我不确定为什么我的方法 onMyLocationChanged(location) 没有被调用并且没有在地图上绘制折线。这是与 lcoationToLatLng(loc) 方法一起使用的方法,该方法旨在帮助在地图上绘制多段线来跟踪我的去向。为什么不绘制这条折线?这是我的代码:

public class RouteTracking extends FragmentActivity implements View.OnClickListener, OnMyLocationChangeListener
    private GoogleMap mMap = null;
    private Context context = this;
    private Location lastLocationloc = null;

    @Override
protected void onCreate(Bundle load)  
    super.onCreate(load);

    setContentView(R.layout.fragment_ride_tracking);

    mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.myMapView)).getMap();
    int result = GooglePlayServicesUtil.isGooglePlayServicesAvailable(context);
    mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);

     //Get the current location
    LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
    Criteria criteria = new Criteria();
    String provider = locationManager.getBestProvider(criteria, true);
    Location location = locationManager.getLastKnownLocation(provider);

    //Zooms into the current location when the activity is started
    double latitude = location.getLatitude();
    double longitude = location.getLongitude();
    float zoom = (float) 10.0;
    mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(latitude, longitude), zoom));      


    if (mMap != null)  
        mMap.setMyLocationEnabled(true);
    
   

   @Override
   public void onMyLocationChange(Location location)  
       if (lastLocationloc == null)  
           lastLocationloc = location;
       
       LatLng lastLatLng = locationToLatLng(lastLocationloc);
       LatLng thisLatLng = locationToLatLng(location);
       mMap.addPolyline(new PolylineOptions().add(lastLatLng).add(thisLatLng).width(3).color(Color.RED));
       lastLocationloc = location;
   

   public static LatLng locationToLatLng(Location loc)  
       if (loc != null) 
           return new LatLng(loc.getLatitude(), loc.getLongitude());
       return null;
   

【问题讨论】:

【参考方案1】:

我觉得你应该实现LocationListener(implements LocationListener),然后把代码修改成:

   @Override
   public void onLocationChanged(Location location)  
       if (lastLocationloc == null)  
           lastLocationloc = location;
       
       LatLng lastLatLng = locationToLatLng(lastLocationloc);
       LatLng thisLatLng = locationToLatLng(location);
       mMap.addPolyline(new PolylineOptions().add(lastLatLng).add(thisLatLng).width(3).color(Color.RED));
       lastLocationloc = location;
   

试试看,希望能解决你的问题,祝你好运^^

【讨论】:

【参考方案2】:

您需要向位置经理请求(注册)更新(或者至少我没有看到您在哪里这样做)。

    public void init(Context context)
    
         this.context = context;

         locationManager = (LocationManager) this.context
            .getSystemService(Context.LOCATION_SERVICE);

         // exceptions will be thrown if gps provider is not permitted.
        try
        
             gpsEnabled = locationManager
                .isProviderEnabled(LocationManager.GPS_PROVIDER);

         catch (Exception e)
        
             Log.d("Fail", e.getMessage());
        

                // ask for gps updates from the device if gps is enabled
        if (gpsEnabled)
        
           locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,this);
        
    

【讨论】:

以上是关于折线未在地图上绘制的主要内容,如果未能解决你的问题,请参考以下文章

如何在谷歌地图的折线中点绘制标记?

如何在路线谷歌地图v2 android上绘制交互式折线

使用当前位置将折线绘制到目的地,并在谷歌地图上添加标记,标记颤动

如何使用多色折线绘制谷歌地图航路点

谷歌地图 Android API v2 - 折线上的信息窗口?

使折线水平显示在谷歌地图上并将其缩放到中心坐标