Android의 Camera2API 및 LocationManager를 사용하여 위치 정보가 있는 사진 촬영
6653 단어 AndroidCamera2API
계속
다음 내용을 참조했습니다.
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
Reference
이 문제에 관하여(Android의 Camera2API 및 LocationManager를 사용하여 위치 정보가 있는 사진 촬영), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ohwada/items/c7d824669372b9d1e212텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)