如果我想在地图上使用GPS加覆盖项目我想、在地、图上、项目

2023-09-12 23:00:45 作者:在回忆中死去°

这是我的code 在此输入code <

here is my code 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在我的特定位置出现

whats wrong i'm doing i want to add other overlay rather than the one appear when i open the gps at my specific location

推荐答案

我会尝试的基础上的(小)的信息你给了回答。

I'll try to answer based on the (little) info you gave.

您code显示MapOverlay绘制一个位图在一个点上。

Your code shows a MapOverlay that draws a bitmap over one point.

在您的应用程序的的onCreate()方法创建MapOverlay并将其添加到YOUT图形页面,的叠加打印列表中,但你永远不会调用 setPointToDraw(),所以你最终有一个空的GeoPoint 您总是清除覆盖的列表之前addind一个新的,所以你总是最后一个叠加。 如果你想显示多点,你可以使用 ItemizedOverlay 如果你想显示用户的当前位置,你可以使用 MyLocationOverlay In the onCreate() method of your application you create MapOverlay and add it to the list of overlays of yout MapView, but you never call setPointToDraw() so you end up with a null GeoPoint You are always clearing the list of overlays before addind a new one, so you always end up with one overlay. If you want to display multiple points you can use ItemizedOverlay If you want to display the users current location you can use MyLocationOverlay