`

浏览器原生和微信JS-SDK两种方法获取用户经纬度和所在城市的方法

阅读更多

网上找了很多根据经纬度获取城市的文章,没发现特别好用的,于是自己写了一个,包含自带浏览器获取经纬度和微信JS-SDK获取经纬度的方法,获取后并存入localStorage

 

参考资料如下

微信JS-SDK :http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html

百度地图API: http://developer.baidu.com/map/index.php?title=webapi/guide/webservice-geocoding

 

代码

 

var getLocation = {
//浏览器原生获取经纬度方法
	latAndLon: function (callback, error) {
		var that = this;
		if (navigator.geolocation) {
			navigator.geolocation.getCurrentPosition(function (position) {
					var latitude = position.coords.latitude;
					var longitude = position.coords.longitude;
					localStorage.setItem("latitude", latitude);
					localStorage.setItem("longitude", longitude);
					var data = {
						latitude: latitude,
						longitude: longitude
					};
					if (typeof callback == "function") {
						callback(data);
					}
				},
				function () {
					if (typeof error == "function") {
						error();
					}
				});
		} else {
			if (typeof error == "function") {
				error();
			}
		}
	},

//微信JS-SDK获取经纬度方法
	weichatLatAndLon: function (callback, error) {
		var that = this;
		var timestamp = new Date().getTime() + "";
		timestamp = timestamp.substring(0, 10);
		var ranStr = randomString();

		//微信接口配置
		wx.config({
			debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
			appId: 'XXXXXXXXXXXXXXXXX', // 必填,公众号的唯一标识
			timestamp: timestamp, // 必填,生成签名的时间戳
			nonceStr: ranStr, // 必填,生成签名的随机串
			signature: 'XXXXXXXXXXXXXXXXX',// 必填,签名,见附录1
			jsApiList: ['checkJsApi',
				'getLocation'
			] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
		});

		//参见微信JS SDK文档:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html
		wx.ready(function () {

			wx.getLocation({
				success: function (res) {
					var latitude = res.latitude; // 纬度,浮点数,范围为90 ~ -90
					var longitude = res.longitude; // 经度,浮点数,范围为180 ~ -180。
					var speed = res.speed; // 速度,以米/每秒计
					var accuracy = res.accuracy; // 位置精度
					localStorage.setItem("latitude", latitude);
					localStorage.setItem("longitude", longitude);
					var data = {
						latitude: latitude,
						longitude: longitude
					};
					if (typeof callback == "function") {
						callback(data);
					}
				},
				cancel: function () {
					//这个地方是用户拒绝获取地理位置
					if (typeof error == "function") {
						error();
					}
				}
			});

		});
		wx.error(function (res) {
			if (typeof error == "function") {
				error();
			}
		});
	},
	//将经纬度转换成城市名和街道地址,参见百度地图接口文档:http://developer.baidu.com/map/index.php?title=webapi/guide/webservice-geocoding
	cityname: function (latitude, longitude, callback) {
		$.ajax({
			url: 'http://api.map.baidu.com/geocoder/v2/?ak=btsVVWf0TM1zUBEbzFz6QqWF&callback=renderReverse&location=' + latitude + ',' + longitude + '&output=json&pois=1',
			type: "get",
			dataType: "jsonp",
			jsonp: "callback",
			success: function (data) {
				console.log(data);
				var province = data.result.addressComponent.province;
				var cityname = (data.result.addressComponent.city);
				var district = data.result.addressComponent.district;
				var street = data.result.addressComponent.street;
				var street_number = data.result.addressComponent.street_number;
				var formatted_address = data.result.formatted_address;
				localStorage.setItem("province", province);
				localStorage.setItem("cityname", cityname);
				localStorage.setItem("district", district);
				localStorage.setItem("street", street);
				localStorage.setItem("street_number", street_number);
				localStorage.setItem("formatted_address", formatted_address);
				//domTempe(cityname,latitude,longitude);
				var data = {
					latitude: latitude,
					longitude: longitude,
					cityname: cityname
				};
				if (typeof callback == "function") {
					callback(data);
				}

			}
		});
	},
//设置默认城市
	setDefaultCity: function (callback) {
		alert("获取地理位置失败!");
		//默认经纬度
		var latitude = "31.337882";
		var longitude = "120.616634";
		var cityname = "苏州市";
		localStorage.setItem("latitude", latitude);
		localStorage.setItem("longitude", longitude);
		localStorage.setItem("cityname", cityname);
		localStorage.setItem("province", "江苏省");
		localStorage.setItem("district", "虎丘区");
		localStorage.setItem("street", "珠江路");
		localStorage.setItem("street_number", "88号");
		localStorage.setItem("formatted_address", "江苏省苏州市虎丘区珠江路88号");
		var data = {
			latitude: latitude,
			longitude: longitude,
			cityname: cityname
		};
		if (typeof callback == "function") {
			callback(data);
		}
	},
//更新地理位置
	refresh: function (callback) {
		var that = this;
		//重新获取经纬度和城市街道并设置到localStorage
		that.latAndLon(
			function (data) {
				that.cityname(data.latitude, data.longitude, function (datas) {
					if (typeof callback == "function") {
						callback();
					}
				});
			},
			function(){
				that.setDefaultCity(function(){
					if (typeof callback == "function") {
						callback();
					}
				});
			});
	}
};

 

 

调用

 

//原生浏览器获取经纬度方法
getLocation.latAndLon(
	function (data) {
		//data包含经纬度信息
		AGG.getLocation.cityname(data.latitude, data.longitude, function (datas) {
			//datas包含经纬度信息和城市
		});
	},
	function () {
		AGG.getLocation.setDefaultCity(
			function (defaultData) {
				//设置默认城市
			}
		);
	}
);


//微信JS-SDK获取经纬度方法
getLocation.weichatLatAndLon(
	function (data) {
		//data包含经纬度信息
		AGG.getLocation.cityname(data.latitude, data.longitude, function (datas) {
			//datas包含经纬度信息和城市
		});
	},
	function () {
		AGG.getLocation.setDefaultCity(
			function (defaultData) {
				//设置默认城市
			}
		);
	}
);

 

 

 

0
2
分享到:
评论

相关推荐

    微信小程序----高德地图API实现的DEMO

    在微信小程序中,开发者需要在`app.js`或`index.js`等入口文件引入高德地图的SDK,然后在对应的页面中配置地图组件,调用相应的API方法。例如,初始化地图、设置中心点、添加标记、监听用户位置变化等。 5. **注意...

    微信小程序demo:SDK.CN.rar

    微信小程序是一种轻量级的应用开发平台,由腾讯公司推出,主要针对移动设备用户,特别是微信用户。它允许开发者在微信内部构建丰富的交互式应用,无需安装即可使用,大大提升了用户体验。"SDK.CN"通常指的是中国地区...

    原生小程序获取定位信息数据

    下面我们将深入探讨如何使用JavaScript SDK在微信小程序中获取用户的位置信息。 首先,微信小程序提供了丰富的API接口,允许开发者获取用户的实时位置信息。这些API主要包含在`wx.getLocation`方法中。通过调用这个...

    微信小程序把百度地图坐标转换成腾讯地图坐标过程详解

    由于两家的地图坐标系统存在差异,当我们需要在微信小程序中将百度地图的坐标转换为腾讯地图的坐标时,就需要进行坐标转换操作。这篇文章详细介绍了在微信小程序中如何使用腾讯地图的API将百度地图的坐标转换为腾讯...

    仿美团的地址选择模块

    1. **数据源**:数据的获取通常有两种方式。一是使用国家公开的行政区域数据,这些数据可以从官方网站下载,需要进行处理后存储在本地或者服务器上。二是直接调用地图API,如高德地图或百度地图的接口,动态获取地址...

    跑步 地理位置 计时器

    在微信小程序的场景下,开发者需要熟悉微信开发者工具,使用JavaScript、WXML(结构语言)和WXSS(样式语言)进行开发。小程序的运行环境和原生应用有所不同,因此在实现上述功能时,会涉及到微信小程序的特定API和...

    uni-app 支持多端第三方地图定位的方法

    在实际项目中,你需要创建对应平台的 `openMapByAndroid`、`openMapByIos` 和 `openMapByDefault` 方法,分别调用对应的原生接口或内置方法。例如,对于Android和iOS,可能需要使用 `plus.runtime.launchApp` 来启动...

    点循环定位

    点循环定位是一种在移动应用中常见的技术,尤其在微信等社交平台上,用于自动化处理地理位置相关的任务。这种技术通常涉及到GPS定位、地图服务以及自动化脚本编程。以下是对这个主题的详细解析: 首先,"点循环定位...

Global site tag (gtag.js) - Google Analytics