Android의 Camera2API 및 LocationManager를 사용하여 위치 정보가 있는 사진 촬영

6653 단어 AndroidCamera2API
Android의 Camera2API를 사용하여 카메라 미리보기 화면 표시
계속
다음 내용을 참조했습니다.
  • 이미지의 Exif 속성에 위치 정보 및 촬영 날짜를 저장하는 방법
  • LocationManager


    GPS를 사용하여 위치 정보를 얻는 Android 클래스
    reference : LocationManager
    참조:Android에서 간단한 위치 정보 얻기

    EXIF


    카메라 종류와 촬영 시 조건 정보 및 위치 정보를 이미지와 이미지에 삽입하는 사양
    스왑 가능한 이미지 파일 형식(스왑 가능한 이미지 파일 형식)의 줄임말
    참조:wikipedia : Exchangeable image file format
    참조:디지털 카메라용 이미지 파일 형식 사양: Exif2.3
    참조:Exif 파일 형식

    위치 정보 가져오기 권한 설정


    AndroidManifest.xml
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    

    위치 정보 가져오기 권한 얻기


    사용자가 필요할 때 설정할 수 있도록 허용
    기본 설정 프레임을 사용하여 화면 설정 준비
    세부 정보 생략

    PreferenceFragment


    기본 설정을 위한 클래스
    preference : PreferenceFragment
    예: 카메라 응용 프로그램의 설정 화면

    위치 정보 가져오기

        // LocationManage を取得する
        LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
    
        // リスナーを登録して開始する
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 60000, 3, locationListener);
    
        // リスナー
        LocationListener mLocationListener = new LocationListener() {
            public void onLocationChanged(Location location) {
                //変数に格納して、後で使用する
                mLocation = location;
            }
        };
    

    위치 정보가 담긴 사진을 찍다


    먼저 사진을 찍은 후 JPEG 형식으로 파일을 저장합니다.
    그런 다음 파일에 EXIF를 추가합니다.

    위치 정보를 EXIF 형식으로 변환


    이것은 가장 어려운 물건이다.
    나는 내가 무엇을 해야 하는지 이해하는 데 많은 시간을 썼다.
    위치 정보의 표기는 각양각색의 형식이 있다.
    일반적으로 사용되는 것은 10진수 (decimal degrees) 라고 불린다.
    예를 들어 경도는 영국의 그리니치를 0도로 하고 동서를 각각 180도로 나누는 -180에서 180의 실수이다.
    안드로이드도 이것을 따르고 있다.
    참조:중학교 사회 지리/위도와 경도
    사양 EXIF2.3에서는 다음과 같이 정의합니다.
    위도 경도는 표시도, 분, 초 3개의 유리수 RATIONAL을 통해 표현된다
    또한 Android의 Reference에서는 다음과 같습니다.
    Type is rational.
    Format is "num1/denom1,num2/denom2,num3/denom3".
    이거 처음 읽었을 때???됐어.
    디지털 카메라용 이미지 파일 형식 사양: Exif2.3
    reference : TAG_GPS_LATITUDE
    EXIF에서는 위도 경도를 도분초로 나타내는 60진수(Sexagesimal Degrees)를 사용합니다.
    유리수 RATIONAL 분자/분모 문자열의 표현
    예를 들어 123은 123/1, 3.14는 314/100을 나타낸다.
    북위 남위와 동경 서경에는 수치와 다른 EXIF 라벨이 있다.
    문자열에 "N""S""W"E"로 표시됩니다.
    이것은 동서남북(East, West, South, North)의 영문 줄임말이다.
    이해하기 쉬워요.
    요코하마의 위도 139.64720경도 3535.4515374는 다음과 같다.
    E 139/1,38/1,49932/1000
    N 35/1,27/1,5534/1000
    프로그램 예
    public String convert(double latitude) {
            latitude = Math.abs(latitude);
            int degree = (int) latitude;
            latitude *= 60;
            latitude -= (degree * 60.0d);
            int minute = (int) latitude;
            latitude *= 60;
            latitude -= (minute * 60.0d);
            int second = (int) (latitude*1000.0d);
    
            StringBuilder sb = new StringBuilder(20);
            sb.setLength(0);
            sb.append(degree);
            sb.append("/1,");
            sb.append(minute);
            sb.append("/1,");
            sb.append(second);
            sb.append("/1000");
            return sb.toString();
    }
    
    public static String latitudeRef(double latitude) {
            String str = (latitude<0.0d)?"S":"N";
            return str;
    }
    
    참조:stackoverflow : how-to-save-gps-coordinates-in-exif-data-on-android

    ExifInterface


    EXIF 태그를 읽고 쓰는 Android 클래스
    reference : ExifInterface
    참조:Y.A.M 요약본: Exif
        // EXIF 情報を読み込む
        File file;
        ExifInterface exif = new ExifInterface( file.toString() );
    
        // EXIF 情報に緯度経度情報を追加する
        exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE_REF, ref);
        exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE, lat);
    
        // EXIF 情報を保存する
        exif.saveAttributes();
    

    위치 정보 확인


    사진 프로그램으로 위치 정보가 담긴 사진 파일을 열람하다.
    정보를 보면 지도가 표시됩니다.
    참고:
    사진 응용 프로그램으로 위치 정보를 확인할 때
    파일의 저장 위치는 다음과 같습니다.
    외부 SD 카드 영역.
    공식 샘플에서 Camera2Basic 프로세스
    외부 파일 Dir에 자주 저장됩니다.
    Camera2Basic
    외부 파일 Dir에 사진이 표시되지만
    위치 정보가 표시되지 않습니다.

    화면 캡처


    사진 응용 프로그램에서 위치 정보가 있는 사진 정보를 볼 때.

    샘플 코드가github에 발표되었습니다.
    https://github.com/ohwada/Android_Samples/tree/master/Camera216

    좋은 웹페이지 즐겨찾기