微信,根据经纬度获取当前城市

浏览器原生跟微信JS-SDK两种方法获取用户经纬度和所在城市的方法
www.MyException.Cn  网友分享于:2015-09-24  浏览:0次

浏览器原生和微信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) {
				//设置默认城市
			}
		);
	}
);

  

时间: 2024-10-09 17:47:40

微信,根据经纬度获取当前城市的相关文章

ios项目开发(天气预报项目):通过经纬度获取当前城市名称

 1 . 在项目里添加 CoreLocation.framework 2 .在 .h 文件输入如下: 1.#import <CoreLocation/CLLocation.h> 2.#import <CoreLocation/CLLocationManager.h> 3.#import <coreLocation/CLGeocoder.h> 4.#import <coreLocation/CLPlacemark.h> 3 . 在 .m文件输入如下: 1.

微信小程序-获取当前位置和城市名

微信小程序-获取当前城市位置 1, 获取当前地理位置,首先要拿到用户的授权wx.openSetting: 2,微信的getLocation接口,获取当前用户的地理位置(微信返回的是经纬度,速度等参数): 3,微信没有将经纬度直接转换为地理位置,借用腾讯位置服务中关于微信小程序的地理转换JS SDK 的API(返回信息中包括国家,省,市,区,经纬度等地理位置)步骤描述清楚以后,下面就开始按步骤操作了:(本文仅仅讲述如何获取用户地理位置的授权) 图示为获取用户地理位置授权弹窗 在用户首次进入某页面(

C#微信开发之旅(七):根据经纬度获取地址(百度地图Api)

开发过程中遇到这样的需求,根据用户的地理位置不同,显示不同区域的产品. 这里用到了微信:获取用户地理位置 的功能,(每隔5秒上报 或 进入回话时上报一次),我们根据微信推送过来的经纬度,来转换成实际地址,这里用到的是百度地图Api(要用的话先申请百度ak). PS:微信的这个功能很不稳定,靠它不靠谱,经常不推送...(后来加了手动定位,百度地图Web定位组件 还不错,不是广告!0.0) #region 根据经纬度 获取地址信息 BaiduApi /// <summary> /// 根据经纬度

php根据经纬度获取城市名

/*php根据经纬度获取城市名*/ function get_my_addr_infos(){ $ch = curl_init(); $timeout = 5; $lat = $list['info']['lat']; //维度 $lng = $list['info']['lng']; //经度 $URL = "http://api.map.baidu.com/geocoder/v2/?ak=hLze6N9cRxKwgugGZ2IOmc1n&location=$lat,$lng&

微信小程序正确的异步request请求,根据经纬度获取地理位置信息

微信小程序的所有request请求都是异步的,不支持同步.但是在请求时可能会耗费一定时间,这样的话在获取返回数据时可能方法还没有执行完就已经进行赋值操作了.我遇到的就是拿到的数据为undefined. 解决办法,使用回调函数,等操作完成后再更改原来的值. 贴代码:(这是根据经纬度获取地理位置的一个方法) function GetAddress(latitude, longtitude, callback, errorCallback) { var geturl = 'https://api.ma

ios获取当前城市 ,位置,坐标,经纬度

有些时候可能只是用到地图的某些功能,比如获取当前所在的城市,然后根据城市返回相应的数据,而不需要其他操作,每次都要写那么几行代码,所以就做了小小的封装,后期可能会添加新功能,来适应app的各种需求(使其变得更为强大) github打包地址:https://github.com/iOSSinger/SGLocation 核心代码: 使用方法: //一行代码获取当前城市 [loc setGetCity:^(NSString *city) { NSLog(@"%@",city); }]; /

给定经纬度定位某个城市

方案1 通过GEO HASH,抓取每个格子里的点的地址信息,然后把这个地址信息作为GEO中点坐标的一个信息,当查询给定经纬度是在哪个城市的时候,查询过程是查询距离这个经纬度最近的带有地址的点,认为给定经纬度和最近的这个点是同一个地址下的.通过不断完善GEO中的每个坐标下的地址信息,可以提高整个系统的精度.这种方法相当于一种间接获取的方法的. 方案2 我们知道每个地区是有一定区域的,可以认为是一个闭合的多边形,定位城市,可以理解为判断某个点,是否在某个区域内. 第一点:如何获取城市的区域边界 很幸

微信js-sdk开发获取签名和获取地理位置接口示例

### 微信js-sdk开发获取签名和获取地理位置接口示例 前言:在做微信公众号开发时需要获取用户的地理位置信息,之前通过高德或者百度.腾讯等地图的api时发现经常获取不到,毕竟第三方的东西,后来改为采用微信内置的js-sdk中的获取地理位置接口,在这主要记录下签名的获取(麻烦点)和一个获取地理位置的例子. 准备工作: 微信测试号appid和appsecret 获取地址:微信测试账号获取 在测试账号里先填写接口配置信息和js接口安全域名(这个是必须的) 示例:页面中需要点击图标获取地理位置信息

微信小程序获取地理位置授权

getUserLocation: function () { let vm = this wx.getSetting({ success: (res) => { console.log('getUserLocation', res) // res.authSetting['scope.userLocation'] == undefined 表示 初始化进入该页面 // res.authSetting['scope.userLocation'] == false 表示 非初始化进入该页面,且未授权