簡體   English   中英

連續跟蹤用戶的位置並繪制路徑

[英]Tracking location of a user continuously and drawing a path wherever he goes

好吧,我開發了一個android程序來獲取您的位置。 現在我想要的是到達正確的位置並跟蹤您的運動,並在路徑圖上畫一條線。 閱讀了大量指南,但根本無法使它起作用

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback, LocationListener {

private GoogleMap mMap;
LocationManager locationManager;
String provider;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maps);
    // Obtain the SupportMapFragment and get notified when the map is ready to be used.
    SupportMapFragment mapFragment = (SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);
    locationManager = (LocationManager)    getSystemService(Context.LOCATION_SERVICE);
    provider = locationManager.getBestProvider(new Criteria(), false);

}

@Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;
    Location location= locationManager.getLastKnownLocation(provider);
    double lat =location.getLatitude();
    double lng =location.getLongitude();
    mMap.addMarker(new MarkerOptions().position(new LatLng(lat, lng)).title("Marker"));

    // Add a marker and move the camera

}

@Override
public void onLocationChanged(Location location) {
    Double lat = location.getLatitude();
    Double lng = location.getLongitude();
    mMap.addMarker(new MarkerOptions().position(new LatLng(lat, lng)).title("Marker"));
    mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(lat, lng), 10));
    Log.i("Latitude", lat.toString());

}

您編寫的所有代碼均已編寫,但是在Application啟動時您無法在onLocationChanged上工作。

  1. 如果存在緩存,則getLastKnownLocation返回location,否則返回null並在此處添加檢查。

      if(location!=null) { double lat =location.getLatitude(); double lng =location.getLongitude(); mMap.addMarker(new MarkerOptions().position(new LatLng(lat,lng)).title("Marker")); } 
  2. fusedlocation api位置fusedlocation api ,可通過位置進行更好的管理。

  3. 試試addMarker:

     public void drawMarker(double lat,double lon) { if (mMap != null) { MarkerOptions marker = new MarkerOptions().position(new LatLng(lat, lon)).title(" Maps Tutorial").snippet("Android Ruler"); marker.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)); // Moving Camera to a Location with animation CameraPosition cameraPosition = new CameraPosition.Builder().target(new LatLng(latitude, longitude)).zoom(12).build(); mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); mMap.addMarker(marker); } } 

請參閱此處: http : //coderzpassion.com/android-google-maps-v2-tutorial-with-markers/

  1. onLocationChanged(Location location):如果現有位置為空或當前位置精度大於現有精度,則存儲當前位置。

因此,您需要修改onLocationChanged(Location location)並將要更改的應用程序狀態值寫入如下代碼:

@Override
public void onLocationChanged(Location location) {

    double latitude = location.getLatitude();
    double longitude = location.getLongitude();

    myLatLng = new LatLng(latitude, longitude);

    zoomToPoints();

    if(!isDirectionDrawn) {

        new LongOperation().execute("");
    }https://developers.google.com/android/reference/com/google/android/gms/location/FusedLocationProviderApi
}

private void moveToCurrentLocation(LatLng currentLocation)
    {
    mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(currentLocation, 15));
    // Zoom in, animating the camera.
    mMap.animateCamera(CameraUpdateFactory.zoomIn());
    // Zoom out to zoom level 10, animating with a duration of 2 seconds.
    mMap.an


}

希望能幫助到你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM