android:mapView并没有给我正确的用户位置

时间:2011-02-17 16:39:28

标签: android android-mapview

作为话题,我目前在瑞典,但在发布我的地图时,它显示我在英国。

我的代码如下所示:

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 个答案:

答案 0 :(得分:4)

您实际上是在创建错误的地理位置。您在这里设置纬度和海拔高度。

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

您需要设置纬度和经度

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

还可以尝试查看MyLocationOverlay

答案 1 :(得分:3)

它在进行乘法之前转换为int,因此您需要计算周围的parens。 替换为此。

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(),这样当你的活动在后台时它就不会耗尽电池。