본문 바로가기
프로그래밍/Android

[Android] 카카오맵 위도, 경도값으로 주소 구하기

by Youngs_ 2022. 9. 18.

MarkerEventListener.kt

class MarkerEventListener(val context: Context,val contextActivity : Activity): MapView.POIItemEventListener {
    override fun onPOIItemSelected(mapView: MapView?, poiItem: MapPOIItem?) {
        // 마커 클릭 시
        mapView?.invalidate()
        val reverseGeoCoder : MapReverseGeoCoder = MapReverseGeoCoder(Define.KAKAO_NATIVE_KEY,poiItem?.mapPoint, FindGeoToAddressListener(),contextActivity)
        Log.d("주소 구하기", reverseGeoCoder.startFindingAddress().toString())
    }

    override fun onCalloutBalloonOfPOIItemTouched(mapView: MapView?, poiItem: MapPOIItem?) {
        // 말풍선 클릭 시 (Deprecated)
        // 이 함수도 작동하지만 그냥 아래 있는 함수에 작성하자
    }

    override fun onCalloutBalloonOfPOIItemTouched(mapView: MapView?, poiItem: MapPOIItem, buttonType: MapPOIItem.CalloutBalloonButtonType?) {
        // 말풍선 클릭 시
        

    }

    override fun onDraggablePOIItemMoved(p0: MapView?, p1: MapPOIItem?, p2: MapPoint?) {
        // 드래그해서 마커 이동했을때 이벤트
        p1?.mapPoint = p2 // 드래그하고 저장을 했을때 마커를 이동하기 전 위치가 나와서 위치를 바꿔줌
    }
}

 

FindGeoToAddressListener.kt

import android.util.Log
import net.daum.mf.map.api.MapReverseGeoCoder

class FindGeoToAddressListener() : MapReverseGeoCoder.ReverseGeoCodingResultListener {

    override fun onReverseGeoCoderFoundAddress(p0: MapReverseGeoCoder?, p1: String?) {

        Log.d("p1", p1.toString()) // 주소값
    }

    override fun onReverseGeoCoderFailedToFindAddress(p0: MapReverseGeoCoder?) {
        Log.d("주소찾기","실패")
    }
}

 

MainActivity.kt

class MainActivity : AppCompatActivity() {
    lateinit var binding : ActivityMainBinding
    private val eventListener = MarkerEventListener(this@MainActivity,this)

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater,null,false)
        setContentView(binding.root)

        binding.mapView.setCalloutBalloonAdapter(CustomBalloonAdapter(layoutInflater,this@MainActivity))
        binding.mapView.setPOIItemEventListener(eventListener)
	}
...
}

 

댓글