uniapp通过ip获取其地址、经纬度、详细地址:

1.方法:

查看ip内容:http://pv.sohu.com/cityjson?ie=utf-8

【1】js获取ip地址:

<script src="http://pv.sohu.com/cityjson?ie=utf-8"></script>
<script type="text/javascript">  
    console.log(returnCitySN["cip"]+','+returnCitySN["cname"])  
</script>

【2】uni-app获取ip地址:(此方法会跨域报错=>后续找到解决方法再补充)

uni.request({
    url:'http://pv.sohu.com/cityjson?ie=utf-8',
	method:'POST',
	success: (res) => {
        const reg = /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/;
		let ip = reg.exec(res.data);
		console.log(ip[0]);
	}
})

在这里插入图片描述
【3】使用H5自带的获取位置

1、部分手机和浏览器不太支持这个API,还会有警告报错,所以感觉这个API有点鸡肋,不太能用得上。
2、如果需要展示地区名称,还需要另外引入类似百度地图的第三方平台提供的js进行经纬度转换地区名称等。
3、浏览器地址必须是https的,不然不支持。
if(navigator.geolocation) {
	navigator.geolocation.getCurrentPosition((res)=> {
		 console.log(res);//这里会返回经纬度,然后还要通过经纬度转换地区名称
	});
}

【4】使用百度地图获取位置

1、在百度地图开发平台注册账号,并申请ak密钥
2、在页面中引用百度地图js,(vue项目就在index.html中引用)
<body>
  <div id="app"></div>
	<!-- built files will be auto injected -->
	<script type="text/javascript" src="https://api.map.baidu.com/api?v=2.0&ak=qI3333RVsdret2A9999VC858Q&s=1"</script>
</body>
3、在页面中写入下面代码(可以直接返回经纬度和省市区名称等):
mounted() {            
	//获取当前城市
    var geolocation=new BMap.Geolocation();
    geolocation.getCurrentPosition(function(r){
        var city=r.address.city//返回当前城市
        that.currCity = city;
     })
},

【5】微信js-sdk自带的API

登录微信平台获取appid和秘钥

配置服务器信息,和js接口安全域名、网页授权域名等

把配置信息文件.txt放到配置的服务器下面

查看所有的接口权限,是否有获取用户地理位置

通过调接口的方式获取时间戳,签名等
wx.ready(function () 
{
    wx.checkJsApi(
    {
        jsApiList : ['getLocation'],
        success : function (res) 
        {
            if (!res.checkResult.getLocation) {
                alert('暂不支持获取地理位置接口,请升级微信版本!');
                return;
            }
        }
    }) wx.getLocation(
    {
        success : function (res) 
        {
            console.log(res)//地理位置信息都在这里
        },
        cancel : function (res) 
        {
            alert('用户拒绝授权位置信息!');
        }
    })
})
2.案例:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

<!DOCTYPE html>
<html>

<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<title><%= htmlWebpackPlugin.options.title %></title>

<script>
document.addEventListener('DOMContentLoaded', function() {
	document.documentElement.style.fontSize = document.documentElement.clientWidth / 20 + 'px'
})
</script>
<link rel="stylesheet" href="<%= htmlWebpackPlugin.options.baseUrl %>static/index.css" />
<!-- 引入外部js -->
<script src="http://pv.sohu.com/cityjson?ie=utf-8"></script>
<script type="text/javascript">  
	// 获取ip及地址
    console.log(returnCitySN["cip"]+','+returnCitySN["cname"],'ip及其地址') 
    localStorage.setItem('IPAddress', returnCitySN["cname"]) //存储ip获取的地址 

	// 存储IP地址
	var ip = returnCitySN["cip"];
	// console.log("你的IP是:" +ip)
	get_pos(ip);

	function get_pos(ip) {
		// 构建url==>这里使用的是高德地图
		var url = "https://restapi.amap.com/v5/ip?key=你的key&type=4&ip=" + ip;
				// 建立所需的对象
				var httpRequest = new XMLHttpRequest();
				// 打开连接  将请求参数写在url中 
				httpRequest.open('GET', url, true);
				// 发送请求  将请求参数写在URL中
				httpRequest.send();
				// 经纬度坐标
				var pos = "";
				// 获取数据后的处理程序
				httpRequest.onreadystatechange = function() {
					if (httpRequest.readyState == 4 && httpRequest.status == 200) {
						// 获取到json字符串
						var ret = httpRequest.responseText;
						// 转为JSON对象
						var json = JSON.parse(ret);
						pos = json["location"];
						// console.log("你的经纬度是:" +pos)
						localStorage.setItem('longitudeAndLatitude',JSON.stringify(pos))
						get_addr(pos);
					}
				};
			}

			function get_addr(pos) {
				var httpRequest = new XMLHttpRequest();
				url = "https://restapi.amap.com/v3/geocode/regeo?key=你的key&radius=0&extensions=all&batch=false&location=" + pos;
				httpRequest.open('GET', url, true);
				httpRequest.send();
				httpRequest.onreadystatechange = function() {
					if (httpRequest.readyState == 4 && httpRequest.status == 200) {
						// 获取到json字符串
						var ret = httpRequest.responseText;
						// 转为JSON对象
						var json = JSON.parse(ret);
						var address = json["regeocode"]["formatted_address"];
						// console.log("你的地址大概是:"+address);
					}
				};
			}
</script>
</head>

<body>
<noscript>
<strong>Please enable JavaScript to continue.</strong>
</noscript>

<div id="app"></div>
</body>
</html>
3.最终效果:

在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
可以使用高德地图的逆地理编码服务,将经纬度转化为具体的地址信息。在uniapp中,你可以使用uni-geolocation插件来获取用户的经纬度。然后,你可以使用uni.request函数向高德地图的逆地理编码API发送请求,将经纬度作为参数传递给API,并获取返回的地址信息。 以下是一个示例代码: ```javascript // 引入uni-geolocation插件 import uniGeolocation from '@/uni_modules/uni-geolocation/uni-geolocation.js'; // 获取用户的经纬度 uniGeolocation.getLocation({ success: function (res) { const latitude = res.latitude; const longitude = res.longitude; // 向高德地图逆地理编码API发送请求 uni.request({ url: 'https://restapi.amap.com/v3/geocode/regeo', method: 'GET', data: { key: 'your-amap-api-key', location: `${longitude},${latitude}`, extensions: 'all', s: 'rsx', sdkversion: 'sdkversion', logversion: 'logversion' }, success: function (res) { const address = res.data.regeocode.formatted_address; console.log(address); // 在这里处理获取到的地址信息 }, fail: function (err) { console.log(err); // 处理请求失败的情况 } }); }, fail: function (err) { console.log(err); // 处理获取经纬度失败的情况 } }); ``` 请确保替换代码中的'your-amap-api-key'为你自己的高德地图API密钥。此外,你还可以根据高德地图逆地理编码API的文档调整其他参数。 注意:以上代码仅为示例,实际使用时请根据uniappuni-geolocation插件的使用方式进行适当修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sun Peng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值