unity 獲取地方位置和天氣(簡單版本)

不說這麼多,先上圖,最後有工程下載地址

上圖可以看出來城市和對應的天氣,沒錯我是在東莞工作的程序員

1.地方我們可以用百度地圖根據ip來獲取

http://api.map.baidu.com/location/ip?ak=bretF4dm6W5gqjQAXuvP0NXW6FeesRXb&coor=bd09ll

地方獲取比較簡單,直接用www可以直接獲取

    void Start()
    {
        //獲取位置
        StartCoroutine(RequestPos());       
    }


    IEnumerator RequestPos()
    {
        WWW www = new WWW(Posurl);
        yield return www;

        if (string.IsNullOrEmpty(www.error))
        {
            positionTool.ResponseBody t = LitJson.JsonMapper.ToObject<positionTool.ResponseBody>(www.text);
            Debug.LogError(t.content.address_detail.city);
        }
    }

json對應的解析類

public class positionTool
{
    #region ip對應城市
    public class ResponseBody
    {

        public string address;
        public Content content;
        public int status;

    }

    public class Content
    {
        public string address;
        public Address_Detail address_detail;
        public Point point;
    }
    public class Address_Detail
    {
        public string city;
        public int city_code;
        public string district;
        public string province;
        public string street;
        public string street_number;

        public Address_Detail()
        {

        }

        public Address_Detail(string city, int city_code, string district, string province, string street, string street_number)
        {
            this.city = city;
            this.city_code = city_code;
            this.district = district;
            this.province = province;
            this.street = street;
            this.street_number = street_number;
        }
    }

    public class Point
    {
        public string x;
        public string y;

        public Point()
        {

        }

        public Point(string x, string y)
        {
            this.x = x;
            this.y = y;
        }
    }
    #endregion

}

 

2.天氣我們可以用免費的接口來獲取

http://t.weather.sojson.com/api/weather/city/ + 城市ID
例如東莞ID爲101281601
http://t.weather.sojson.com/api/weather/city/101281601

Api地址https://www.sojson.com/blog/305.html

其他接口介紹https://www.jianshu.com/p/e3e04cf3fc0f

    IEnumerator RequestWeather(int id)
    {
        WWW www = new WWW(Weatherurl + id.ToString());
        yield return www;

        if (string.IsNullOrEmpty(www.error))
        {
            weatherTool.WeathBody t = LitJson.JsonMapper.ToObject<weatherTool.WeathBody>(www.text);
            Debug.LogError(t.data.forecast[0].type);

        }
    }

天氣工具類,我這邊把2000多個城市和對應的id保存json文件,根據地方名來獲取對應的城市ID

獲取出來的字符串解析json數據

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class weatherTool
{
    public static Dictionary<string, int> PosToId = new Dictionary<string, int>();

    public static bool initDic = false;

    public static int GetWeatherId(string name)
    {
        int id = 0;
        if(!initDic)
        {
            initDic = true;
            TextAsset ta = Resources.Load<TextAsset>("WeatherId");
            List<Pos2Id> temp = LitJson.JsonMapper.ToObject<List<Pos2Id>>(ta.text);
            foreach(Pos2Id t in temp)
            {
                PosToId[t.placeName] = t.id;
            }
        }
        for(int i=1;i<name.Length;i++)
        {
            string tn = name.Substring(0, i);
            if(PosToId.ContainsKey(tn))
            {
                id = PosToId[tn];
            }
        }
        return id;
    }

    public class Pos2Id
    {
        public string placeName;
        public int id;

        public Pos2Id()
        {

        }
        public Pos2Id(string name,int id)
        {
            placeName = name;
            this.id = id;
        }
    }

    public class WeathBody
    {
        public string time;
        public CityInfo cityInfo;
        public string date;
        public string message;
        public int status;
        public WeathData data;
    }

    public class CityInfo
    {
        public string city;
        public string cityId;
        public string parent;
        public string updateTime;
    }

    public class WeathData
    {
        public string shidu;
        public double pm25;
        public double pm10;
        public string quality;
        public string wendu;
        public string ganmao;
        public WeathDetailData yesterday;
        public WeathDetailData[] forecast;
    }

    public class WeathDetailData
    {
        public string date;
        public string sunrise;
        public string high;
        public string low;
        public string sunset;
        public double aqi;
        public string ymd;
        public string week;
        public string fx;
        public string fl;
        public string type;
        public string notice;
    }

}

這個侷限性在中國範圍內

工程下載地址

鏈接:https://pan.baidu.com/s/1sTQfJ5x_6gMl8H2ifCGWfQ 
提取碼:5ani 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章