MyLocationOverlay: getMyLocation возвращает ноль - PullRequest
1 голос
/ 15 июля 2010

У меня есть страница просмотра карты, которая отображает текущее местоположение на карте.

Я использую MyLocationOverlay для этой цели. Код для этого выглядит следующим образом:

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

myLocationOverlay.runOnFirstFix(new Runnable() {
public void run() {
 geopoint = myLocationOverlay.getMyLocation();
 ItemizedOverlay itemizedoverlay = new ItemizedOverlay(drawable);
 try{
  overlayitem = new OverlayItem(geopoint, "", "");
 }
 catch(Exception e){
  e.printStackTrace();
 }
 itemizedoverlay.addOverlay(overlayitem);
 mapOverlays.add(itemizedoverlay);
 mapController.animateTo(geoPoint);

 }
});

Приведенный выше код работает, получает текущее местоположение через gps и устанавливает маркер в этой точке.

Но проблема заключается в коде внутри блока try. Я получаю нулевое значение внутри геопункта.

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

Может кто-нибудь подсказать решение для этого?

Ответы [ 4 ]

1 голос
/ 17 августа 2010

Я работаю над той же проблемой уже целый день, и вот что я обнаружил.По какой-то причине это работает

LocationManager lm;
GeoPoint gp;        

lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
Location lastKnownLoc = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);

if (lastKnownLoc != null){
  int longTemp = (int)(lastKnownLoc.getLongitude()* 1000000);
  int latTemp = (int)(lastKnownLoc.getLatitude() * 1000000);
  gp =  new GeoPoint(latTemp, longTemp);
}

, а это не

gp = myLocOverlay.getMyLocation();
0 голосов
/ 31 октября 2011

Друг наверху заставил меня подняться, пытаясь ничего не переопределить, ни рисовать, ни рисовать MyLocation. Просто так:

MyLocationOverlay myLocationOverlay = new SelfLocationOverlay(this, mapView);
myLocationOverlay.enableMyLocation();
myLocationOverlay.disableCompass();
mapView.getOverlays().add(myLocationOverlay);
0 голосов
/ 10 октября 2011

Если вы переопределите:

onLocationChanged();

Не забудьте позвонить:

super.onLocationChanged();

после или перед вашим собственным кодом. Похоже, это гарантирует, что переменная

getMyLocation()

Возвращает не ноль.

0 голосов
/ 12 октября 2010

Отслеживание текущего местоположения может быть сделано с помощью класса MyLocationOverlay и с помощью LocationManager.Используя MyLocationOverlay, код ниже работает ..

MyLocationOverlay myLocationOverlay;
MapView mapView;
MapController mapcontroller;
OverlayItem overlayitem;
List<Overlay> mapoverlays;
GeoPoint geopoint;

protected void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);
  setContentView(R.layout.currentlocation);

  mapView = (MapView) findViewById(R.id.map);

  mapView.setBuiltInZoomControls(true);
  mapView.setSatellite(false);
  mapView.setStreetView(true);
  mapView.setTraffic(true);

  mapcontroller = mapView.getController();
  mapoverlays = mapView.getOverlays();
  drawable = this.getResources().getDrawable(R.drawable.ic_map_red);
  mapView.invalidate();

  getCurrentLocation();             
}

public void getCurrentLocation(){  

   myLocationOverlay = new MyLocationOverlay(this, mapView);
   myLocationOverlay.enableCompass();
   myLocationOverlay.enableMyLocation();
   myLocationOverlay.runOnFirstFix(new Runnable() {

     public void run() {

   ItemizedOverlay itemizedoverlay = new ItemizedOverlay(drawable);

   try {
    latitude = myLocationOverlay.getMyLocation().getLatitudeE6();
    longitude = myLocationOverlay.getMyLocation().getLongitudeE6();
            geopoint = new GeoPoint((int) (latitude), (int) (longitude));
    overlayitem = new OverlayItem(geopoint, "", "");
    itemizedoverlay.addOverlay(overlayitem);
    mapoverlays.add(itemizedoverlay);
    mapcontroller.animateTo(geopoint);
    mapcontroller.setZoom(16);
   } 
   catch (Exception e) {}
    }           
  });       
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...