돌아오신 것을 환영합니다
이번 영상에서는 geo decoder(지오 디코더)라는것을 만들건데 이것은 위도와 경도를가지고
일반인이 쉽게 읽을 수 있는 주소를 만들어줍니다
왜냐면 만약 누가 여러분에게 위도와 경도를 준다면 이쪽 분야에 전문가가 아니고서야
아무 쓸모가 없는 정보이기 때문입니다
대신 필요한것은 해당 위도와 경도로 나온 GPS 위치의 주소지 입니다
이 영상에선 그것을 다루어보겠습니다
이 함수는 locationUtils에 구성해야 하니 그쪽으로 가보겠습니다
지금 있는 function는 requestLocationUpdates와 hasLocationPermission이 있습니다
그리고 이제 reverseGeocodeLocation이라는 새로운 function를 추가합니다
그것은 location: locationData를 필요로 합니다
다시 말해 위도와 경도가 필요한 것입니다
그리고 문자열을 반환하는데 이것이 텍스트화 된 주소가 될 것 입니다
ㅤ
그러기 위해서 안드로이드 location 안에 있는 geocoder 타입의 geocoder이 필요합니다
Geocoder을 사용합니다
그리고 geocoder 객체를 만듭니다
이 geocoder 객체는 콘텍스트가 필요하니 import를 해옵니다
봅시다
이건 맞지 않는것 같습니다
제가 c를 잘못 적어서네요
이 geocoder을 사용하고
이 클래스를 import 합니다
그리고 context와 locale을 패스합니다
Locale은 말하자면
주소지 입니다
ㅤ
그리고 getDefault를 사용할것인데 이것은 폰의 언어가 됩니다 지금같은 경우 영어가 될 것입니다
하지만 특정 지역으로 지정할 수도 있습니다
여기 캐나다, 미국, 중국 다 있으니
지정이 가능합니다
하지만 저는 getDefault를 사용하여 전화기의 기본설정을 따라가도록 하겠습니다
봅시다
Fetching documentation(문서를 가져오는중)
잘 안될것 같아 보입니다
Java virtual machine(자바 가상 머신)의 경우에
ㅤ
글쎄요 이걸 읽을수가 없고 왜이렇게 느린지 모르겠지만 아마 이 Java 가상머신에서
너무 많은 일이 진행되고 있기 때문일 것입니다
좋아요
우선 이것은 기본 언어 설정입니다
그리고 coordinates(좌표)가 필요한데 유형은 LatLng
LatLng은 위도와 경도이고 import도 해야하고 dependency도 필요합니다
그래서 저는 이 Android Maps play services (안드로이드 맵 구글플레이 서비스)를 추가하겠습니다
지금 Gradle이 다시 싱크중입니다
그리고 Gradle을 확인해보면 play services maps가 추가된것이 확인됩니다
이게 위도와 경도이고
여기에 locaton.latitude와 location.longitude를
패스합니다
이것이 좌표입니다
이제 이것을 주소지로 변환해야 합니다
이것은 주소의 MutableList(가변적인 리스트)가 됩니다
왜 Mutable List〈Address〉를 사용하나면
우선 address를 여기 android.location.Address에서 import 해와야 합니다
왜 리스트를 사용하냐면
특정 위치에 맞는 주소가 여러개가 있을 수 있기 때문에 리스트 안에
저장하는 것 입니다
그리고 변경가능하게 할 수 있게 mutable list 를 사용합니다
이 mutable list 안에는 한가지 주소가 있거나, 여러가지 주소가 있거나
아무 주소도 없을수도 있습니다
주소는 nullable이고, 즉 위도와 경도가 있지만 실제 주소지가 없을수도
있는것 입니다
아무곳도 아닌 한가운데 있을수도 있습니다
그런상황에 어플에 오류가 나면 안되기 때문에 여기 nullable이 있는것 입니다
그 다음 이전에 설정했던 geocoder을 사용하여 getFromLocation(시작위치찾기)를 할 수 있습니다
보시면 getFromLocation은 위도와 경도 그리고 maxResults가 필요하고 listner(리스너)도 필요할 수도
있습니다
말하자면 geocode listener 입니다
우선 여기에 위도 경도와 maxResults를 주겠습니다
여기에 coordinate.latitude와 coordinate.longitude를 추가하겠습니다
그리고 쉼표
최대 아웃풋 숫자는 하나라고 하겠습니다
새로운 줄로 옮깁니다
MaxResults:1
추가하자면 주소만 nullable이여야 하는것이 아니라 리스트도 nullable이
될수도 잇습니다
주소가 아니라 리스트 값이 없을수 있습니다
여기 보시면 getFromLocation에 줄이 쳐져있고 더 이상 사용이
권장되지 않는다고 합니다
이것은 올드스쿨
Java 방식인데 새로운 방식은 많이 복잡한편입니다
이것도 충분히 할 일을 합니다
ㅤ
이렇게 줄이 쳐져있다고 해도 작동이 안된다는 말이 아니고
잘 작동하며 우리가 필요한 작업을 진행 합니다
오래된 방식이라고 걱정하실 필요 없습니다
이런 상황에서는 문제 없습니다
좋습니다
이제 결과값을 return(반환)할 수 있습니다
주소를 확인할것입니다
그리고 제가 리스트라고 했기때문에
addresses로 하겠습니다
복수형이기 때문입니다
그러니 만약 주소들이 isNotEmpty(비지 않은것이) true라면
주소 인덱스를 0으로 하고 getAddressLine 인덱스를 0으로 합니다
그리고 else “주소를 찾지 못했습니다”
다시말해서 지금 우리가 하는것은 context와 기본설정을 가지고 있는 geocoder을
만들었고
위도와 경도 차원의 좌표도 얻고
여기 location.latitude와 location.longitude는 우리의 locationData이고
그리고 주소지들을 mutable List로 로딩합니다
그러니까 변경될수 있는 리스트, 주소를 가지고 있거나 비어있을수도 있습니다
주소 타입은 우리가 import한것이구요
그리고 geocoder을 사용하여 coordinates.latitude와 coordinate.longitude에서 정보를
가져오도록 설정했습니다
결과값은 하나
그리고 주소지가 비지 않았는지 확인합니다
Nullable이기때문에 여기 물음표가 있는것이구요
이 nullable 리스트가
비어있지 않다면
IsNotEmpty() == true 라면
목록 내의 첫번째 주소를 가져오고 그렇지 않다면 “주소를 찾을 수 없음” 이라고 합니다
만약 아무데도 아닌 곳이라면요
이걸 어떤곳에 사용할까요
우선 location display 안에 있는 MainActivity로 돌아가서 새로운 변수를 추가합니다
Val address = location?.let
그리고 여기에 locationUtils.reverseGeocodeLocation(location)을 사용합니다
Okay.
여기서 우리는 주소를 달라고 하고 있습니다 So basically we're saying hey give me the address.
어디서 가져오냐면
이 location에서 가져옵니다
그리고 Let으로 이것을 언패킹하여 locationData를 얻습니다
이제 locationUtils를 사용해서 이 geocodeLocation 메소드를 불러오게 합니다 이 메소드는 바로 전에
우리가 만든것입니다
ㅤ
이것은 string을 반환할것이니
근본적으로 우리는 string을 달라고 하는것입니다
그리고
그것을 주소로 설정합니다
좋아요
그것이 이 라인에서 일어나는 일입니다
이제 이 address는 이제 우리가 사용할 수 있는데
이제 위도와 경도를 표시하기보다 주소지를 표시할 수 있습니다
이제 저는 여기에다가 \n 을 해서 새로운 줄을
얻고
여기에 이렇게 address를 사용합니다
이제 어플리케이션을 다시 실행하고 지도에서 우리가 어떻게 되고있는지 확인하겠습니다
Get location을 누르고
위도와 경도가 있을것입니다
시간이 조금 걸렸지만 여기 움직이고 있는 주소지도 있습니다
Universitat Strasse three in KÃ¶ln, 독일.
지금 우리는 움직이고 있습니다
주소를 다시 찾아봅시다 왜냐하면
지금 텍스트 주소는 계속 업데이트 되고 있지 않습니다
그러니까 지금 위도와 경도는 업데이트 되고 있지만 주소지는 업데이트 계속 되지 않습니다
그래도 괜찮습니다
꼭 그것이 필요한것은 아닙니다
이제 이것을 어떤식으로 다룰수 있는지 알게 되셨습니다
만약 더 자세한 내용을 알고싶다면 다시 앱으로 돌아가겠습니다
여기 details를 열수 있습니다
여기 single point로 가서
우리가 여기 kerpener Str에 있다고 가정합시다
이 포인트를 위치로 저장하고
Okay를 누릅니다
Set location
그리고 다시 실행합니다
다시 실행하면 kerpener str 97으로 나옵니다
됐습니다
이제 좌표도 있고 실제 주소지도 있습니다
좌표를 가지고 주소지를 만드는 geocoder을 만들었습니다
위치에 대해서 알것은 이정도입니다
이제 위치가 있으니 구글지도에 위치를 표시할 수 있습니다
그것은 내일 설정해보겠습니다
좋습니다
이번 영상은 끝입니다
즐거우셨길 바라며
요약편에서 뵙겠습니다