카카오 장소검색 api 좌표 -> 맵이동시 오류

안녕하세요. 현재 @GET(“v2/local/search/keyword.json”) 이 api 를 호출하여 제가 검색한 주소에 대해 좌표를 받아

mapView.setMapCenterPoint(MapPoint.mapPointWithGeoCoord(lat, lng), true) 코드를 통해 현재위치에서 해당 지점으로

맵을 이동시킬려고하는데 api 에서 호출한 좌표값으로 이동시킬려고하면 어디 지역이든지간에 다 없는 좌표로 되서 이상한 곳으로

이동되더라고요. 맵을 이동시키는데에 필요한 좌표값은 다른곳에서 또 조회를 하는건가요 아님 오류인건가요?

안녕하세요

호출하신 lat,lng 좌표값이 잘 맞게 입력되셨는지 한 번 더 확인해주세요.
그럼에도 잘 안되실 경우
작성하신 코드를 공유주시면 검토해보겠습니다.

넵 api 통해서 얻은 좌표값을 바로 넣어서 했고 디버그로 좌표만 빼서 직접 넣었는데도 잘못된 좌표처럼 바다쪽으로 이동을 합니다.

// 키워드 검색 함수
private fun searchKeyword(keyword: String) {
val retrofit = Retrofit.Builder() // Retrofit 구성
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build()
val api = retrofit.create(KakaoAPI::class.java) // 통신 인터페이스를 객체로 생성
val call = api.getSearchKeyword(API_KEY, keyword) // 검색 조건 입력

    // API 서버에 요청
    call.enqueue(object : Callback<LocationResult> {
        override fun onResponse(
            call: Call<LocationResult>,
            response: Response<LocationResult>
        ) {
            if (response.isSuccessful) {
                if (response.body() != null) {

                    adapter.setData(
                        this@CustomInformAddressActivity, viewModel,
                        response.body()!!.getDocuments()!!

                    )
                }
            }
        }

        override fun onFailure(call: Call<LocationResult>, t: Throwable) {
            // 통신 실패
            Log.w("MainActivity", "통신 실패: ${t.message}")
        }
    })
}

//interface

interface KakaoAPI {
@GET(“v2/local/search/keyword.json”) // Keyword.json의 정보를 받아옴
fun getSearchKeyword(
@Header(“Authorization”) key: String, // 카카오 API 인증키 [필수]
@Query(“query”) query: String // 검색을 원하는 질의어 [필수]

): Call<LocationResult>    // 받아온 정보가 ResultSearchKeyword 클래스의 구조로 담김

}

//model

class LocationResult {

@SerializedName("documents")
@Expose
private var documents: MutableList<LocationDocument>? = null

fun getDocuments(): MutableList<LocationDocument>? {
    return documents
}
fun setDocuments(documents: MutableList<LocationDocument>?) {
    this.documents = documents
}

}

//값 받아서 이동하는 함수

viewModel.intentReLocationView.observe(this, Observer {
Handler().postDelayed(Runnable { setLocation(it.getString(“x”, lat.toString())!!.toDouble(), it.getString(“y”,
lng.toString()
)!!.toDouble()) }, 200L)
})

fun setLocation(lat: Double, lng: Double){
binding.editAddressDetail.requestFocus()
val marker = MapPOIItem()
marker.apply {
itemName = “test”
mapPoint = MapPoint.mapPointWithGeoCoord(lat, lng) // 좌표
markerType = MapPOIItem.MarkerType.CustomImage // 마커 모양 (커스텀)
customImageResourceId = R.drawable.ico_custom_marker // 커스텀 마커 이미지
selectedMarkerType = MapPOIItem.MarkerType.CustomImage // 클릭 시 마커 모양 (커스텀)
isCustomImageAutoscale = false // 커스텀 마커 이미지 크기 자동 조정
setCustomImageAnchor(0.5f, 1.0f) // 마커 이미지 기준점
}
mapView.removeAllPOIItems()
mapView.setMapCenterPoint(MapPoint.mapPointWithGeoCoord(lat, lng), true);
mapView.addPOIItem(marker)
}

이 함수들 실행전에는 현재위치에서 맵이 실행되게 해놓은 상태입니다.

실제 사용되는 좌표들을 입력하면 이동을 잘하는데 api 통해서 받은 좌표들은 다 안되는거같습니다.

API로 받은 데이터로 좌표를 lat-x, lng-y로 설정하신 것 같아요.

웹 예제에서 키워드 검색 API로 받은 데이터로
마커를 생성하는 부분 확인해보면
좌표를 lat-y값, lng-x값으로 설정해서 마커 위치를 설정합니다.

new kakao.maps.LatLng(data[i].y, data[I].x);

API로 받은 데이터로 마커를 표시할 때 좌표를 반대로 넣어 확인 부탁드립니다.

댓글 감사합니다. api 받은 데이터가 lat,lng 좌표값이라서 그걸로 이동을 시키는데요 따로 변환을 해줘야된다는 말씀이신가요?

그리고 보내주신건 웹 예제의 자바스크립트 부분이라서 안드로이드 앱쪽에 적용시키는법이 달라 헷갈리네요 ㅠ

api로 받은 데이터 좌표를 설정할 때
받아온 데이터의 좌표 순서를 변경해서 확인해주세요.

mapPoint = MapPoint.mapPointWithGeoCoord(data[i].x, data[i[.y); //(X)
mapPoint = MapPoint.mapPointWithGeoCoord(data[i].y, data[i[.x); //(O)

RESTAPI 문서mapPointWithGeoCoord 문서 도 참고해주세요.

아 정말 감사합니다 ㅎㅎ 반대로되있어서 그런거였네요

1개의 좋아요