博主大二做的一个项目,当时很傻很天真,但是还是贴出来,希望能给大家一点帮助。欢迎转载哦!我的博客园地址: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的更多相关文章

  1. javascript判断访问终端,手机端自动跳转

    在网页的顶部加入javascript判断代码: function checkserAgent(){ var userAgentInfo=navigator.userAgent; var userAge ...

  2. html+css手机端自动适应

    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scal ...

  3. Web Form 取消手机端自动转换

    将项目中的Site.Mobile.Master排除重新发布即可

  4. 手机端跳转和pc端跳转

    http://jingyan.baidu.com/article/cdddd41c61823e53cb00e198.html 参考网址 浏览:11532 | 更新:2014-04-22 16:51 第 ...

  5. 【极品代码】一般人我不告诉他,手机端h5播放时不自动全屏代码

    已测适用于ios,某些安卓手机微信下播放视频会出现播放器控件(这个实在是无力吐槽噢,因为之前还遇到过微信播放完视频后竟然无法退出全屏出现广告的情况,只有播放完后刷新页面并且要放到框架页里才能屏蔽微信视 ...

  6. ecshop开发日志之手机端虚拟商品自动发货

    在ecshop官方模版收,web端的虚拟商品购买后不能像pc端那般直接在付款后出现虚拟商品的卡号,密码,截止日期一下为让手机购买也可以在付款后自动显示发货并能显示卡号密码截止日期首 先找到pc端的fl ...

  7. 手机端网页使用html5地理定位获取位置失败的解决办法

    网上有很多关于html5 geolocation 获取地理定位的方法,我试了下,只有在IE edge浏览器可以成功获取到,在chrome,firefox,手机端的safari,QQ浏览器,微信浏览器, ...

  8. 手机端布局,rem布局动态获取根字体大小

    手机端布局,rem布局动态获取根字体大小. 以下代码: //rem布局动态获取根字体大小 function remDynamicLayout(){ var $windowWidth = $(windo ...

  9. 移除手机端a标签点击自动出现的边框和背景

    手机端a标签会自动补充出现边框或者背景,使得用户知道a标签的点击状态,但样式很不好看 <!DOCTYPE html> <html> <head> <meta ...

随机推荐

  1. vs中“Stack around the variable was corrupted”的解决方案

    把 project->配置属性->c/c++->代码生成->基本运行时检查 为 默认值 就不会报本异常.具体原因正在研究中... 如果改为其他就有exception. exce ...

  2. Java演算法之快速排序法

    1 * 快速排序法(Quick Sort),遞迴版本. 2 * 3 * @param array 傳入要排序的陣列 4 * @param start 傳入要排序的開始位置 5 * @param end ...

  3. 使用nmap工具查询局域网某个网段正在使用的ip地址

    linux下nmap工具可扫描局域网正在使用的ip地址 查询局域网某网段正在使用的ip地址: nmap -sP .* 以上命令,将打印10.10.70.*/24网络所有正在使用的ip地址

  4. Setting Up KeePass For Centos 6

    This mini-howto describes how to set up KeePass on Centos 6. It requires building mono from source a ...

  5. 安卓动态调试七种武器之长生剑 - Smali Instrumentation

    安卓动态调试七种武器之长生剑 - Smali Instrumentation 作者:蒸米@阿里聚安全 0x00 序 随着移动安全越来越火,各种调试工具也都层出不穷,但因为环境和需求的不同,并没有工具是 ...

  6. R in Action 读书笔记(4)

    MindMapper 原文件

  7. 七天学会ASP.NET MVC (五)——Layout页面使用和用户角色管理

    系列文章 七天学会ASP.NET MVC (一)——深入理解ASP.NET MVC 七天学会ASP.NET MVC (二)——ASP.NET MVC 数据传递 七天学会ASP.NET MVC (三)— ...

  8. Java针对数据库增删改查代码

    package com.bank.abc; import java.beans.PropertyVetoException; import java.sql.Connection; import ja ...

  9. rem单位和em单位的使用

    今天弄了一点响应式的东西,本以为很快就可以弄好,结果还是绕晕了头,所以还是写下来方便下次看吧! 一开始我打算用百分比%来做响应式布局,后来算的很懵圈,就果断放弃了,哈哈是不是很明智. 接下来就是rem ...

  10. JAVA理论概念大神之概念汇总

    我个人觉得,JAVA之所以能够经久不衰,有一个很重要的原因就是:JAVA的理论总是给人一种,虽然不知道是什么,但是感觉很厉害的样子.就单是这一点,他就已经超越许多其他语言了,至少吹牛的时候谈资总是很多 ...