не можете отобразить мое местоположение прямо на карте? - PullRequest
0 голосов
/ 04 марта 2012

оверлей не появился и позиция не указана
изменил наложение и код карты из метода onCreat () на updateOverlays (), я просто хочу получить правильное местоположение и правильно установить наложение на карте

    public class tabsActivity extends MapActivity
    {
    private static final String LIST_TAB_TAG = "Notification";
    private static final String MAP_TAB_TAG = "Map";

    private TabHost tabHost;
    private ListView listView;
    private MapView mapView;
    MyLocationOverlay Compass;
    double longitude , latitude;
    MapController mc;
    GeoPoint point;

    protected LocationManager locationManager;

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

        LocationListener listener = new LocationListener() 
        {

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

            }

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

            }

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

            }

            @Override
            public void onLocationChanged(Location location) 
            {
                updateOverlays(location);
            }
        };

        LocationManager locMgr = (LocationManager) getBaseContext().getSystemService(Context.LOCATION_SERVICE);
        locMgr.requestLocationUpdates( LocationManager.GPS_PROVIDER, 0, 0, listener);

        // setup map view
        mapView = (MapView) findViewById(R.id.mapview);


        //Compass Setup
        Compass = new MyLocationOverlay(this, mapView);
        mapView.getOverlays().add(Compass);
        final MapController control = mapView.getController();



    }

    public void updateOverlays(Location location)
    {
        mapView.setBuiltInZoomControls(true);
        mapView.postInvalidate();
        mapView.setSatellite(true);
        mc = mapView.getController();

        point = new GeoPoint((int) location.getLatitude() , (int) location.getLongitude());
        mc.animateTo(point);
        mc.setZoom(10); 
        mapView.invalidate();

        OverlayItem overlayitem = new OverlayItem(point, "Hint", "Your Are Here");

        List<Overlay> mapOverlays = mapView.getOverlays();
        Drawable drawable =   this.getResources().getDrawable(R.drawable.black);
        MapOverlays itemizedoverlay = new MapOverlays(drawable, this);
        itemizedoverlay.addOverlay(overlayitem);
        mapOverlays.add(itemizedoverlay);
    }

1 Ответ

1 голос
/ 04 марта 2012

Вашу проблему легко объяснить: вы используете только то местоположение, которое вы получили, пока ваша программа все еще использует метод onCreate().

Вам необходимо обновить оверлей от слушателя.Поэтому создайте отдельный метод, который можно вызывать из LocationListener, который обновляет оверлей.

Edit:

в основном делает это (не завершено, но должно дать вам идею!)

public class MyMapActivity extends MapActivity {
    MapView mapView;
    LocationListener locListener;

    public onCreate() {
        // setup your map
        mapView = findViewById(R.id.my_map);
        // setup listener
        locListener = new LocationListener() {
            // override methods
            public void onLocationChanged(Location location) {
                updateOverlays(location);
            }
        }
    }

    public void updateOverlays(Location location) {
        // this is basically your code just a bit modified (removed unnecessary code and added new code)
        mc = mapView.getController();
        p = new GeoPoint(location.getLatitudeE6(), location.getLongitudeE6());

        mc.animateTo(p);
        mc.setZoom(10); 
        mapView.invalidate();

        // remove all existing overlays!
        List<Overlay> mapOverlays = mapView.getOverlays();
        mapOverlays.clear();

        //Compass Setup
        Compass = new MyLocationOverlay(this, mapView);
        mapOverlays.add(Compass);

        Drawable drawable = getResources().getDrawable(R.drawable.black);
        MapOverlays itemizedoverlay = new MapOverlays(drawable, this);

        OverlayItem overlayitem = new OverlayItem(p, "Hint", "Your Are Here");
        itemizedoverlay.addOverlay(overlayitem);
        mapOverlays.add(itemizedoverlay);
    }
}

Edit2:

У вас есть ошибка в расчете GeoPoint.Вы не даете 1E6 целых чисел, вы просто даете небольшие двойные числа.Измените

point = new GeoPoint((int) location.getLatitude() , (int) location.getLongitude());

на

point = new GeoPoint((int) (location.getLatitude() * 1E6), (int) (location.getLongitude() * 1E6));
...