개발모음집

google map 길찾기 폴리라인 (directions polyLine) 본문

Android

google map 길찾기 폴리라인 (directions polyLine)

void 2017. 7. 27. 16:15

사용한 api

맵뷰 google map Api

주소검색 daum map Api

길찾기 google map Api


구현 방법 및 에러 & 해결방안

1. 액티비티에서 지도보여준 방법

레이아웃안에 있는 mapView를 인플레이션하고

onMapReady라는 메소드를 이용하여 구글맵을 띄어줬다.


2. 좌표얻어온 방법

앱의 유저가 지도의 마커를 클릭을 하면 다음검색api를 이용하여 웹뷰액티비티를 띄어줬고, 유저가 입력한 주소의 좌표값을 알아왔다.


3. 길찾기 좌표를 얻어온 방법

이렇게 얻어온 좌표를 google server에 url로 데이터를 요청하면 json 형식으로 좌표 데이터를 받아왔다. 처음에는 받은 데이터를 onMapReady에서 파싱을 하였다.

하지만 onMapReady는 단어에서 알 수 있듯이 이 메서드는 처음 액티비티가 생성될 때만 사용되는 것 같다. OnActiviyResult로 다른 액티비티에서 출발지 좌표값을 가져올 때 onMapReady메서드가 실행이 되지않는 것을 확인하였다.

그래서 다른 방법을 찾았다.

길찾기 좌표값을 구글서버에서 JSON형식으로 받아올 때  AsynTask를 사용하는데 

onPostExecute메서드에서 (JSON을 파싱하고 지도에 폴리라인을 그려줄) 새로운 AsynTask를 생성한다. (참고 블로그)


3.1 mapView에서 GoogleMap 클래스 사용


문제가 있었으니 보통 예제들은 맵뷰를 프래그먼트위에 만들어서 

프래그먼트자체를 GoogleMap 클래스에 가져오고 이 클래스에 폴리라인을 그려주는 형식으로 하였다.


private GoogleMap mGoogleMap;

SupportMapFragment fm = (SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map);


mGoogleMap = fm.getMap();


하지만 나는 맵프래그먼트를 사용한 것이 아니라 액티비티에서 mapView를 인플레이션하여사용하였기 때문에  어떻게 해야할 지 고민하다가 

참고 스택오버플로우를 발견하였다.


private GoogleMap mGoogleMap;

@Override
public void onMapReady(GoogleMap googleMap) {
this.mGoogleMap = googleMap;

}


이런식으로 하여서 GoogleMap 변수를 사용하였다.