도저히 못하겠네요.. 소스는 건드리다가 다 꼬이고 망했습니다..

포기할까봐요..

 

package hs.test.pro1;

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

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.MyLocationOverlay;
import com.google.android.maps.Overlay;
import com.google.android.maps.MapView.LayoutParams;

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Point;
import android.location.Address;
import android.location.Criteria;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;

import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

public class sub5 extends MapActivity implements LocationListener {

 MapView mapView;

    MapController mc;

    GeoPoint p;

    LocationManager locationMgr;

    Context context = null;
    TextView t;        
   
    Location location;
   

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sub5);

        mapView = (MapView) findViewById(R.id.mapview);
        mapView.setBuiltInZoomControls(true);
        mapView.displayZoomControls(true);
        //mapView.setStreetView(false);
        //mc.setZoom(17);
        mc = mapView.getController();
       
        locationMgr = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        Criteria criteria = new Criteria();
        criteria.setAccuracy(Criteria.NO_REQUIREMENT);
        criteria.setPowerRequirement(Criteria.NO_REQUIREMENT);
        String best = locationMgr.getBestProvider(criteria, true); 
        //베스트 근접 공급자
        locationMgr.requestLocationUpdates(best, 1000, 0, this);             //내 위치에 로케이팅
       
        location  = locationMgr.getLastKnownLocation(best);
               

        Toast.makeText(this, " 현재 위치를 표시합니다 ", Toast.LENGTH_SHORT).show(); 
        MapOverlay mapOverlay = new MapOverlay();
        List<Overlay> listOfOverlays = mapView.getOverlays();
        listOfOverlays.clear();
        listOfOverlays.add(mapOverlay);  

        mapView.invalidate();
    }

 @Override

    protected boolean isRouteDisplayed() {
        return true;
    }
 
 
  public void onLocationChanged(Location location) {

   //double lat = location.getLatitude();
   //double lon = location.getLongitude();
   //GeoPoint p = new GeoPoint((int)(lat * 1E6), (int)(lon*1E6));    //현재위치(처음) 위도,경도
  
   mc.animateTo(p);
   mc.setZoom(18);
  }

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

    class MapOverlay extends com.google.android.maps.Overlay  {

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

            //지리좌표를 화면픽셀좌표로 변환
            Point screenPts = new Point();
            if(p != null) mapView.getProjection().toPixels(p, screenPts);
            //위에서 변환한 화면좌표에 화살표 이미지를 그려준다
            Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
            Paint paint = new Paint();
            paint.setAlpha(60);
            canvas.drawBitmap(bmp, screenPts.x-bmp.getWidth()/2, screenPts.y, paint);        
            return true;
        }  
      
        boolean isTouched;
       

        @Override
        public boolean onTouchEvent(MotionEvent event, MapView mapView) {
         locationMgr = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
            Criteria criteria = new Criteria();
            criteria.setAccuracy(Criteria.NO_REQUIREMENT);
            criteria.setPowerRequirement(Criteria.NO_REQUIREMENT);
            String best = locationMgr.getBestProvider(criteria, true);
         
            location  = locationMgr.getLastKnownLocation(best);
           
            double la, lo;
           
            if (location != null) {            
             la = location.getLatitude();           
             lo = location.getLongitude();
             //GeoPoint sp = mapView.getProjection().fromPixels((int)la, (int)lo);
             
             Location locationA = new Location("A");
             locationA.setLatitude(la);
             locationA.setLongitude(lo);

         if(event.getAction()== MotionEvent.ACTION_DOWN) {
          isTouched = true;
         }else if(event.getAction()== MotionEvent.ACTION_MOVE) {
          isTouched = false;
         }
         if (event.getAction() == MotionEvent.ACTION_UP && isTouched) {
                 // 터치된 화면의 좌표를 지리좌표로 변환한다
                    GeoPoint touchGP = mapView.getProjection().fromPixels(
                         (int)event.getX(),(int)event.getY());
                   
                    Location locationB = new Location("B");
                 locationB.setLatitude(touchGP.getLatitudeE6());
                 locationB.setLongitude(touchGP.getLongitudeE6());
                    
                 double distance;
                 String meter;
                 distance = locationA.distanceTo(locationB);
                 meter = Double.toString(distance/1000);
                    
       
                //android.util.Log.e("터치 이벤트", "위도:"+touchGP.getLatitudeE6()+", 경도:"+touchGP.getLongitudeE6());
                 
             Toast.makeText(getBaseContext(),
                 meter
                 ,Toast.LENGTH_SHORT).show();
               
                    t=(TextView)findViewById(R.id.maptextView1); //맵 텍스트뷰에 나타냄
        t.setText(""+
           touchGP.getLatitudeE6() / 1E6 + "," +
           touchGP.getLongitudeE6() /1E6);       
        
                p = touchGP;

                isTouched = false;
                return false;
         }}
            return false;
         }

    }

}