当前位置: 首页 > 后端技术 > Java

极好的!通过Java技术,获取女朋友的位置地址...

时间:2023-04-01 23:21:00 Java

今天早上看到CSDN推荐的Python让女朋友发加班照片,位置地址是酒店的笑话。本来打算验证一下,顺便实践一下。最后安装执行pipinstalljson报错没有指定版本号。一怒之下,做了我的大JAVA,验证了可行性和场景的遐想。话不多说,先上硬货。依赖导入是博文中的exifread模块。找到了我大java对应的jar,找到了metadata-extractor,官方还在更新中。最新的罐子是今年的。这个元数据提取jar很强大,还支持视频信息的提取。看看官方介绍:你看到了吗?第一个例子是为了支持我的大JAVA而写的。同时作为工单,大肝。com.drewnoakesmetadata-extractor2.16.0准备工作1.打开GPS2,百度地图,北斗伙伴已验证说明已连接GPS定位3.设置手机相机打开位置信息4.拍照并查看照片详情。在这里,您必须确保您拍摄的照片的详细信息具有经纬度信息。如果没有,您可以定位您的手机。在CSDN搜索如何设置。对了,CSDN的浏览器插件真香。简直是我们技术人员的福音。不用担心一定程度的广告,让你找东西吃力,而且包容性很强,可以时不时的选择自己喜欢的搜索引擎。这里的sampledemo首先演示了这个metadataextractionjar可以提取的信息,顺便把获取到的经纬度通过百度传给地址。因为是demo,没有业务,所以我这里直接在测试类中进行。没有业务,不涉及机密,可以使用完整代码。包com.easylinkin.bm.extractor;导入com.alibaba.fastjson.JSONObject;导入com.drew.imaging.ImageMetadataReader;导入com.drew.imaging.ImageProcessingException;导入com.drew.metadata.Directory;导入com.drew。metadata.Metadata;importcom.drew.metadata.Tag;importcom.easylinkin.bm.util.HttpUtils;importlombok.extern.slf4j.Slf4j;importjava.io.File;importjava.io.IOException;/***@authorzhengwen**/@Slf4jpublicclassImgTestCode{publicstaticvoidmain(String[]args)throwsException{Filefile=newFile("C:\\Users\\zhengwen\\Desktop\\test\\IMG_20210820_093958.jpg");读取图像信息(文件);}/***提取照片里的信息**@paramfile照片文件*@throwsImageProcessingException*@throwsException*/privatestaticvoidreadImageInfo(Filefile)throwsImageProcessingException,Exception{Metadatametadata=ImageMetadataReader.readMetadata(file);System.out.println("---打印完整的细节---");for(Directorydirectory:metadata.getDirectories()){for(Tagtag:directory.getTags()){System.out.format("[%s]-%s=%s\n",directory.getName(),tag.getTagName(),tag.getDescription());}if(directory.hasErrors()){for(Stringerror:directory.getErrors()){System.err.format("ERROR:%s",error);}}}System.out.println("--打印公共信息---");Doublelat=null;Doublelng=null;for(Directorydirectory:metadata.getDirectories()){for(Tagtag:directory.getTags()){StringtagName=tag.getTagName();//标签名称Stringdesc=tag.getDescription();//标签信息if(tagName.equals("ImageHeight")){System.err.println("图像高度:"+desC);}elseif(tagName.equals("ImageWidth")){System.err.println("ImageWidth:"+desc);}elseif(tagName.equals("Date/TimeOriginal")){System.err.println("Timetaken:"+desc);}elseif(tagName.equals("GPSLatitude")){System.err.println("Latitude:"+desc);System.err.println("纬度(度分秒格式):"+pointToLatlong(desc));lat=latLng2Decimal(desc);}elseif(tagName.equals("GPSLongitude")){System.err.println("Longitude:"+desc);System.err.println("经度(度-分-秒格式):"+pointToLatlong(desc));lng=latLng2Decimal(desc);}}}System.err.println("--经纬度转账地址--");//经纬度转换楼主使用百度apiconvertGpsToLoaction(纬度,经度);}/***经纬度格式转换为度分秒格式。必要时可以调用该方法转换**@parampoint坐标点*@return*/publicstaticStringpointToLatlong(Stringpoint){Doubledu=Double.parseDouble(point.substring(0,point.indexOf("°“))。修剪());双芬=Double.parseDouble(point.substring(point.indexOf("°")+1,point.indexOf("'")).trim());doublemiao=Double.parseDouble(point.substring(point.indexOf("'")+1,point.indexOf("\"")).trim());DoubleduStr=du+fen/60+miao/60/60;returnduStr.toString();}/****经纬度坐标格式转换(*°转十进制格式)*@paramgps*/publicstaticdoublelatLng2Decimal(Stringgps){Stringa=gps.split("°")[0].replace("","");Stringb=gps.split("°")[1].split("'")[0].replace("","");字符串c=gps.split("°")[1].split("'")[1].replace("","").replace("\"","");双gps_dou=Double.parseDouble(a)+Double.parseDouble(b)/60+Double.parseDouble(c)/60/60;返回gps_dou;}/***api_key:注册的百度api的key*coords:经纬度坐标*http://api.map.baidu.com/reverse_geocoding/v3/?ak="+api_key+"&output=json&coordtype=wgs84ll&location="+coords*

*经纬度转换地址信息**@paramgps_latitude维度*@paramgps_longitude精度*/privatestaticvoidconvertGpsToLoaction(doublegps_latitude,doublegps_longitude)throwsIOException{StringapiKey="YNxcSCAphFvuPD4LwcgWXwC3SEZZc7Ra";Stringres="";Stringurl="http://api.map.baidu.com/reverse_geocoding/v3/?ak="+apiKey+"&output=json&coordtype=wgs84ll&location="+(gps_latitude+","+gps_longitude);System.err.println("【url】"+url);res=HttpUtils.httpGet(url);JSONObject对象=JSONObject.parseObject(res);if(object.containsKey("result")){JSONObject结果=object.getJSONObject("result");if(result.containsKey("addressComponent")){JSONObjectaddress=object.getJSONObject("result").getJSONObject("addressComponent");System.err.println("拍摄地点:"+address.get("country")+""+address.get("province")+""+address.get("city")+""+address.get("district")+""+address.get("street")+""+result.get("formatted_address")+""+result.get("business"));}}}}控制台打印:下面贴出详细内容:com.easylinkin.bm.extractor.ImgTestCode---打印全部详情---[JPEG]-压缩类型=基线[JPEG]-数据精度=8位[JPEG]-图像高度=4032像素[JPEG]-图像宽度=3024像素[JPEG]-分量数=3[JPEG]-分量1=Y分量:量化表0,采样因子2horiz/2vert[JPEG]-分量2=Cb分量:量化表1,采样因子1horiz/1vert[JPEG]]-分量3=Cr分量:量化表1,采样因子1horiz/1vert[ExifIFD0]-日期/时间=2021:08:2009:39:58[ExifIFD0]-模型=YOTAY3[ExifIFD0]-YCbCr定位=像素阵列中心[ExifIFD0]-分辨率单位=英寸[ExifIFD0]-Y分辨率=72点/英寸[ExifIFD0]-X分辨率=72点/英寸[ExifIFD0]-Make=YOTA[GPS]-GPS日期戳=2021:08:20[GPS]-GPS高度参考=海平面以下[GPS]-GPS经度参考=E[GPS]-GPS经度=114°24'9.61"[GPS]-GPS处理方式=ASCII[GPS]-GPSLatitudeRef=N[GPS]-GPS时间戳=01:39:46.000UTC[GPS]-GPS高度=21米[GPS]-GPS纬度=30°28'40.67"[ExifSubIFD]-色彩空间=sRGB[ExifSubIFD]-F数=f/1.9[ExifSubIFD]-日期/时间数字化=2021:08:2009:39:58[ExifSubIFD]-焦距=3.9mm[ExifSubIFD]-光圈值=f/1.9[ExifSubIFD]-曝光模式=自动曝光[ExifSubIFD]-亚秒时间数字化=819350[ExifSubIFD]-Exif图像高度=4032像素[ExifSubIFD]-焦距35=23mm[ExifSubIFD]-场景捕捉类型=标准[ExifSubIFD]-亚秒时间原始=819350[ExifSubIFD]-曝光程序=未知(0)[ExifSubIFD]-白平衡模式=自动白平衡[ExifSubIFD]-Exif图像宽度=3024像素[ExifSubIFD]-亚秒时间=819350[ExifSubIFD]-快门速度值=1/1022秒[ExifSubIFD]-测光模式=中心加权平均[ExifSubIFD]-日期/时间原始=2021:08:2009:39:58[ExifSubIFD]-组件公司nfiguration=YCbCr[ExifSubIFD]-Exif版本=2.20[ExifSubIFD]-闪光=闪光灯未闪光[ExifSubIFD]-亮度值=0.0[ExifSubIFD]-ISO速度等级=103[ExifSubIFD]-感应方法=单芯片颜色区域传感器[ExifSubIFD]-FlashPix版本=1.00[ExifSubIFD]-曝光时间=1/1023秒[互操作性]-互操作性指数=推荐的Exif互操作性规则(ExifR98)[互操作性]-互操作性版本=1.00[Exif缩略图]-Y分辨率=72点/英寸[Exif缩略图]-缩略图长度=21538字节[Exif缩略图]-缩略图偏移=959字节[Exif缩略图]-压缩=JPEG(旧式)[Exif缩略图]-分辨率单位=英寸[Exif缩略图]-X分辨率=72点/英寸[霍夫曼]-表格数量=4个霍夫曼表格[文件类型]-检测到的文件类型名称=JPEG[文件类型]-检测到的文件类型长名称=联合摄影专家组[文件类型]-检测到的MIME类型=image/jpeg[文件类型]-预期文件扩展名=jpg[文件]-文件名=IMG_20210820_093958.jpg[文件]-文件大小=5215044字节[文件]-文件修改日期=FriAug2009:39:59+08:002021--打印常用信息---初始化HttpClientTest~~~起始图高:4032像素图宽:3024像素经度:114°24'9.61"经度(度分秒格式):114.402669444444446纬度:30°28'40.67"纬度(度分秒格式):30.477963888888887拍摄时间:2021:08:2009:39:58--经纬度传输地址--【url】http://api.map.baidu.com/reverse_geocoding/v3/?ak=YNxcSCAphFvuPD4LwcgWXwC3SEZZc7Ra&output=json&coordtype=wgs84ll&location=30.477963888888887,114.40266944444446初始化HttpClientTest~~~完拍摄地点:中国湖北省武汉市洪山区软件园路你不明白我就不解释了看不懂,可以翻译成英文,或者查API看看还有什么文件打印出来。我不会证明它。如果你有兴趣,你可以自己尝试一下。我先把我百度地图的AK放在这里,方便大家验证,免得说我骗人,反正我是免费用的。最后说一句,图片要么压缩成压缩包再发,要么用数据线从手机里复制过来。我这里先用微信发了,基本所有信息都抹掉了(在电脑上查看图片详情,其实可以看到经纬度信息)。还有,我有一部苹果手机,居然可以拍出带有地理位置信息的照片。您需要在隐私中打开位置并对相机进行授权。总结和推导思路怎么说还是很不错的。如果用在我们的工作中,我们认为它可以代替我们以前做的现场检查。当您到达验货地点时,请拍照并与机器代码进行匹配。你不怕你会让别人帮你拍照。还有正式考勤表、实地工作等。另外,我还想到了孩子们出门喜欢拍照,把你的照片放在云存储上,如果有无良服务商,他们基本上可以通过你上传照片的时间来映射你的轨迹。..好吧,这将在这里分享。其实这里最大的感受就是不知道A,就不会想到B。如果早知道图片可以携带的信息,或者相机软件可以获取的信息,也许我就可以做到关于它的一些事情。.....来源:blog.csdn.net/zwrlj527/article/details/119823407