网上找了很多根据经纬度获取城市的文章,没发现特别好用的,于是自己写了一个,包含自带浏览器获取经纬度和微信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) { //设置默认城市 } ); } );
相关推荐
如何在H5页面调用微信的扫一扫功能来识别二维码。简单实用,新手开发必备,开发微信网页应用,调用JS-SDK扫一扫二维码
weixin-js-sdk, 微信Web-App分分钟变身“原生App”。
微信JS-SDK是一种在微信内置浏览器中,方便网页应用使用微信特有功能的开发工具包。它可以让网页应用调用微信的基础能力,如微信分享、支付、获取用户信息等。 要使用微信JS-SDK进行开发,首先需要确保已经拥有微信...
微信小程序是一种轻量级的应用开发平台,主要针对移动端,它允许开发者通过JavaScript、WXML(WeChat Markup Language)和WXSS(WeChat Style Sheets)来构建应用,提供丰富的API接口和组件,使得开发者能够轻松创建...
该代码用于公众号获取经纬度,实现了openid、ticket的获取,未实现经纬度转换为地理位置描述
适应手机qq浏览器和uc浏览器。 下面上代码,把这些直接放到要转发的页面里就可以了: html部分: [removed][removed]//引进mshare.js <button data-mshare=0>点击弹出原生分享面板</button> <button...
内容:微信支付-工具类,包含微信退款,微信支付,微信相关V2版本V3接口集成 适用人群:JAVA 使用场景:集成好微信支付,可自由调整相关类,自由编写业务场景 说明: 将工具类导入该自行项目,将maven-jar 的配置...
总结来说,使用微信开发者工具进行微信小程序的原生开发,需要掌握JS、WXML和WXSS的语法,理解小程序的生命周期,利用组件化和API实现各种功能,同时在开发过程中充分利用调试工具,确保程序的稳定性和用户体验。
【标题】:“Node.js-一个基于react-nativemobxsocket.ionode的仿微信JS-Wechat”指的是一个使用Node.js技术栈构建的、模仿微信功能的应用项目。这个项目结合了React Native(用于移动端跨平台开发)、MobX(一个...
原生开发指的是使用特定平台的编程语言和API进行应用开发,对于微信小程序来说,就是使用微信提供的WXML(WeiXin Markup Language)和WXSS(WeiXin Style Sheets)来编写界面结构和样式,结合JavaScript处理业务逻辑...
小程序不仅拥有近似原生App的用户体验,还完美支持微信生态内的社交功能,如微信支付、公众号关联等,为用户提供一站式服务。 微信小程序-项目源码-原生开发框架 源码特色: 原生体验:基于微信原生框架开发,流畅...
微信小程序是腾讯公司推出的一种轻量级应用开发平台,它基于JavaScript、WXML(微信标记语言)和WXSS(微信样式语言)进行构建,可以在微信内快速加载和运行,无需用户下载安装即可使用。由于其便捷性和低门槛,微信...
2. **初始化SDK**:在页面加载完成后,调用`wx.config()`函数初始化微信JS-SDK,获取签名和权限验证配置,这一步是所有微信JS-SDK接口调用的基础。 3. **注册事件监听器**:使用`WeixinJSBridge.on`方法注册菜单...
通过这份资源,您将能够深入了解微信小程序的开发流程和技术细节,掌握原生开发框架的使用方法,以及如何通过代码实现各种功能和效果。无论您是前端开发者、小程序爱好者,还是希望拓展业务的企业,这份资源都将为您...
鹅厂一马当先,发布了业内震惊一时的 JS-SDK , 这对于基于微信的h5开发者来说简直是如降甘露,从此开发者们告别了用箭头来提示右上角可以分享,并且随时可以使用微信的原生能力,微信变成了一个超级浏览器。...
微信开放平台 : https://open.weixin.qq.com/ ... implementation'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+' } 2. 在清单文件AndroidManifest.xml中加入权限: <uses-permission and
标题中的"android-sdk-4.2.2 android-sdk-4.2.2-platforms"指的是Android SDK的一个特定版本,即Android 4.2.2(API级别17),该版本的SDK平台组件。这个版本是Android操作系统的 Jelly Bean 版本的一部分,发布于...
一个原生微信小程序项目-优购商城源码分享 项目简介: 该商城是基于原生微信小程序来实现的。 已完成功能: 登录授权 商品添加进购物车、购物车删除商品 展示个人中心、首页、商品详情 搜索商品 收藏商品 订单查询...
本项目"Android-原生sdk支持微信登陆分享支付支付宝登录和支付微博登录和分享qq登录和分享"提供了一套完整的解决方案,帮助开发者快速实现这些功能。下面将详细介绍涉及的知识点。 1. **微信SDK集成**: 微信开放...
在微信小程序中,开发者需要在`app.js`或`index.js`等入口文件引入高德地图的SDK,然后在对应的页面中配置地图组件,调用相应的API方法。例如,初始化地图、设置中心点、添加标记、监听用户位置变化等。 5. **注意...