我可以从我的应用程序中打开图库。有没有办法将图库中任何选定图像的经纬度获取到我的应用程序中?
2w3kk1z51#
你可以使用一个“buildin”函数:
ExifInterface exif = new ExifInterface(path); float[] latLong = new float[2]; boolean hasLatLong = exif.getLatLong(latLong) if (hasLatLong) { System.out.println("Latitude: " + latLong[0]); System.out.println("Longitude: " + latLong[1]); }
也许是新的东西,但我认为这比公认的答案要方便得多。
jgzswidk2#
你应该使用ExifInterface类从图像中读取各种EXIF元数据:示例:
ExifInterface exif = new ExifInterface(filepath); exif.getAttribute(ExifInterface.TAG_GPS_LATITUDE); exif.getAttribute(ExifInterface.TAG_GPS_LATITUDE_REF); exif.getAttribute(ExifInterface.TAG_GPS_LONGITUDE); exif.getAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF);
编辑:
现在在这里你会得到lat-long作为下面的格式。
lat = 30/1,12/1,34/1,long=81/1,22/1,41/1
把它转换成真实的值this Blog帮了我。我们需要从度、分、秒形式转换为GeoPoint形式。下面的方法你可以做到。
String LATITUDE = exif.getAttribute(ExifInterface.TAG_GPS_LATITUDE); String LATITUDE_REF = exif.getAttribute(ExifInterface.TAG_GPS_LATITUDE_REF); String LONGITUDE = exif.getAttribute(ExifInterface.TAG_GPS_LONGITUDE); String LONGITUDE_REF = exif.getAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF); // your Final lat Long Values Float Latitude, Longitude; if((LATITUDE !=null) && (LATITUDE_REF !=null) && (LONGITUDE != null) && (LONGITUDE_REF !=null)) { if(LATITUDE_REF.equals("N")){ Latitude = convertToDegree(LATITUDE); } else{ Latitude = 0 - convertToDegree(LATITUDE); } if(LONGITUDE_REF.equals("E")){ Longitude = convertToDegree(LONGITUDE); } else{ Longitude = 0 - convertToDegree(LONGITUDE); } } 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; }; @Override public String toString() { // TODO Auto-generated method stub return (String.valueOf(Latitude) + ", " + String.valueOf(Longitude)); } public int getLatitudeE6(){ return (int)(Latitude*1000000); } public int getLongitudeE6(){ return (int)(Longitude*1000000); }
zsbz8rwp3#
exif.getLatLong(float[])现在已经过时了,你可以使用一个更好的方法来返回一个double[]:
exif.getLatLong(float[])
double[]
ExifInterface exifInterface = new ExifInterface(file); double[] latlng = exifInterface.getLatLong(); if (latlng != null) { Double currentLatitude = latlng[0]; Double currentLongitude = latlng[1]; Log.d("Debug", "Exif : latitude: " + currentLatitude + ", longitude: " + currentLongitude) }
编码愉快。
3条答案
按热度按时间2w3kk1z51#
你可以使用一个“buildin”函数:
也许是新的东西,但我认为这比公认的答案要方便得多。
jgzswidk2#
你应该使用ExifInterface类从图像中读取各种EXIF元数据:
示例:
编辑:
现在在这里你会得到lat-long作为下面的格式。
lat = 30/1,12/1,34/1,long=81/1,22/1,41/1
把它转换成真实的值this Blog帮了我。
我们需要从度、分、秒形式转换为GeoPoint形式。
下面的方法你可以做到。
zsbz8rwp3#
exif.getLatLong(float[])
现在已经过时了,你可以使用一个更好的方法来返回一个double[]
:编码愉快。