반응형
안드로이드(Android) 이미지에서의 Exif GPS 정보를 GeoPoint 바꾸기 |
개발환경 : window 7 64bit, Eclipse Mars, Android 4.2.2 |
이번예제는 파일브라우저에서 이미지를 선택한후 Exif 정보를 팝업창으로 보여주는 샘플에서 Gps 정보를 GeoPoint 로 변경하는 예제 입니다. |
private Float convertToDegree(String stringDMS) { Float result = null; String[] DMS = stringDMS.split(",", 3); String[] stringD = DMS[0].split("/", 2); Double D0 = new Double(stringD[0]); Double D1 = new Double(stringD[1]); Double FloatD = D0 / D1; String[] stringM = DMS[1].split("/", 2); Double M0 = new Double(stringM[0]); Double M1 = new Double(stringM[1]); Double FloatM = M0 / M1; String[] stringS = DMS[2].split("/", 2); Double S0 = new Double(stringS[0]); Double S1 = new Double(stringS[1]); Double FloatS = S0 / S1; result = new Float(FloatD + (FloatM / 60) + (FloatS / 3600)); return result; };
위도 경도를 리턴하는 함수를 만들었으며
사용자가 아래 함수를 호출해서 사용하면 됩니다.
public Float getLatitude() { return latitude; } public Float getLongitude() { return longitude; }
아래는 GeoPoint 로 변경하는 GeoDegree 클래스의
전체 소스입니다.
public class GeoDegree { private boolean valid = false; private Float latitude, longitude; public GeoDegree(ExifInterface exif) { String attrLATITUDE = exif.getAttribute(ExifInterface.TAG_GPS_LATITUDE); String attrLATITUDE_REF = exif.getAttribute(ExifInterface.TAG_GPS_LATITUDE_REF); String attrLONGITUDE = exif.getAttribute(ExifInterface.TAG_GPS_LONGITUDE); String attrLONGITUDE_REF = exif.getAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF); if ((attrLATITUDE != null) && (attrLATITUDE_REF != null) && (attrLONGITUDE != null) && (attrLONGITUDE_REF != null)) { valid = true; if (attrLATITUDE_REF.equals("N")) { latitude = convertToDegree(attrLATITUDE); } else { latitude = 0 - convertToDegree(attrLATITUDE); } if (attrLONGITUDE_REF.equals("E")) { longitude = convertToDegree(attrLONGITUDE); } else { longitude = 0 - convertToDegree(attrLONGITUDE); } } }; private Float convertToDegree(String stringDMS) { Float result = null; String[] DMS = stringDMS.split(",", 3); String[] stringD = DMS[0].split("/", 2); Double D0 = new Double(stringD[0]); Double D1 = new Double(stringD[1]); Double FloatD = D0 / D1; String[] stringM = DMS[1].split("/", 2); Double M0 = new Double(stringM[0]); Double M1 = new Double(stringM[1]); Double FloatM = M0 / M1; String[] stringS = DMS[2].split("/", 2); Double S0 = new Double(stringS[0]); Double S1 = new Double(stringS[1]); Double FloatS = S0 / S1; result = new Float(FloatD + (FloatM / 60) + (FloatS / 3600)); return result; }; public boolean isValid() { return valid; } @Override public String toString() { return (String.valueOf(latitude) + ", " + String.valueOf(longitude)); } public Float getLatitude() { return latitude; } public Float getLongitude() { return longitude; } public int getLatitudeE6() { return (int) (latitude * 1000000); } public int getLongitudeE6() { return (int) (longitude * 1000000); } }
이것을 사용하기 위해서 사용한 소스입니다.
메인에서 호출하여 TextView 에 셋팅합니다.
GeoDegree geoDegree = new GeoDegree(exif); geoPoint = (TextView) dlg.findViewById(R.id.dlgGeoPoint); geoPoint.setText(geoDegree.toString());
반응형
'안드로이드 개발' 카테고리의 다른 글
안드로이드(Android) Java 코드에서 색깔값 화면에 입히기 (0) | 2014.11.20 |
---|---|
안드로이드(Android) 색깔을 xml 로 정의 하고 관리하기 (0) | 2014.11.19 |
안드로이드(Android) PhoneGap, 이클립스 플러그인 설치로 좀더 쉽게 개발하기 (0) | 2014.11.18 |
안드로이드(Android) 간단한 RatingBar 사용예제 (0) | 2014.11.18 |
안드로이드(Android) 문의 – Dialog 클래스를 이용하여 다이얼로그 계산기 올리기 (0) | 2014.11.16 |
안드로이드(Android) 이미지뷰에서 Exif 정보 다이얼로그 띄우기 (1) | 2014.11.15 |
안드로이드(Android) showDialog(int) deprecated 다시 구현하기 (0) | 2014.11.14 |
안드로이드(Android) 파일 브라우저에서 이미지 보여주기 (1) | 2014.11.13 |