uniapp拍照离线定位,获取图片信息,经纬度解析地址

news2024/11/23 20:02:40

✅作者简介:

            我是痴心阿文,你们的学友哥,今天给大家分享uniapp拍照离线定位,获取图片信息,经纬度解析地址

  📃个人主页:痴心阿文的博客_CSDN博客-Vue.js,数组方法,前端领域博主

🔥本文前言:需求,手机拍照定位,获取经纬度并上传图片,当手机无网络的时候也可以离线拍照通过定位上传图片,用到的有地图定位api,设备信息api,相机api等。

目录

 🍉🍉🍉首先,获取当前是否有网

 🍉🍉🍉uni.getSystemInfo 获取设备信息定位权限

 🍉🍉🍉获取图片信息。 

 🍉🍉🍉获取经纬度

🍉🍉🍉值得看: 


 🍉🍉🍉首先,获取当前是否有网

有网时正常走有网的操作,这里主要是介绍没网的操作。 

	uni.getNetworkType({
			success: res =>{
				console.log(res.networkType);//网络类型 wifi、2g、3g、4g、ethernet、unknown、none
				if(res.networkType === "none"){
					console.log("当前无网络");
					this.getSystemInfo()
				}else{
                    //有网时的操作...
				}
			}
		});

 🍉🍉🍉uni.getSystemInfo 获取设备信息定位权限

getSystemInfo(){
			uni.getSystemInfo({
				success:res=>{
					var platform = res.platform;
					if(platform === 'android'){
						console.log("android");
						var context = plus.android.importClass("android.content.Context"); 
						var locationManager = plus.android.importClass("android.location.LocationManager");
						var main = plus.android.runtimeMainActivity();
						var mainSvr = main.getSystemService(context.LOCATION_SERVICE);
						if(!mainSvr.isProviderEnabled(locationManager.GPS_PROVIDER)){
							uni.showModal({
								title:"提示",
								content:"请打开定位服务功能",
								showCancel:false,
								success(){
									if(!mainSvr.isProviderEnabled(locationManager.GPS_PROVIDER)){
										var Intent = plus.android.importClass("android.content.Intent");
										var Settings = plus.android.importClass("android.provider.Settings");
										var intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGDS);
										main.startActivity(intent);
									}else{
										console.log('GPS已经开启');
										this.getunLatlng()
									}
								}
							})
						}else{
							console.log('GPS已经开启');
							this.getunLatlng()
						}
					} else if (system.platform === 'ios') {
						console.log("苹果");
						var cllocationManger = plus.ios.import("CLLocationManager");
						var enable = cllocationManger.locationServicesEnabled();
						var status = cllocationManger.authorizationStatus();
						plus.ios.deleteObject(cllocationManger);
						if (enable && status != 2) {
							 plus.geolocation.getCurrentPosition((position)=> {
							 	this.latitude = position.coords.latitude;
							 	this.longitude = position.coords.longitude;
							 	console.log("Latitude: " + this.latitude + ", Longitude: " + this.longitude);
							 }); 
						//	this.getunLatlng()
						} else {
							uni.showModal({
								title: '提示',
								content: '请打开定位服务功能',
								showCancel: false, // 不显示取消按钮
								confirmText: "去打开", // 确认按钮文字 
								confirmColor:'#09c499',//删除字体的颜色
								success() {
									var UIApplication = plus.ios.import("UIApplication");
									var application2 = UIApplication.sharedApplication();
									var NSURL2 = plus.ios.import("NSURL");
									var setting2 = NSURL2.URLWithString("App-Prefs:root=Privacy&path=LOCATION");
									application2.openURL(setting2);
									plus.ios.deleteObject(setting2);
									plus.ios.deleteObject(NSURL2);
									plus.ios.deleteObject(application2);
								}
							});
						}
			    	}
				}
			})
		},

获取到手机设备是否开启定位权限之后,我们就要进行拍照上传的步骤,拍照这里也要再判断下是否有网,有网时正常走有网定位操作,没网时走离线模式。


		chooseImage: async function() {
			uni.getNetworkType({
                success: res => {
                    console.log(res.networkType);//网络类型 wifi、2g、3g、4g、ethernet、unknown、none
                    if(res.networkType === "none"){
						this.getunLatlng()
                        console.log("当前无网络");
                    }else{
                        console.log("有网络");
                        this.getLocation()
                    }
                }
            })
			let self = this, ajaxNum=0;
			uni.chooseImage({
				count: this.num-this.pictureArr.length,
				sizeType:['compressed'],
				sourceType:this.sourceType,
				success: (res) => {
					ajaxNum=res.tempFilePaths.length;
					uni.showLoading({
						title: '正在上传...',
						mask: true
					});
					let tempFilePaths=res.tempFilePaths;
					// #ifdef H5
					tempFilePaths=res.tempFiles.map(item=>{
						console.log(item.path)
						return item.path;
					})
					// #endif
					uni.hideLoading()
					tempFilePaths.forEach(item=>{
						console.log(item,'===上传的本地图片')
						// #ifdef APP-PLUS
							var p = plus.io.convertLocalFileSystemURL(item); 
							let url =  'file://'+  p  
							self.getimginfo(url)
						// #endif
						// #ifdef H5
							self.getimginfo(item)
						// #endif
					})
				}
			})
		},

 🍉🍉🍉获取图片信息。 

	//获取图片信息
		getimginfo(filePath) {
			uni.getImageInfo({
				src: filePath,
				success: (image) => {
					console.log('image.width', image.width);
					console.log('image.height', image.height);
					this.canvasWidth1 = image.width
					this.canvasHeight1 = image.height
					this.draw(filePath)
                    //这里可以进行一些操作。
				}
			});
		},

这里可以进行一些操作,比如说,绘制图片,把经纬度信息绘制到图片里,类似小米手机的拍照打卡, 

 🍉🍉🍉获取经纬度

 通过plus APP的API获取GPS定位的经纬度,然后有网的时候可以解析地址

//获取经纬度	
getunLatlng(){
			let _this = this
			console.log('gps')
			// #ifdef APP-PLUS
			let wid = null;
			wid = plus.geolocation.watchPosition(function(p) {
				console.log(p,'p==')
				 _this.longitude = p.coords.longitude;
				 _this.latitude = p.coords.latitude;
				//let wgs84togcj02Data = _this.utils.wgs84togcj02obj({longitude:p.coords.longitude,latitude:p.coords.latitude});
				//let res = _this.utils.gd2bd({longitude:wgs84togcj02Data.longitude,latitude:wgs84togcj02Data.latitude})
			//	console.log('res:' + res.longitude,res.latitude);
			//	_this.longitude = res.longitude.toFixed(6);
			//	_this.latitude = res.latitude.toFixed(6);
			}, function(e){
				console.log(e,'e==失败')
			}, {geocode: true,enableHighAccuracy:true,accuracy:100})
			setTimeout(()=>{
				plus.geolocation.clearWatch(wid);
				wid = null;
			},3000)
			// #endif
			// #ifdef APP-PLUS
			plus.geolocation.getCurrentPosition(function (p){
				console.log(p,'position==')
				if(!(p.coords.lat_lng > 0 && p.coords.longitude >0)){
					// setTimeout(()=>{
					// 	_this.getunLatlng()
					// },5000)
				}else{
					_this.latitude = p.coords.latitude;
					_this.longitude = p.coords.longitude;
					console.log("Latitude: " + _this.latitude + ", Longitude: " + _this.longitude);
					
					//根据坐标获取位置
					var point = new plus.maps.Point(_this.longitude, _this.latitude);
					plus.maps.Map.reverseGeocode(
						point,
						{},
						function(event) {
							var address = event.address; // 转换后的地理位置
							var point = event.coord; // 转换后的坐标信息
							var coordType = event.coordType; // 转换后的坐标系类型
							console.log(address, 'address');
							var reg = /.+?(省|市|自治区|自治州|县|区)/g;
							console.log(address.match(reg));
							let addressList=address.match(reg).toString().split(",");
							console.log(addressList[0]);
							console.log(addressList[1]);
							console.log(addressList[2]);
							
						},
						function(e) {}
					);
					//根据坐标获取位置	
				}
			}, function(e){
				console.log(e,'e==失败')
			}, {geocode: true})
			// {provider:'baidu',coordsType:'bd09ll',geocode: true}
			// #endif
		},

🍉🍉🍉值得看: 

HTML5+ API Reference   HTML5+获取定位的详细API

 

🍓结束语🏆

       🍉 还有一些不如的地方大家可以指正,欢迎评论留言。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/479575.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据结构】超详细之顺序表(利用C语言实现)

文章目录 前言一、顺序表是什么?二、顺序表的实现步骤 1.顺序表的初始化以及开辟空间2.实现顺序表的头插、尾插以及打印3.实现顺序表的头删、尾删以及打印4.实现顺序表的查找5.实现顺序表指定位置插入6.实现顺序表指定位置删除7.释放内存总结 前言 数据结构是一个程…

离散数学_九章:关系(3)

9.3 关系的表示 1、用集合表示关系2、用矩阵表示关系矩阵表示关系⭐集合上的关系矩阵 R 自反时 R 对称时 R 反对称时 ⭐确定关系合成的矩阵 3、用有向图表示关系有向图⭐从有向图中 确定关系具有的属性 自反性对称性反对称性传递性 本节及本章的剩余部分研究的所有关系均为二…

函数(详解)——C语言

Hello,友友们前段时间忙拖更了这么久,趁着五一假期好好卷上一波哈哈哈。好的,我们本期主要对C语言中的函数进行讲解。 1.什么是函数 在数学中也常常用到函数,但你对C语言中的函数有了解吗? 在C语言中函数是一段可重…

数据结构学习分享之单链表详解

数据结构第三课 1. 前言2. 链表的概念以及结构3. 链表的分类4.链表的实现4.1 初始化结构4.2 尾插函数4.3 尾删函数4.4 头插函数4.5 头删函数4.6 开辟新节点4.7 销毁链表 5. 单链表OJ题目6. 顺序表和链表的区别7. 总结 1. 前言 💓博主CSDN:杭电码农-NEO💓…

五年开发经验前端程序员,刚入职一个月就要离职,我来聊聊看法

最近有一个新来的同事,估计又要离职了吧。从他的工作经历来看,大概有5年的前端工作经验,但是头发看起来挺少的,不知道是工作加班导致的,看他的性格不太像是经常加班的。 他这个人就是我们公司人事面试的,虽…

操作系统——进程管理

0.关注博主有更多知识 操作系统入门知识合集 目录 0.关注博主有更多知识 4.1进程概念 4.1.1进程基本概念 思考题: 4.1.2进程状态 思考题: 4.1.3进程控制块PCB 4.2进程控制 思考题: 4.3线程 思考题: 4.4临界资源与临…

躺平减脂减重法补充篇——无需控制碳水摄入的有效方法,另推一种健康的运动和防止老年慢性病的方式...

本文此前已经连续发表了六篇相关文章,内容确实比较多,最近又做了一组实验,进食了大量的锅巴,看看是否会带来体重的增加,每天进食量都不少于200克锅巴,对,4两重,而且是在每天正常进食…

SAPUI5 之XML Views (视图) 笔记

文章目录 官网 Walkthrough学习-XML Views视图案例要求:我们把上面通过index.html body的展示放在XML中展示1.0.1 新增view文件夹1.0.2 在xml文件中新增一个Text 文本1.0.3 在index.js中实例化view视图1.0.4 执行刷新浏览器1.0.5 调试界面分析结果 官网 Walkthrough…

假期给朋友介绍如何学习java和找工作的建议?

Java学习 一、学习Java的建议1. 学习Java基础知识2. 学习Java框架3. 学习Java Web开发4. 学习Java数据库编程5. 学习Java工具6.学习Java中的多线程技术6. 练习编程 二、找工作的建议1. 准备好简历2. 寻找工作机会3. 准备面试4. 提高自己的技能5. 关注行业动态 学习Java和找工作…

第十九章 观察者模式

文章目录 前言普通方式解决问题CurrentConditions 显示当前天气情况WeatherData 管理第三方Clint 测试 一、观察者模式(Observer)原理完整代码SubjectObserverWeatherData implements SubjectCurrentConditions implements ObserverBaiduSite implements ObserverClint 前言 普…

《软件工程教程》(第2版) 主编:吴迪 马宏茹 丁万宁 第十章课后习题参考答案

第十章 面向对象设计 课后习题参考答案 一、单项选择题 (1)A (2)B (3)B (4)D (5)A (6)C(7)D &#xff0…

【学习心得】Python多版本控制

问题描述:本文主要解决Windows系统下的多个Python版本共存问题。 (一)安装不同版本Python 官方下载链接:Python Releases for Windows | Python.org 下载如图中所示的版本(64位Windows系统可执行安装包版本&#xff0…

赞!数字中国建设峰会上的金仓风采

4月30日,第六届数字中国建设成果展览会圆满落幕。人大金仓深度参与本届峰会,在会上发布产品新版本,展出国产数据库前沿的行业解决方案和创新应用成果,出席国资央企SaaS应用服务共享平台伙伴签约仪式,吸引众多用户、伙伴…

面试官:你知道 Spring lazy-init 懒加载的原理吗?

普通的bean的初始化是在容器启动初始化阶段执行的,而被lazy-init修饰的bean 则是在从容器里第一次进行context.getBean(“”)时进行触发。 Spring 启动的时候会把所有bean信息(包括XML和注解)解析转化成Spring能够识别的BeanDefinition并存到Hashmap里供下面的初始…

k210单片机定时器的应用

定时器应该是一个单片机的标准配置,所以k210也是有的,拥有3个定时器,具体的使用方法我们往下看: 分步介绍: 首先是相关模块的使用 构造函数: machine.Timer(id,channel,modeTimer.MODE_ONE_SHOT,period100…

【7. ROS 中的 IMU 惯性测量单元消息包】

欢迎大家阅读2345VOR的博客【6. 激光雷达接入ROS】🥳🥳🥳 2345VOR鹏鹏主页: 已获得CSDN《嵌入式领域优质创作者》称号👻👻👻,座右铭:脚踏实地,仰望星空&#…

vue3回到上一个路由页面

学习链接 Vue Router获取当前页面由哪个路由跳转 在Vue3的setup中如何使用this beforeRouteEnter 在这个路由方法中不能访问到组件实例this,但是可以使用next里面的vm访问到组件实例,并通过vm.$data获取组件实例上的data数据getCurrentInstance 是vue3提…

Java --- springboot2请求参数处理

目录 一、请求参数处理 1.1、请求映射 1.2、自定义请求规则 1.3、请求处理 1.4、普通参数与基本注解 1.4.1、注解 1.5、参数处理原则 1.6、复杂参数 1.7、自定义参数对象 1.8、自定义Converter 一、请求参数处理 1.1、请求映射 // RequestMapping(value "…

c#笔记-下载编辑器

IDE IDE是指集成开发环境(Integrated Development Environment),是一种将软件开发所需的软件组合在一起,可以从同一操作界面以统一的操作方式使用的软件包。通常包括代码编辑器、编译器、链接器、调试器、测试工具、版本管理软件等…

自动化运维工具一Ansible Playbook语法实战

目录 一、Ansible Playbook剧本初识 1.1 Ansible Playbook 基本概述 1.1.1 什么是playbook 1.1.2 Ansible playbook 与AD-Hoc的关系 1.2 Ansible Playbook 书写格式 1.2.1安装NFS 服务 1.3 Playbook变量详解 1.3.1 使用 vars定义变量 1.3.2 使用 vars_flies定义变量 …