分享

android图库照片获取地理位置方法

 开花结果 2023-12-28 发布于北京

具体步骤

1.主要android类ExifInterface

2.读取图片属性

3.经纬度解析,主要android类Geocoder


1.主要android类ExifInterface

主要图片属性如下 :

public static final String TAG_APERTURE = "FNumber";

public static final String TAG_APERTURE_VALUE = "ApertureValue";

public static final String TAG_ARTIST = "Artist";

public static final String TAG_BITS_PER_SAMPLE = "BitsPerSample";

public static final String TAG_BRIGHTNESS_VALUE = "BrightnessValue";

public static final String TAG_CFA_PATTERN = "CFAPattern";

public static final String TAG_COLOR_SPACE = "ColorSpace";

public static final String TAG_COMPONENTS_CONFIGURATION = "ComponentsConfiguration";

public static final String TAG_COMPRESSED_BITS_PER_PIXEL = "CompressedBitsPerPixel";

public static final String TAG_COMPRESSION = "Compression";

public static final String TAG_CONTRAST = "Contrast";

public static final String TAG_COPYRIGHT = "Copyright";

public static final String TAG_CUSTOM_RENDERED = "CustomRendered";

public static final String TAG_DATETIME = "DateTime";

public static final String TAG_DATETIME_DIGITIZED = "DateTimeDigitized";

public static final String TAG_DATETIME_ORIGINAL = "DateTimeOriginal";

public static final String TAG_DEFAULT_CROP_SIZE = "DefaultCropSize";

public static final String TAG_DEVICE_SETTING_DESCRIPTION = "DeviceSettingDescription";

public static final String TAG_DIGITAL_ZOOM_RATIO = "DigitalZoomRatio";

public static final String TAG_DNG_VERSION = "DNGVersion";

public static final String TAG_EXIF_VERSION = "ExifVersion";

public static final String TAG_EXPOSURE_BIAS_VALUE = "ExposureBiasValue";

public static final String TAG_EXPOSURE_INDEX = "ExposureIndex";

public static final String TAG_EXPOSURE_MODE = "ExposureMode";

public static final String TAG_EXPOSURE_PROGRAM = "ExposureProgram";

public static final String TAG_EXPOSURE_TIME = "ExposureTime";

public static final String TAG_FILE_SOURCE = "FileSource";

public static final String TAG_FLASH = "Flash";

public static final String TAG_FLASHPIX_VERSION = "FlashpixVersion";

public static final String TAG_FLASH_ENERGY = "FlashEnergy";

public static final String TAG_FOCAL_LENGTH = "FocalLength";

public static final String TAG_FOCAL_LENGTH_IN_35MM_FILM = "FocalLengthIn35mmFilm";

public static final String TAG_FOCAL_PLANE_RESOLUTION_UNIT = "FocalPlaneResolutionUnit";

public static final String TAG_FOCAL_PLANE_X_RESOLUTION = "FocalPlaneXResolution";

public static final String TAG_FOCAL_PLANE_Y_RESOLUTION = "FocalPlaneYResolution";

public static final String TAG_F_NUMBER = "FNumber";

public static final String TAG_GAIN_CONTROL = "GainControl";

public static final String TAG_GPS_ALTITUDE = "GPSAltitude";

public static final String TAG_GPS_ALTITUDE_REF = "GPSAltitudeRef";

public static final String TAG_GPS_AREA_INFORMATION = "GPSAreaInformation";

public static final String TAG_GPS_DATESTAMP = "GPSDateStamp";

public static final String TAG_GPS_DEST_BEARING = "GPSDestBearing";

public static final String TAG_GPS_DEST_BEARING_REF = "GPSDestBearingRef";

public static final String TAG_GPS_DEST_DISTANCE = "GPSDestDistance";

public static final String TAG_GPS_DEST_DISTANCE_REF = "GPSDestDistanceRef";

public static final String TAG_GPS_DEST_LATITUDE = "GPSDestLatitude";

public static final String TAG_GPS_DEST_LATITUDE_REF = "GPSDestLatitudeRef";

public static final String TAG_GPS_DEST_LONGITUDE = "GPSDestLongitude";

public static final String TAG_GPS_DEST_LONGITUDE_REF = "GPSDestLongitudeRef";

public static final String TAG_GPS_DIFFERENTIAL = "GPSDifferential";

public static final String TAG_GPS_DOP = "GPSDOP";

public static final String TAG_GPS_IMG_DIRECTION = "GPSImgDirection";

public static final String TAG_GPS_IMG_DIRECTION_REF = "GPSImgDirectionRef";

public static final String TAG_GPS_LATITUDE = "GPSLatitude";

public static final String TAG_GPS_LATITUDE_REF = "GPSLatitudeRef";

public static final String TAG_GPS_LONGITUDE = "GPSLongitude";

public static final String TAG_GPS_LONGITUDE_REF = "GPSLongitudeRef";

public static final String TAG_GPS_MAP_DATUM = "GPSMapDatum";

public static final String TAG_GPS_MEASURE_MODE = "GPSMeasureMode";

public static final String TAG_GPS_PROCESSING_METHOD = "GPSProcessingMethod";

public static final String TAG_GPS_SATELLITES = "GPSSatellites";

public static final String TAG_GPS_SPEED = "GPSSpeed";

public static final String TAG_GPS_SPEED_REF = "GPSSpeedRef";

public static final String TAG_GPS_STATUS = "GPSStatus";

public static final String TAG_GPS_TIMESTAMP = "GPSTimeStamp";

public static final String TAG_GPS_TRACK = "GPSTrack";

public static final String TAG_GPS_TRACK_REF = "GPSTrackRef";

public static final String TAG_GPS_VERSION_ID = "GPSVersionID";

public static final String TAG_IMAGE_DESCRIPTION = "ImageDescription";

public static final String TAG_IMAGE_LENGTH = "ImageLength";

public static final String TAG_IMAGE_UNIQUE_ID = "ImageUniqueID";

public static final String TAG_IMAGE_WIDTH = "ImageWidth";

public static final String TAG_INTEROPERABILITY_INDEX = "InteroperabilityIndex";

2.读取图片属性

代码如下:

try {

ExifInterface exifInterface = new ExifInterface(imagePath);

String datetime = exifInterface.getAttribute(ExifInterface.TAG_DATETIME);// 拍摄时间

String deviceName = exifInterface.getAttribute(ExifInterface.TAG_MAKE);// 设备品牌

String deviceModel = exifInterface.getAttribute(ExifInterface.TAG_MODEL); // 设备型号

String latValue = exifInterface.getAttribute(ExifInterface.TAG_GPS_LATITUDE);

String lngValue = exifInterface.getAttribute(ExifInterface.TAG_GPS_LONGITUDE);

String latRef = exifInterface.getAttribute(ExifInterface.TAG_GPS_LATITUDE_REF);

String lngRef = exifInterface.getAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF);

if (latValue != null && latRef != null && lngValue != null && lngRef != null) {

lat = convertRationalLatLonToFloat(latValue, latRef);

lng = convertRationalLatLonToFloat(lngValue, lngRef);

}

} catch (IllegalArgumentException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

private static float convertRationalLatLonToFloat(String rationalString, String ref) {

String[] parts = rationalString.split(",");

String[] pair;

pair = parts[0].split("/");

double degrees = Double.parseDouble(pair[0].trim())/ Double.parseDouble(pair[1].trim());

pair = parts[1].split("/");

double minutes = Double.parseDouble(pair[0].trim())/ Double.parseDouble(pair[1].trim());

pair = parts[2].split("/");

double seconds = Double.parseDouble(pair[0].trim())/ Double.parseDouble(pair[1].trim());

double result = degrees + (minutes / 60.0) + (seconds / 3600.0);

if ((ref.equals("S") || ref.equals("W"))) {

return (float) -result;

}

return (float) result;

}

这样就获取到了经纬度信息,然后通过经纬度获取具体地址信息。

3.经纬度解析,主要android类Geocoder

代码如下,两种方式都可以得到具体地址:

private void getAddress(double latitude, double longitude) {

Geocoder gc = new Geocoder(MainActivity.this, Locale.getDefault());

try {

List<Address> locationList = gc.getFromLocation(latitude, longitude, 1);

if (locationList != null && locationList.size()>0) {

Address address = locationList.get(0);

String countryName = address.getCountryName(); 

String countryCode = address.getCountryCode();

String adminArea = address.getAdminArea(); 

String locality = address.getLocality(); 

String subAdminArea = address.getSubLocality(); 

String featureName = address.getFeatureName(); 

for (int i = 0; address.getAddressLine(i) != null; i++) {

String addressLine = address.getAddressLine(i);

System.out.println("addressLine=====" + addressLine);

}

/* String currentPosition = "countryName == " + countryName+ "\n" 

                            + "countryCode == " + countryCode+ "\n" 

                            + "adminArea == " + adminArea+ "\n" 

                            + "locality ==" + locality+ "\n" 

                            + "subAdminArea == " + subAdminArea+ "\n" 

                            + "featureName == " + featureName;

System.out.println(currentPosition);

*/

} else {

Toast.makeText(MainActivity.this,"无法获取地址",Toast.LENGTH_SHORT).show();

}

} catch (Exception e) {

e.printStackTrace();

}

}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约