ETC/무더위 쉼터

공공데이터 + Google Map API Android 어플리케이션(3)

[ 관련 포스팅 ]

2019/06/03 - [앱 개발/무더위 쉼터] - 공공데이터 + Google Map API Android 어플리케이션(1)

2019/06/04 - [앱 개발/무더위 쉼터] - 공공데이터 + Google Map API Android 어플리케이션(2)

 

이전 포스팅에서 제작한 무더위쉼터 앱에 새로운 기능을 추가하려고 합니다.

위의 이미지를 보면 지도의 화면이 내 위치일 때는 지도 위에 특별한 점이 없지만 지도 화면이 내가 있는 위치와 달라지면 상단에 'OOO에서 찾기' 버튼이 나타납니다.

 

나타난 버튼을 누르면 해당 지역에 있는 무더위 쉼터를 표시하고 하단에 Toast를 이용해 잠깐 해당 지역의 쉼터가 있다면 개수를 알려주고 없다면 별도 안내를 띄우는 이벤트를 작성해보려고 합니다.

 

1. MainActivity에 버튼 생성

 

Layout에 Button을 생성합니다.

<Button
  android:id="@+id/btn01"
  android:layout_width="180dp"
  android:layout_height="30dp"
  android:background="@drawable/position_button"
  android:layout_gravity="center|top"
  android:layout_marginTop="10dp"
  android:visibility="gone"
  android:text="현재 위치에서 찾기"
  android:textColor="@color/colorWhite"/>

이 부분은 Button을 보이지 않게 해줍니다.

android:visibility="gone"

Activity에서 Button을 선언합니다.

button = (Button) findViewById(R.id.btn01);

 

2. GoogleMap.setOnCameraIdleListener

 

지도 화면의 움직임을 감지하기 위해 OnCameraMoveStartedListener를 사용합니다.

OnCameraMoveStartedListener는 Google APIs for Android에 "Callback interface for when camera movement has ended."이라고 정의 되어있습니다.  해석하면 "카메라 이동이 끝난 시점의 콜백 인터페이스"입니다.

 

즉, 지도 화면이 움직이기 시작하고 움직임이 멈췄을때 값을 리턴해 주는 리스너 입니다.

 

mGoogleMap.setOnCameraIdleListener(new GoogleMap.OnCameraIdleListener() {
  @Override
  public void onCameraIdle() {
  	currentlocation();//멈췄을때 retun해주는 메소드
  }
});

화면의 움직임이 멈추면 안에 들어있는 값을 리턴합니다.

 

3. 지도 화면 중앙 좌표 구하기

 

지도 화면의 위치와 GPS상의 위치를 비교하려면 화면의 좌표를 가져와 중심점을 찾아야 합니다.

LatLng centerLatLng = mGoogleMap.getProjection().getVisibleRegion().latLngBounds.getCenter();

LatLng값으로 화면 중앙을 찾아 가져옵니다.

String string_centerLatLng = getCurrentAddress(centerLatLng);

가져온 값을 지오코더를 사용해 주소로 변환한 후 String값으로 받아옵니다.

getCurrentAddress는 따로 지오코더를 사용한 주소변환 코드를 작성해둔 메소드 입니다.

if (string_southwestLatLng02 == null) {
	//
} else if (!string_southwestLatLng02.equals(strmarkerTitle2)) {
	imageButton.setVisibility(View.VISIBLE);
	imageButton.setText(string_southwestLatLng02 + "에서 찾기");
} else if (string_southwestLatLng02.equals(strmarkerTitle2)) {
	imageButton.setVisibility(View.INVISIBLE);
}

GPS상의 위치와 지도 화면의 위치를 비교해 같다면 버튼을 숨기고 다르다면 버튼을 표출합니다.

 

4. button.setOnClickListener()

 

표시된 버튼을 클릭했을 때 일어나는 이벤트를 위한 부분입니다.

지도 화면상의 위치에서 가져온 주소를 사용하여 저장된 엑셀 데이터의 주소와 비교합니다.

button.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View view) {
    onComparison(string_southwestLatLng02, string_southwestLatLng01);
    
    if (name.indexOf(string_southwestLatLng02) != -1) {
      Toast.makeText(getApplicationContext(), 
      	rowTotal + "개의 쉼터를 발견했습니다!", Toast.LENGTH_LONG).show();
    } else {
      Toast.makeText(getApplicationContext(), 
      	"이 지역의 쉼터 정보가 없습니다.", Toast.LENGTH_LONG).show();
    }
  }
});

주소가 있다면 무더위쉼터의 개수를 받아 "OO개의 쉼터를 발견했습니다!"를 화면 하단에 잠시 표시해주고 없다면 "이 지역의 쉼터 정보가 없습니다."를 화면 하단에 잠깐 표시합니다.

[ 관련 포스팅 ]

2019/06/03 - [앱 개발/무더위 쉼터] - 공공데이터 + Google Map API Android 어플리케이션(1)

2019/06/04 - [앱 개발/무더위 쉼터] - 공공데이터 + Google Map API Android 어플리케이션(2)

728x90