[flutter] 플러터 geolocator를 이용한 지오코딩 (geocoding)

지오코딩은 주소를 좌표로 변환하거나 좌표를 주소로 변환하는 과정을 말합니다. 이 기능은 앱에서 장소 검색 기능을 구현하거나 사용자의 현재 위치 주소를 표시하는 데 유용하게 사용될 수 있습니다. 이번 포스트에서는 Flutter에서 geolocator 패키지를 이용하여 지오코딩을 구현하는 방법에 대해 알아보겠습니다.

geolocator 패키지 추가하기

먼저, geolocator 패키지를 pubspec.yaml 파일에 추가해야합니다. 아래와 같이 dependencies 섹션에 패키지를 추가합니다.

dependencies:
  flutter:
    sdk: flutter
  geolocator: ^6.2.0

의존성을 추가한 후에는 터미널을 열고 다음 명령어를 실행하여 패키지를 가져옵니다.

flutter pub get

위치 좌표 가져오기

먼저, 사용자의 위치 좌표를 가져와야합니다. geolocator 패키지를 사용하여 현재 위치를 가져오는 방법은 다음과 같습니다.

import 'package:geolocator/geolocator.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  LocationPermission permission = await Geolocator.checkPermission();
  if (permission == LocationPermission.denied) {
    permission = await Geolocator.requestPermission();
    if (permission != LocationPermission.whileInUse &&
        permission != LocationPermission.always) {
      // 위치 권한이 거부되었습니다. 처리할 로직을 추가하세요.
      return;
    }
  }
  
  Position position = await Geolocator.getCurrentPosition();
  double latitude = position.latitude;
  double longitude = position.longitude;
  
  print("현재 위치 좌표: $latitude, $longitude");
}

getCurrentPosition 메소드를 사용하여 현재 위치의 좌표를 비동기적으로 가져옵니다. LocationPermission을 사용하여 위치 권한을 확인하고, 권한이 없는 경우 사용자에게 권한을 요청할 수 있습니다.

좌표를 주소로 변환하기

이제 우리는 좌표를 주소로 변환하는 과정인 지오코딩을 구현해보겠습니다. geolocator 패키지에서는 placemarkFromCoordinates 메소드를 사용하여 좌표를 주소로 변환할 수 있습니다. 다음은 해당 기능을 구현한 예제입니다.

import 'package:geolocator/geolocator.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  double latitude = 37.498725; // 테스트용 좌표
  double longitude = 127.027607; // 테스트용 좌표
  
  List<Placemark> placemarks = await Geolocator.placemarkFromCoordinates(
    latitude,
    longitude,
  );
  
  if (placemarks != null && placemarks.isNotEmpty) {
    Placemark placemark = placemarks[0];
    
    String address = placemark.subLocality +
        " " +
        placemark.thoroughfare +
        ", " +
        placemark.locality +
        ", " +
        placemark.administrativeArea;
    
    print("변환된 주소: $address");
  } else {
    print("주소를 변환할 수 없습니다.");
  }
}

placemarkFromCoordinates 메소드를 사용하여 좌표를 입력하고, 반환된 Placemark 리스트에서 주소를 얻을 수 있습니다. Placemark 객체는 다양한 속성(예: locality, administrativeArea 등)을 포함하고 있어 원하는 주소 형식으로 조합하여 사용할 수 있습니다.

결론

이렇게 Flutter에서 geolocator 패키지를 사용하여 지오코딩을 구현하는 방법에 대해 알아보았습니다. 이러한 기능을 활용하면 앱에서 주소를 좌표로 변환하거나 좌표를 주소로 변환하는 기능을 구현할 수 있습니다. 추가적으로 geolocator 패키지에는 위치 추적, 거리 계산 등 다양한 기능도 제공되므로 필요에 따라 추가로 살펴보시기 바랍니다.

참고 자료