[안드로이드] GeoCoder를 이용한 해당 지역 좌표 얻기










지역 이름을 받아서,


해당 지역의 위도 경도와 주소 이름을 출력하는 것을 포스팅 하겠습니다.


사용할 클래스는 Geocoder랑 Address를 활용합니다.


아래는 geocoder 메소드 및 설명서인데 필요할 것 같아서 가져왔습니다.
(http://developer.android.com/reference/android/location/Geocoder.html)

geocoder 예제


사용할 메소드는 getFromLocationName을 사용할 예정입니다.



EditText로 입력 받은 글자를, 버튼을 통해 지역의 정보를 얻는 코드입니다.

/** * Created by Warguss on 2016-01-23. */
MainActivity.java
public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    EditText et_GeoInput;
    TextView tv_GeopText;
    Button btn_GeoStart;

    Geocoder mGeocoder;
    List<Address> mListAddress;
    Address mAddress;
    @Override    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Init();
    }

    public void Init()
    {
        et_GeoInput = (EditText)findViewById(R.id.et_GeoInput);
        tv_GeopText = (TextView)findViewById(R.id.tv_GeoTextView);
        btn_GeoStart = (Button)findViewById(R.id.btn_GeoStart);
        btn_GeoStart.setOnClickListener(this);
        mGeocoder = new Geocoder(this);
    }

    @Override    public void onClick(View v) {

        switch(v.getId())
        {
            case R.id.btn_GeoStart:
                String result = SearchLocation(String.valueOf(et_GeoInput.getText()));
                tv_GeopText.setText(result);
                et_GeoInput.setText(mAddress.getAddressLine(0));
                break;
        }
    }

    public String SearchLocation(String location)
    {
        String result = "";
        try{
            mListAddress = mGeocoder.getFromLocationName(location, 5);
            if(mListAddress.size() > 0)
            {
                mAddress = mListAddress.get(0); // 0 번째 주소값,                result = "lat : " + mAddress.getLatitude() + "\r\n" +
                         "lon : " + mAddress.getLongitude()+ "\r\n" +
                         "Address : " + mAddress.getAddressLine(0);
            }else                Toast.makeText(this, "위치 검색 실패", Toast.LENGTH_SHORT).show();
        }catch(IOException e)
        {
            e.printStackTrace();
        }

        return result;
    }
}






LanLon.java
/** * Created by Warguss on 2016-01-23. */
public class LatLon {
    double lat; // 위도    double lon; // 경도
    public LatLon(double nLat, double nLon)
    {
        lat = nLat; lon = nLon;
    }

    public double getLat() {
        return lat;
    }

    public double getLon() {
        return lon;
    }
}


activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    
     xmlns:tools="http://schemas.android.com/tools" 
     android:layout_width="match_parent"    
     android:layout_height="match_parent" 
     android:paddingLeft="@dimen/activity_horizontal_margin"    
     android:paddingRight="@dimen/activity_horizontal_margin"    
     android:paddingTop="@dimen/activity_vertical_margin"    
     android:orientation="vertical"    
     android:paddingBottom="@dimen/activity_vertical_margin" 
     tools:context=".MainActivity">

<LinearLayout        
         android:orientation="horizontal"        
         android:layout_width="wrap_content"        
         android:layout_height="wrap_content">

        <EditText            
          android:id = "@+id/et_GeoInput"            
          android:hint = "Input GeoName"            
          android:layout_width="wrap_content"            
          android:layout_height="wrap_content" />
        
<Button            
          android:text = "Start"            
          android:id= "@+id/btn_GeoStart"            
          android:layout_width="wrap_content"            
          android:layout_height="wrap_content" />
    </LinearLayout>

    <TextView        
         android:id = "@+id/tv_GeoTextView"        
         android:text="Please Start Button"        
         android:layout_width="wrap_content"       
         android:layout_height="wrap_content" />
</LinearLayout>



다음은 실행 결과 화면입니다.

geocoder 결과화면geocoder 결과화면



혹시 외국 지역 위도 경도 검색 하실때도,

한글로 쳐도 검색이 되긴 하더군요

조금 표기방식이 차이있지만, 몇개만 수정하시면 될 것 같습니다.



geocoder 결과화면

geocoder 결과화면










위 그림은, 디버그시 화면인데,  한국은 같이 붙어있는데 반해, 해외는 따로

떨어져 있으므로 구현하실 때, 참고하시기 바랍니다.


다음은 외국지역 위도경도 오차 비교입니다.


geocoder 결과화면




위 그림은 구글 맵으로 좌표를 얻은 것이구요

아래는 Geocoder를 통해 좌표를 얻은 것입니다.



geocoder 결과화면

























약간의 오차가 있긴 하네요.

혹시 좌표를 쓰시게 된다면 참고하시기 바랍니다.


전체 코드는 github https://github.com/warguss/GeoCoder 에서 받으실 수 있습니다.



추가로 읽으면 좋을 것

댓글

이 블로그의 인기 게시물

윤석열 계엄령 선포! 방산주 대폭발? 관련주 투자 전략 완벽 분석

대통령 퇴진운동 관련주: 방송·통신·촛불수혜주 완벽 분석

키움 OPEN API MFC 개발 (1)