我的位置点出现在街道谷歌地图eclipse

时间:2016-06-15 20:03:28

标签: android eclipse google-maps

我在Eclipse中使用Google地图开发了Android应用程序。问题是指示我当前位置的蓝点似乎总是与我驾驶的道路平行,在城市之外的道路上。但是,如果你已经在城市中已经处于最佳状态。

我正在使用它来获取应用程序开头的位置:

locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE);

        Criteria criteria = new Criteria();
        Location myLocation = locationManager.getLastKnownLocation(locationManager.getBestProvider(criteria, false));

然后我将蓝点添加到地图中:

googleMap.setMyLocationEnabled(true);

然后我开始听取位置变化:

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, time, 1, this);

我的位置更改功能:

@Override
    public void onLocationChanged(Location location) {
        if (location != null) {

            Lat1 = location.getLatitude();
            Long1 = location.getLongitude();

            if (Lat1 != Lat || Long1 != Long) {
                Lat = location.getLatitude();
                Long = location.getLongitude();
                if (startNav == true) {
                    googleMap.animateCamera(CameraUpdateFactory
                            .newLatLngZoom(new LatLng(location.getLatitude(), location.getLongitude()), 17));
                    b = new LatLng(Lat, Long);
                    if (a != null) {
                        String urlTopass = makeURL(b.latitude, b.longitude, a.latitude, a.longitude);
                        new connectAsyncTask(urlTopass).execute();
                    }
                }
            }
        }
    }

我的问题是为什么蓝点看起来与街道平行而不是在它上面?

1 个答案:

答案 0 :(得分:0)

使用FusedLocationProviderAPI。建议使用较旧的开源位置API,尤其是因为您已经在使用Google地图,因此您已经在使用Google Play服务。

只需设置位置监听器,并在每个onLocationChanged()回调中更新当前位置标记。如果您只想要一个位置更新,只需在第一个回调返回后取消注册回调。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

@Override
protected void onResume() {
    super.onResume();

    if (mGoogleApiClient == null || !mGoogleApiClient.isConnected()){
        buildGoogleApiClient();
        mGoogleApiClient.connect();
    }

    if (map == null) {
        MapFragment mapFragment = (MapFragment) getFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }
}

@Override
public void onMapReady(GoogleMap retMap) {
    map = retMap;
    setUpMap();
}

public void setUpMap(){
    map.setMapType(GoogleMap.MAP_TYPE_HYBRID);
    map.setMyLocationEnabled(true);
}

@Override
protected void onPause(){
    super.onPause();
    if (mGoogleApiClient != null) {
        LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this);
    }
}

protected synchronized void buildGoogleApiClient() {
    Toast.makeText(this, "buildGoogleApiClient", Toast.LENGTH_SHORT).show();
    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(LocationServices.API)
            .build();
}

@Override
public void onConnected(Bundle bundle) {
    Toast.makeText(this,"onConnected", Toast.LENGTH_SHORT).show();

    mLocationRequest = new LocationRequest();
    mLocationRequest.setInterval(1000);
    mLocationRequest.setFastestInterval(1000);
    mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
    //mLocationRequest.setSmallestDisplacement(0.1F);
    LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);
}

@Override
public void onConnectionSuspended(int i) {
}

@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
}

@Override
public void onLocationChanged(Location location) {
    mLastLocation = location;

    //remove previous current location Marker
    if (marker != null){
        marker.remove();
    }

    double dLatitude = mLastLocation.getLatitude();
    double dLongitude = mLastLocation.getLongitude();
    marker = map.addMarker(new MarkerOptions().position(new LatLng(dLatitude, dLongitude))
            .title("My Location").icon(BitmapDescriptorFactory
                    .defaultMarker(BitmapDescriptorFactory.HUE_RED)));
    map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(dLatitude, dLongitude), 8));

}
}