Android: mapView не дает мне правильную позицию пользователя - PullRequest
0 голосов
/ 17 февраля 2011

В качестве темы я сейчас нахожусь в Швеции, но при запуске карты видно, что я в Англии.

Мой код выглядит так:

private MapListener myMapViewListener;
private MapController mapController;
private GeoPoint test;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mapview);
    setupListener();

    MapView mapView = (MapView) findViewById(R.id.mapview);
    mapController = mapView.getController();
    mapView.setBuiltInZoomControls(true);
    mapView.setClickable(true);

     mapController.setZoom(7); // defualt zoom    
}

private void setupListener() {

    LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
    MapListener listener = new MapListener();
    MapView mapView = (MapView) findViewById(R.id.mapview);

    LocationListener locationListener = new LocationListener() {
        public void onLocationChanged(Location location) {
            test = new GeoPoint((int)location.getLatitude()*1000000, (int)location.getAltitude()*1000000);
            mapController.animateTo(test);
        }

        @Override
        public void onProviderDisabled(String provider) {
            // TODO Auto-generated method stub

        }
        @Override
        public void onProviderEnabled(String provider) {
            // TODO Auto-generated method stub

        }
        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
            // TODO Auto-generated method stub

        }
    };
    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
}

}

Я добавил ........

    <uses-library android:name="com.google.android.maps" />
</application>

 <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-   permission>
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
   <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>   

  </manifest>

..... в моем манифесте.

Я использую http://developer.android.com/guide/topics/location/obtaining-user-location.html в качестве руководства.

Очень благодарен за помощь!

Ответы [ 2 ]

4 голосов
/ 17 февраля 2011

Вы на самом деле неправильно задаете географическую точку.Вы устанавливаете широту и высоту здесь.

test = new GeoPoint((int)location.getLatitude()*1000000, (int)location.getAltitude()*1000000)

Вы хотите установить широту и долготу

test = new GeoPoint((int)location.getLatitude()*1000000, (int)location.getLongitude()*1000000)

Также попробуйте проверить класс MyLocationOverlay

3 голосов
/ 17 февраля 2011

он преобразуется в целое число, прежде чем он умножает, поэтому вам нужно скобки вокруг вычисления. Заменить на это.

test = new GeoPoint((int)(location.getLatitude()*1000000), 
     (int)(location.getLongitude()*1000000));

Вы также можете проверить MyLocationOverlay , если хотите нарисовать свое местоположение на карте.

Для использования MyLocationOverlay.

MyLocationOverlay myLocationOverlay = new MyLocationOverlay(this, mapView);
mapView.getOverlays().add(myLocationOverlay);
myLocationOverlay.enableMyLocation();

В режиме паузы вы также должны вызвать myLocationOverlay.disableMyLocation (), чтобы он не разряжал батарею, когда ваша деятельность находится в фоновом режиме.

...