通过百度地图实现定位并获取本地当日天气信息
首先,通过之前用过的百度地图,实现定位功能;首先去百度开放云申请密钥,这里就不说明申请过程了,不懂得可以百度一下。
申请完密钥后,需要去声明Activity的地方添加上下面的语句:
<meta-dataandroid:name="com.baidu.lbsapi.API_KEY"android:value="dGozMoOnqaOgcpaj3f3NBtxh" />
Value值 即填写申请的密钥;
声明定位:
// 定位相关public LocationClient mLocationClient = null;public BDLocationListener myListener = new MyLocationListener();
mLocationClient = new LocationClient(getApplicationContext()); // 声明LocationClient类mLocationClient.registerLocationListener(myListener); // 注册监听函数LocationClientOption option = new LocationClientOption();option.setOpenGps(true);// 打开gpsoption.setCoorType("bd09ll");// 返回的定位结果是百度经纬度,默认值gcj02// option.setScanSpan(5000);//设置发起定位请求的间隔时间为5000ms,如果不设置,默认只定位一次option.setIsNeedAddress(true);// 返回的定位结果包含地址信息option.setNeedDeviceDirect(true);// 返回的定位结果包含手机机头的方向option.setLocationMode(com.baidu.location.LocationClientOption.LocationMode.Hight_Accuracy);// 设置定位模式option.setProdName(getPackageName());mLocationClient.setLocOption(option);
mLocationClient.start();
定义监听器:
// 定位public class MyLocationListener implements BDLocationListener {@Overridepublic void onReceiveLocation(BDLocation location) {if (location == null)return;StringBuffer sb = new StringBuffer(256);sb.append("time : ");sb.append(location.getTime());sb.append("\nerror code : ");sb.append(location.getLocType());sb.append("\nlatitude : ");sb.append(location.getLatitude());sb.append("\nlontitude : ");sb.append(location.getLongitude());sb.append("\nradius : ");sb.append(location.getRadius());if (location.getLocType() == BDLocation.TypeGpsLocation) {sb.append("\nspeed : ");sb.append(location.getSpeed());sb.append("\nsatellite : ");sb.append(location.getSatelliteNumber());} else if (location.getLocType() == BDLocation.TypeNetWorkLocation) {sb.append("\naddr : ");sb.append(location.getAddrStr());}String place = location.getAddrStr();
// locationplace.setText(location.getCity());localcity.setCity(location.getCity());Toast.makeText(getApplicationContext(), "" + place, 1).show();}}
下面就是如何获取天气:
获取天气的接口,网上有很多,但有的 已经不能再用了,而且调用的时候 很不稳定,数据不够准确;这里是网上找的一个网友搜集的比较全的一个天气api接口:
http://www.eoeandroid.com/thread-333874-1-1.html
这里我用的是:http://weather.51wnl.com/weatherinfo/GetMoreWeather?cityCode=101040100&weatherType=0
感觉还不错,其中cityCode是城市的代号,type 为0的时候 是最近几天的详细天气,为1的时候 是当前温度信息;
首先定义一个Weather类:
package com.example.util;public class Weather {private String city;private String cityId;private String toptemp;private String lowtemp;private String weather; //天气private String wind; //风向private String windfl; //风力private String gxtime;private String index; //穿衣指数private String index_d; //穿衣建议public String getCity() {return city;}public void setCity(String city) {this.city = city;}public String getCityId() {return cityId;}public void setCityId(String cityId) {this.cityId = cityId;}public String getToptemp() {return toptemp;}public void setToptemp(String toptemp) {this.toptemp = toptemp;}public String getLowtemp() {return lowtemp;}public void setLowtemp(String lowtemp) {this.lowtemp = lowtemp;}public String getWeather() {return weather;}public void setWeather(String weather) {this.weather = weather;}public String getGxtime() {return gxtime;}public void setGxtime(String gxtime) {this.gxtime = gxtime;}public String getWind() {return wind;}public void setWind(String wind) {this.wind = wind;}public String getWindfl() {return windfl;}public void setWindfl(String windfl) {this.windfl = windfl;}public String getIndex() {return index;}public void setIndex(String index) {this.index = index;}public String getIndex_d() {return index_d;}public void setIndex_d(String index_d) {this.index_d = index_d;}}
获取天气的方法:
public void GetFirstWeather(){URL url1, url2;if (isInterent.hasInternet(this)) {mLocationClient.requestLocation();String city = localcity.getCity();if (city.contains("市") || city.contains("省")) { City = city.substring(0, city.length() - 1);}try {url1 = new URL(String.format(getString(R.string.weatherurl)+ "?cityCode=%1$s&weatherType=0",LocalCity.getCityIdByName(City)));GetWeather nt = new GetWeather(url1, "0");nt.start();url2 = new URL(String.format(getString(R.string.weatherurl)+ "?cityCode=%1$s&weatherType=1",LocalCity.getCityIdByName(City)));GetWeather nt1 = new GetWeather(url2, "1");nt1.start();} catch (MalformedURLException e) {// TODO Auto-generated catch blocke.printStackTrace();}} else {Toast.makeText(getApplicationContext(), "网络异常,请检查网络是否连接",Toast.LENGTH_LONG).show();}}
class GetWeather extends Thread {private URL url;private String IsNow;public GetWeather(URL url, String IsNow) {this.url = url;this.IsNow = IsNow;}@Overridepublic void run() {HttpURLConnection conn = null; // 连接对象String resultData = HttpUtil.getResault(conn, url);Log.i("天气", resultData);String resultmsg = null;Looper.prepare();if (IsNow.equals("0")) {Message msg = new Message();resultmsg = json(resultData);msg.what = 1;msg.obj = resultmsg;handler.sendMessage(msg);} else {Message msg1 = new Message();resultmsg = json1(resultData);msg1.what = 2;msg1.obj = resultmsg;handler.sendMessage(msg1);}Looper.loop();}}
// 解析天气的json数据public String json(String json) {String jsonresult = null;Weather weather = new Weather();try {obj = new JSONObject(json);JSONObject contentObject = obj.getJSONObject("weatherinfo");weather.setCity(contentObject.getString("city"));weather.setToptemp(contentObject.getString("temp1"));weather.setWeather(contentObject.getString("weather1"));weather.setIndex(contentObject.getString("index"));weather.setIndex_d(contentObject.getString("index_d"));jsonresult = weather.getCity() + ": " + weather.getToptemp()+ "\n天气:" + weather.getWeather() + " "+"\n穿衣指数:" + weather.getIndex() + "\n" + weather.getIndex_d();} catch (JSONException e) {Log.i("Tag", "解析json失败");e.printStackTrace();}weather = null;return jsonresult;}
// 解析实时天气的json数据public String json1(String json) {String jsonresult = null;Weather weather = new Weather();try {obj = new JSONObject(json);JSONObject contentObject = obj.getJSONObject("weatherinfo");weather.setToptemp(contentObject.getString("temp"));weather.setWind(contentObject.getString("WD"));weather.setWindfl(contentObject.getString("WS"));weather.setGxtime(contentObject.getString("time"));jsonresult = "当前温度:" + weather.getToptemp() + " 风向风力: "+ weather.getWind() + weather.getWindfl() + " "+ weather.getGxtime() + "发布";} catch (JSONException e) {Log.i("Tag", "解析json失败");e.printStackTrace();}weather = null;return jsonresult;}
根据定位返回的城市信息,获取城市天气代号代码:
package com.example.util;public class LocalCity {public static String cityIds = "北京:101010100朝阳:101010300顺义:101010400" +"怀柔:101010500通州:101010600昌平:101010700延庆:101010800丰台:101010900石景山:101011000大兴:101011100房山:101011200密云:101011300门头沟:101011400平谷:101011500八达岭:101011600佛爷顶:101011700汤河口:101011800密云上甸子:101011900斋堂:101012000霞云岭:101012100北京城区:101012200海淀:101010200天津:101030100宝坻:101030300东丽:101030400西青:101030500北辰:101030600蓟县:101031400汉沽:101030800静海:101030900津南:101031000塘沽:101031100大港:101031200武清:101030200宁河:101030700上海:101020100宝山:101020300嘉定:101020500南汇:101020600浦东:101021300青浦:101020800松江:101020900奉贤:101021000崇明:101021100徐家汇:101021200闵行:101020200金山:101020700石家庄:101090101张家口:101090301承德:101090402唐山:101090501秦皇岛:101091101沧州:101090701衡水:101090801邢台:101090901邯郸:101091001保定:101090201廊坊:101090601郑州:101180101新乡:101180301许昌:101180401平顶山:101180501信阳:101180601南阳:101180701开封:101180801洛阳:101180901商丘:101181001焦作:101181101鹤壁:101181201濮阳:101181301周口:101181401漯河:101181501驻马店:101181601三门峡:101181701济源:101181801安阳:101180201合肥:101220101芜湖:101220301淮南:101220401马鞍山:101220501安庆:101220601宿州:101220701阜阳:101220801亳州:101220901黄山:101221001滁州:101221101淮北:101221201铜陵:101221301宣城:101221401六安:101221501巢湖:101221601池州:101221701蚌埠:101220201杭州:101210101舟山:101211101湖州:101210201嘉兴:101210301金华:101210901绍兴:101210501台州:101210601温州:101210701丽水:101210801衢州:101211001宁波:101210401重庆:101040100合川:101040300南川:101040400江津:101040500万盛:101040600渝北:101040700北碚:101040800巴南:101040900长寿:101041000黔江:101041100万州天城:101041200万州龙宝:101041300涪陵:101041400开县:101041500城口:101041600云阳:101041700巫溪:101041800奉节:101041900巫山:101042000潼南:101042100垫江:101042200梁平:101042300忠县:101042400石柱:101042500大足:101042600荣昌:101042700铜梁:101042800璧山:101042900丰都:101043000武隆:101043100彭水:101043200綦江:101043300酉阳:101043400秀山:101043600沙坪坝:101043700永川:101040200福州:101230101泉州:101230501漳州:101230601龙岩:101230701晋江:101230509南平:101230901厦门:101230201宁德:101230301莆田:101230401三明:101230801兰州:101160101平凉:101160301庆阳:101160401武威:101160501金昌:101160601嘉峪关:101161401酒泉:101160801天水:101160901武都:101161001临夏:101161101合作:101161201白银:101161301定西:101160201张掖:101160701广州:101280101惠州:101280301梅州:101280401" +"汕头:101280501深圳:101280601珠海:101280701佛山:101280800肇庆:101280901湛江:101281001江门:101281101河源:101281201清远:101281301云浮:101281401潮州:101281501东莞:101281601中山:101281701阳江:101281801揭阳:101281901茂名:101282001汕尾:101282101韶关:101280201南宁:101300101柳州:101300301来宾:101300401桂林:101300501梧州:101300601防城港:101301401贵港:101300801玉林:101300901百色:101301001钦州:101301101河池:101301201北海:101301301崇左:101300201贺州:101300701贵阳:101260101安顺:101260301都匀:101260401兴义:101260906铜仁:101260601毕节:101260701六盘水:101260801遵义:101260201凯里:101260501昆明:101290101红河:101290301文山:101290601玉溪:101290701楚雄:101290801普洱:101290901昭通:101291001临沧:101291101怒江:101291201香格里拉:101291301丽江:101291401德宏:101291501景洪:101291601大理:101290201曲靖:101290401保山:101290501呼和浩特:101080101乌海:101080301集宁:101080401通辽:101080501阿拉善左旗:101081201鄂尔多斯:101080701临河:101080801锡林浩特:101080901呼伦贝尔:101081000乌兰浩特:101081101包头:101080201赤峰:101080601南昌:101240101上饶:101240301抚州:101240401宜春:101240501鹰潭:101241101赣州:101240701景德镇:101240801萍乡:101240901新余:101241001九江:101240201吉安:101240601武汉:101200101黄冈:101200501荆州:101200801宜昌:101200901恩施:101201001十堰:101201101神农架:101201201随州:101201301荆门:101201401天门:101201501仙桃:101201601潜江:101201701襄樊:101200201鄂州:101200301孝感:101200401黄石:101200601咸宁:101200701成都:101270101自贡:101270301绵阳:101270401南充:101270501达州:101270601遂宁:101270701广安:101270801巴中:101270901泸州:101271001宜宾:101271101内江:101271201资阳:101271301乐山:101271401眉山:101271501凉山:101271601雅安:101271701甘孜:101271801阿坝:101271901德阳:101272001广元:101272101攀枝花:101270201银川:101170101中卫:101170501固原:101170401石嘴山:101170201吴忠:101170301西宁:101150101黄南:101150301海北:101150801果洛:101150501玉树:101150601海西:101150701海东:101150201海南:101150401济南:101120101潍坊:101120601临沂:101120901菏泽:101121001滨州:101121101东营:101121201威海:101121301枣庄:101121401日照:101121501莱芜:101121601聊城:101121701青岛:101120201淄博:101120301德州:101120401烟台:101120501济宁:101120701泰安:101120801西安:101110101延安:101110300榆林:101110401铜川:101111001商洛:101110601安康:101110701汉中:101110801宝鸡:101110901咸阳:101110200渭南:101110501太原:101100101临汾:101100701运城:101100801朔州:101100901忻州:101101001长治:101100501大同:101100201阳泉:101100301晋中:101100401晋城:101100601吕梁:101101100乌鲁木齐:101130101石河子:101130301昌吉:101130401吐鲁番:101130501库尔勒:101130601阿拉尔:101130701阿克苏:101130801喀什:101130901伊宁:101131001塔城:101131101哈密:101131201和田:101131301阿勒泰:101131401阿图什:101131501博乐:101131601克拉玛依:101130201拉萨:101140101山南:101140301阿里:101140701昌都:101140501那曲:101140601日喀则:101140201林芝:101140401台北县:101340101高雄:101340201台中:101340401海口:101310101三亚:101310201东方:101310202临高:101310203澄迈:101310204儋州:101310205昌江:101310206白沙:101310207琼中:101310208定安:101310209屯昌:101310210琼海:101310211文昌:101310212保亭:101310214万宁:101310215陵水:101310216西沙:101310217南沙岛:101310220乐东:101310221五指山:101310222琼山:101310102长沙:101250101株洲:101250301衡阳:101250401郴州:101250501常德:101250601益阳:101250700娄底:101250801邵阳:101250901岳阳:101251001张家界:101251101怀化:101251201黔阳:101251301永州:101251401吉首:101251501湘潭:101250201南京:101190101镇江:101190301苏州:101190401南通:101190501扬州:101190601宿迁:101191301徐州:101190801淮安:101190901连云港:101191001常州:101191101泰州:101191201无锡:101190201盐城:101190701哈尔滨:101050101牡丹江:101050301佳木斯:101050401绥化:101050501黑河:101050601双鸭山:101051301伊春:101050801大庆:101050901七台河:101051002鸡西:101051101鹤岗:101051201齐齐哈尔:101050201大兴安岭:101050701长春:101060101延吉:101060301四平:101060401白山:101060901白城:101060601辽源:101060701松原:101060801吉林:101060201通化:101060501沈阳:101070101鞍山:101070301抚顺:101070401本溪:101070501丹东:101070601葫芦岛:101071401营口:101070801阜新:101070901辽阳:101071001铁岭:101071101朝阳:101071201盘锦:101071301大连:101070201锦州:101070701 ";private String city = "郑州";public String getCity() {return city;}public void setCity(String city) {this.city = city;}/*** 通过城市的名称获取对应的城市id,如果不存在则返回 null* * @param name* 城市名称* @return cityid* */public static String getCityIdByName(String name) {String cityId = null;int startIndex = LocalCity.cityIds.indexOf(name) + name.length() + 1;// 开始截取的位置if (startIndex == -1) {return null;}cityId = LocalCity.cityIds.trim().substring(startIndex, startIndex + 9);return cityId;}
}
源码地址:
http://download.csdn.net/detail/xiaorenwu1206/8067905
通过百度地图实现定位并获取本地当日天气信息相关推荐
- 利用百度地图Android定位SDK获取经纬度
环境的搭建(参考上一次的文章) 百度地图Android定位SDK的使用 2.在Android studio里设计程序来获取经纬度 界面布局activity_main.xml文件的源代码: <?x ...
- 百度地图js 定位并获得精确的地址信息
使用百度地图js api定位并获得精确地址: var map = new BMap.Map("map"); var geolocation = new BMap.Geolocati ...
- 【百度地图api】之获取当前用户地理位置-浏览器定位
1.通过html5 获取当前gps坐标,不过这种一般PC网页很多都不适用,一般用作手机网页 HTML5 Geolocation API (地理位置应用程序接口) 目前PC浏览器支持情况: Firefo ...
- 记录:百度地图开发 ios系统获取定位失
使用百度地图浏览器定位, 安卓手机和pc 浏览器都可以获取到定位, 唯独苹果手机IOS系统获取定位失败, 查看 权限什么的都开了 , 最后发现是因为界面地址是http协议的, 界面地址需要使用http ...
- android百度地图更换定位图标,android百度地图定位,改变MyLocationOverlay默认图标(原始为蓝色点)(两种方法)...
开放地图API无外乎google ,百度,高德等.其它的还有很多,不过比较好用的就这三种了,如果不需要出国(台湾例外),则最好使用百度地图,性能比高德好的多,无聊的时候自己可以测试测试.. 下面我简单 ...
- 在Fragment中实现百度地图,定位到当前位置(基于SDKv2.1.0)
使用最新版本的百度地图需要注意的几个地方: 1.libs文件夹下要有android-support-v4.jar.baidumapapi_v2_1_0.jar.locSDK_3.1.jar三个jar包 ...
- AngularJS进阶(十九)在AngularJS应用中集成百度地图实现定位功能
在AngularJS应用中集成百度地图实现定位功能 注:请点击此处进行充电! 前言 根据项目需求,需要实现手机定位功能,考虑到百度业务的强大能力,遂决定使用百度地图第三方服务. 添加第三方模块的步骤与 ...
- AngularJS进阶 十九 在AngularJS应用中集成百度地图实现定位功能
在AngularJS应用中集成百度地图实现定位功能 注:请点击此处进行充电! 前言 根据项目需求,需要实现手机定位功能,考虑到百度业务的强大能力,遂决定使用百度地图第三方服务. 添加第三方模块的步骤与 ...
- 【Springboot】集成百度地图实现定位打卡功能
目录 第一章 需求分析 第二章 概要设计 第三章 详细设计 3.1 环境搭建 3.1.1 获取百度地图ak 3.1.2 创建springboot项目 3.2 配置application.propert ...
最新文章
- Java单例模式代码实现方式
- 【MATLAB】绘图技巧(4)——网格线与边框线控制
- UVA 1602 Lattice Animals
- Spring–设计领域模型和服务层
- 函数调用关系图如何画_程序是如何在 CPU 中运行的(二)
- Windows下开发Perl程序之环境搭建
- mount的api使用笔记
- php 添加数据sql语句,PHP添加/修改/删除SQL语句
- matlab编制刚度矩阵,单元刚度矩阵MATLAB编程.docx
- Schlumberger Drilling Office v4.0 1CD(综合钻井工程设计软件)
- 污水流量计常见的三种电磁损耗的简单介绍
- u盘安全删除 linux,怎么安全删除U盘
- LabVIEW进制转换总结
- design/sourcecode/课堂笔记designPrinciples
- beeline 参数
- eversync safari_值得推荐的chrome书签同步插件汇总
- 【数据结构】算法的时间复杂度和空间复杂度解析
- Android 项目实战:智慧北京(黑马)
- AD域USB禁用详解
- python边际效用递减_王海洋 - 选择的力量
热门文章
- Redis + Lua 实现 sorted set 集合保证固定数量的数据,并保留新数据剔除旧数据
- 机械手标定旋转中心偏移公示推导
- 系统的软中断CPU使用率升高,我该怎么办?
- app卡在启动页面android,app启动一直停留在启动页面
- 基于mean-shift的简单目标跟踪
- 【Qt学习】04 信号-槽 子窗口向主窗口传递参数
- 正面杠腾讯音乐与网易云音乐,抖音与快手谁能“弯道超车“?
- 【团体程序设计天梯赛-部分练习集】
- 2017年上海交通大学软件学院暑期夏令营机试题目
- 电脑应用图标变成白纸