android写入定位信息,android应用如何将位置信息写入JPEG文件中

android应用如何将位置信息写入JPEG文件中

发布时间:2020-11-26 17:21:47

来源:亿速云

阅读:89

作者:Leah

这篇文章给大家介绍android应用如何将位置信息写入JPEG文件中,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

核心代码/**

* 浮点型经纬度值转成度分秒格式

*

* @param coord

* @return

*/

public String decimalToDMS(double coord) {

String output, degrees, minutes, seconds;

// gets the modulus the coordinate divided by one (MOD1).

// in other words gets all the numbers after the decimal point.

// e.g. mod := -79.982195 % 1 == 0.982195

//

// next get the integer part of the coord. On other words the whole

// number part.

// e.g. intPart := -79

double mod = coord % 1;

int intPart = (int) coord;

// set degrees to the value of intPart

// e.g. degrees := "-79"

degrees = String.valueOf(intPart);

// next times the MOD1 of degrees by 60 so we can find the integer part

// for minutes.

// get the MOD1 of the new coord to find the numbers after the decimal

// point.

// e.g. coord := 0.982195 * 60 == 58.9317

// mod := 58.9317 % 1 == 0.9317

//

// next get the value of the integer part of the coord.

// e.g. intPart := 58

coord = mod * 60;

mod = coord % 1;

intPart = (int) coord;

if (intPart 

// Convert number to positive if it's negative.

intPart *= -1;

}

// set minutes to the value of intPart.

// e.g. minutes = "58"

minutes = String.valueOf(intPart);

// do the same again for minutes

// e.g. coord := 0.9317 * 60 == 55.902

// e.g. intPart := 55

coord = mod * 60;

intPart = (int) coord;

if (intPart 

// Convert number to positive if it's negative.

intPart *= -1;

}

// set seconds to the value of intPart.

// e.g. seconds = "55"

seconds = String.valueOf(intPart);

// I used this format for android but you can change it

// to return in whatever format you like

// e.g. output = "-79/1,58/1,56/1"

output = degrees + "/1," + minutes + "/1," + seconds + "/1";

// Standard output of D°M′S″

// output = degrees + "°" + minutes + "'" + seconds + "\"";

return output;

}

/**

* 将经纬度信息写入JPEG图片文件里

*

* @param picPath

*      JPEG图片文件路径

* @param dLat

*      纬度

* @param dLon

*      经度

*/

public void writeLatLonIntoJpeg(String picPath, double dLat, double dLon) {

File file = new File(picPath);

if (file.exists()) {

try {

ExifInterface exif = new ExifInterface(picPath);

String tagLat = exif

.getAttribute(ExifInterface.TAG_GPS_LATITUDE);

String tagLon = exif

.getAttribute(ExifInterface.TAG_GPS_LONGITUDE);

if (tagLat == null && tagLon == null) // 无经纬度信息

{

exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE,

decimalToDMS(dLat));

exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE_REF,

dLat > 0 ? "N" : "S"); // 区分南北半球

exif.setAttribute(ExifInterface.TAG_GPS_LONGITUDE,

decimalToDMS(dLon));

exif.setAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF,

dLon > 0 ? "E" : "W"); // 区分东经西经

exif.saveAttributes();

}

} catch (Exception e) {

}

}

}

测试代码String strImgPath = getImageCachePath() + File.separator + "1.jpg";

ExifInterface eif = new ExifInterface(strImgPath);

String lat = eif.getAttribute(ExifInterface.TAG_GPS_LATITUDE);

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

String lon = eif.getAttribute(ExifInterface.TAG_GPS_LONGITUDE);

String lonRef = eif.getAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF);

System.out.println("Latitude Ref - " + latRef);

System.out.println("Latitude - " + lat);

System.out.println("Longitude Ref - " + lonRef);

System.out.println("Longitude - " + lon);

if (lat == null && lon == null) // 没有位置信息才写入

{

writeLatLonIntoJpeg(strImgPath, 39.23456, 116.123456);

}

第一次运行结果05-22 17:36:24.566: I/System.out(17966): Latitude Ref - null

05-22 17:36:24.566: I/System.out(17966): Latitude - null

05-22 17:36:24.566: I/System.out(17966): Longitude Ref - null

05-22 17:36:24.566: I/System.out(17966): Longitude - null

原始图片没有位置信息,通过调用writeLatLonIntoJpeg(strImgPath, 39.23456, 116.123456)来模拟写入一个位置。

第二次运行结果05-22 17:37:11.446: I/System.out(17966): Latitude Ref - N

05-22 17:37:11.446: I/System.out(17966): Latitude - 39/1,14/1,4/1

05-22 17:37:11.446: I/System.out(17966): Longitude Ref - E

05-22 17:37:11.446: I/System.out(17966): Longitude - 116/1,7/1,24/1

关于android应用如何将位置信息写入JPEG文件中就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值