具体步骤 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(); } } |
|