지도에 경로를 띄우고 DDMS로 현재 위치를 보내거나 KML 파일을 실행시키면 경로가 지워지는데...ㅜㅜ

 

안지워지게 할수 있는 방법이 없나요???

 

---------------------------------------------------------------------------------------------

 

map.java

 

package net.hybus.TextViewApp;

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.xml.sax.SAXException;

import android.graphics.Color;
import android.os.Bundle;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;

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

import java.io.*;
import java.util.*;

import android.app.*;
import android.os.Bundle;
import android.content.*;
import android.location.*;
import android.view.*;
import android.widget.*;
import android.graphics.*;

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.Overlay;
import com.google.android.maps.Projection;

 public class map extends MapActivity implements LocationListener{
 
  private MapView mapView;
  public TextView textView;
 
  int latitude=37500000;
  int longitude=127500000;
  MapView map_view;
  MapController controller;
  LocationManager manager;
  Location curLocation;
  String provider;
  Geocoder coder;
  String TAG="MapTestActivity";
  final static int QuestionDialog = 1;
    
  @Override
  protected void onCreate(Bundle arg0) {
   // TODO Auto-generated method stub
   super.onCreate(arg0);
   setContentView(R.layout.map);
   mapView = (MapView)findViewById(R.id.map_view);
   controller = mapView.getController();
   mapView.setBuiltInZoomControls(true);
   checkProvider();
   coder = new Geocoder(getApplicationContext(), Locale.KOREA);
   Fun();
  }  
  
  public void Fun()
  {

   TelephonyManager tm = (TelephonyManager)   getSystemService(TELEPHONY_SERVICE);

   if(tm.getNetworkCountryIso() == "kr")
   {
    Toast.makeText(map.this, "korea.",Toast.LENGTH_SHORT).show();
   }

   else
   {

    double src_lat = 37.796979; // the testing source
    double src_long = -122.393092;
    double dest_lat = 38.09986; // the testing destination
    double dest_long = -122.263053;
    GeoPoint srcGeoPoint = new GeoPoint((int) (src_lat * 1E6),
      (int) (src_long * 1E6));
    GeoPoint destGeoPoint = new GeoPoint((int) (dest_lat * 1E6),
      (int) (dest_long * 1E6));

    DrawPath(srcGeoPoint, destGeoPoint, Color.GREEN, mapView);

    mapView.getController().animateTo(srcGeoPoint);
    mapView.getController().setZoom(15);

   }
  }


  private void DrawPath(GeoPoint src,GeoPoint dest, int color, MapView mMapView01)
  {
   // connect to map web service
   StringBuilder urlString = new StringBuilder();
   urlString.append("http://maps.google.com/maps?f=d&hl=en");
   urlString.append("&saddr=");//from
   urlString.append( Double.toString((double)src.getLatitudeE6()/1.0E6 ));
   urlString.append(",");
   urlString.append( Double.toString((double)src.getLongitudeE6()/1.0E6 ));
   urlString.append("&daddr=");//to
   urlString.append( Double.toString((double)dest.getLatitudeE6()/1.0E6 ));
   urlString.append(",");
   urlString.append( Double.toString((double)dest.getLongitudeE6()/1.0E6 ));
   urlString.append("&ie=UTF8&0&om=0&output=kml");
   
   urlString.append("&dirflg=w"); // map mode change = driving, walking, etc


   Log.d("xxx","URL="+urlString.toString());
   
   
   // get the kml (XML) doc. And parse it to get the coordinates(direction route).
   Document doc = null;
   HttpURLConnection urlConnection= null;
   URL url = null;
   
   try
   {
    url = new URL("urlString.toString();
    urlConnection=(HttpURLConnection)url.openConnection();
    urlConnection.setRequestMethod("GET");
    urlConnection.setDoOutput(true);
    urlConnection.setDoInput(true);
    urlConnection.connect();

    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = dbf.newDocumentBuilder();
    doc = db.parse(urlConnection.getInputStream());

    if(doc.getElementsByTagName("GeometryCollection").getLength()>0)
    {
     //String path = doc.getElementsByTagName("GeometryCollection").item(0).getFirstChild().getFirstChild().getNodeName();
     String path = doc.getElementsByTagName("GeometryCollection").item(0).getFirstChild().getFirstChild().getFirstChild().getNodeValue() ;
     Log.d("xxx","path="+ path);
     String[] pairs = path.split(" ");
     String[] lngLat = pairs[0].split(","); // lngLat[0]=longitude lngLat[1]=latitude lngLat[2]=height
     // src
     GeoPoint startGP = new GeoPoint((int)(Double.parseDouble(lngLat[1])*1E6),(int)(Double.parseDouble(lngLat[0])*1E6));
     mMapView01.getOverlays().add(new MyOverLay(startGP,startGP,1));
     GeoPoint gp1;
     GeoPoint gp2 = startGP;
     
     for(int i=1;i<pairs.length;i++) // the last one would be crash
     {
      lngLat = pairs[i].split(",");
      
      gp1 = gp2;
      // watch out! For GeoPoint, first:latitude, second:longitude
      gp2 = new GeoPoint((int)(Double.parseDouble(lngLat[1])*1E6),(int)(Double.parseDouble(lngLat[0])*1E6));
      mMapView01.getOverlays().add(new MyOverLay(gp1,gp2,2,color));
      Log.d("xxx","pair:" + pairs[i]);
     }
     
     mMapView01.getOverlays().add(new MyOverLay(dest,dest, 3)); // use the default color
    }
   }
   catch (MalformedURLException e)
   {
    e.printStackTrace();
   }
   catch (IOException e)
   {
    e.printStackTrace();
   }
   catch (ParserConfigurationException e)
   {
    e.printStackTrace();
   }
   catch (SAXException e)
   {
    e.printStackTrace();
   }
  }

 

  @Override
  protected boolean isRouteDisplayed() {
   // TODO Auto-generated method stub
   return false;
  }
 
 
  
  @Override
  protected void onResume() {
   super.onResume();
   
   // 마지막으로 얻은 위치가 있으면 보기
   
   Location loc = manager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
   if (loc != null) {
    onLocationChanged(loc);
   }
   // 현재 위치가 변화하는 경우 메서드가 호출되도록 등록, 1초마다 5km 이동시
   manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 5, this);
   // 기지국으로 부터 위치정보를 업데이트 요청
   //manager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 5, this);
  }

  @Override
  protected void onPause() {
   super.onPause();
   // 위치 정보 통지 등록 취소
         manager.removeUpdates(this);
     }
    
  
  // 지도상에 화살표 이미지와 텍스트 문자열을 표시한다.
  public void setOverlay(GeoPoint p, String addr) {
   Bitmap icon = BitmapFactory.decodeResource(
      getResources(),R.drawable.position);
   IconOverlay overlay = new IconOverlay(icon, p, addr);
   List<Overlay> overlays = mapView.getOverlays();
   overlays.clear();      // 위치가 이동되면 기존 overlay 정보는 제거
   overlays.add(overlay);
  }
  
  // GeoCoder 를 이용하여 수신된 위치정보에 대한 주소를 찾아서 문자열로 반환
  private String showLocationName(Location loc) {
   double latitude = loc.getLatitude();
   double longitude = loc.getLongitude();
   StringBuffer buff = new StringBuffer();
   try {
    List<Address> addrs = coder.getFromLocation(latitude, longitude, 1);

    for (Address addr : addrs) {
     int index = addr.getMaxAddressLineIndex();
     for (int i = 0; i <= index; ++i) {
      buff.append(addr.getAddressLine(i));
      buff.append(" ");
     }
     //buff.append("\n");
    }
   } catch (IOException e) {
    Toast.makeText(this, e.toString(), Toast.LENGTH_SHORT).show();
   }
   return buff.toString();
  }

  // 가장 베스트하게 사용가능한 Provider 를 검색
  public void checkProvider() {
   manager=(LocationManager)getSystemService(Context.LOCATION_SERVICE);
   Criteria cta=new Criteria();
   cta.setAccuracy(Criteria.ACCURACY_FINE);  // 정확도
   cta.setPowerRequirement(Criteria.POWER_HIGH); // 전원 소비량
   cta.setAltitudeRequired(false);     // 고도, 높이 값을 얻어 올지를 결정
   cta.setSpeedRequired(true);      //  속도
   cta.setCostAllowed(false);      //  위치 정보를 얻어 오는데 들어가는 금전적 비용
   provider=manager.getBestProvider(cta, true);
  }

  // 위치정보가 갱신되면 호출
  public void onLocationChanged(Location location) {
   GeoPoint gp = new GeoPoint((int)(location.getLatitude()*1E6),
         (int)(location.getLongitude

 ()*1E6));
   controller.animateTo(gp);
   curLocation = location;
   String strloc = String.format("위도:%f 경도:%f 속도:%f",
     (float)location.getLatitude(), (float)location.getLongitude

 (), (float)(location.getSpeed()*3.6));
   setOverlay(gp, strloc);
  }

  // 위치정보를 제공하는 프로바이더가 disable 되었을때 호출
  public void onProviderDisabled(String provider) {
  }

  // 위치정보를 제공하는 프로바이더가 enable 되었을때 호출
  public void onProviderEnabled(String provider) {
  }

  // 위치정보를 제공하는 프로바이더가 enable 또는 disable 되었을때 호출
  public void onStatusChanged(String provider, int status, Bundle extras) {
  }

  // 지도위에 이미지나 텍스트를 출력하기 위한 클래스
  private class IconOverlay extends Overlay {

   Bitmap mIcon;
   GeoPoint mPoint;
   String addr;
   int mOffsetX;
   int mOffsetY;

   IconOverlay(Bitmap icon, GeoPoint initial, String addr) {
    mIcon = icon;
    mOffsetX = 0 - icon.getWidth() / 2 + 5;
    mOffsetY = 0;    //-icon.getHeight();
    mPoint = initial;
    this.addr=addr;
   }

   // 지도를 탭하면 호출
   @Override
   public boolean onTap(GeoPoint point, MapView mapView) {
    mPoint = point;
    return super.onTap(point, mapView);
   }

   // 지도를 그릴 때, shadow = true, shadow = false를 2 번 호출
   @Override
   public void draw(Canvas canvas, MapView mapView, boolean shadow) {
    super.draw(canvas, mapView, shadow);
    if (!shadow) {
     // 지도상의 위치와 그린의 Canvas의 좌표 변환
     Projection projection = mapView.getProjection();
     Point point = new Point();
     Paint paint=new Paint();
     paint.setAntiAlias(true);
     paint.setShadowLayer(10, 0, 0, Color.GRAY);
     paint.setTextSize(14);  
     paint.setColor(Color.RED);
     projection.toPixels(mPoint, point);
     canvas.drawText(addr, point.x-20, point.y+50, paint);
     point.offset(mOffsetX, mOffsetY);
     // 아이콘 그리기
     canvas.drawBitmap(mIcon, point.x, point.y, null);
    }
   }
  }
  
 }//IconOverlay끝
  

  
  
 /** Called when the activity is first created. */

 

 

 

---------------------------------------------------------------------------------------------------------------------------------

MyOverLay.java

 

package net.hybus.TextViewApp;

import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.RectF;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.Projection;

public class MyOverLay extends Overlay
{

 private GeoPoint gp1;
 private GeoPoint gp2;
 private int mRadius=6;
 private int mode=0;
 private int defaultColor;
 private String text="";
 private Bitmap img = null;

 public MyOverLay(GeoPoint gp1,GeoPoint gp2,int mode) // GeoPoint is a int. (6E)
 {
  this.gp1 = gp1;
  this.gp2 = gp2;
  this.mode = mode;
  defaultColor = 999; // no defaultColor

 }

 public MyOverLay(GeoPoint gp1,GeoPoint gp2,int mode, int defaultColor)
 {
  this.gp1 = gp1;
  this.gp2 = gp2;
  this.mode = mode;
  this.defaultColor = defaultColor;
 }
 public void setText(String t)
 {
  this.text = t;
 }
 public void setBitmap(Bitmap bitmap)
 {
  this.img = bitmap;
 }
 public int getMode()
 {
  return mode;
 }

 @Override
 public boolean draw
 (Canvas canvas, MapView mapView, boolean shadow, long when)
 {
  Projection projection = mapView.getProjection();
  if (shadow == false)
  {
   Paint paint = new Paint();
   paint.setAntiAlias(true);
   Point point = new Point();
   projection.toPixels(gp1, point);
   // mode=1&#65306;start
   if(mode==1)
   {
    if(defaultColor==999)
     paint.setColor(Color.BLUE);
    else
     paint.setColor(defaultColor);
    RectF oval=new RectF(point.x - mRadius, point.y - mRadius,
      point.x + mRadius, point.y + mRadius);
    // start point
    canvas.drawOval(oval, paint);
   }
   // mode=2&#65306;path
   else if(mode==2)
   {
    if(defaultColor==999)
     paint.setColor(Color.RED);
    else
     paint.setColor(defaultColor);
    Point point2 = new Point();
    projection.toPixels(gp2, point2);
    paint.setStrokeWidth(5);
    paint.setAlpha(120);
    canvas.drawLine(point.x, point.y, point2.x,point2.y, paint);
   }
   /* mode=3&#65306;end */
   else if(mode==3)
   {
    /* the last path */

    if(defaultColor==999)
     paint.setColor(Color.GREEN);
    else
     paint.setColor(defaultColor);
    Point point2 = new Point();
    projection.toPixels(gp2, point2);
    paint.setStrokeWidth(5);
    paint.setAlpha(120);
    canvas.drawLine(point.x, point.y, point2.x,point2.y, paint);
    RectF oval=new RectF(point2.x - mRadius,point2.y - mRadius,
      point2.x + mRadius,point2.y + mRadius);
    /* end point */
    paint.setAlpha(255);
    canvas.drawOval(oval, paint);
   }
  }
  return super.draw(canvas, mapView, shadow, when);
 }

 

-----------------------------------------------------------------------------------------------------------------------------------------

}