GIS

ArcGIS for Android 거리측정 기능 만들기.

조심이 2013. 3. 19. 10:49
반응형

안드로이드로 ArcGIS 를 이용하여 앱을 만들때 거리측정만들기~~

//면적은 라인을 폐합하여 만드므로 마지막에 처음 시작점을 다시 넣어주고 면형Area로 만들면 됨.

 

1. 변수 지정

  public static Boolean tggDistance = false;  //거리측정 활성화 여부

  public static Boolean measureIsFirst = false;  //처음 시작점 여부.

  public static MapView m_pMap = null;  //맵뷰

  public static MultiPath poly = null;   //멀티패스

  public static string singTapType=""  //

 

 

2.맵레이어 추가 및 그래픽레이어 추가

 

//시작할때 맵과 그래픽 레이어를 추가

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

        context= this;
           
  m_pMap = (MapView) findViewById(R.id.mapControl);
  Envelope env = new Envelope(193268.974,521590.768,205273.717,535568.512);
  m_pMap.setExtent(env);
  
      ArcGISTiledMapServiceLayer TiledLayer = new ArcGISTiledMapServiceLayer(http://~~~~~~~~);
      m_pMap.addLayer(TiledLayer);
      

 

     //그래픽 레이어 추가
  GraphicsLayer  graphicsLayer = new GraphicsLayer();
      m_pMap.addLayer(graphicsLayer); 

 

m_pMap.setOnSingleTapListener(onMapSingleTapListener());  //화면 싱글탭 이벤트 리스너
    }

 

3. 거리측정 버튼 또는 이미지 클릭이벤트 처리

 //만약 거리측정 클릭이벤트가 실행되었다면...

 

{

     (!m_pMap.isLoaded())

   {
   return;
    }
       singTapType="polyLine"

       measureIsFirst = true;
       poly = new Polyline();
       graphicsLayer.removeAll();
        

 

}

 

4.화면 싱글탭 이벤트 구현

 

@SuppressWarnings("serial")
 private OnSingleTapListener onMapSingleTapListener() {
  return new OnSingleTapListener()
  {
   @Override
   public void onSingleTap(float x, float y)
   {
    if(!m_pMap.isLoaded()){
     return;
    }
    
      Point pPnt = m_pMap.toMapPoint(x,y);
     
     
    if(singTapType.equals("polyLine")){
     Graphic graphic = new Graphic(pPnt,new SimpleMarkerSymbol(Color.YELLOW,15,STYLE.CIRCLE));
     //graphic.setGeometry();
     graphicsLayer.addGraphic(graphic);
    
     
     if(measureIsFirst){
      poly.startPath(pPnt.getX(), pPnt.getY());
      measureIsFirst=false;
     }else{
      poly.lineTo(pPnt.getX(), pPnt.getY());
      graphicsLayer.addGraphic(new Graphic(poly,new SimpleLineSymbol(Color.YELLOW ,3)));
         

 


      double distance = poly.calculateLength2D;  //거리
      
      Toast.makeText(context, distance+" m", Toast.LENGTH_LONG).show();
     }
    
    
    } else{
     return;
    }
   }   
  };
 }

반응형