关于实现手机端自动获取天气的demo
博主大二做的一个项目,当时很傻很天真,但是还是贴出来,希望能给大家一点帮助。欢迎转载哦!我的博客园地址:http://www.cnblogs.com/natureless/
首先分析需求,移动端实现天气查询。如果在没有给定地理位置的时候,那很简单,直接利用JSONP获取Open Weather API提供的一个接口,传个位置就好。这点我就不多说了,下面我要说的是,实现自动定位并获取天气。
首先要做准备工作:百度Map开发者的accesskey,OpenWeather开发者的accesskey。这个注册一下就可以免费试用,还是蛮良心的,哈哈。
现在开始第一步,首先我们要获取经纬度,这里博主用的是H5提供的一个api接口navigator.geolocation,当然也可以利用访问IP获取经纬度或城市,但是博主搜了很多,大部分不对外开放了
var lat,lon,cityname=new Array;
function getLocation(){
if (navigator.geolocation)
{
navigator.geolocation.getCurrentPosition(showPosition);
}
else{x.innerHTML="Geolocation is not supported by this browser.";}
}
这里首先判断下浏览器对于api的支持,如果不支持GG思密达咯。在调用
navigator.geolocation.getCurrentPosition这个函数后,我们会传入一个对象给showPosition这个函数,里面包含着经纬度
function showPosition(position)
{
console.log(position.coords.latitude+"!!!"+position.coords.longitude)
lat=position.coords.latitude;
lon=position.coords.longitude;
//alert(lat+"!!"+lon); // 百度地图API功能 //alert(lat+"!!"+lon);
var map = new BMap.Map("allmap");
var point = new BMap.Point(lon, lat);
map.centerAndZoom(point, 15); var gc = new BMap.Geocoder();
gc.getLocation(point, function(rs){
var addComp = rs.addressComponents;
console.log(addComp.province + ", " + addComp.city + ", " + addComp.district + ", " + addComp.street + ", " + addComp.streetNumber);
$(".location").html("你所在的城市:"+addComp.city);
cityname=addComp.city.split("市");
}); var marker = new BMap.Marker(point); // 创建标注
map.addOverlay(marker); // 将标注添加到地图中
marker.setAnimation(BMAP_ANIMATION_BOUNCE); //跳动的动画
//天气模块
weather();
}
console一下,方便看到我们得到的经纬度。有人会问,console只能在控制台看到啊,NONONO,Chrome inspect大家可以看下,支持手机端调试,博主有空也会稍微讲下inspect的,不过网上教程蛮多的,大家可以看看。实在不会,咱们可以alert对吧,哈哈......唔,扯偏了,咱们回到正题,得到经纬度后,咱们就需要调用baidu Map的api了,
传入咱们刚获取的lon,lat这时候就可以返回城市名等信息了。当然博主这边写的有点多,同时绘制了地图,大家可以适当删减。
ok,走到这步我们就可以开始伟大的旅行了,将我们拿到的cityname给我们可爱的Open weather提供的api
//查询天气
function weather(){
var url="http://api.openweathermap.org/data/2.5/weather?q="+cityname[0]+"&callback=msg&appid=openweather的accesskey";
var scr=document.createElement('script');
scr.setAttribute('type','text/javascript');
scr.setAttribute('src',url);
document.getElementsByTagName('head')[0].appendChild(scr);
}
//回调函数
function msg(data){
var local_weather=data.weather[0].main;
var temp_max=parseInt(data.main.temp_max-273.13);
var temp_min=parseInt(data.main.temp_min-273.13);
$(".temp").html("温度:"+temp_min+"℃-"+temp_max+"℃");
//alert("天气"+local_weather+"温度"+temp_min+"℃到"+temp_max+"℃");
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=你的百度Map accesskey"></script>
利用JSONP给我们的数据,我们就可以拿到天气了,当然博主这里提醒一下,返回的数据最好在pc端console一下,返回的json还是蛮复杂的,还有一点就是一定要在head里面加上上面百度api的url哦
当然最近听朋友说,百度提供了一个api市场,有更简单的天气api,大家有空可以去看看。互联网大牛不是吹的,哈哈。本来想贴上楼主的源码地址,但是楼主用的是sae,最近刚好赶上sae改革,流量贼贵,这里就只给大家提供一个思路了,有问题大家可以留言哦,看到的话,博主我会回复的
关于实现手机端自动获取天气的demo的更多相关文章
- javascript判断访问终端,手机端自动跳转
在网页的顶部加入javascript判断代码: function checkserAgent(){ var userAgentInfo=navigator.userAgent; var userAge ...
- html+css手机端自动适应
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scal ...
- Web Form 取消手机端自动转换
将项目中的Site.Mobile.Master排除重新发布即可
- 手机端跳转和pc端跳转
http://jingyan.baidu.com/article/cdddd41c61823e53cb00e198.html 参考网址 浏览:11532 | 更新:2014-04-22 16:51 第 ...
- 【极品代码】一般人我不告诉他,手机端h5播放时不自动全屏代码
已测适用于ios,某些安卓手机微信下播放视频会出现播放器控件(这个实在是无力吐槽噢,因为之前还遇到过微信播放完视频后竟然无法退出全屏出现广告的情况,只有播放完后刷新页面并且要放到框架页里才能屏蔽微信视 ...
- ecshop开发日志之手机端虚拟商品自动发货
在ecshop官方模版收,web端的虚拟商品购买后不能像pc端那般直接在付款后出现虚拟商品的卡号,密码,截止日期一下为让手机购买也可以在付款后自动显示发货并能显示卡号密码截止日期首 先找到pc端的fl ...
- 手机端网页使用html5地理定位获取位置失败的解决办法
网上有很多关于html5 geolocation 获取地理定位的方法,我试了下,只有在IE edge浏览器可以成功获取到,在chrome,firefox,手机端的safari,QQ浏览器,微信浏览器, ...
- 手机端布局,rem布局动态获取根字体大小
手机端布局,rem布局动态获取根字体大小. 以下代码: //rem布局动态获取根字体大小 function remDynamicLayout(){ var $windowWidth = $(windo ...
- 移除手机端a标签点击自动出现的边框和背景
手机端a标签会自动补充出现边框或者背景,使得用户知道a标签的点击状态,但样式很不好看 <!DOCTYPE html> <html> <head> <meta ...
随机推荐
- Mysql修改root密码
一.启动命令行,输入: taskkill /f /im mysqld.exe //关闭mysql 二.转入mysql的bin目录下 三.输入:mysqld --skip-grant-tables // ...
- 利用JNI技术在Android中调用、调试C++代码
参考:http://blog.micro-studios.com/?p=4212 代码:http://pan.baidu.com/s/1sjukSDf
- ExtJS扩展:扩展grid
ExtJs的grid功能很强大,但是有时候觉得总是少那么一点点功能,我们就来扩展它,让它用起来更方便. 今天我们要扩展的是:根据记录的选择数量来禁用或启用grid toolbar上的某些按钮. 本文所 ...
- Building Modern Web Apps-构建现代的 Web 应用程序(一些感想)
<iframe src="http://channel9.msdn.com/Series/MVA-China/Web20140611A01/player?h=540&w=960 ...
- 春节前最后一篇,CRUD码农专用福利:PDF.NET之SOD Version 5.1.0 开源发布(兼更名)
废话不多说,直接入正题,明天赶着坐火车回老家过年. 从2013.10.1日起,原PDF.NET将更名为 SOD :- one SQL-MAP,ORM,Data Control framework 原P ...
- Curator Framework的基本使用方法
Curator Framework提供了简化使用zookeeper更高级的API接口.它包涵很多优秀的特性,主要包括以下三点: 自动连接管理:自动处理zookeeper的连接和重试存在一些潜在的问题: ...
- Redis系列(三)-Redis发布订阅及客户端编程
阅读目录 发布订阅模型 Redis中的发布订阅 客户端编程示例 0.3版本Hredis 发布订阅模型 在应用级其作用是为了减少依赖关系,通常也叫观察者模式.主要是把耦合点单独抽离出来作为第三方,隔离易 ...
- 在C#代码中应用Log4Net(四)在Winform和Web中捕获全局异常
毕竟人不是神,谁写的程序都会有bug,有了bug不可怕,可怕的是出错了,你却不知道错误在哪里.所以我们需要将应用程序中抛出的所有异常都记录起来,不然出了错,找问题就能要了你的命.下面我们主要讨论的是如 ...
- CPU占用率呈正弦实现,及实时输出进程和线程的CPU占用率
CPU占用率呈正弦实现,及实时输出进程和线程的CPU占用率 #include "stdafx.h" #include <windows.h> #include < ...
- This build of Sublime Text 2 has expired
使用一直很好的 sublime 2 最近一直提示: This build of Sublime Text 2 has expired, please update to a newer one fro ...