검색결과 리스트
글
좌표값 위도와 경도로 위치주소 구하기
안드로이드/애플리케이션 제작
2014. 8. 10. 01:15
지도 기반의 프로그램을 개발하시는 분들이라면 GPS와 같은 기능을 통해 원하는 위치의 좌표값을 구하실 수 있습니다. 안드로이드에서는 이를 활용하여 해당위치의 주소를 불러올 수 있는데요 이는 Geocoder 클래스를 사용하여 만들 수 있습니다.
Geocoder를 활용하여 간단한 프로그램을 만들어보았습니다. 동작환경은 2.3.3 진저브레드입니다.
MainActivity.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | import java.io.IOException; import java.util.List; import java.util.Locale; import android.support.v7.app.ActionBarActivity; import android.location.Address; import android.location.Geocoder; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends ActionBarActivity { TextView textview1; EditText edittext1, edittext2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textview1 = (TextView) findViewById(R.id.textView1); edittext1 = (EditText) findViewById(R.id.editText1); edittext2 = (EditText) findViewById(R.id.editText2); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } public void OnClick(View v){ double lat, lng; String getDouble; switch(v.getId()){ case R.id.button1: getDouble = edittext1.getText().toString(); if(getDouble.equalsIgnoreCase("")){ Toast.makeText(MainActivity.this, "위도값을 입력하세요.", Toast.LENGTH_LONG).show(); break; }else{ lat = Double.parseDouble(getDouble); } getDouble = edittext2.getText().toString(); if(getDouble.equalsIgnoreCase("")){ Toast.makeText(MainActivity.this, "경도값을 입력하세요.", Toast.LENGTH_LONG).show(); break; }else{ lng = Double.parseDouble(getDouble); } getLocation(lat, lng); } } public void getLocation(double lat, double lng){ String str = null; Geocoder geocoder = new Geocoder(this, Locale.KOREA); List<Address> address; try { if (geocoder != null) { address = geocoder.getFromLocation(lat, lng, 1); if (address != null && address.size() > 0) { str = address.get(0).getAddressLine(0).toString(); } } } catch (IOException e) { Log.e("MainActivity", "주소를 찾지 못하였습니다."); e.printStackTrace(); } textview1.setText(str); } } |
activity_main.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="주소 출력" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="위도" /> <EditText android:id="@+id/editText1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:ems="10" android:inputType="numberDecimal" > <requestFocus /> </EditText> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/textView3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="경도" /> <EditText android:id="@+id/editText2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:ems="10" android:inputType="numberDecimal" /> </LinearLayout> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="주소확인" android:onClick="OnClick" /> </LinearLayout> |
Manifest.xml에는 다음과 같이 퍼미션을 설정시켜 줍니다.
1 2 3 4 5 6 7 | <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <library android:name="com.google.android.maps"/> |
프로그램을 실행하면 다음과 같은 결과를 얻으실 수 있습니다.
300x250
'안드로이드 > 애플리케이션 제작' 카테고리의 다른 글
안드로이드 SDK 업데이트 후 이클립스에서 실행이 안될 때(Android ADT 재설치) (0) | 2014.09.27 |
---|---|
숨겨진 Activity 혹은 Fragment의 Thread를 종료시키는 방법 (1) | 2014.09.11 |
Didn't find class "android.support.v4.view.ViewPager" (0) | 2014.08.24 |
URL을 통해 안드로이드로 xml 파일 다운로드 (0) | 2014.08.17 |
(JSON) 기상청으로부터 지역코드 받아오기 (2) | 2014.08.15 |