[flutter] 플러터 geolocator를 이용한 지도 기반 애플리케이션 개발

지도 기반 애플리케이션은 현재 많은 사용자들에게 인기가 있는 앱입니다. 플러터에서는 Geolocator 패키지를 사용하여 사용자의 위치 정보를 가져와 앱에 지도 기능을 추가할 수 있습니다. 이번 글에서는 플러터의 Geolocator 패키지를 사용하여 지도 기반 애플리케이션을 개발하는 방법을 알아보겠습니다.

1. Geolocator 패키지 설치하기

먼저, 플러터 프로젝트에 Geolocator 패키지를 추가해야 합니다. pubspec.yaml 파일에 다음과 같이 의존성을 추가해주세요.

dependencies:
  flutter:
    sdk: flutter
  geolocator: ^7.1.0

의존성을 추가한 뒤 패키지를 가져오기 위해 터미널에서 flutter pub get 명령어를 실행해주세요.

2. 위치 권한 요청하기

사용자의 위치 정보를 가져오기 위해서는 앱에서 위치 권한을 요청해야 합니다. 사용자에게 위치 권한을 요청하려면, 앱에 다음과 같이 권한을 설정하는 코드를 추가해주세요.

import 'package:geolocator/geolocator.dart';

// ...

final geolocator = Geolocator();
final locationOptions = LocationOptions(accuracy: LocationAccuracy.high, distanceFilter: 10);

if (await geolocator.isLocationServiceEnabled()) {
  LocationPermission permission = await geolocator.checkPermission();
  if (permission == LocationPermission.denied) {
    permission = await geolocator.requestPermission();
    if (permission == LocationPermission.denied) {
      // 위치 권한이 거부되었을 때 처리하는 코드 추가
    }
  }
  if (permission == LocationPermission.deniedForever) {
    // 위치 권한이 영구적으로 거부되었을 때 처리하는 코드 추가
  }
  // 위치 권한이 허용되었을 때 처리하는 코드 추가
} else {
  // 위치 서비스가 비활성화되었을 때 처리하는 코드 추가
}

위의 코드는 위치 서비스가 활성화되어 있는지 확인하고, 권한이 허용되었는지 확인한 후 권한 요청을 만들어 줍니다.

3. 사용자의 현재 위치 가져오기

사용자의 현재 위치를 가져오기 위해서는 다음과 같이 코드를 작성해주세요.

Position position = await geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
double latitude = position.latitude;
double longitude = position.longitude;

// 가져온 위치 정보를 활용한 코드 추가

위의 코드는 사용자의 현재 위치를 가져온 후, Position 객체에 저장합니다. Position 객체에서 위도와 경도를 가져와 원하는 방식으로 사용할 수 있습니다.

4. 지도에 위치 표시하기

지도 기반 애플리케이션에서는 가져온 위치 정보를 지도 상에 표시해야 합니다. 이를 위해 다음과 같이 맵 위젯을 사용하여 위치를 표시할 수 있습니다.

import 'package:google_maps_flutter/google_maps_flutter.dart';

// ...

GoogleMapController mapController;
Completer<GoogleMapController> _controller = Completer();

// ...

void _onMapCreated(GoogleMapController controller) {
  _controller.complete(controller);
  mapController = controller;

  // 위치 정보 가져와 지도에 표시하는 코드 추가
  _addMarker(latitude, longitude);
}

void _addMarker(double latitude, double longitude) {
  mapController.addMarker(MarkerOptions(
    position: LatLng(latitude, longitude),
    icon: BitmapDescriptor.defaultMarker,
  ));
}

// ...

GoogleMap(
  onMapCreated: _onMapCreated,
  initialCameraPosition: CameraPosition(
    target: LatLng(latitude, longitude),
    zoom: 15,
  ),
),

// ...

위의 코드에서는 GoogleMap 위젯을 사용하여 지도를 생성하고, _onMapCreated 콜백 함수에서 지도 컨트롤러를 가져옵니다. 그 후 addMarker 함수를 사용하여 위도와 경도를 기반으로 마커를 지도 상에 추가합니다.

5. 추가적인 기능 구현하기

위의 코드를 기반으로 추가적인 기능을 구현할 수 있습니다. 예를 들어, 위치 변화를 감지하여 실시간으로 사용자의 위치를 업데이트하거나, 내 위치 주변의 특정 장소를 검색하는 등의 기능을 추가할 수 있습니다.

결론

플러터의 Geolocator 패키지를 사용하여 지도 기반 애플리케이션을 개발하는 방법에 대해 알아보았습니다. Geolocator를 사용하면 쉽고 간편하게 사용자의 위치 정보를 가져와 지도 위에 표시할 수 있습니다. 편리한 기능들을 이용하여 다양한 지도 기반 앱을 개발해보세요!

참고 자료