안드로이드(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) 이미지에서의 Exif GPS 정보를 GeoPoint 바꾸기

 

Posted by 녹두장군