如果我想使用gps在地图上添加叠加项

时间:2011-04-22 21:03:11

标签: android

这是我的代码enter code here <

package ntryn.n;


import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;
import com.google.android.maps.MapController;
import com.google.android.maps.GeoPoint;


import android.content.Context;

import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;

import android.location.Geocoder;
import android.location.Address;

import com.google.android.maps.Overlay;
import android.graphics.Canvas;
import android.graphics.Point;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.Drawable;

import java.util.List;
import java.util.Locale;
import java.io.IOException;




import android.os.Bundle;
import android.widget.Toast;

public class ntryn extends MapActivity {
    private MapView mapView;
    private MapController mapController;

    private LocationManager locationManager;
    private LocationListener locationListener;
    List<Overlay> mapOverlays;
    Drawable drawable, drawable2 ;
    HelloItemizedOverlay itemizedoverlay;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

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

        locationListener = new GPSLocationListener();

        locationManager.requestLocationUpdates(
            LocationManager.GPS_PROVIDER, 
            0, 
            0, 
            locationListener);

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

        // enable Street view by default
        mapView.setStreetView(true);

        // enable to show Satellite view
        // mapView.setSatellite(true);

        // enable to show Traffic on map
        // mapView.setTraffic(true);
        mapView.setBuiltInZoomControls(true);

        mapController = mapView.getController();
        mapController.setZoom(16); 

        mapController = mapView.getController();

        mapView.invalidate();

        GeoPoint p;
        String coordinates[] = {"30.084691643714909", "31.335958242416382"};
        double lat = Double.parseDouble(coordinates[0]);
        double lng = Double.parseDouble(coordinates[1]);

        p = new GeoPoint(
            (int) (lat * 1E6), 
            (int) (lng * 1E6));

        mapController.animateTo(p);
        mapController.setZoom(17); 

      //  HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(drawable);
        MapOverlay mapOverlay = new MapOverlay();
        List<Overlay> listOfOverlays = mapView.getOverlays();
        listOfOverlays.clear();
        listOfOverlays.add(mapOverlay);        

        mapView.invalidate();
    }


    @Override
    protected boolean isRouteDisplayed() {
        return false;
    }

    private class GPSLocationListener implements LocationListener 
    {
        public void onLocationChanged(Location location) {
            if (location != null) {
                GeoPoint point = new GeoPoint(
                        (int) (location.getLatitude() * 1E6), 
                        (int) (location.getLongitude() * 1E6));

                /* Toast.makeText(getBaseContext(), 
                        "Latitude: " + location.getLatitude() + 
                        " Longitude: " + location.getLongitude(), 
                        Toast.LENGTH_SHORT).show();*/

                mapController.animateTo(point);
                mapController.setZoom(16);

           //     GeoPoint point1 = new GeoPoint{"30.084691643714909,31.335958242416382"};

                // add marker
                MapOverlay mapOverlay = new MapOverlay();
                mapOverlay.setPointToDraw(point);
                List<Overlay> listOfOverlays = mapView.getOverlays();
                listOfOverlays.clear();
                listOfOverlays.add(mapOverlay);

                String address = ConvertPointToLocation(point);
                Toast.makeText(getBaseContext(), address, Toast.LENGTH_SHORT).show();

                mapView.invalidate();
            }
        }

        public String ConvertPointToLocation(GeoPoint point) {   
            String address = "";
            Geocoder geoCoder = new Geocoder(
                    getBaseContext(), Locale.getDefault());
            try {
                List<Address> addresses = geoCoder.getFromLocation(
                    point.getLatitudeE6()  / 1E6, 
                    point.getLongitudeE6() / 1E6, 1);

                if (addresses.size() > 0) {
                    for (int index = 0; index < addresses.get(0).getMaxAddressLineIndex(); index++)
                        address += addresses.get(0).getAddressLine(index) + " ";
                }
            }
            catch (IOException e) {                
                e.printStackTrace();
            }   

            return address;
        } 

        public void onProviderDisabled(String provider) {
        }

        public void onProviderEnabled(String provider) {
        }

        public void onStatusChanged(String provider, int status, Bundle extras) {
        }
    }




    class MapOverlay extends Overlay
    {
        private GeoPoint pointToDraw;
        private GeoPoint p1;
        public void setPointToDraw(GeoPoint point) {
            pointToDraw = point;

        }

        public GeoPoint getPointToDraw() {
            return pointToDraw;
        }
        public void setp1(GeoPoint po1) {
            p1 = po1;

        }

        public GeoPoint getp1() {
            return p1;
        }


        @Override
        public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when) {
            super.draw(canvas, mapView, shadow);                   

            // convert point to pixels
            Point screenPts = new Point();
            mapView.getProjection().toPixels(pointToDraw, screenPts);

            // add marker
            Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.dotred);
            canvas.drawBitmap(bmp, screenPts.x, screenPts.y - 24, null); // 24 is the height of image        
            return true;
        }
    }



}

我做错了我想添加其他叠加而不是在我在特定位置打开gps时出现的叠加

1 个答案:

答案 0 :(得分:0)

我会尝试根据您提供的(小)信息回答。

您的代码显示了一个MapOverlay,它在一个点上绘制位图。

  1. 在应用程序的onCreate()方法中,您创建MapOverlay并将其添加到MapView的叠加列表中,但您永远不会调用setPointToDraw(),因此您最终得到一个null GeoPoint < /强>
  2. 在添加新的叠加层之前,您始终会清除叠加层列表,因此您最终只能使用一个叠加层。
  3. 如果您想显示多个点,可以使用ItemizedOverlay
  4. 如果您想显示用户当前位置,可以使用MyLocationOverlay