diff -Nru indicator-china-weather-2.2.8/bin/indicator-china-weather indicator-china-weather-3.0.2~201904291430/bin/indicator-china-weather --- indicator-china-weather-2.2.8/bin/indicator-china-weather 2018-03-19 06:04:16.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/bin/indicator-china-weather 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -#!/bin/sh -cd /usr/share/indicator-china-weather -python indicator-china-weather.py diff -Nru indicator-china-weather-2.2.8/data/china-city-list.csv indicator-china-weather-3.0.2~201904291430/data/china-city-list.csv --- indicator-china-weather-2.2.8/data/china-city-list.csv 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/data/china-city-list.csv 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,3242 @@ +HEWeather China City List v2.1,update by 2018-06-20,,,,,,,,,,,, +City_ID,City_EN,City_CN,Country_code,Country_EN,Country_CN,Province_EN,Province_CN,Admin_ district_EN,Admin_ district_CN,Latitude,Longitude,AD_code, +CN101010100,beijing,北京,CN,China,中国,beijing,北京,beijing,北京,39.904987,116.40529,"110100,110000,100000", +CN101010200,haidian,海淀,CN,China,中国,beijing,北京,beijing,北京,39.956074,116.31032,110108, +CN101010300,chaoyang,朝阳,CN,China,中国,beijing,北京,beijing,北京,39.92149,116.48641,110105, +CN101010400,shunyi,顺义,CN,China,中国,beijing,北京,beijing,北京,40.128937,116.65353,110113, +CN101010500,huairou,怀柔,CN,China,中国,beijing,北京,beijing,北京,40.324272,116.63712,110116, +CN101010600,tongzhou,通州,CN,China,中国,beijing,北京,beijing,北京,39.902485,116.6586,110112, +CN101010700,changping,昌平,CN,China,中国,beijing,北京,beijing,北京,40.218086,116.23591,110114, +CN101010800,yanqing,延庆,CN,China,中国,beijing,北京,beijing,北京,40.465324,115.98501,110119, +CN101010900,fengtai,丰台,CN,China,中国,beijing,北京,beijing,北京,39.863644,116.286964,110106, +CN101011000,shijingshan,石景山,CN,China,中国,beijing,北京,beijing,北京,39.9146,116.19544,110107, +CN101011100,daxing,大兴,CN,China,中国,beijing,北京,beijing,北京,39.72891,116.338036,110115, +CN101011200,fangshan,房山,CN,China,中国,beijing,北京,beijing,北京,39.735535,116.13916,110111, +CN101011300,miyun,密云,CN,China,中国,beijing,北京,beijing,北京,40.37736,116.84335,110118, +CN101011400,mentougou,门头沟,CN,China,中国,beijing,北京,beijing,北京,39.937183,116.10538,110109, +CN101011500,pinggu,平谷,CN,China,中国,beijing,北京,beijing,北京,40.144783,117.112335,110117, +CN101011600,dongcheng,东城,CN,China,中国,beijing,北京,beijing,北京,39.917545,116.418755,110101, +CN101011700,xicheng,西城,CN,China,中国,beijing,北京,beijing,北京,39.91531,116.36679,110102, +CN101020100,shanghai,上海,CN,China,中国,shanghai,上海,shanghai,上海,31.231707,121.47264,"310100,310000", +CN101020200,minhang,闵行,CN,China,中国,shanghai,上海,shanghai,上海,31.111658,121.37597,310112, +CN101020300,baoshan,宝山,CN,China,中国,shanghai,上海,shanghai,上海,31.398895,121.48994,310113, +CN101020400,huangpu,黄浦,CN,China,中国,shanghai,上海,shanghai,上海,31.22277,121.49032,310101, +CN101020500,jiading,嘉定,CN,China,中国,shanghai,上海,shanghai,上海,31.383524,121.250336,310114, +CN101020600,pudongxinqu,浦东新区,CN,China,中国,shanghai,上海,shanghai,上海,31.245943,121.5677,310115, +CN101020700,jinshan,金山,CN,China,中国,shanghai,上海,shanghai,上海,30.724697,121.330734,310116, +CN101020800,qingpu,青浦,CN,China,中国,shanghai,上海,shanghai,上海,31.151209,121.11302,310118, +CN101020900,songjiang,松江,CN,China,中国,shanghai,上海,shanghai,上海,31.03047,121.22354,310117, +CN101021000,fengxian,奉贤,CN,China,中国,shanghai,上海,shanghai,上海,30.912346,121.45847,310120, +CN101021100,chongming,崇明,CN,China,中国,shanghai,上海,shanghai,上海,31.626945,121.397514,310151, +CN101021200,xuhui,徐汇,CN,China,中国,shanghai,上海,shanghai,上海,31.179974,121.43752,310104, +CN101021300,changning,长宁,CN,China,中国,shanghai,上海,shanghai,上海,31.218122,121.4222,310105, +CN101021400,jingan,静安,CN,China,中国,shanghai,上海,shanghai,上海,31.229004,121.44823,310106, +CN101021500,putuo,普陀,CN,China,中国,shanghai,上海,shanghai,上海,31.241701,121.3925,310107, +CN101021600,hongkou,虹口,CN,China,中国,shanghai,上海,shanghai,上海,31.26097,121.49183,310109, +CN101021700,yangpu,杨浦,CN,China,中国,shanghai,上海,shanghai,上海,31.270756,121.5228,310110, +CN101030100,tianjin,天津,CN,China,中国,tianjin,天津,tianjin,天津,39.125595,117.190186,"120100,120000", +CN101030200,wuqing,武清,CN,China,中国,tianjin,天津,tianjin,天津,39.376926,117.05796,120114, +CN101030300,baodi,宝坻,CN,China,中国,tianjin,天津,tianjin,天津,39.716965,117.30809,120115, +CN101030400,dongli,东丽,CN,China,中国,tianjin,天津,tianjin,天津,39.087765,117.313965,120110, +CN101030500,xiqing,西青,CN,China,中国,tianjin,天津,tianjin,天津,39.139446,117.012245,120111, +CN101030600,beichen,北辰,CN,China,中国,tianjin,天津,tianjin,天津,39.225555,117.13482,120113, +CN101030700,ninghe,宁河,CN,China,中国,tianjin,天津,tianjin,天津,39.328884,117.82828,120117, +CN101030800,heping,和平,CN,China,中国,tianjin,天津,tianjin,天津,39.11833,117.19591,120101, +CN101030900,jinghai,静海,CN,China,中国,tianjin,天津,tianjin,天津,38.935673,116.9253,120118, +CN101031000,jinnan,津南,CN,China,中国,tianjin,天津,tianjin,天津,38.98958,117.382545,120112, +CN101031100,binhaixinqu,滨海新区,CN,China,中国,tianjin,天津,tianjin,天津,39.032845,117.654175,120116, +CN101031200,hedong,河东,CN,China,中国,tianjin,天津,tianjin,天津,39.122124,117.22657,120102, +CN101031300,hexi,河西,CN,China,中国,tianjin,天津,tianjin,天津,39.1019,117.21754,120103, +CN101031400,jizhou,蓟州,CN,China,中国,tianjin,天津,tianjin,天津,40.04534,117.40745,120119, +CN101031500,nankai,南开,CN,China,中国,tianjin,天津,tianjin,天津,39.120476,117.16415,120104, +CN101031600,hebei,河北,CN,China,中国,tianjin,天津,tianjin,天津,39.15663,117.20157,120105, +CN101031700,hongqiao,红桥,CN,China,中国,tianjin,天津,tianjin,天津,39.175068,117.1633,120106, +CN101040100,chongqing,重庆,CN,China,中国,chongqing,重庆,chongqing,重庆,29.56376,106.55046,"500100,500000,500200", +CN101040200,yongchuan,永川,CN,China,中国,chongqing,重庆,chongqing,重庆,29.348747,105.894714,500118, +CN101040300,hechuan,合川,CN,China,中国,chongqing,重庆,chongqing,重庆,29.990993,106.26556,500117, +CN101040400,nanchuan,南川,CN,China,中国,chongqing,重庆,chongqing,重庆,29.156647,107.09815,500119, +CN101040500,jiangjin,江津,CN,China,中国,chongqing,重庆,chongqing,重庆,29.283386,106.25316,500116, +CN101040700,yubei,渝北,CN,China,中国,chongqing,重庆,chongqing,重庆,29.601452,106.51285,500112, +CN101040800,beibei,北碚,CN,China,中国,chongqing,重庆,chongqing,重庆,29.82543,106.43787,500109, +CN101040900,banan,巴南,CN,China,中国,chongqing,重庆,chongqing,重庆,29.38192,106.519424,500113, +CN101041000,changshou,长寿,CN,China,中国,chongqing,重庆,chongqing,重庆,29.833672,107.07485,500115, +CN101041100,qianjiang,黔江,CN,China,中国,chongqing,重庆,chongqing,重庆,29.527548,108.78258,500114, +CN101041200,yuzhong,渝中,CN,China,中国,chongqing,重庆,chongqing,重庆,29.556742,106.56288,500103, +CN101041300,wanzhou,万州,CN,China,中国,chongqing,重庆,chongqing,重庆,30.807808,108.38025,500101, +CN101041400,fuling,涪陵,CN,China,中国,chongqing,重庆,chongqing,重庆,29.703651,107.394905,500102, +CN101041600,chengkou,城口,CN,China,中国,chongqing,重庆,chongqing,重庆,31.946293,108.6649,500229, +CN101041700,yunyang,云阳,CN,China,中国,chongqing,重庆,chongqing,重庆,30.930529,108.6977,500235, +CN101041800,wuxi,巫溪,CN,China,中国,chongqing,重庆,chongqing,重庆,31.3966,109.628914,500238, +CN101041900,fengjie,奉节,CN,China,中国,chongqing,重庆,chongqing,重庆,31.019966,109.465775,500236, +CN101042000,wushan,巫山,CN,China,中国,chongqing,重庆,chongqing,重庆,31.074842,109.87893,500237, +CN101042100,tongnan,潼南,CN,China,中国,chongqing,重庆,chongqing,重庆,30.189554,105.84182,500152, +CN101042200,dianjiang,垫江,CN,China,中国,chongqing,重庆,chongqing,重庆,30.330011,107.348694,500231, +CN101042300,liangping,梁平,CN,China,中国,chongqing,重庆,chongqing,重庆,30.672169,107.80003,500155, +CN101042400,zhongxian,忠县,CN,China,中国,chongqing,重庆,chongqing,重庆,30.291536,108.03752,500233, +CN101042500,shizhu,石柱,CN,China,中国,chongqing,重庆,chongqing,重庆,29.999285,108.11407,500240, +CN101042600,dazu,大足,CN,China,中国,chongqing,重庆,chongqing,重庆,29.700499,105.71532,500111, +CN101042700,rongchang,荣昌,CN,China,中国,chongqing,重庆,chongqing,重庆,29.403627,105.59406,500153, +CN101042800,tongliang,铜梁,CN,China,中国,chongqing,重庆,chongqing,重庆,29.839945,106.05495,500151, +CN101042900,bishan,璧山,CN,China,中国,chongqing,重庆,chongqing,重庆,29.59358,106.231125,500120, +CN101043000,fengdu,丰都,CN,China,中国,chongqing,重庆,chongqing,重庆,29.866425,107.73248,500230, +CN101043100,wulong,武隆,CN,China,中国,chongqing,重庆,chongqing,重庆,29.32376,107.75655,500156, +CN101043200,pengshui,彭水,CN,China,中国,chongqing,重庆,chongqing,重庆,29.293856,108.16655,500243, +CN101043300,qijiang,綦江,CN,China,中国,chongqing,重庆,chongqing,重庆,29.028091,106.65142,500110, +CN101043400,youyang,酉阳,CN,China,中国,chongqing,重庆,chongqing,重庆,28.839828,108.767204,500242, +CN101043500,dadukou,大渡口,CN,China,中国,chongqing,重庆,chongqing,重庆,29.481003,106.48613,500104, +CN101043600,xiushan,秀山,CN,China,中国,chongqing,重庆,chongqing,重庆,28.444773,108.99604,500241, +CN101043700,jiangbei,江北,CN,China,中国,chongqing,重庆,chongqing,重庆,29.575352,106.532845,500105, +CN101043800,shapingba,沙坪坝,CN,China,中国,chongqing,重庆,chongqing,重庆,29.541224,106.4542,500106, +CN101043900,jiulongpo,九龙坡,CN,China,中国,chongqing,重庆,chongqing,重庆,29.523493,106.48099,500107, +CN101044000,nanan,南岸,CN,China,中国,chongqing,重庆,chongqing,重庆,29.523993,106.560814,500108, +CN101044100,kaizhou,开州,CN,China,中国,chongqing,重庆,chongqing,重庆,31.167734,108.413315,500154, +CN101050101,haerbin,哈尔滨,CN,China,中国,heilongjiang,黑龙江,haerbin,哈尔滨,45.756966,126.64246,"230101,230100,230000", +CN101050102,shuangcheng,双城,CN,China,中国,heilongjiang,黑龙江,haerbin,哈尔滨,45.37794,126.308784,230113, +CN101050103,hulan,呼兰,CN,China,中国,heilongjiang,黑龙江,haerbin,哈尔滨,45.98423,126.6033,230111, +CN101050104,acheng,阿城,CN,China,中国,heilongjiang,黑龙江,haerbin,哈尔滨,45.538372,126.972725,230112, +CN101050105,binxian,宾县,CN,China,中国,heilongjiang,黑龙江,haerbin,哈尔滨,45.75937,127.48594,230125, +CN101050106,yilan,依兰,CN,China,中国,heilongjiang,黑龙江,haerbin,哈尔滨,46.315105,129.5656,230123, +CN101050107,bayan,巴彦,CN,China,中国,heilongjiang,黑龙江,haerbin,哈尔滨,46.08189,127.4036,230126, +CN101050108,tonghe,通河,CN,China,中国,heilongjiang,黑龙江,haerbin,哈尔滨,45.97762,128.74779,230128, +CN101050109,fangzheng,方正,CN,China,中国,heilongjiang,黑龙江,haerbin,哈尔滨,45.839535,128.83614,230124, +CN101050110,yanshou,延寿,CN,China,中国,heilongjiang,黑龙江,haerbin,哈尔滨,45.455647,128.33188,230129, +CN101050111,shangzhi,尚志,CN,China,中国,heilongjiang,黑龙江,haerbin,哈尔滨,45.214954,127.96854,230183, +CN101050112,wuchang,五常,CN,China,中国,heilongjiang,黑龙江,haerbin,哈尔滨,44.91942,127.15759,230184, +CN101050113,mulan,木兰,CN,China,中国,heilongjiang,黑龙江,haerbin,哈尔滨,45.949825,128.04268,230127, +CN101050114,daoli,道里,CN,China,中国,heilongjiang,黑龙江,haerbin,哈尔滨,45.762035,126.61253,230102, +CN101050115,nangang,南岗,CN,China,中国,heilongjiang,黑龙江,haerbin,哈尔滨,45.75597,126.6521,230103, +CN101050116,daowai,道外,CN,China,中国,heilongjiang,黑龙江,haerbin,哈尔滨,45.78454,126.648834,230104, +CN101050117,pingfang,平房,CN,China,中国,heilongjiang,黑龙江,haerbin,哈尔滨,45.605568,126.62926,230108, +CN101050118,songbei,松北,CN,China,中国,heilongjiang,黑龙江,haerbin,哈尔滨,45.814655,126.563065,230109, +CN101050119,xiangfang,香坊,CN,China,中国,heilongjiang,黑龙江,haerbin,哈尔滨,45.713066,126.667046,230110, +CN101050201,qiqihaer,齐齐哈尔,CN,China,中国,heilongjiang,黑龙江,qiqihaer,齐齐哈尔,47.34208,123.95792,"230201,230200", +CN101050202,nehe,讷河,CN,China,中国,heilongjiang,黑龙江,qiqihaer,齐齐哈尔,48.481133,124.88217,230281, +CN101050203,longjiang,龙江,CN,China,中国,heilongjiang,黑龙江,qiqihaer,齐齐哈尔,47.336388,123.187225,230221, +CN101050204,gannan,甘南,CN,China,中国,heilongjiang,黑龙江,qiqihaer,齐齐哈尔,47.91784,123.506035,230225, +CN101050205,fuyu,富裕,CN,China,中国,heilongjiang,黑龙江,qiqihaer,齐齐哈尔,47.797173,124.46911,230227, +CN101050206,yian,依安,CN,China,中国,heilongjiang,黑龙江,qiqihaer,齐齐哈尔,47.8901,125.30756,230223, +CN101050207,baiquan,拜泉,CN,China,中国,heilongjiang,黑龙江,qiqihaer,齐齐哈尔,47.607365,126.09191,230231, +CN101050208,keshan,克山,CN,China,中国,heilongjiang,黑龙江,qiqihaer,齐齐哈尔,48.034344,125.87435,230229, +CN101050209,kedong,克东,CN,China,中国,heilongjiang,黑龙江,qiqihaer,齐齐哈尔,48.03732,126.24909,230230, +CN101050210,tailai,泰来,CN,China,中国,heilongjiang,黑龙江,qiqihaer,齐齐哈尔,46.39233,123.41953,230224, +CN101050211,longsha,龙沙,CN,China,中国,heilongjiang,黑龙江,qiqihaer,齐齐哈尔,47.341736,123.95734,230202, +CN101050212,jianhua,建华,CN,China,中国,heilongjiang,黑龙江,qiqihaer,齐齐哈尔,47.354492,123.95589,230203, +CN101050213,tiefeng,铁锋,CN,China,中国,heilongjiang,黑龙江,qiqihaer,齐齐哈尔,47.3395,123.97356,230204, +CN101050214,angangxi,昂昂溪,CN,China,中国,heilongjiang,黑龙江,qiqihaer,齐齐哈尔,47.156868,123.81318,230205, +CN101050215,fulaerji,富拉尔基,CN,China,中国,heilongjiang,黑龙江,qiqihaer,齐齐哈尔,47.20697,123.63887,230206, +CN101050216,nianzishan,碾子山,CN,China,中国,heilongjiang,黑龙江,qiqihaer,齐齐哈尔,47.51401,122.88797,230207, +CN101050217,meilisi,梅里斯,CN,China,中国,heilongjiang,黑龙江,qiqihaer,齐齐哈尔,47.31111,123.7546,230208, +CN101050301,mudanjiang,牡丹江,CN,China,中国,heilongjiang,黑龙江,mudanjiang,牡丹江,44.582962,129.6186,"231001,231000", +CN101050302,hailin,海林,CN,China,中国,heilongjiang,黑龙江,mudanjiang,牡丹江,44.57415,129.38791,231083, +CN101050303,muling,穆棱,CN,China,中国,heilongjiang,黑龙江,mudanjiang,牡丹江,44.91967,130.52708,231085, +CN101050304,linkou,林口,CN,China,中国,heilongjiang,黑龙江,mudanjiang,牡丹江,45.286644,130.2684,231025, +CN101050305,suifenhe,绥芬河,CN,China,中国,heilongjiang,黑龙江,mudanjiang,牡丹江,44.396866,131.16486,231081, +CN101050306,ningan,宁安,CN,China,中国,heilongjiang,黑龙江,mudanjiang,牡丹江,44.346836,129.47002,231084, +CN101050307,dongning,东宁,CN,China,中国,heilongjiang,黑龙江,mudanjiang,牡丹江,44.06358,131.12529,231086, +CN101050308,dongan,东安,CN,China,中国,heilongjiang,黑龙江,mudanjiang,牡丹江,44.582397,129.62329,231002, +CN101050309,yangming,阳明,CN,China,中国,heilongjiang,黑龙江,mudanjiang,牡丹江,44.59633,129.63464,231003, +CN101050310,aimin,爱民,CN,China,中国,heilongjiang,黑龙江,mudanjiang,牡丹江,44.595444,129.60123,231004, +CN101050311,xian,西安,CN,China,中国,heilongjiang,黑龙江,mudanjiang,牡丹江,44.58103,129.61311,231005, +CN101050401,jiamusi,佳木斯,CN,China,中国,heilongjiang,黑龙江,jiamusi,佳木斯,46.809605,130.36163,"230801,230800", +CN101050402,tangyuan,汤原,CN,China,中国,heilongjiang,黑龙江,jiamusi,佳木斯,46.73005,129.90446,230828, +CN101050403,fuyuan,抚远,CN,China,中国,heilongjiang,黑龙江,jiamusi,佳木斯,48.364708,134.2945,230883, +CN101050404,huachuan,桦川,CN,China,中国,heilongjiang,黑龙江,jiamusi,佳木斯,47.02304,130.72371,230826, +CN101050405,huanan,桦南,CN,China,中国,heilongjiang,黑龙江,jiamusi,佳木斯,46.240116,130.57011,230822, +CN101050406,tongjiang,同江,CN,China,中国,heilongjiang,黑龙江,jiamusi,佳木斯,47.65113,132.51012,230881, +CN101050407,fujin,富锦,CN,China,中国,heilongjiang,黑龙江,jiamusi,佳木斯,47.250748,132.03795,230882, +CN101050408,xiangyang,向阳,CN,China,中国,heilongjiang,黑龙江,jiamusi,佳木斯,46.809647,130.36179,230803, +CN101050409,qianjin,前进,CN,China,中国,heilongjiang,黑龙江,jiamusi,佳木斯,46.812344,130.37769,230804, +CN101050410,dongfeng,东风,CN,China,中国,heilongjiang,黑龙江,jiamusi,佳木斯,46.822475,130.40329,230805, +CN101050411,jiaoqu,郊区,CN,China,中国,heilongjiang,黑龙江,jiamusi,佳木斯,46.80712,130.3516,230811, +CN101050501,suihua,绥化,CN,China,中国,heilongjiang,黑龙江,suihua,绥化,46.637394,126.99293,"231201,231200", +CN101050502,zhaodong,肇东,CN,China,中国,heilongjiang,黑龙江,suihua,绥化,46.06947,125.9914,231282, +CN101050503,anda,安达,CN,China,中国,heilongjiang,黑龙江,suihua,绥化,46.410614,125.329926,231281, +CN101050504,hailun,海伦,CN,China,中国,heilongjiang,黑龙江,suihua,绥化,47.460426,126.96938,231283, +CN101050505,mingshui,明水,CN,China,中国,heilongjiang,黑龙江,suihua,绥化,47.18353,125.90755,231225, +CN101050506,wangkui,望奎,CN,China,中国,heilongjiang,黑龙江,suihua,绥化,46.83352,126.48419,231221, +CN101050507,lanxi,兰西,CN,China,中国,heilongjiang,黑龙江,suihua,绥化,46.259037,126.289314,231222, +CN101050508,qinggang,青冈,CN,China,中国,heilongjiang,黑龙江,suihua,绥化,46.686596,126.11227,231223, +CN101050509,qingan,庆安,CN,China,中国,heilongjiang,黑龙江,suihua,绥化,46.879204,127.510025,231224, +CN101050510,suiling,绥棱,CN,China,中国,heilongjiang,黑龙江,suihua,绥化,47.247196,127.11112,231226, +CN101050511,beilin,北林,CN,China,中国,heilongjiang,黑龙江,suihua,绥化,46.63491,126.99066,231202, +CN101050601,heihe,黑河,CN,China,中国,heilongjiang,黑龙江,heihe,黑河,50.249584,127.49902,"231101,231100", +CN101050602,nenjiang,嫩江,CN,China,中国,heilongjiang,黑龙江,heihe,黑河,49.17746,125.229904,231121, +CN101050603,sunwu,孙吴,CN,China,中国,heilongjiang,黑龙江,heihe,黑河,49.423943,127.32732,231124, +CN101050604,xunke,逊克,CN,China,中国,heilongjiang,黑龙江,heihe,黑河,49.582973,128.47615,231123, +CN101050605,wudalianchi,五大连池,CN,China,中国,heilongjiang,黑龙江,heihe,黑河,48.512688,126.19769,231182, +CN101050606,beian,北安,CN,China,中国,heilongjiang,黑龙江,heihe,黑河,48.245438,126.508736,231181, +CN101050607,aihui,爱辉,CN,China,中国,heilongjiang,黑龙江,heihe,黑河,50.249027,127.49764,231102, +CN101050701,daxinganling,大兴安岭,CN,China,中国,heilongjiang,黑龙江,daxinganling,大兴安岭,52.335262,124.711525,"232700,232701", +CN101050702,tahe,塔河,CN,China,中国,heilongjiang,黑龙江,daxinganling,大兴安岭,52.335228,124.71052,232722, +CN101050703,mohe,漠河,CN,China,中国,heilongjiang,黑龙江,daxinganling,大兴安岭,52.972073,122.536255,232723, +CN101050704,huma,呼玛,CN,China,中国,heilongjiang,黑龙江,daxinganling,大兴安岭,51.726997,126.6621,232721, +CN101050705,huzhong,呼中,CN,China,中国,heilongjiang,黑龙江,daxinganling,大兴安岭,52.03336,123.5863,232721, +CN101050706,xinlin,新林,CN,China,中国,heilongjiang,黑龙江,daxinganling,大兴安岭,51.67373,124.395004,232721, +CN101050708,jiagedaqi,加格达奇,CN,China,中国,heilongjiang,黑龙江,daxinganling,大兴安岭,50.408726,124.13959,"232701,232701", +CN101050801,yichun,伊春,CN,China,中国,heilongjiang,黑龙江,yichun,伊春,47.726852,128.89928,"230701,230700,230702", +CN101050802,wuyiling,乌伊岭,CN,China,中国,heilongjiang,黑龙江,yichun,伊春,48.59112,129.43785,230714, +CN101050803,wuying,五营,CN,China,中国,heilongjiang,黑龙江,yichun,伊春,48.108204,129.24503,230710, +CN101050804,tieli,铁力,CN,China,中国,heilongjiang,黑龙江,yichun,伊春,46.98577,128.03056,230781, +CN101050805,jiayin,嘉荫,CN,China,中国,heilongjiang,黑龙江,yichun,伊春,48.891376,130.39769,230722, +CN101050806,nancha,南岔,CN,China,中国,heilongjiang,黑龙江,yichun,伊春,47.137314,129.28246,230703, +CN101050807,youhao,友好,CN,China,中国,heilongjiang,黑龙江,yichun,伊春,47.8543,128.83896,230704, +CN101050808,xilin,西林,CN,China,中国,heilongjiang,黑龙江,yichun,伊春,47.47944,129.31145,230705, +CN101050809,cuiluan,翠峦,CN,China,中国,heilongjiang,黑龙江,yichun,伊春,47.726227,128.67175,230706, +CN101050810,xinqing,新青,CN,China,中国,heilongjiang,黑龙江,yichun,伊春,48.288292,129.52995,230707, +CN101050811,meixi,美溪,CN,China,中国,heilongjiang,黑龙江,yichun,伊春,47.6361,129.1334,230708, +CN101050812,jinshantun,金山屯,CN,China,中国,heilongjiang,黑龙江,yichun,伊春,47.41295,129.43594,230709, +CN101050813,wumahe,乌马河,CN,China,中国,heilongjiang,黑龙江,yichun,伊春,47.72696,128.80295,230711, +CN101050814,tangwanghe,汤旺河,CN,China,中国,heilongjiang,黑龙江,yichun,伊春,48.45365,129.57224,230712, +CN101050815,dailing,带岭,CN,China,中国,heilongjiang,黑龙江,yichun,伊春,47.02753,129.02115,230713, +CN101050816,hongxing,红星,CN,China,中国,heilongjiang,黑龙江,yichun,伊春,48.23837,129.3888,230715, +CN101050817,shangganling,上甘岭,CN,China,中国,heilongjiang,黑龙江,yichun,伊春,47.974857,129.02509,230716, +CN101050901,daqing,大庆,CN,China,中国,heilongjiang,黑龙江,daqing,大庆,46.590733,125.11272,"230601,230600", +CN101050902,lindian,林甸,CN,China,中国,heilongjiang,黑龙江,daqing,大庆,47.186413,124.87774,230623, +CN101050903,zhaozhou,肇州,CN,China,中国,heilongjiang,黑龙江,daqing,大庆,45.708687,125.273254,230621, +CN101050904,zhaoyuan,肇源,CN,China,中国,heilongjiang,黑龙江,daqing,大庆,45.518833,125.08197,230622, +CN101050905,duerbote,杜尔伯特,CN,China,中国,heilongjiang,黑龙江,daqing,大庆,46.865974,124.44626,230624, +CN101050906,saertu,萨尔图,CN,China,中国,heilongjiang,黑龙江,daqing,大庆,46.596355,125.11464,230602, +CN101050907,longfeng,龙凤,CN,China,中国,heilongjiang,黑龙江,daqing,大庆,46.573948,125.1458,230603, +CN101050908,ranghulu,让胡路,CN,China,中国,heilongjiang,黑龙江,daqing,大庆,46.653255,124.86834,230604, +CN101050909,honggang,红岗,CN,China,中国,heilongjiang,黑龙江,daqing,大庆,46.40305,124.88953,230605, +CN101050910,datong,大同,CN,China,中国,heilongjiang,黑龙江,daqing,大庆,46.034306,124.81851,230606, +CN101051001,xinxing,新兴,CN,China,中国,heilongjiang,黑龙江,qitaihe,七台河,45.79426,130.88948,230902, +CN101051002,qitaihe,七台河,CN,China,中国,heilongjiang,黑龙江,qitaihe,七台河,45.771267,131.01558,"230901,230900", +CN101051003,boli,勃利,CN,China,中国,heilongjiang,黑龙江,qitaihe,七台河,45.75157,130.57503,230921, +CN101051004,taoshan,桃山,CN,China,中国,heilongjiang,黑龙江,qitaihe,七台河,45.771217,131.01585,230903, +CN101051005,qiezihe,茄子河,CN,China,中国,heilongjiang,黑龙江,qitaihe,七台河,45.77659,131.07156,230904, +CN101051101,jixi,鸡西,CN,China,中国,heilongjiang,黑龙江,jixi,鸡西,45.300045,130.97597,"230301,230300", +CN101051102,hulin,虎林,CN,China,中国,heilongjiang,黑龙江,jixi,鸡西,45.767986,132.97388,230381, +CN101051103,mishan,密山,CN,China,中国,heilongjiang,黑龙江,jixi,鸡西,45.54725,131.87413,230382, +CN101051104,jidong,鸡东,CN,China,中国,heilongjiang,黑龙江,jixi,鸡西,45.250893,131.14891,230321, +CN101051105,jiguan,鸡冠,CN,China,中国,heilongjiang,黑龙江,jixi,鸡西,45.30034,130.97438,230302, +CN101051106,hengshan,恒山,CN,China,中国,heilongjiang,黑龙江,jixi,鸡西,45.21324,130.91063,230303, +CN101051107,didao,滴道,CN,China,中国,heilongjiang,黑龙江,jixi,鸡西,45.348812,130.84682,230304, +CN101051108,lishu,梨树,CN,China,中国,heilongjiang,黑龙江,jixi,鸡西,45.092194,130.69778,230305, +CN101051109,chengzihe,城子河,CN,China,中国,heilongjiang,黑龙江,jixi,鸡西,45.33825,131.0105,230306, +CN101051110,mashan,麻山,CN,China,中国,heilongjiang,黑龙江,jixi,鸡西,45.209606,130.48112,230307, +CN101051201,hegang,鹤岗,CN,China,中国,heilongjiang,黑龙江,hegang,鹤岗,47.332085,130.27748,"230401,230400", +CN101051202,suibin,绥滨,CN,China,中国,heilongjiang,黑龙江,hegang,鹤岗,47.28989,131.86052,230422, +CN101051203,luobei,萝北,CN,China,中国,heilongjiang,黑龙江,hegang,鹤岗,47.577576,130.82909,230421, +CN101051204,xiangyang,向阳,CN,China,中国,heilongjiang,黑龙江,hegang,鹤岗,47.34537,130.29248,230402, +CN101051205,gongnong,工农,CN,China,中国,heilongjiang,黑龙江,hegang,鹤岗,47.331676,130.27666,230403, +CN101051206,nanshan,南山,CN,China,中国,heilongjiang,黑龙江,hegang,鹤岗,47.31324,130.27553,230404, +CN101051207,xingan,兴安,CN,China,中国,heilongjiang,黑龙江,hegang,鹤岗,47.25291,130.23618,230405, +CN101051208,dongshan,东山,CN,China,中国,heilongjiang,黑龙江,hegang,鹤岗,47.337383,130.31714,230406, +CN101051209,xingshan,兴山,CN,China,中国,heilongjiang,黑龙江,hegang,鹤岗,47.35997,130.30534,230407, +CN101051301,shuangyashan,双鸭山,CN,China,中国,heilongjiang,黑龙江,shuangyashan,双鸭山,46.64344,131.1573,"230501,230500", +CN101051302,jixian,集贤,CN,China,中国,heilongjiang,黑龙江,shuangyashan,双鸭山,46.72898,131.13933,230521, +CN101051303,baoqing,宝清,CN,China,中国,heilongjiang,黑龙江,shuangyashan,双鸭山,46.32878,132.20642,230523, +CN101051304,raohe,饶河,CN,China,中国,heilongjiang,黑龙江,shuangyashan,双鸭山,46.80129,134.02116,230524, +CN101051305,youyi,友谊,CN,China,中国,heilongjiang,黑龙江,shuangyashan,双鸭山,46.775158,131.81062,230522, +CN101051306,jianshan,尖山,CN,China,中国,heilongjiang,黑龙江,shuangyashan,双鸭山,46.64296,131.15897,230502, +CN101051307,lingdong,岭东,CN,China,中国,heilongjiang,黑龙江,shuangyashan,双鸭山,46.591076,131.16368,230503, +CN101051308,sifangtai,四方台,CN,China,中国,heilongjiang,黑龙江,shuangyashan,双鸭山,46.594345,131.33318,230505, +CN101051309,baoshan,宝山,CN,China,中国,heilongjiang,黑龙江,shuangyashan,双鸭山,46.573364,131.4043,230506, +CN101060101,changchun,长春,CN,China,中国,jilin,吉林,changchun,长春,43.88684,125.3245,"220101,220100,220000", +CN101060102,nongan,农安,CN,China,中国,jilin,吉林,changchun,长春,44.43126,125.175285,220122, +CN101060103,dehui,德惠,CN,China,中国,jilin,吉林,changchun,长春,44.53391,125.70332,220183, +CN101060104,jiutai,九台,CN,China,中国,jilin,吉林,changchun,长春,44.157154,125.84468,220113, +CN101060105,yushu,榆树,CN,China,中国,jilin,吉林,changchun,长春,44.82764,126.55011,220182, +CN101060106,shuangyang,双阳,CN,China,中国,jilin,吉林,changchun,长春,43.52517,125.65902,220112, +CN101060107,erdao,二道,CN,China,中国,jilin,吉林,changchun,长春,43.870823,125.38473,220105, +CN101060108,nanguan,南关,CN,China,中国,jilin,吉林,changchun,长春,43.890236,125.337234,220102, +CN101060109,kuancheng,宽城,CN,China,中国,jilin,吉林,changchun,长春,43.903824,125.34283,220103, +CN101060110,chaoyang,朝阳,CN,China,中国,jilin,吉林,changchun,长春,43.86491,125.31804,220104, +CN101060111,lvyuan,绿园,CN,China,中国,jilin,吉林,changchun,长春,43.892178,125.27247,220106, +CN101060201,jilin,吉林,CN,China,中国,jilin,吉林,jilin,吉林,43.84358,126.55302,"220201,220200", +CN101060202,shulan,舒兰,CN,China,中国,jilin,吉林,jilin,吉林,44.410908,126.947815,220283, +CN101060203,yongji,永吉,CN,China,中国,jilin,吉林,jilin,吉林,43.667416,126.501625,220221, +CN101060204,jiaohe,蛟河,CN,China,中国,jilin,吉林,jilin,吉林,43.720577,127.342735,220281, +CN101060205,panshi,磐石,CN,China,中国,jilin,吉林,jilin,吉林,42.942474,126.05993,220284, +CN101060206,huadian,桦甸,CN,China,中国,jilin,吉林,jilin,吉林,42.97209,126.745445,220282, +CN101060207,changyi,昌邑,CN,China,中国,jilin,吉林,jilin,吉林,43.851116,126.57076,220202, +CN101060208,longtan,龙潭,CN,China,中国,jilin,吉林,jilin,吉林,43.909756,126.56143,220203, +CN101060209,chuanying,船营,CN,China,中国,jilin,吉林,jilin,吉林,43.843803,126.55239,220204, +CN101060210,fengman,丰满,CN,China,中国,jilin,吉林,jilin,吉林,43.816593,126.56076,220211, +CN101060301,yanji,延吉,CN,China,中国,jilin,吉林,yanbian,延边,42.906963,129.5158,222401, +CN101060302,dunhua,敦化,CN,China,中国,jilin,吉林,yanbian,延边,43.36692,128.22986,222403, +CN101060303,antu,安图,CN,China,中国,jilin,吉林,yanbian,延边,43.110992,128.90187,222426, +CN101060304,wangqing,汪清,CN,China,中国,jilin,吉林,yanbian,延边,43.315426,129.76616,222424, +CN101060305,helong,和龙,CN,China,中国,jilin,吉林,yanbian,延边,42.547005,129.00874,222406, +CN101060306,yanbian,延边,CN,China,中国,jilin,吉林,yanbian,延边,42.904823,129.51323,222400, +CN101060307,longjing,龙井,CN,China,中国,jilin,吉林,yanbian,延边,42.77103,129.42575,222405, +CN101060308,hunchun,珲春,CN,China,中国,jilin,吉林,yanbian,延边,42.871056,130.36578,222404, +CN101060309,tumen,图们,CN,China,中国,jilin,吉林,yanbian,延边,42.96662,129.8467,222402, +CN101060401,siping,四平,CN,China,中国,jilin,吉林,siping,四平,43.170345,124.37079,"220301,220300", +CN101060402,shuangliao,双辽,CN,China,中国,jilin,吉林,siping,四平,43.518276,123.50528,220382, +CN101060403,lishu,梨树,CN,China,中国,jilin,吉林,siping,四平,43.30831,124.3358,220322, +CN101060404,gongzhuling,公主岭,CN,China,中国,jilin,吉林,siping,四平,43.509476,124.81759,220381, +CN101060405,yitong,伊通,CN,China,中国,jilin,吉林,siping,四平,43.345463,125.30312,220323, +CN101060406,tiexi,铁西,CN,China,中国,jilin,吉林,siping,四平,43.17626,124.36089,220302, +CN101060407,tiedong,铁东,CN,China,中国,jilin,吉林,siping,四平,43.16726,124.388466,220303, +CN101060501,tonghua,通化,CN,China,中国,jilin,吉林,tonghua,通化,41.721176,125.9365,"220501,220500", +CN101060502,meihekou,梅河口,CN,China,中国,jilin,吉林,tonghua,通化,42.530003,125.68734,220581, +CN101060503,liuhe,柳河,CN,China,中国,jilin,吉林,tonghua,通化,42.281483,125.74054,220524, +CN101060504,huinan,辉南,CN,China,中国,jilin,吉林,tonghua,通化,42.68346,126.04282,220523, +CN101060505,jian,集安,CN,China,中国,jilin,吉林,tonghua,通化,41.126274,126.1862,220582, +CN101060506,tonghuaxian,通化县,CN,China,中国,jilin,吉林,tonghua,通化,41.677917,125.75312,220521, +CN101060507,dongchang,东昌,CN,China,中国,jilin,吉林,tonghua,通化,41.721233,125.936714,220502, +CN101060508,erdaojiang,二道江,CN,China,中国,jilin,吉林,tonghua,通化,41.777565,126.04599,220503, +CN101060601,baicheng,白城,CN,China,中国,jilin,吉林,baicheng,白城,45.619026,122.84111,"220801,220800", +CN101060602,taonan,洮南,CN,China,中国,jilin,吉林,baicheng,白城,45.33911,122.783775,220881, +CN101060603,daan,大安,CN,China,中国,jilin,吉林,baicheng,白城,45.50765,124.29151,220882, +CN101060604,zhenlai,镇赉,CN,China,中国,jilin,吉林,baicheng,白城,45.84609,123.20225,220821, +CN101060605,tongyu,通榆,CN,China,中国,jilin,吉林,baicheng,白城,44.80915,123.08855,220822, +CN101060606,taobei,洮北,CN,China,中国,jilin,吉林,baicheng,白城,45.61925,122.8425,220802, +CN101060701,liaoyuan,辽源,CN,China,中国,jilin,吉林,liaoyuan,辽源,42.90269,125.14535,"220401,220400", +CN101060702,dongfeng,东丰,CN,China,中国,jilin,吉林,liaoyuan,辽源,42.67523,125.529625,220421, +CN101060703,dongliao,东辽,CN,China,中国,jilin,吉林,liaoyuan,辽源,42.927723,124.992,220422, +CN101060704,longshan,龙山,CN,China,中国,jilin,吉林,liaoyuan,辽源,42.902702,125.145164,220402, +CN101060705,xian,西安,CN,China,中国,jilin,吉林,liaoyuan,辽源,42.920414,125.15142,220403, +CN101060801,songyuan,松原,CN,China,中国,jilin,吉林,songyuan,松原,45.118244,124.82361,"220701,220700", +CN101060802,qianan,乾安,CN,China,中国,jilin,吉林,songyuan,松原,45.006847,124.02436,220723, +CN101060803,qianguo,前郭,CN,China,中国,jilin,吉林,songyuan,松原,45.116287,124.826805,220721, +CN101060804,changling,长岭,CN,China,中国,jilin,吉林,songyuan,松原,44.27658,123.98518,220722, +CN101060805,fuyu,扶余,CN,China,中国,jilin,吉林,songyuan,松原,44.9862,126.042755,220781, +CN101060806,ningjiang,宁江,CN,China,中国,jilin,吉林,songyuan,松原,45.1765,124.82785,220702, +CN101060901,baishan,白山,CN,China,中国,jilin,吉林,baishan,白山,41.942505,126.42784,"220601,220600", +CN101060902,jingyu,靖宇,CN,China,中国,jilin,吉林,baishan,白山,42.38969,126.80839,220622, +CN101060903,linjiang,临江,CN,China,中国,jilin,吉林,baishan,白山,41.810688,126.9193,220681, +CN101060904,donggang,东岗,CN,China,中国,jilin,吉林,baishan,白山,41.994892,126.64931,220605, +CN101060905,changbai,长白,CN,China,中国,jilin,吉林,baishan,白山,41.41936,128.20338,220623, +CN101060906,fusong,抚松,CN,China,中国,jilin,吉林,baishan,白山,42.33264,127.273796,220621, +CN101060907,jiangyuan,江源,CN,China,中国,jilin,吉林,baishan,白山,42.048107,126.58423,220605, +CN101060908,hunjiang,浑江,CN,China,中国,jilin,吉林,baishan,白山,41.943066,126.42803,220602, +CN101070101,shenyang,沈阳,CN,China,中国,liaoning,辽宁,shenyang,沈阳,41.79677,123.42909,"210101,210100,210000", +CN101070102,hunnan,浑南,CN,China,中国,liaoning,辽宁,shenyang,沈阳,41.741947,123.458984,210112, +CN101070103,liaozhong,辽中,CN,China,中国,liaoning,辽宁,shenyang,沈阳,41.512726,122.73127,210115, +CN101070104,kangping,康平,CN,China,中国,liaoning,辽宁,shenyang,沈阳,42.74153,123.3527,210123, +CN101070105,faku,法库,CN,China,中国,liaoning,辽宁,shenyang,沈阳,42.507046,123.416725,210124, +CN101070106,xinmin,新民,CN,China,中国,liaoning,辽宁,shenyang,沈阳,41.99651,122.828865,210181, +CN101070107,heping,和平,CN,China,中国,liaoning,辽宁,shenyang,沈阳,41.788074,123.40666,210102, +CN101070108,shenhe,沈河,CN,China,中国,liaoning,辽宁,shenyang,沈阳,41.79559,123.445694,210103, +CN101070109,dadong,大东,CN,China,中国,liaoning,辽宁,shenyang,沈阳,41.808502,123.469955,210104, +CN101070110,huanggu,皇姑,CN,China,中国,liaoning,辽宁,shenyang,沈阳,41.822334,123.40568,210105, +CN101070111,tiexi,铁西,CN,China,中国,liaoning,辽宁,shenyang,沈阳,41.787807,123.35066,210106, +CN101070112,sujiatun,苏家屯,CN,China,中国,liaoning,辽宁,shenyang,沈阳,41.665905,123.341606,210111, +CN101070113,shenbeixinqu,沈北新区,CN,China,中国,liaoning,辽宁,shenyang,沈阳,42.05231,123.52147,210113, +CN101070114,yuhong,于洪,CN,China,中国,liaoning,辽宁,shenyang,沈阳,41.795834,123.31083,210114, +CN101070201,dalian,大连,CN,China,中国,liaoning,辽宁,dalian,大连,38.91459,121.61862,"210201,210200", +CN101070202,wafangdian,瓦房店,CN,China,中国,liaoning,辽宁,dalian,大连,39.63065,122.002655,210281, +CN101070203,jinzhou,金州,CN,China,中国,liaoning,辽宁,dalian,大连,39.052746,121.78941,210213, +CN101070204,pulandian,普兰店,CN,China,中国,liaoning,辽宁,dalian,大连,39.401554,121.9705,210214, +CN101070205,lvshun,旅顺,CN,China,中国,liaoning,辽宁,dalian,大连,38.812042,121.26713,210212, +CN101070206,changhai,长海,CN,China,中国,liaoning,辽宁,dalian,大连,39.2724,122.58782,210224, +CN101070207,zhuanghe,庄河,CN,China,中国,liaoning,辽宁,dalian,大连,39.69829,122.97061,210283, +CN101070208,zhongshan,中山,CN,China,中国,liaoning,辽宁,dalian,大连,38.921555,121.64376,210202, +CN101070209,xigang,西岗,CN,China,中国,liaoning,辽宁,dalian,大连,38.914265,121.61611,210203, +CN101070210,shahekou,沙河口,CN,China,中国,liaoning,辽宁,dalian,大连,38.91286,121.593704,210204, +CN101070211,ganjingzi,甘井子,CN,China,中国,liaoning,辽宁,dalian,大连,38.975147,121.58261,210211, +CN101070301,anshan,鞍山,CN,China,中国,liaoning,辽宁,anshan,鞍山,41.110626,122.99563,"210301,210300", +CN101070302,taian,台安,CN,China,中国,liaoning,辽宁,anshan,鞍山,41.38686,122.42973,210321, +CN101070303,xiuyan,岫岩,CN,China,中国,liaoning,辽宁,anshan,鞍山,40.28151,123.28833,210323, +CN101070304,haicheng,海城,CN,China,中国,liaoning,辽宁,anshan,鞍山,40.85253,122.7522,210381, +CN101070305,tiedong,铁东,CN,China,中国,liaoning,辽宁,anshan,鞍山,41.110344,122.99448,210302, +CN101070306,tiexi,铁西,CN,China,中国,liaoning,辽宁,anshan,鞍山,41.11069,122.97183,210303, +CN101070307,lishan,立山,CN,China,中国,liaoning,辽宁,anshan,鞍山,41.150623,123.0248,210304, +CN101070308,qianshan,千山,CN,China,中国,liaoning,辽宁,anshan,鞍山,41.06891,122.949295,210311, +CN101070401,fushun,抚顺,CN,China,中国,liaoning,辽宁,fushun,抚顺,41.922646,124.09798,"210401,210400,210421", +CN101070402,xinbin,新宾,CN,China,中国,liaoning,辽宁,fushun,抚顺,41.732456,125.037544,210422, +CN101070403,qingyuan,清原,CN,China,中国,liaoning,辽宁,fushun,抚顺,42.10135,124.92719,210423, +CN101070405,xinfu,新抚,CN,China,中国,liaoning,辽宁,fushun,抚顺,41.86082,123.902855,210402, +CN101070406,dongzhou,东洲,CN,China,中国,liaoning,辽宁,fushun,抚顺,41.86683,124.04722,210403, +CN101070407,wanghua,望花,CN,China,中国,liaoning,辽宁,fushun,抚顺,41.851803,123.801506,210404, +CN101070408,shuncheng,顺城,CN,China,中国,liaoning,辽宁,fushun,抚顺,41.88113,123.91717,210411, +CN101070501,benxi,本溪,CN,China,中国,liaoning,辽宁,benxi,本溪,41.29791,123.770515,"210501,210500", +CN101070502,benxixian,本溪县,CN,China,中国,liaoning,辽宁,benxi,本溪,41.18,124.17,210521, +CN101070503,pingshan,平山,CN,China,中国,liaoning,辽宁,benxi,本溪,41.29158,123.76123,210502, +CN101070504,huanren,桓仁,CN,China,中国,liaoning,辽宁,benxi,本溪,41.268997,125.35919,210522, +CN101070505,xihu,溪湖,CN,China,中国,liaoning,辽宁,benxi,本溪,41.330055,123.76523,210503, +CN101070506,mingshan,明山,CN,China,中国,liaoning,辽宁,benxi,本溪,41.30243,123.76329,210504, +CN101070507,nanfen,南芬,CN,China,中国,liaoning,辽宁,benxi,本溪,41.10409,123.74838,210505, +CN101070601,dandong,丹东,CN,China,中国,liaoning,辽宁,dandong,丹东,40.124294,124.38304,"210601,210600", +CN101070602,fengcheng,凤城,CN,China,中国,liaoning,辽宁,dandong,丹东,40.457565,124.07107,210682, +CN101070603,kuandian,宽甸,CN,China,中国,liaoning,辽宁,dandong,丹东,40.73041,124.78487,210624, +CN101070604,donggang,东港,CN,China,中国,liaoning,辽宁,dandong,丹东,39.88347,124.14944,210681, +CN101070605,yuanbao,元宝,CN,China,中国,liaoning,辽宁,dandong,丹东,40.136482,124.39781,210602, +CN101070606,zhenxing,振兴,CN,China,中国,liaoning,辽宁,dandong,丹东,40.102802,124.36115,210603, +CN101070607,zhenan,振安,CN,China,中国,liaoning,辽宁,dandong,丹东,40.158558,124.42771,210604, +CN101070701,jinzhou,锦州,CN,China,中国,liaoning,辽宁,jinzhou,锦州,41.11927,121.13574,"210701,210700", +CN101070702,linghai,凌海,CN,China,中国,liaoning,辽宁,jinzhou,锦州,41.171738,121.364235,210781, +CN101070703,guta,古塔,CN,China,中国,liaoning,辽宁,jinzhou,锦州,41.11572,121.13009,210702, +CN101070704,yixian,义县,CN,China,中国,liaoning,辽宁,jinzhou,锦州,41.537224,121.24283,210727, +CN101070705,heishan,黑山,CN,China,中国,liaoning,辽宁,jinzhou,锦州,41.691803,122.11791,210726, +CN101070706,beizhen,北镇,CN,China,中国,liaoning,辽宁,jinzhou,锦州,41.598763,121.79596,210782, +CN101070707,linghe,凌河,CN,China,中国,liaoning,辽宁,jinzhou,锦州,41.114662,121.151306,210703, +CN101070708,taihe,太和,CN,China,中国,liaoning,辽宁,jinzhou,锦州,41.105377,121.1073,210711, +CN101070801,yingkou,营口,CN,China,中国,liaoning,辽宁,yingkou,营口,40.66743,122.23515,"210801,210800", +CN101070802,dashiqiao,大石桥,CN,China,中国,liaoning,辽宁,yingkou,营口,40.633972,122.5059,210882, +CN101070803,gaizhou,盖州,CN,China,中国,liaoning,辽宁,yingkou,营口,40.405235,122.35554,210881, +CN101070804,zhanqian,站前,CN,China,中国,liaoning,辽宁,yingkou,营口,40.66995,122.253235,210802, +CN101070805,xishi,西市,CN,China,中国,liaoning,辽宁,yingkou,营口,40.663086,122.21007,210803, +CN101070806,bayuquan,鲅鱼圈,CN,China,中国,liaoning,辽宁,yingkou,营口,40.263645,122.12724,210804, +CN101070807,laobian,老边,CN,China,中国,liaoning,辽宁,yingkou,营口,40.682724,122.38258,210811, +CN101070901,fuxin,阜新,CN,China,中国,liaoning,辽宁,fuxin,阜新,42.058605,121.743126,"210901,210900,210921", +CN101070902,zhangwu,彰武,CN,China,中国,liaoning,辽宁,fuxin,阜新,42.384823,122.537445,210922, +CN101070903,haizhou,海州,CN,China,中国,liaoning,辽宁,fuxin,阜新,42.01116,121.65764,210902, +CN101070904,xinqiu,新邱,CN,China,中国,liaoning,辽宁,fuxin,阜新,42.0866,121.79054,210903, +CN101070905,taiping,太平,CN,China,中国,liaoning,辽宁,fuxin,阜新,42.011147,121.677574,210904, +CN101070906,qinghemen,清河门,CN,China,中国,liaoning,辽宁,fuxin,阜新,41.780476,121.42018,210905, +CN101070907,xihe,细河,CN,China,中国,liaoning,辽宁,fuxin,阜新,42.01922,121.65479,210911, +CN101071001,liaoyang,辽阳,CN,China,中国,liaoning,辽宁,liaoyang,辽阳,41.2694,123.18152,"211001,211000", +CN101071002,liaoyangxian,辽阳县,CN,China,中国,liaoning,辽宁,liaoyang,辽阳,41.21648,123.07967,211021, +CN101071003,dengta,灯塔,CN,China,中国,liaoning,辽宁,liaoyang,辽阳,41.427837,123.32587,211081, +CN101071004,gongchangling,弓长岭,CN,China,中国,liaoning,辽宁,liaoyang,辽阳,41.15783,123.43163,211005, +CN101071005,baita,白塔,CN,China,中国,liaoning,辽宁,liaoyang,辽阳,41.26745,123.17261,211002, +CN101071006,wensheng,文圣,CN,China,中国,liaoning,辽宁,liaoyang,辽阳,41.266766,123.188225,211003, +CN101071007,hongwei,宏伟,CN,China,中国,liaoning,辽宁,liaoyang,辽阳,41.205746,123.20046,211004, +CN101071008,taizihe,太子河,CN,China,中国,liaoning,辽宁,liaoyang,辽阳,41.251682,123.18533,211011, +CN101071101,tieling,铁岭,CN,China,中国,liaoning,辽宁,tieling,铁岭,42.223316,123.72567,"211201,211200,211221", +CN101071102,kaiyuan,开原,CN,China,中国,liaoning,辽宁,tieling,铁岭,42.54214,124.04555,211282, +CN101071103,changtu,昌图,CN,China,中国,liaoning,辽宁,tieling,铁岭,42.784443,124.11017,211224, +CN101071104,xifeng,西丰,CN,China,中国,liaoning,辽宁,tieling,铁岭,42.73809,124.72332,211223, +CN101071105,tiefa,调兵山,CN,China,中国,liaoning,辽宁,tieling,铁岭,42.450733,123.545364,211281, +CN101071106,yinzhou,银州,CN,China,中国,liaoning,辽宁,tieling,铁岭,42.29228,123.84488,211202, +CN101071107,qinghe,清河,CN,China,中国,liaoning,辽宁,tieling,铁岭,42.542976,124.14896,211204, +CN101071201,chaoyang,朝阳,CN,China,中国,liaoning,辽宁,chaoyang,朝阳,41.57676,120.45118,"211301,211300,211321", +CN101071202,shuangta,双塔,CN,China,中国,liaoning,辽宁,chaoyang,朝阳,41.579388,120.44877,211302, +CN101071203,lingyuan,凌源,CN,China,中国,liaoning,辽宁,chaoyang,朝阳,41.243088,119.40479,211382, +CN101071204,kazuo,喀左,CN,China,中国,liaoning,辽宁,chaoyang,朝阳,41.05,119.43,211324, +CN101071205,beipiao,北票,CN,China,中国,liaoning,辽宁,chaoyang,朝阳,41.803288,120.76695,211381, +CN101071206,longcheng,龙城,CN,China,中国,liaoning,辽宁,chaoyang,朝阳,41.576748,120.413376,211303, +CN101071207,jianpingxian,建平县,CN,China,中国,liaoning,辽宁,chaoyang,朝阳,41.402576,119.642365,211322, +CN101071301,panjin,盘锦,CN,China,中国,liaoning,辽宁,panjin,盘锦,41.124485,122.06957,"211101,211100", +CN101071302,dawa,大洼,CN,China,中国,liaoning,辽宁,panjin,盘锦,40.994427,122.07171,211104, +CN101071303,panshan,盘山,CN,China,中国,liaoning,辽宁,panjin,盘锦,41.2407,121.98528,211122, +CN101071304,shuangtaizi,双台子,CN,China,中国,liaoning,辽宁,panjin,盘锦,41.190365,122.05573,211102, +CN101071305,xinglongtai,兴隆台,CN,China,中国,liaoning,辽宁,panjin,盘锦,41.12242,122.071625,211103, +CN101071401,huludao,葫芦岛,CN,China,中国,liaoning,辽宁,huludao,葫芦岛,40.755573,120.85639,"211401,211400", +CN101071402,jianchang,建昌,CN,China,中国,liaoning,辽宁,huludao,葫芦岛,40.81287,119.80778,211422, +CN101071403,suizhong,绥中,CN,China,中国,liaoning,辽宁,huludao,葫芦岛,40.328407,120.34211,211421, +CN101071404,xingcheng,兴城,CN,China,中国,liaoning,辽宁,huludao,葫芦岛,40.61941,120.72936,211481, +CN101071405,lianshan,连山,CN,China,中国,liaoning,辽宁,huludao,葫芦岛,40.755142,120.85937,211402, +CN101071406,longgang,龙港,CN,China,中国,liaoning,辽宁,huludao,葫芦岛,40.70999,120.83857,211403, +CN101071407,nanpiao,南票,CN,China,中国,liaoning,辽宁,huludao,葫芦岛,41.098812,120.75231,211404, +CN101080101,huhehaote,呼和浩特,CN,China,中国,neimenggu,内蒙古,huhehaote,呼和浩特,40.81831,111.6708,"150101,150100,150000", +CN101080102,tuzuoqi,土左旗,CN,China,中国,neimenggu,内蒙古,huhehaote,呼和浩特,40.41,111.09,150121, +CN101080103,tuoxian,托县,CN,China,中国,neimenggu,内蒙古,huhehaote,呼和浩特,40.16,111.11,150122, +CN101080104,helin,和林,CN,China,中国,neimenggu,内蒙古,huhehaote,呼和浩特,40.380287,111.82414,150123, +CN101080105,qingshuihe,清水河,CN,China,中国,neimenggu,内蒙古,huhehaote,呼和浩特,39.91248,111.67222,150124, +CN101080106,saihan,赛罕,CN,China,中国,neimenggu,内蒙古,huhehaote,呼和浩特,40.807835,111.69846,150105, +CN101080107,wuchuan,武川,CN,China,中国,neimenggu,内蒙古,huhehaote,呼和浩特,41.094482,111.456566,150125, +CN101080108,xincheng,新城,CN,China,中国,namenggu,内蒙古,huhehaote,呼和浩特,40.826225,111.68597,150102, +CN101080109,huimin,回民,CN,China,中国,namenggu,内蒙古,huhehaote,呼和浩特,40.815147,111.66216,150103, +CN101080110,yuquan,玉泉,CN,China,中国,namenggu,内蒙古,huhehaote,呼和浩特,40.79942,111.66543,150104, +CN101080201,baotou,包头,CN,China,中国,neimenggu,内蒙古,baotou,包头,40.65817,109.84041,"150201,150200", +CN101080202,baiyunebo,白云鄂博,CN,China,中国,neimenggu,内蒙古,baotou,包头,41.769245,109.97016,150206, +CN101080203,mandula,满都拉,CN,China,中国,neimenggu,内蒙古,baotou,包头,42.53366,110.12258,150223, +CN101080204,tuyouqi,土右旗,CN,China,中国,neimenggu,内蒙古,baotou,包头,40.33,110.32,150221, +CN101080205,guyang,固阳,CN,China,中国,neimenggu,内蒙古,baotou,包头,41.030003,110.06342,150222, +CN101080206,damaoqi,达茂旗,CN,China,中国,neimenggu,内蒙古,baotou,包头,41.42,110.26,150223, +CN101080207,xilamuren,希拉穆仁,CN,China,中国,neimenggu,内蒙古,wulanchabu,包头,41.32316,111.23631,150223, +CN101080208,donghe,东河,CN,China,中国,namenggu,内蒙古,baotou,包头,40.587055,110.02689,150202, +CN101080209,kundoulun,昆都仑,CN,China,中国,namenggu,内蒙古,baotou,包头,40.661346,109.82293,150203, +CN101080210,qingshan,青山,CN,China,中国,namenggu,内蒙古,baotou,包头,40.668556,109.88005,150204, +CN101080211,shiguai,石拐,CN,China,中国,namenggu,内蒙古,baotou,包头,40.672092,110.27257,150205, +CN101080212,jiuyuan,九原,CN,China,中国,namenggu,内蒙古,baotou,包头,40.600582,109.968124,150207, +CN101080301,wuhai,乌海,CN,China,中国,neimenggu,内蒙古,wuhai,乌海,39.673733,106.82556,"150301,150300", +CN101080302,haibowan,海勃湾,CN,China,中国,namenggu,内蒙古,wuhai,乌海,39.673527,106.817764,150302, +CN101080303,hainan,海南,CN,China,中国,namenggu,内蒙古,wuhai,乌海,39.44153,106.88479,150303, +CN101080304,wuda,乌达,CN,China,中国,namenggu,内蒙古,wuhai,乌海,39.50229,106.72271,150304, +CN101080401,jining,集宁,CN,China,中国,neimenggu,内蒙古,wulanchabu,乌兰察布,41.034134,113.116455,150902, +CN101080402,zhuozi,卓资,CN,China,中国,neimenggu,内蒙古,wulanchabu,乌兰察布,40.89576,112.577705,150921, +CN101080403,huade,化德,CN,China,中国,neimenggu,内蒙古,wulanchabu,乌兰察布,41.899334,114.01008,150922, +CN101080404,shangdu,商都,CN,China,中国,neimenggu,内蒙古,wulanchabu,乌兰察布,41.56016,113.560646,150923, +CN101080405,wulanchabu,乌兰察布,CN,China,中国,namenggu,内蒙古,wulanchabu,乌兰察布,41.034126,113.11454,"150901,150900", +CN101080406,xinghe,兴和,CN,China,中国,neimenggu,内蒙古,wulanchabu,乌兰察布,40.872437,113.83401,150924, +CN101080407,liangcheng,凉城,CN,China,中国,neimenggu,内蒙古,wulanchabu,乌兰察布,40.531628,112.50091,150925, +CN101080408,chayouqianqi,察右前旗,CN,China,中国,neimenggu,内蒙古,wulanchabu,乌兰察布,40.48,113.13,150926, +CN101080409,chayouzhongqi,察右中旗,CN,China,中国,neimenggu,内蒙古,wulanchabu,乌兰察布,41.16,112.37,150927, +CN101080410,chayouhouqi,察右后旗,CN,China,中国,neimenggu,内蒙古,wulanchabu,乌兰察布,41.27,113.11,150928, +CN101080411,siziwangqi,四子王旗,CN,China,中国,neimenggu,内蒙古,wulanchabu,乌兰察布,41.528114,111.70123,150929, +CN101080412,fengzhen,丰镇,CN,China,中国,neimenggu,内蒙古,wulanchabu,乌兰察布,40.437534,113.16346,150981, +CN101080501,tongliao,通辽,CN,China,中国,neimenggu,内蒙古,tongliao,通辽,43.617428,122.26312,"150501,150500", +CN101080502,shebotu,舍伯吐,CN,China,中国,neimenggu,内蒙古,tongliao,通辽,44.03114,121.99002,150521, +CN101080503,kezuozhongqi,科左中旗,CN,China,中国,neimenggu,内蒙古,tongliao,通辽,44.08,123.18,150521, +CN101080504,kezuohouqi,科左后旗,CN,China,中国,neimenggu,内蒙古,tongliao,通辽,42.58,122.21,150522, +CN101080505,qinglongshan,青龙山,CN,China,中国,neimenggu,内蒙古,tongliao,通辽,42.395172,121.039665,150525, +CN101080506,kailu,开鲁,CN,China,中国,neimenggu,内蒙古,tongliao,通辽,43.602432,121.3088,150523, +CN101080507,kulun,库伦,CN,China,中国,neimenggu,内蒙古,tongliao,通辽,42.73469,121.77489,150524, +CN101080508,naiman,奈曼,CN,China,中国,neimenggu,内蒙古,tongliao,通辽,42.84685,120.662544,150525, +CN101080509,zhalute,扎鲁特,CN,China,中国,neimenggu,内蒙古,tongliao,通辽,44.555294,120.90527,150526, +CN101080510,keerqin,科尔沁,CN,China,中国,namenggu,内蒙古,tongliao,通辽,45.059647,121.47282,150502, +CN101080511,bayaertuhushuo,巴雅尔吐胡硕,CN,China,中国,neimenggu,内蒙古,tongliao,通辽,45.069443,120.33295,150526, +CN101080512,huolinguole,霍林郭勒,CN,China,中国,neimenggu,内蒙古,tongliao,通辽,45.53236,119.65786,150581, +CN101080601,chifeng,赤峰,CN,China,中国,neimenggu,内蒙古,chifeng,赤峰,42.27532,118.9568,"150401,150400", +CN101080602,hongshan,红山,CN,China,中国,namenggu,内蒙古,chifeng,赤峰,42.269733,118.96109,150402, +CN101080603,aluqi,阿鲁旗,CN,China,中国,neimenggu,内蒙古,chifeng,赤峰,43.53,120.03,150421, +CN101080605,balinzuoqi,巴林左旗,CN,China,中国,neimenggu,内蒙古,chifeng,赤峰,43.980717,119.39174,150422, +CN101080606,balinyouqi,巴林右旗,CN,China,中国,neimenggu,内蒙古,chifeng,赤峰,43.52896,118.678345,150423, +CN101080607,linxi,林西,CN,China,中国,neimenggu,内蒙古,chifeng,赤峰,43.605328,118.05775,150424, +CN101080608,keshiketeng,克什克腾,CN,China,中国,neimenggu,内蒙古,chifeng,赤峰,43.256233,117.542465,150425, +CN101080609,wengniute,翁牛特,CN,China,中国,neimenggu,内蒙古,chifeng,赤峰,42.937126,119.02262,150426, +CN101080610,gangzi,岗子,CN,China,中国,neimenggu,内蒙古,chifeng,赤峰,42.56465,118.42989,150404, +CN101080611,kalaqin,喀喇沁,CN,China,中国,neimenggu,内蒙古,chifeng,赤峰,41.92778,118.70857,150428, +CN101080612,balihan,八里罕,CN,China,中国,neimenggu,内蒙古,chifeng,赤峰,41.51674,118.75042,150429, +CN101080613,ningcheng,宁城,CN,China,中国,neimenggu,内蒙古,chifeng,赤峰,41.598694,119.33924,150429, +CN101080614,aohan,敖汉,CN,China,中国,neimenggu,内蒙古,chifeng,赤峰,42.28701,119.90649,150430, +CN101080616,yuanbaoshan,元宝山,CN,China,中国,namenggu,内蒙古,chifeng,赤峰,42.04117,119.28988,150403, +CN101080617,songshan,松山,CN,China,中国,namenggu,内蒙古,chifeng,赤峰,42.281048,118.93896,150404, +CN101080618,fuhe,富河,CN,China,中国,neimenggu,内蒙古,chifeng,赤峰,44.452843,119.29289,150422, +CN101080619,baoguotu,宝国图,CN,China,中国,neimenggu,内蒙古,chifeng,赤峰,42.32052,120.69266,150430, +CN101080701,eerduosi,鄂尔多斯,CN,China,中国,neimenggu,内蒙古,eerduosi,鄂尔多斯,39.81718,109.99029,"150601,150600,150603", +CN101080703,dalate,达拉特,CN,China,中国,neimenggu,内蒙古,eerduosi,鄂尔多斯,40.404076,110.04028,150621, +CN101080704,zhungeer,准格尔,CN,China,中国,neimenggu,内蒙古,eerduosi,鄂尔多斯,39.86522,111.238335,150622, +CN101080705,eqianqi,鄂前旗,CN,China,中国,neimenggu,内蒙古,eerduosi,鄂尔多斯,38.11,107.29,150623, +CN101080706,henan,河南,CN,China,中国,neimenggu,内蒙古,eerduosi,鄂尔多斯,37.8581,108.7311,150626, +CN101080707,yihewusu,伊和乌素,CN,China,中国,neimenggu,内蒙古,eerduosi,鄂尔多斯,39.69578,109.22149,150625, +CN101080708,etuoke,鄂托克,CN,China,中国,neimenggu,内蒙古,eerduosi,鄂尔多斯,39.095753,107.982605,150624, +CN101080709,hangjinqi,杭锦旗,CN,China,中国,neimenggu,内蒙古,eerduosi,鄂尔多斯,39.831787,108.73632,150625, +CN101080710,wushenqi,乌审旗,CN,China,中国,neimenggu,内蒙古,eerduosi,鄂尔多斯,38.59661,108.84245,150626, +CN101080711,yijinhuoluo,伊金霍洛,CN,China,中国,neimenggu,内蒙古,eerduosi,鄂尔多斯,39.604313,109.7874,150627, +CN101080712,wushenzhao,乌审召,CN,China,中国,neimenggu,内蒙古,eerduosi,鄂尔多斯,39.219353,109.016396,150626, +CN101080713,dongsheng,东胜,CN,China,中国,neimenggu,内蒙古,eerduosi,鄂尔多斯,39.81788,109.98945,150602, +CN101080714,kangbashi,康巴什,CN,China,中国,neimenggu,内蒙古,eerduosi,鄂尔多斯,39.608303,109.781555,150603, +CN101080801,linhe,临河,CN,China,中国,neimenggu,内蒙古,bayannaoer,巴彦淖尔,40.75709,107.417015,150802, +CN101080802,wuyuan,五原,CN,China,中国,neimenggu,内蒙古,bayannaoer,巴彦淖尔,41.097637,108.27066,150821, +CN101080803,dengkou,磴口,CN,China,中国,neimenggu,内蒙古,bayannaoer,巴彦淖尔,40.33048,107.00606,150822, +CN101080804,wuqianqi,乌前旗,CN,China,中国,neimenggu,内蒙古,bayannaoer,巴彦淖尔,40.44,108.39,150823, +CN101080805,dashetai,大佘太,CN,China,中国,neimenggu,内蒙古,bayannaoer,巴彦淖尔,41.02305,109.1458,150823, +CN101080806,wuzhongqi,乌中旗,CN,China,中国,neimenggu,内蒙古,bayannaoer,巴彦淖尔,41.34,108.31,150824, +CN101080807,wuhouqi,乌后旗,CN,China,中国,neimenggu,内蒙古,bayannaoer,巴彦淖尔,41.27,106.59,150825, +CN101080808,hailisu,海力素,CN,China,中国,neimenggu,内蒙古,bayannaoer,巴彦淖尔,41.64086,106.8967,150825, +CN101080809,narenbaolige,那仁宝力格,CN,China,中国,neimenggu,内蒙古,bayannaoer,巴彦淖尔,41.14622,106.45576,150825, +CN101080810,hangjinhouqi,杭锦后旗,CN,China,中国,neimenggu,内蒙古,bayannaoer,巴彦淖尔,40.888798,107.14768,150826, +CN101080811,bayannaoer,巴彦淖尔,CN,China,中国,namenggu,内蒙古,bayannaoer,巴彦淖尔,40.7574,107.41696,"150801,150800", +CN101080901,xilinhaote,锡林浩特,CN,China,中国,neimenggu,内蒙古,xilinguole,锡林郭勒,43.9443,116.0919,152502, +CN101080902,xilinguole,锡林郭勒,CN,China,中国,namenggu,内蒙古,xilinguole,锡林郭勒,43.94402,116.090996,152500, +CN101080903,erlianhaote,二连浩特,CN,China,中国,neimenggu,内蒙古,xilinguole,锡林郭勒,43.652897,111.97981,152501, +CN101080904,abaga,阿巴嘎,CN,China,中国,neimenggu,内蒙古,xilinguole,锡林郭勒,44.022728,114.97062,152522, +CN101080906,suzuoqi,苏左旗,CN,China,中国,neimenggu,内蒙古,xilinguole,锡林郭勒,43.52,113.38,152523, +CN101080907,suyouqi,苏右旗,CN,China,中国,neimenggu,内蒙古,xilinguole,锡林郭勒,42.45,112.39,152524, +CN101080908,zhurihe,朱日和,CN,China,中国,neimenggu,内蒙古,xilinguole,锡林郭勒,42.40647,112.90234,152524, +CN101080909,dongwuqi,东乌旗,CN,China,中国,neimenggu,内蒙古,xilinguole,锡林郭勒,45.31,116.58,152525, +CN101080910,xiwuqi,西乌旗,CN,China,中国,neimenggu,内蒙古,xilinguole,锡林郭勒,44.35,117.36,152526, +CN101080911,taipusiqi,太仆寺,CN,China,中国,neimenggu,内蒙古,xilinguole,锡林郭勒,41.8952,115.28728,152527, +CN101080912,xianghuang,镶黄旗,CN,China,中国,neimenggu,内蒙古,xilinguole,锡林郭勒,42.239227,113.84387,152528, +CN101080913,zhengxiangbaiqi,正镶白旗,CN,China,中国,neimenggu,内蒙古,xilinguole,锡林郭勒,42.286808,115.031425,152529, +CN101080914,zhenglanqi,正蓝旗,CN,China,中国,neimenggu,内蒙古,xilinguole,锡林郭勒,42.245895,116.00331,152530, +CN101080915,duolun,多伦,CN,China,中国,neimenggu,内蒙古,xilinguole,锡林郭勒,42.197964,116.47729,152531, +CN101080916,boketu,博克图,CN,China,中国,neimenggu,内蒙古,xilinguole,锡林郭勒,48.753597,121.91604,150782, +CN101080917,wulagai,乌拉盖,CN,China,中国,neimenggu,内蒙古,xilinguole,锡林郭勒,45.711323,118.838394,152525, +CN101081001,hailaer,海拉尔,CN,China,中国,neimenggu,内蒙古,hulunbeier,呼伦贝尔,49.21389,119.76492,150702, +CN101081002,xiaoergou,小二沟,CN,China,中国,neimenggu,内蒙古,hulunbeier,呼伦贝尔,49.17609,123.3242,150723, +CN101081003,arongqi,阿荣旗,CN,China,中国,neimenggu,内蒙古,hulunbeier,呼伦贝尔,48.130505,123.464615,150721, +CN101081004,molidawa,莫力达瓦,CN,China,中国,neimenggu,内蒙古,hulunbeier,呼伦贝尔,48.478386,124.5074,150722, +CN101081005,elunchunqi,鄂伦春旗,CN,China,中国,neimenggu,内蒙古,hulunbeier,呼伦贝尔,50.35,123.44,150723, +CN101081006,ewenkeqi,鄂温克旗,CN,China,中国,neimenggu,内蒙古,hulunbeier,呼伦贝尔,49.09,119.45,150724, +CN101081007,chenqi,陈旗,CN,China,中国,neimenggu,内蒙古,hulunbeier,呼伦贝尔,49.19,119.26,150725, +CN101081008,xinzuoqi,新左旗,CN,China,中国,neimenggu,内蒙古,hulunbeier,呼伦贝尔,48.13,118.16,150726, +CN101081009,xinyouqi,新右旗,CN,China,中国,neimenggu,内蒙古,hulunbeier,呼伦贝尔,48.4,116.49,150727, +CN101081010,manzhouli,满洲里,CN,China,中国,neimenggu,内蒙古,hulunbeier,呼伦贝尔,49.59079,117.45556,150781, +CN101081011,yakeshi,牙克石,CN,China,中国,neimenggu,内蒙古,hulunbeier,呼伦贝尔,49.287025,120.729004,150782, +CN101081012,zhalantun,扎兰屯,CN,China,中国,neimenggu,内蒙古,hulunbeier,呼伦贝尔,48.007412,122.7444,150783, +CN101081013,hulunbeier,呼伦贝尔,CN,China,中国,namenggu,内蒙古,hulunbeier,呼伦贝尔,49.215332,119.75817,"150701,150700", +CN101081014,eerguna,额尔古纳,CN,China,中国,neimenggu,内蒙古,hulunbeier,呼伦贝尔,50.2439,120.178635,150784, +CN101081015,genhe,根河,CN,China,中国,neimenggu,内蒙古,hulunbeier,呼伦贝尔,50.780453,121.53272,150785, +CN101081016,tulihe,图里河,CN,China,中国,neimenggu,内蒙古,hulunbeier,呼伦贝尔,50.480488,121.682495,150782, +CN101081017,zhalainuoer,扎赉诺尔,CN,China,中国,namenggu,内蒙古,hulunbeier,呼伦贝尔,49.456566,117.71637,150703, +CN101081101,wulanhaote,乌兰浩特,CN,China,中国,neimenggu,内蒙古,xinganmeng,兴安盟,46.077236,122.06898,152201, +CN101081102,aershan,阿尔山,CN,China,中国,neimenggu,内蒙古,xinganmeng,兴安盟,47.177,119.94366,152202, +CN101081103,keyouzhongqi,科右中旗,CN,China,中国,neimenggu,内蒙古,xinganmeng,兴安盟,45.03,121.28,152222, +CN101081104,huerle,胡尔勒,CN,China,中国,neimenggu,内蒙古,xinganmeng,兴安盟,46.71723,122.08046,152223, +CN101081105,zhanlaite,扎赉特,CN,China,中国,neimenggu,内蒙古,xinganmeng,兴安盟,46.725136,122.90933,152223, +CN101081106,suolun,索伦,CN,China,中国,neimenggu,内蒙古,xinganmeng,兴安盟,46.61903,121.24779,152221, +CN101081107,tuquan,突泉,CN,China,中国,neimenggu,内蒙古,xinganmeng,兴安盟,45.380985,121.56486,152224, +CN101081108,xinganmeng,兴安盟,CN,China,中国,namenggu,内蒙古,xinganmeng,兴安盟,46.076267,122.07032,152200, +CN101081109,keyouqianqi,科右前旗,CN,China,中国,neimenggu,内蒙古,xinganmeng,兴安盟,46.063,122.069,152221, +CN101081110,gaoliban,高力板,CN,China,中国,neimenggu,内蒙古,xinganmeng,兴安盟,44.794903,121.62372,152222, +CN101081201,azuoqi,阿左旗,CN,China,中国,neimenggu,内蒙古,alashanmeng,阿拉善盟,39.641,105.111,152921, +CN101081202,ayouqi,阿右旗,CN,China,中国,neimenggu,内蒙古,alashanmeng,阿拉善盟,39.13,101.41,152922, +CN101081203,ejina,额济纳,CN,China,中国,neimenggu,内蒙古,alashanmeng,阿拉善盟,41.958813,101.06944,152923, +CN101081204,guanzihu,拐子湖,CN,China,中国,neimenggu,内蒙古,alashanmeng,阿拉善盟,41.368034,102.41601,152923, +CN101081205,jilantai,吉兰泰,CN,China,中国,neimenggu,内蒙古,alashanmeng,阿拉善盟,39.75628,105.75884,152921, +CN101081209,bayannuorigong,巴彦诺日公,CN,China,中国,neimenggu,内蒙古,alashanmeng,阿拉善盟,40.166042,104.806656,152921, +CN101081210,yabulai,雅布赖,CN,China,中国,neimenggu,内蒙古,alashanmeng,阿拉善盟,39.429592,102.779366,152922, +CN101081211,wusitai,乌斯太,CN,China,中国,neimenggu,内蒙古,alashanmeng,阿拉善盟,39.435158,106.71949,152921, +CN101081212,luanjingtan,孪井滩,CN,China,中国,neimenggu,内蒙古,alashanmeng,阿拉善盟,37.88537,105.403366,152921, +CN101081213,alashanmeng,阿拉善盟,CN,China,中国,namenggu,内蒙古,alashanmeng,阿拉善盟,38.844814,105.70642,152900, +CN101090101,shijiazhuang,石家庄,CN,China,中国,hebei,河北,shijiazhuang,石家庄,38.045475,114.502464,"130101,130100,130000", +CN101090102,jingxing,井陉,CN,China,中国,hebei,河北,shijiazhuang,石家庄,38.033615,114.144485,130121, +CN101090103,zhengding,正定,CN,China,中国,hebei,河北,shijiazhuang,石家庄,38.147835,114.569885,130123, +CN101090104,luancheng,栾城,CN,China,中国,hebei,河北,shijiazhuang,石家庄,37.88691,114.65428,130111, +CN101090105,xingtang,行唐,CN,China,中国,hebei,河北,shijiazhuang,石家庄,38.437424,114.552734,130125, +CN101090106,lingshou,灵寿,CN,China,中国,hebei,河北,shijiazhuang,石家庄,38.306545,114.37946,130126, +CN101090107,gaoyi,高邑,CN,China,中国,hebei,河北,shijiazhuang,石家庄,37.605713,114.6107,130127, +CN101090108,shenze,深泽,CN,China,中国,hebei,河北,shijiazhuang,石家庄,38.18454,115.20021,130128, +CN101090109,zanhuang,赞皇,CN,China,中国,hebei,河北,shijiazhuang,石家庄,37.6602,114.38776,130129, +CN101090110,wuji,无极,CN,China,中国,hebei,河北,shijiazhuang,石家庄,38.176376,114.977844,130130, +CN101090111,pingshan,平山,CN,China,中国,hebei,河北,shijiazhuang,石家庄,38.25931,114.18414,130131, +CN101090112,yuanshi,元氏,CN,China,中国,hebei,河北,shijiazhuang,石家庄,37.762512,114.52618,130132, +CN101090113,zhaoxian,赵县,CN,China,中国,hebei,河北,shijiazhuang,石家庄,37.75434,114.77536,130133, +CN101090114,xinji,辛集,CN,China,中国,hebei,河北,shijiazhuang,石家庄,37.92904,115.21745,130181, +CN101090115,gaocheng,藁城,CN,China,中国,hebei,河北,shijiazhuang,石家庄,38.033768,114.84965,130109, +CN101090116,jinzhou,晋州,CN,China,中国,hebei,河北,shijiazhuang,石家庄,38.027477,115.04488,130183, +CN101090117,xinle,新乐,CN,China,中国,hebei,河北,shijiazhuang,石家庄,38.34477,114.68578,130184, +CN101090118,luquan,鹿泉,CN,China,中国,hebei,河北,shijiazhuang,石家庄,38.093994,114.32102,130110, +CN101090119,changan,长安,CN,China,中国,hebei,河北,shijiazhuang,石家庄,38.0475,114.54815,130102, +CN101090120,qiaoxi,桥西,CN,China,中国,hebei,河北,shijiazhuang,石家庄,38.02838,114.46293,130104, +CN101090121,xinhua,新华,CN,China,中国,hebei,河北,shijiazhuang,石家庄,38.067142,114.46597,130105, +CN101090122,jingxingkuangqu,井陉矿区,CN,China,中国,hebei,河北,shijiazhuang,石家庄,38.069748,114.05818,130107, +CN101090123,yuhua,裕华,CN,China,中国,hebei,河北,shijiazhuang,石家庄,38.027695,114.53326,130108, +CN101090201,baoding,保定,CN,China,中国,hebei,河北,baoding,保定,38.867657,115.48233,"130601,130600", +CN101090202,mancheng,满城,CN,China,中国,hebei,河北,baoding,保定,38.95138,115.32442,130607, +CN101090203,fuping,阜平,CN,China,中国,hebei,河北,baoding,保定,38.847275,114.1988,130624, +CN101090204,xushui,徐水,CN,China,中国,hebei,河北,baoding,保定,39.020393,115.64941,130609, +CN101090205,tangxian,唐县,CN,China,中国,hebei,河北,baoding,保定,38.748543,114.98124,130627, +CN101090206,gaoyang,高阳,CN,China,中国,hebei,河北,baoding,保定,38.69009,115.77888,130628, +CN101090208,jingxiu,竞秀,CN,China,中国,hebei,河北,baoding,保定,38.88662,115.47066,130602, +CN101090209,laiyuan,涞源,CN,China,中国,hebei,河北,baoding,保定,39.35755,114.692566,130630, +CN101090210,wangdu,望都,CN,China,中国,hebei,河北,baoding,保定,38.707447,115.15401,130631, +CN101090212,yixian,易县,CN,China,中国,hebei,河北,baoding,保定,39.35297,115.501144,130633, +CN101090213,lianchi,莲池,CN,China,中国,hebei,河北,baoding,保定,38.865005,115.50093,130606, +CN101090214,quyang,曲阳,CN,China,中国,hebei,河北,baoding,保定,38.61999,114.704056,130634, +CN101090215,lixian,蠡县,CN,China,中国,hebei,河北,baoding,保定,38.49643,115.58363,130635, +CN101090216,shunping,顺平,CN,China,中国,hebei,河北,baoding,保定,38.845127,115.13275,130636, +CN101090218,zhuozhou,涿州,CN,China,中国,hebei,河北,baoding,保定,39.485764,115.97341,130681, +CN101090219,dingzhou,定州,CN,China,中国,hebei,河北,baoding,保定,38.5176,114.99139,130682, +CN101090220,anguo,安国,CN,China,中国,hebei,河北,baoding,保定,38.421368,115.33141,130683, +CN101090221,gaobeidian,高碑店,CN,China,中国,hebei,河北,baoding,保定,39.32769,115.882706,130684, +CN101090222,laishui,涞水,CN,China,中国,hebei,河北,baoding,保定,39.393147,115.71198,130623, +CN101090223,dingxing,定兴,CN,China,中国,hebei,河北,baoding,保定,39.266193,115.7969,130626, +CN101090224,qingyuan,清苑,CN,China,中国,hebei,河北,baoding,保定,38.77101,115.49222,130608, +CN101090225,boye,博野,CN,China,中国,hebei,河北,baoding,保定,38.45827,115.4618,130637, +CN101090301,zhangjiakou,张家口,CN,China,中国,hebei,河北,zhangjiakou,张家口,40.8119,114.884094,"130701,130700", +CN101090302,xuanhua,宣化,CN,China,中国,hebei,河北,zhangjiakou,张家口,40.609367,115.0632,130705, +CN101090303,zhangbei,张北,CN,China,中国,hebei,河北,zhangjiakou,张家口,41.151714,114.71595,130722, +CN101090304,kangbao,康保,CN,China,中国,hebei,河北,zhangjiakou,张家口,41.850044,114.61581,130723, +CN101090305,guyuan,沽源,CN,China,中国,hebei,河北,zhangjiakou,张家口,41.66742,115.68484,130724, +CN101090306,shangyi,尚义,CN,China,中国,hebei,河北,zhangjiakou,张家口,41.08009,113.977715,130725, +CN101090307,yuxian,蔚县,CN,China,中国,hebei,河北,zhangjiakou,张家口,39.83718,114.582695,130726, +CN101090308,yangyuan,阳原,CN,China,中国,hebei,河北,zhangjiakou,张家口,40.11342,114.16734,130727, +CN101090309,huaian,怀安,CN,China,中国,hebei,河北,zhangjiakou,张家口,40.671272,114.42236,130728, +CN101090310,wanquan,万全,CN,China,中国,hebei,河北,zhangjiakou,张家口,40.765137,114.73613,130708, +CN101090311,huailai,怀来,CN,China,中国,hebei,河北,zhangjiakou,张家口,40.405403,115.52084,130730, +CN101090312,zhuolu,涿鹿,CN,China,中国,hebei,河北,zhangjiakou,张家口,40.3787,115.219246,130731, +CN101090313,chicheng,赤城,CN,China,中国,hebei,河北,zhangjiakou,张家口,40.912083,115.83271,130732, +CN101090314,chongli,崇礼,CN,China,中国,hebei,河北,zhangjiakou,张家口,40.971302,115.281654,130709, +CN101090315,qiaodong,桥东,CN,China,中国,hebei,河北,zhangjiakou,张家口,40.813873,114.88566,130702, +CN101090316,qiaoxi,桥西,CN,China,中国,hebei,河北,zhangjiakou,张家口,40.824387,114.882126,130703, +CN101090317,xiahuayuan,下花园,CN,China,中国,hebei,河北,zhangjiakou,张家口,40.488644,115.281,130706, +CN101090401,shuangqiao,双桥,CN,China,中国,hebei,河北,chengde,承德,40.976204,117.939156,130802, +CN101090402,chengde,承德,CN,China,中国,hebei,河北,chengde,承德,40.976204,117.939156,"130801,130800", +CN101090403,chengdexian,承德县,CN,China,中国,hebei,河北,chengde,承德,40.76864,118.17249,130821, +CN101090404,xinglong,兴隆,CN,China,中国,hebei,河北,chengde,承德,40.418526,117.507095,130822, +CN101090405,pingquan,平泉,CN,China,中国,hebei,河北,chengde,承德,41.00561,118.69024,130881, +CN101090406,luanping,滦平,CN,China,中国,hebei,河北,chengde,承德,40.936646,117.33713,130824, +CN101090407,longhua,隆化,CN,China,中国,hebei,河北,chengde,承德,41.316666,117.73634,130825, +CN101090408,fengning,丰宁,CN,China,中国,hebei,河北,chengde,承德,41.209904,116.65121,130826, +CN101090409,kuancheng,宽城,CN,China,中国,hebei,河北,chengde,承德,40.607983,118.48864,130827, +CN101090410,weichang,围场,CN,China,中国,hebei,河北,chengde,承德,41.949406,117.764084,130828, +CN101090411,shuangluan,双滦,CN,China,中国,hebei,河北,chengde,承德,40.959755,117.797485,130803, +CN101090412,yingshouyingzikuang,鹰手营子矿,CN,China,中国,hebei,河北,chengde,承德,40.546955,117.661156,130804, +CN101090501,tangshan,唐山,CN,China,中国,hebei,河北,tangshan,唐山,39.635113,118.17539,"130201,130200", +CN101090502,fengnan,丰南,CN,China,中国,hebei,河北,tangshan,唐山,39.56303,118.110794,130207, +CN101090503,fengrun,丰润,CN,China,中国,hebei,河北,tangshan,唐山,39.831364,118.15578,130208, +CN101090504,luanxian,滦县,CN,China,中国,hebei,河北,tangshan,唐山,39.74485,118.69955,130223, +CN101090505,luannan,滦南,CN,China,中国,hebei,河北,tangshan,唐山,39.506203,118.68155,130224, +CN101090506,leting,乐亭,CN,China,中国,hebei,河北,tangshan,唐山,39.42813,118.90534,130225, +CN101090507,qianxi,迁西,CN,China,中国,hebei,河北,tangshan,唐山,40.146236,118.30514,130227, +CN101090508,yutian,玉田,CN,China,中国,hebei,河北,tangshan,唐山,39.88732,117.75366,130229, +CN101090509,caofeidian,曹妃甸,CN,China,中国,hebei,河北,tangshan,唐山,39.27828,118.44659,130209, +CN101090510,zunhua,遵化,CN,China,中国,hebei,河北,tangshan,唐山,40.188618,117.96587,130281, +CN101090511,qianan,迁安,CN,China,中国,hebei,河北,tangshan,唐山,40.012108,118.701935,130283, +CN101090513,lunan,路南,CN,China,中国,hebei,河北,tangshan,唐山,39.61516,118.21082,130202, +CN101090514,lubei,路北,CN,China,中国,hebei,河北,tangshan,唐山,39.628536,118.174736,130203, +CN101090515,guye,古冶,CN,China,中国,hebei,河北,tangshan,唐山,39.715736,118.45429,130204, +CN101090516,kaiping,开平,CN,China,中国,hebei,河北,tangshan,唐山,39.67617,118.26443,130205, +CN101090601,langfang,廊坊,CN,China,中国,hebei,河北,langfang,廊坊,39.523926,116.70444,"131001,131000", +CN101090602,guan,固安,CN,China,中国,hebei,河北,langfang,廊坊,39.436466,116.2999,131022, +CN101090603,yongqing,永清,CN,China,中国,hebei,河北,langfang,廊坊,39.319717,116.49809,131023, +CN101090604,xianghe,香河,CN,China,中国,hebei,河北,langfang,廊坊,39.757214,117.007164,131024, +CN101090605,dacheng,大城,CN,China,中国,hebei,河北,langfang,廊坊,38.699215,116.64073,131025, +CN101090606,wenan,文安,CN,China,中国,hebei,河北,langfang,廊坊,38.866802,116.460106,131026, +CN101090607,dachang,大厂,CN,China,中国,hebei,河北,langfang,廊坊,39.889267,116.9865,131028, +CN101090608,bazhou,霸州,CN,China,中国,hebei,河北,langfang,廊坊,39.117332,116.39202,131081, +CN101090609,sanhe,三河,CN,China,中国,hebei,河北,langfang,廊坊,39.982777,117.07702,131082, +CN101090610,anci,安次,CN,China,中国,hebei,河北,langfang,廊坊,39.502567,116.69454,131002, +CN101090611,guangyang,广阳,CN,China,中国,hebei,河北,langfang,廊坊,39.52193,116.71371,131003, +CN101090701,cangzhou,沧州,CN,China,中国,hebei,河北,cangzhou,沧州,38.31058,116.85746,"130901,130900", +CN101090702,qingxian,青县,CN,China,中国,hebei,河北,cangzhou,沧州,38.569645,116.83839,130922, +CN101090703,dongguang,东光,CN,China,中国,hebei,河北,cangzhou,沧州,37.88655,116.54206,130923, +CN101090704,haixing,海兴,CN,China,中国,hebei,河北,cangzhou,沧州,38.141582,117.496605,130924, +CN101090705,yanshan,盐山,CN,China,中国,hebei,河北,cangzhou,沧州,38.05614,117.22981,130925, +CN101090706,suning,肃宁,CN,China,中国,hebei,河北,cangzhou,沧州,38.4271,115.83585,130926, +CN101090707,nanpi,南皮,CN,China,中国,hebei,河北,cangzhou,沧州,38.04244,116.70917,130927, +CN101090708,wuqiao,吴桥,CN,China,中国,hebei,河北,cangzhou,沧州,37.62818,116.39151,130928, +CN101090709,xianxian,献县,CN,China,中国,hebei,河北,cangzhou,沧州,38.18966,116.12384,130929, +CN101090710,mengcun,孟村,CN,China,中国,hebei,河北,cangzhou,沧州,38.057953,117.1051,130930, +CN101090711,botou,泊头,CN,China,中国,hebei,河北,cangzhou,沧州,38.07348,116.57016,130981, +CN101090712,renqiu,任丘,CN,China,中国,hebei,河北,cangzhou,沧州,38.706512,116.106766,130982, +CN101090713,huanghua,黄骅,CN,China,中国,hebei,河北,cangzhou,沧州,38.36924,117.3438,130983, +CN101090714,hejian,河间,CN,China,中国,hebei,河北,cangzhou,沧州,38.44149,116.089455,130984, +CN101090715,xinhua,新华,CN,China,中国,hebei,河北,cangzhou,沧州,38.308273,116.87305,130902, +CN101090716,cangxian,沧县,CN,China,中国,hebei,河北,cangzhou,沧州,38.219856,117.00748,130921, +CN101090717,yunhe,运河,CN,China,中国,hebei,河北,cangzhou,沧州,38.307404,116.840065,130903, +CN101090801,hengshui,衡水,CN,China,中国,hebei,河北,hengshui,衡水,37.735096,115.66599,"131101,131100", +CN101090802,zaoqiang,枣强,CN,China,中国,hebei,河北,hengshui,衡水,37.511513,115.7265,131121, +CN101090803,wuyi,武邑,CN,China,中国,hebei,河北,hengshui,衡水,37.803776,115.89242,131122, +CN101090804,wuqiang,武强,CN,China,中国,hebei,河北,hengshui,衡水,38.03698,115.97024,131123, +CN101090805,raoyang,饶阳,CN,China,中国,hebei,河北,hengshui,衡水,38.23267,115.72658,131124, +CN101090806,anping,安平,CN,China,中国,hebei,河北,hengshui,衡水,38.233513,115.51963,131125, +CN101090807,gucheng,故城,CN,China,中国,hebei,河北,hengshui,衡水,37.350983,115.96674,131126, +CN101090808,jingxian,景县,CN,China,中国,hebei,河北,hengshui,衡水,37.686623,116.258446,131127, +CN101090809,fucheng,阜城,CN,China,中国,hebei,河北,hengshui,衡水,37.869946,116.16473,131128, +CN101090810,jizhou,冀州,CN,China,中国,hebei,河北,hengshui,衡水,37.54279,115.57917,131103, +CN101090811,shenzhou,深州,CN,China,中国,hebei,河北,hengshui,衡水,38.00347,115.554596,131182, +CN101090812,taocheng,桃城,CN,China,中国,hebei,河北,hengshui,衡水,37.73224,115.69495,131102, +CN101090901,xingtai,邢台,CN,China,中国,hebei,河北,xingtai,邢台,37.05073,114.561134,"130501,130500,130521", +CN101090902,lincheng,临城,CN,China,中国,hebei,河北,xingtai,邢台,37.444008,114.506874,130522, +CN101090903,qiaodong,桥东,CN,China,中国,hebei,河北,xingtai,邢台,37.064125,114.50713,130502, +CN101090904,neiqiu,内丘,CN,China,中国,hebei,河北,xingtai,邢台,37.287663,114.51152,130523, +CN101090905,baixiang,柏乡,CN,China,中国,hebei,河北,xingtai,邢台,37.483597,114.69338,130524, +CN101090906,longyao,隆尧,CN,China,中国,hebei,河北,xingtai,邢台,37.350925,114.776344,130525, +CN101090907,nanhe,南和,CN,China,中国,hebei,河北,xingtai,邢台,37.00381,114.691376,130527, +CN101090908,ningjin,宁晋,CN,China,中国,hebei,河北,xingtai,邢台,37.618958,114.92103,130528, +CN101090909,julu,巨鹿,CN,China,中国,hebei,河北,xingtai,邢台,37.21768,115.03878,130529, +CN101090910,xinhe,新河,CN,China,中国,hebei,河北,xingtai,邢台,37.526215,115.247536,130530, +CN101090911,guangzong,广宗,CN,China,中国,hebei,河北,xingtai,邢台,37.075546,115.1428,130531, +CN101090912,pingxiang,平乡,CN,China,中国,hebei,河北,xingtai,邢台,37.069405,115.02922,130532, +CN101090913,weixian,威县,CN,China,中国,hebei,河北,xingtai,邢台,36.983273,115.27275,130533, +CN101090914,qinghe,清河,CN,China,中国,hebei,河北,xingtai,邢台,37.05999,115.669,130534, +CN101090915,linxi,临西,CN,China,中国,hebei,河北,xingtai,邢台,36.8642,115.49869,130535, +CN101090916,nangong,南宫,CN,China,中国,hebei,河北,xingtai,邢台,37.35967,115.3981,130581, +CN101090917,shahe,沙河,CN,China,中国,hebei,河北,xingtai,邢台,36.861904,114.504906,130582, +CN101090918,renxian,任县,CN,China,中国,hebei,河北,xingtai,邢台,37.12995,114.68447,130526, +CN101090919,qiaoxi,桥西,CN,China,中国,hebei,河北,xingtai,邢台,37.06801,114.47369,130503, +CN101091001,handan,邯郸,CN,China,中国,hebei,河北,handan,邯郸,36.612274,114.490685,"130401,130400", +CN101091002,fengfeng,峰峰,CN,China,中国,hebei,河北,handan,邯郸,36.420486,114.20994,130406, +CN101091003,linzhang,临漳,CN,China,中国,hebei,河北,handan,邯郸,36.337605,114.6107,130423, +CN101091004,chengan,成安,CN,China,中国,hebei,河北,handan,邯郸,36.443832,114.68036,130424, +CN101091005,daming,大名,CN,China,中国,hebei,河北,handan,邯郸,36.283318,115.15259,130425, +CN101091006,shexian,涉县,CN,China,中国,hebei,河北,handan,邯郸,36.563145,113.673294,130426, +CN101091007,cixian,磁县,CN,China,中国,hebei,河北,handan,邯郸,36.367672,114.38208,130427, +CN101091008,feixiang,肥乡,CN,China,中国,hebei,河北,handan,邯郸,36.55578,114.80515,130407, +CN101091009,yongnian,永年,CN,China,中国,hebei,河北,handan,邯郸,36.776413,114.49616,130408, +CN101091010,qiuxian,邱县,CN,China,中国,hebei,河北,handan,邯郸,36.81325,115.16859,130430, +CN101091011,jize,鸡泽,CN,China,中国,hebei,河北,handan,邯郸,36.91491,114.87852,130431, +CN101091012,guangping,广平,CN,China,中国,hebei,河北,handan,邯郸,36.483604,114.95086,130432, +CN101091013,guantao,馆陶,CN,China,中国,hebei,河北,handan,邯郸,36.53946,115.289055,130433, +CN101091014,weixian,魏县,CN,China,中国,hebei,河北,handan,邯郸,36.354248,114.93411,130434, +CN101091015,quzhou,曲周,CN,China,中国,hebei,河北,handan,邯郸,36.7734,114.95759,130435, +CN101091016,wuan,武安,CN,China,中国,hebei,河北,handan,邯郸,36.696114,114.19458,130481, +CN101091017,hanshan,邯山,CN,China,中国,hebei,河北,handan,邯郸,36.603195,114.484985,130402, +CN101091018,congtai,丛台,CN,China,中国,hebei,河北,handan,邯郸,36.61108,114.494705,130403, +CN101091019,fuxing,复兴,CN,China,中国,hebei,河北,handan,邯郸,36.615482,114.458244,130404, +CN101091101,qinhuangdao,秦皇岛,CN,China,中国,hebei,河北,qinhuangdao,秦皇岛,39.94253,119.58658,"130301,130300", +CN101091102,qinglong,青龙,CN,China,中国,hebei,河北,qinhuangdao,秦皇岛,40.40602,118.95455,130321, +CN101091103,changli,昌黎,CN,China,中国,hebei,河北,qinhuangdao,秦皇岛,39.70973,119.16454,130322, +CN101091104,funing,抚宁,CN,China,中国,hebei,河北,qinhuangdao,秦皇岛,39.887054,119.240654,130306, +CN101091105,lulong,卢龙,CN,China,中国,hebei,河北,qinhuangdao,秦皇岛,39.89164,118.881805,130324, +CN101091106,beidaihe,北戴河,CN,China,中国,hebei,河北,qinhuangdao,秦皇岛,39.825123,119.48628,130304, +CN101091107,haigang,海港,CN,China,中国,hebei,河北,qinhuangdao,秦皇岛,39.94346,119.59622,130302, +CN101091108,shanhaiguan,山海关,CN,China,中国,hebei,河北,qinhuangdao,秦皇岛,39.998024,119.75359,130303, +CN101091201,xionganxinqu,雄安新区,CN,China,中国,hebei,河北,xionganxinqu,雄安新区,39.04315,115.86724,130638, +CN101091202,rongcheng,容城,CN,China,中国,hebei,河北,rongcheng,雄安新区,39.05282,115.86625,130629, +CN101091203,anxin,安新,CN,China,中国,hebei,河北,anxin,雄安新区,38.929913,115.93198,130632, +CN101091204,xiongxian,雄县,CN,China,中国,hebei,河北,xiongxian,雄安新区,38.990818,116.107475,130638, +CN101100101,taiyuan,太原,CN,China,中国,shanxi,山西,taiyuan,太原,37.857014,112.54925,"140101,140100,140000", +CN101100102,qingxu,清徐,CN,China,中国,shanxi,山西,taiyuan,太原,37.60729,112.35796,140121, +CN101100103,yangqu,阳曲,CN,China,中国,shanxi,山西,taiyuan,太原,38.058796,112.67382,140122, +CN101100104,loufan,娄烦,CN,China,中国,shanxi,山西,taiyuan,太原,38.066036,111.7938,140123, +CN101100105,gujiao,古交,CN,China,中国,shanxi,山西,taiyuan,太原,37.908535,112.174355,140181, +CN101100106,jiancaopingqu,尖草坪区,CN,China,中国,shanxi,山西,taiyuan,太原,37.93989,112.48712,140108, +CN101100107,xiaodianqu,小店区,CN,China,中国,shanxi,山西,taiyuan,太原,37.817974,112.56427,140105, +CN101100108,yingze,迎泽,CN,China,中国,shanxi,山西,taiyuan,太原,37.855804,112.55885,140106, +CN101100109,xinghualing,杏花岭,CN,China,中国,shanxi,山西,taiyuan,太原,37.87929,112.560745,140107, +CN101100110,wanbailin,万柏林,CN,China,中国,shanxi,山西,taiyuan,太原,37.86265,112.522255,140109, +CN101100111,jinyuan,晋源,CN,China,中国,shanxi,山西,taiyuan,太原,37.71562,112.47785,140110, +CN101100201,datong,大同,CN,China,中国,shanxi,山西,datong,大同,40.09051,113.30144,"140201,140200,140202", +CN101100202,yanggao,阳高,CN,China,中国,shanxi,山西,datong,大同,40.364925,113.74987,140221, +CN101100203,datongxian,大同县,CN,China,中国,shanxi,山西,datong,大同,40.039345,113.611305,140227, +CN101100204,tianzhen,天镇,CN,China,中国,shanxi,山西,datong,大同,40.421337,114.09112,140222, +CN101100205,guangling,广灵,CN,China,中国,shanxi,山西,datong,大同,39.76305,114.27925,140223, +CN101100206,lingqiu,灵丘,CN,China,中国,shanxi,山西,datong,大同,39.438866,114.23576,140224, +CN101100207,hunyuan,浑源,CN,China,中国,shanxi,山西,datong,大同,39.6991,113.69809,140225, +CN101100208,zuoyun,左云,CN,China,中国,shanxi,山西,datong,大同,40.012875,112.70641,140226, +CN101100209,kuangqu,矿区,CN,China,中国,shanxi,山西,datong,大同,40.03626,113.168655,140203, +CN101100210,nanjiao,南郊,CN,China,中国,shanxi,山西,datong,大同,40.01802,113.16892,140211, +CN101100211,xinrong,新荣,CN,China,中国,shanxi,山西,datong,大同,40.25827,113.141045,140212, +CN101100301,yangquan,阳泉,CN,China,中国,shanxi,山西,yangquan,阳泉,37.861187,113.58328,"140301,140300,140302", +CN101100302,yuxian,盂县,CN,China,中国,shanxi,山西,yangquan,阳泉,38.086132,113.41223,140322, +CN101100303,pingding,平定,CN,China,中国,shanxi,山西,yangquan,阳泉,37.80029,113.63105,140321, +CN101100304,kuangqu,矿区,CN,China,中国,shanxi,山西,yangquan,阳泉,37.870087,113.55907,140303, +CN101100305,jiaoqu,郊区,CN,China,中国,shanxi,山西,yangquan,阳泉,37.94096,113.58664,140311, +CN101100401,jinzhong,晋中,CN,China,中国,shanxi,山西,jinzhong,晋中,37.696495,112.736465,"140701,140700", +CN101100402,yuci,榆次,CN,China,中国,shanxi,山西,jinzhong,晋中,37.6976,112.74006,140702, +CN101100403,yushe,榆社,CN,China,中国,shanxi,山西,jinzhong,晋中,37.06902,112.97352,140721, +CN101100404,zuoquan,左权,CN,China,中国,shanxi,山西,jinzhong,晋中,37.079674,113.37783,140722, +CN101100405,heshun,和顺,CN,China,中国,shanxi,山西,jinzhong,晋中,37.327026,113.57292,140723, +CN101100406,xiyang,昔阳,CN,China,中国,shanxi,山西,jinzhong,晋中,37.60437,113.70617,140724, +CN101100407,shouyang,寿阳,CN,China,中国,shanxi,山西,jinzhong,晋中,37.891136,113.17771,140725, +CN101100408,taigu,太谷,CN,China,中国,shanxi,山西,jinzhong,晋中,37.424595,112.5541,140726, +CN101100409,qixian,祁县,CN,China,中国,shanxi,山西,jinzhong,晋中,37.358738,112.33053,140727, +CN101100410,pingyao,平遥,CN,China,中国,shanxi,山西,jinzhong,晋中,37.195473,112.17406,140728, +CN101100411,lingshi,灵石,CN,China,中国,shanxi,山西,jinzhong,晋中,36.84747,111.77276,140729, +CN101100412,jiexiu,介休,CN,China,中国,shanxi,山西,jinzhong,晋中,37.027615,111.91386,140781, +CN101100501,changzhi,长治,CN,China,中国,shanxi,山西,changzhi,长治,36.191113,113.113556,"140401,140400,140402,140421", +CN101100502,licheng,黎城,CN,China,中国,shanxi,山西,changzhi,长治,36.50297,113.38737,140426, +CN101100503,tunliu,屯留,CN,China,中国,shanxi,山西,changzhi,长治,36.31407,112.89274,140424, +CN101100504,lucheng,潞城,CN,China,中国,shanxi,山西,changzhi,长治,36.332233,113.22324,140481, +CN101100505,xiangyuan,襄垣,CN,China,中国,shanxi,山西,changzhi,长治,36.532852,113.050095,140423, +CN101100506,pingshun,平顺,CN,China,中国,shanxi,山西,changzhi,长治,36.200203,113.43879,140425, +CN101100507,wuxiang,武乡,CN,China,中国,shanxi,山西,changzhi,长治,36.834316,112.8653,140429, +CN101100508,qinxian,沁县,CN,China,中国,shanxi,山西,changzhi,长治,36.757122,112.70138,140430, +CN101100509,zhangzi,长子,CN,China,中国,shanxi,山西,changzhi,长治,36.119484,112.88466,140428, +CN101100510,qinyuan,沁源,CN,China,中国,shanxi,山西,changzhi,长治,36.50078,112.34088,140431, +CN101100511,huguan,壶关,CN,China,中国,shanxi,山西,changzhi,长治,36.11094,113.20614,140427, +CN101100512,jiaoqu,郊区,CN,China,中国,shanxi,山西,changzhi,长治,36.218388,113.10121,140411, +CN101100601,jincheng,晋城,CN,China,中国,shanxi,山西,jincheng,晋城,35.497555,112.85127,"140501,140500,140502", +CN101100602,qinshui,沁水,CN,China,中国,shanxi,山西,jincheng,晋城,35.689472,112.18721,140521, +CN101100603,yangcheng,阳城,CN,China,中国,shanxi,山西,jincheng,晋城,35.482178,112.42201,140522, +CN101100604,lingchuan,陵川,CN,China,中国,shanxi,山西,jincheng,晋城,35.775616,113.27888,140524, +CN101100605,gaoping,高平,CN,China,中国,shanxi,山西,jincheng,晋城,35.791355,112.930695,140581, +CN101100606,zezhou,泽州,CN,China,中国,shanxi,山西,jincheng,晋城,35.61722,112.89914,140525, +CN101100701,linfen,临汾,CN,China,中国,shanxi,山西,linfen,临汾,36.08415,111.517975,"141001,141000", +CN101100702,quwo,曲沃,CN,China,中国,shanxi,山西,linfen,临汾,35.641388,111.47553,141021, +CN101100703,yonghe,永和,CN,China,中国,shanxi,山西,linfen,临汾,36.760612,110.63128,141032, +CN101100704,xixian,隰县,CN,China,中国,shanxi,山西,linfen,临汾,36.692677,110.93581,141031, +CN101100705,daning,大宁,CN,China,中国,shanxi,山西,linfen,临汾,36.46383,110.75128,141030, +CN101100706,jixian,吉县,CN,China,中国,shanxi,山西,linfen,临汾,36.099354,110.68285,141028, +CN101100707,xiangfen,襄汾,CN,China,中国,shanxi,山西,linfen,临汾,35.87614,111.44293,141023, +CN101100708,puxian,蒲县,CN,China,中国,shanxi,山西,linfen,临汾,36.411682,111.09733,141033, +CN101100709,fenxi,汾西,CN,China,中国,shanxi,山西,linfen,临汾,36.65337,111.56302,141034, +CN101100710,hongtong,洪洞,CN,China,中国,shanxi,山西,linfen,临汾,36.25574,111.67369,141024, +CN101100711,huozhou,霍州,CN,China,中国,shanxi,山西,linfen,临汾,36.57202,111.72311,141082, +CN101100712,xiangning,乡宁,CN,China,中国,shanxi,山西,linfen,临汾,35.975403,110.85737,141029, +CN101100713,yicheng,翼城,CN,China,中国,shanxi,山西,linfen,临汾,35.73862,111.71351,141022, +CN101100714,houma,侯马,CN,China,中国,shanxi,山西,linfen,临汾,35.6203,111.37127,141081, +CN101100715,fushan,浮山,CN,China,中国,shanxi,山西,linfen,临汾,35.97136,111.85004,141027, +CN101100716,anze,安泽,CN,China,中国,shanxi,山西,linfen,临汾,36.14603,112.25137,141026, +CN101100717,guxian,古县,CN,China,中国,shanxi,山西,linfen,临汾,36.26855,111.920204,141025, +CN101100718,yaodou,尧都,CN,China,中国,shanxi,山西,linfen,临汾,36.080364,111.52294,141002, +CN101100801,yuncheng,运城,CN,China,中国,shanxi,山西,yuncheng,运城,35.022778,111.00396,"140801,140800", +CN101100802,linyi,临猗,CN,China,中国,shanxi,山西,yuncheng,运城,35.141884,110.77493,140821, +CN101100803,jishan,稷山,CN,China,中国,shanxi,山西,yuncheng,运城,35.60041,110.979,140824, +CN101100804,wanrong,万荣,CN,China,中国,shanxi,山西,yuncheng,运城,35.41704,110.84356,140822, +CN101100805,hejin,河津,CN,China,中国,shanxi,山西,yuncheng,运城,35.59715,110.710266,140882, +CN101100806,xinjiang,新绛,CN,China,中国,shanxi,山西,yuncheng,运城,35.613697,111.225204,140825, +CN101100807,jiangxian,绛县,CN,China,中国,shanxi,山西,yuncheng,运城,35.49045,111.57618,140826, +CN101100808,wenxi,闻喜,CN,China,中国,shanxi,山西,yuncheng,运城,35.35384,111.22031,140823, +CN101100809,yuanqu,垣曲,CN,China,中国,shanxi,山西,yuncheng,运城,35.298294,111.67099,140827, +CN101100810,yongji,永济,CN,China,中国,shanxi,山西,yuncheng,运城,34.865124,110.44798,140881, +CN101100811,ruicheng,芮城,CN,China,中国,shanxi,山西,yuncheng,运城,34.69477,110.69114,140830, +CN101100812,xiaxian,夏县,CN,China,中国,shanxi,山西,yuncheng,运城,35.14044,111.223175,140828, +CN101100813,pinglu,平陆,CN,China,中国,shanxi,山西,yuncheng,运城,34.837257,111.21238,140829, +CN101100814,yanhu,盐湖,CN,China,中国,shanxi,山西,yuncheng,运城,35.025642,111.000626,140802, +CN101100901,shuozhou,朔州,CN,China,中国,shanxi,山西,shuozhou,朔州,39.33126,112.43339,"140601,140600", +CN101100902,pinglu,平鲁,CN,China,中国,shanxi,山西,shuozhou,朔州,39.515602,112.29523,140603, +CN101100903,shanyin,山阴,CN,China,中国,shanxi,山西,shuozhou,朔州,39.52677,112.8164,140621, +CN101100904,youyu,右玉,CN,China,中国,shanxi,山西,shuozhou,朔州,39.98881,112.46559,140623, +CN101100905,yingxian,应县,CN,China,中国,shanxi,山西,shuozhou,朔州,39.55919,113.18751,140622, +CN101100906,huairen,怀仁,CN,China,中国,shanxi,山西,shuozhou,朔州,39.82079,113.10051,140624, +CN101100907,shuocheng,朔城,CN,China,中国,shanxi,山西,shuozhou,朔州,39.324524,112.42867,140602, +CN101101001,xinzhou,忻州,CN,China,中国,shanxi,山西,xinzhou,忻州,38.41769,112.733536,"140901,140900", +CN101101002,dingxiang,定襄,CN,China,中国,shanxi,山西,xinzhou,忻州,38.484947,112.963234,140921, +CN101101003,wutaixian,五台县,CN,China,中国,shanxi,山西,xinzhou,忻州,38.72571,113.25901,140922, +CN101101004,hequ,河曲,CN,China,中国,shanxi,山西,xinzhou,忻州,39.381893,111.14661,140930, +CN101101005,pianguan,偏关,CN,China,中国,shanxi,山西,xinzhou,忻州,39.442154,111.50048,140932, +CN101101006,shenchi,神池,CN,China,中国,shanxi,山西,xinzhou,忻州,39.088467,112.20044,140927, +CN101101007,ningwu,宁武,CN,China,中国,shanxi,山西,xinzhou,忻州,39.001717,112.30794,140925, +CN101101008,daixian,代县,CN,China,中国,shanxi,山西,xinzhou,忻州,39.06514,112.96252,140923, +CN101101009,fanshi,繁峙,CN,China,中国,shanxi,山西,xinzhou,忻州,39.188103,113.26771,140924, +CN101101010,wutaishan,五台山,CN,China,中国,shanxi,山西,xinzhou,忻州,38.96864,113.59073,140922, +CN101101011,bode,保德,CN,China,中国,shanxi,山西,xinzhou,忻州,39.022575,111.085686,140931, +CN101101012,jingle,静乐,CN,China,中国,shanxi,山西,xinzhou,忻州,38.355946,111.94023,140926, +CN101101013,kelan,岢岚,CN,China,中国,shanxi,山西,xinzhou,忻州,38.705624,111.56981,140929, +CN101101014,wuzhai,五寨,CN,China,中国,shanxi,山西,xinzhou,忻州,38.91276,111.84102,140928, +CN101101015,yuanping,原平,CN,China,中国,shanxi,山西,xinzhou,忻州,38.729187,112.713135,140981, +CN101101016,xinfu,忻府,CN,China,中国,shanxi,山西,xinzhou,忻州,38.417744,112.734116,140902, +CN101101100,lvliang,吕梁,CN,China,中国,shanxi,山西,lvliang,吕梁,37.524364,111.13434,"141101,141100", +CN101101101,lishi,离石,CN,China,中国,shanxi,山西,lvliang,吕梁,37.524036,111.13446,141102, +CN101101102,linxian,临县,CN,China,中国,shanxi,山西,lvliang,吕梁,37.960808,110.995964,141124, +CN101101103,xingxian,兴县,CN,China,中国,shanxi,山西,lvliang,吕梁,38.464134,111.12482,141123, +CN101101104,lanxian,岚县,CN,China,中国,shanxi,山西,lvliang,吕梁,38.278652,111.671555,141127, +CN101101105,liulin,柳林,CN,China,中国,shanxi,山西,lvliang,吕梁,37.431664,110.89613,141125, +CN101101106,shilou,石楼,CN,China,中国,shanxi,山西,lvliang,吕梁,36.999428,110.83712,141126, +CN101101107,fangshan,方山,CN,China,中国,shanxi,山西,lvliang,吕梁,37.89263,111.238884,141128, +CN101101108,jiaokou,交口,CN,China,中国,shanxi,山西,lvliang,吕梁,36.983067,111.18319,141130, +CN101101109,zhongyang,中阳,CN,China,中国,shanxi,山西,lvliang,吕梁,37.342052,111.19332,141129, +CN101101110,xiaoyi,孝义,CN,China,中国,shanxi,山西,lvliang,吕梁,37.144474,111.78157,141181, +CN101101111,fenyang,汾阳,CN,China,中国,shanxi,山西,lvliang,吕梁,37.267742,111.78527,141182, +CN101101112,wenshui,文水,CN,China,中国,shanxi,山西,lvliang,吕梁,37.436314,112.03259,141121, +CN101101113,jiaocheng,交城,CN,China,中国,shanxi,山西,lvliang,吕梁,37.555157,112.15916,141122, +CN101110101,xian,西安,CN,China,中国,shaanxi,陕西,xian,西安,34.26316,108.94802,"610101,610100,610000", +CN101110102,changan,长安,CN,China,中国,shaanxi,陕西,xian,西安,34.157097,108.94158,610116, +CN101110103,lintong,临潼,CN,China,中国,shaanxi,陕西,xian,西安,34.372066,109.21399,610115, +CN101110104,lantian,蓝田,CN,China,中国,shaanxi,陕西,xian,西安,34.15619,109.317635,610122, +CN101110105,zhouzhi,周至,CN,China,中国,shaanxi,陕西,xian,西安,34.161533,108.21647,610124, +CN101110106,huyi,鄠邑,CN,China,中国,shaanxi,陕西,xian,西安,34.10867,108.60738,610118, +CN101110107,gaoling,高陵,CN,China,中国,shaanxi,陕西,xian,西安,34.535065,109.0889,610117, +CN101110108,xincheng,新城,CN,China,中国,shaanxi,陕西,xian,西安,34.26927,108.9599,610102, +CN101110109,beilin,碑林,CN,China,中国,shaanxi,陕西,xian,西安,34.25106,108.94699,610103, +CN101110110,lianhu,莲湖,CN,China,中国,shaanxi,陕西,xian,西安,34.2656,108.9332,610104, +CN101110111,baqiao,灞桥,CN,China,中国,shaanxi,陕西,xian,西安,34.267452,109.06726,610111, +CN101110112,weiyang,未央,CN,China,中国,shaanxi,陕西,xian,西安,34.30823,108.94602,610112, +CN101110113,yanta,雁塔,CN,China,中国,shaanxi,陕西,xian,西安,34.21339,108.92659,610113, +CN101110114,yanliang,阎良,CN,China,中国,shaanxi,陕西,xian,西安,34.66214,109.22802,610114, +CN101110200,xianyang,咸阳,CN,China,中国,shaanxi,陕西,xianyang,咸阳,34.33344,108.70512,"610401,610400", +CN101110201,sanyuan,三原,CN,China,中国,shaanxi,陕西,xianyang,咸阳,34.613995,108.94348,610422, +CN101110202,liquan,礼泉,CN,China,中国,shaanxi,陕西,xianyang,咸阳,34.482582,108.428314,610425, +CN101110203,yongshou,永寿,CN,China,中国,shaanxi,陕西,xianyang,咸阳,34.69262,108.14313,610426, +CN101110204,chunhua,淳化,CN,China,中国,shaanxi,陕西,xianyang,咸阳,34.79797,108.58118,610430, +CN101110205,jingyang,泾阳,CN,China,中国,shaanxi,陕西,xianyang,咸阳,34.528492,108.83784,610423, +CN101110206,wugong,武功,CN,China,中国,shaanxi,陕西,xianyang,咸阳,34.25973,108.21286,610431, +CN101110207,qianxian,乾县,CN,China,中国,shaanxi,陕西,xianyang,咸阳,34.52726,108.247406,610424, +CN101110208,binxian,彬县,CN,China,中国,shaanxi,陕西,xianyang,咸阳,35.034233,108.08367,610427, +CN101110209,changwu,长武,CN,China,中国,shaanxi,陕西,xianyang,咸阳,35.206123,107.79584,610428, +CN101110210,xunyi,旬邑,CN,China,中国,shaanxi,陕西,xianyang,咸阳,35.112232,108.337234,610429, +CN101110211,xingping,兴平,CN,China,中国,shaanxi,陕西,xianyang,咸阳,34.297134,108.488495,610481, +CN101110212,qindou,秦都,CN,China,中国,shaanxi,陕西,xianyang,咸阳,34.3298,108.69864,610402, +CN101110213,weicheng,渭城,CN,China,中国,shaanxi,陕西,xianyang,咸阳,34.336845,108.73096,610404, +CN101110300,yanan,延安,CN,China,中国,shaanxi,陕西,yanan,延安,36.59654,109.49081,"610601,610600", +CN101110301,yanchang,延长,CN,China,中国,shaanxi,陕西,yanan,延安,36.578304,110.01296,610621, +CN101110302,yanchuan,延川,CN,China,中国,shaanxi,陕西,yanan,延安,36.882065,110.190315,610622, +CN101110303,zichang,子长,CN,China,中国,shaanxi,陕西,yanan,延安,37.14207,109.675964,610623, +CN101110304,yichuan,宜川,CN,China,中国,shaanxi,陕西,yanan,延安,36.050392,110.17554,610630, +CN101110305,fuxian,富县,CN,China,中国,shaanxi,陕西,yanan,延安,35.996494,109.38413,610628, +CN101110306,zhidan,志丹,CN,China,中国,shaanxi,陕西,yanan,延安,36.823032,108.7689,610625, +CN101110307,ansai,安塞,CN,China,中国,shaanxi,陕西,yanan,延安,36.86441,109.32534,610603, +CN101110308,ganquan,甘泉,CN,China,中国,shaanxi,陕西,yanan,延安,36.27773,109.34961,610627, +CN101110309,luochuan,洛川,CN,China,中国,shaanxi,陕西,yanan,延安,35.762135,109.435715,610629, +CN101110310,huangling,黄陵,CN,China,中国,shaanxi,陕西,yanan,延安,35.580166,109.26247,610632, +CN101110311,huanglong,黄龙,CN,China,中国,shaanxi,陕西,yanan,延安,35.583275,109.83502,610631, +CN101110312,wuqi,吴起,CN,China,中国,shaanxi,陕西,yanan,延安,36.92485,108.17698,610626, +CN101110313,baota,宝塔,CN,China,中国,shaanxi,陕西,yanan,延安,36.59629,109.49069,610602, +CN101110401,yulin,榆林,CN,China,中国,shaanxi,陕西,yulin,榆林,38.29016,109.741196,"610801,610800", +CN101110402,fugu,府谷,CN,China,中国,shaanxi,陕西,yulin,榆林,39.029243,111.06965,610822, +CN101110403,shenmu,神木,CN,China,中国,shaanxi,陕西,yulin,榆林,38.83564,110.497,610881, +CN101110404,jiaxian,佳县,CN,China,中国,shaanxi,陕西,yulin,榆林,38.0216,110.49337,610828, +CN101110405,dingbian,定边,CN,China,中国,shaanxi,陕西,yulin,榆林,37.59523,107.60128,610825, +CN101110406,jingbian,靖边,CN,China,中国,shaanxi,陕西,yulin,榆林,37.596085,108.80567,610824, +CN101110407,hengshan,横山,CN,China,中国,shaanxi,陕西,yulin,榆林,37.964046,109.292595,610803, +CN101110408,mizhi,米脂,CN,China,中国,shaanxi,陕西,yulin,榆林,37.759083,110.17868,610827, +CN101110409,zizhou,子洲,CN,China,中国,shaanxi,陕西,yulin,榆林,37.611572,110.03457,610831, +CN101110410,suide,绥德,CN,China,中国,shaanxi,陕西,yulin,榆林,37.5077,110.26537,610826, +CN101110411,wubu,吴堡,CN,China,中国,shaanxi,陕西,yulin,榆林,37.451923,110.73931,610829, +CN101110412,qingjian,清涧,CN,China,中国,shaanxi,陕西,yulin,榆林,37.087704,110.12146,610830, +CN101110413,yuyang,榆阳,CN,China,中国,shaanxi,陕西,yulin,榆林,38.299267,109.74791,610802, +CN101110501,weinan,渭南,CN,China,中国,shaanxi,陕西,weinan,渭南,34.499382,109.502884,"610501,610500", +CN101110503,tongguan,潼关,CN,China,中国,shaanxi,陕西,weinan,渭南,34.544514,110.24726,610522, +CN101110504,dali,大荔,CN,China,中国,shaanxi,陕西,weinan,渭南,34.79501,109.94312,610523, +CN101110505,baishui,白水,CN,China,中国,shaanxi,陕西,weinan,渭南,35.17729,109.59431,610527, +CN101110506,fuping,富平,CN,China,中国,shaanxi,陕西,weinan,渭南,34.746677,109.18717,610528, +CN101110507,pucheng,蒲城,CN,China,中国,shaanxi,陕西,weinan,渭南,34.956036,109.58965,610526, +CN101110508,chengcheng,澄城,CN,China,中国,shaanxi,陕西,weinan,渭南,35.184,109.93761,610525, +CN101110509,heyang,合阳,CN,China,中国,shaanxi,陕西,weinan,渭南,35.2371,110.14798,610524, +CN101110510,hancheng,韩城,CN,China,中国,shaanxi,陕西,weinan,渭南,35.47524,110.45239,610581, +CN101110511,huayin,华阴,CN,China,中国,shaanxi,陕西,weinan,渭南,34.565357,110.08952,610582, +CN101110512,linwei,临渭,CN,China,中国,shaanxi,陕西,weinan,渭南,34.50127,109.503296,610502, +CN101110513,huazhou,华州,CN,China,中国,shaanxi,陕西,weinan,渭南,34.51196,109.76141,610503, +CN101110601,shangluo,商洛,CN,China,中国,shaanxi,陕西,shangluo,商洛,33.86832,109.93977,"611001,611000", +CN101110602,luonan,洛南,CN,China,中国,shaanxi,陕西,shangluo,商洛,34.0885,110.14571,611021, +CN101110603,zhashui,柞水,CN,China,中国,shaanxi,陕西,shangluo,商洛,33.682774,109.11125,611026, +CN101110604,shangzhou,商州,CN,China,中国,shaanxi,陕西,shangluo,商洛,33.86921,109.93768,611002, +CN101110605,zhenan,镇安,CN,China,中国,shaanxi,陕西,shangluo,商洛,33.42398,109.15108,611025, +CN101110606,danfeng,丹凤,CN,China,中国,shaanxi,陕西,shangluo,商洛,33.69471,110.33191,611022, +CN101110607,shangnan,商南,CN,China,中国,shaanxi,陕西,shangluo,商洛,33.526367,110.88544,611023, +CN101110608,shanyang,山阳,CN,China,中国,shaanxi,陕西,shangluo,商洛,33.53041,109.88043,611024, +CN101110701,ankang,安康,CN,China,中国,shaanxi,陕西,ankang,安康,32.6903,109.029274,"610901,610900", +CN101110702,ziyang,紫阳,CN,China,中国,shaanxi,陕西,ankang,安康,32.520176,108.53779,610924, +CN101110703,shiquan,石泉,CN,China,中国,shaanxi,陕西,ankang,安康,33.038513,108.25051,610922, +CN101110704,hanyin,汉阴,CN,China,中国,shaanxi,陕西,ankang,安康,32.89112,108.51095,610921, +CN101110705,xunyang,旬阳,CN,China,中国,shaanxi,陕西,ankang,安康,32.83357,109.36815,610928, +CN101110706,langao,岚皋,CN,China,中国,shaanxi,陕西,ankang,安康,32.31069,108.900665,610925, +CN101110707,pingli,平利,CN,China,中国,shaanxi,陕西,ankang,安康,32.38793,109.36186,610926, +CN101110708,baihe,白河,CN,China,中国,shaanxi,陕西,ankang,安康,32.809483,110.11419,610929, +CN101110709,zhenping,镇坪,CN,China,中国,shaanxi,陕西,ankang,安康,31.883394,109.526436,610927, +CN101110710,ningshan,宁陕,CN,China,中国,shaanxi,陕西,ankang,安康,33.312183,108.31371,610923, +CN101110711,hanbin,汉滨,CN,China,中国,shaanxi,陕西,ankang,安康,32.69082,109.0291,610902, +CN101110801,hanzhong,汉中,CN,China,中国,shaanxi,陕西,hanzhong,汉中,33.077667,107.02862,"610701,610700", +CN101110802,lueyang,略阳,CN,China,中国,shaanxi,陕西,hanzhong,汉中,33.32964,106.1539,610727, +CN101110803,mianxian,勉县,CN,China,中国,shaanxi,陕西,hanzhong,汉中,33.155617,106.680176,610725, +CN101110804,liuba,留坝,CN,China,中国,shaanxi,陕西,hanzhong,汉中,33.61334,106.92438,610729, +CN101110805,yangxian,洋县,CN,China,中国,shaanxi,陕西,hanzhong,汉中,33.22328,107.549965,610723, +CN101110806,chenggu,城固,CN,China,中国,shaanxi,陕西,hanzhong,汉中,33.1531,107.32989,610722, +CN101110807,xixiang,西乡,CN,China,中国,shaanxi,陕西,hanzhong,汉中,32.98796,107.76586,610724, +CN101110808,fuoping,佛坪,CN,China,中国,shaanxi,陕西,hanzhong,汉中,33.520744,107.98858,610730, +CN101110809,ningqiang,宁强,CN,China,中国,shaanxi,陕西,hanzhong,汉中,32.830807,106.25739,610726, +CN101110810,nanzheng,南郑,CN,China,中国,shaanxi,陕西,hanzhong,汉中,33.00334,106.94239,610703, +CN101110811,zhenba,镇巴,CN,China,中国,shaanxi,陕西,hanzhong,汉中,32.535854,107.89531,610728, +CN101110812,hantai,汉台,CN,China,中国,shaanxi,陕西,hanzhong,汉中,33.077675,107.02824,610702, +CN101110901,baoji,宝鸡,CN,China,中国,shaanxi,陕西,baoji,宝鸡,34.369316,107.14487,"610301,610300", +CN101110902,weibin,渭滨,CN,China,中国,shaanxi,陕西,baoji,宝鸡,34.37101,107.14447,610302, +CN101110903,qianyang,千阳,CN,China,中国,shaanxi,陕西,baoji,宝鸡,34.642586,107.13299,610328, +CN101110904,linyou,麟游,CN,China,中国,shaanxi,陕西,baoji,宝鸡,34.677715,107.79661,610329, +CN101110905,qishan,岐山,CN,China,中国,shaanxi,陕西,baoji,宝鸡,34.44296,107.624466,610323, +CN101110906,fengxiang,凤翔,CN,China,中国,shaanxi,陕西,baoji,宝鸡,34.521667,107.40057,610322, +CN101110907,fufeng,扶风,CN,China,中国,shaanxi,陕西,baoji,宝鸡,34.375496,107.89142,610324, +CN101110908,meixian,眉县,CN,China,中国,shaanxi,陕西,baoji,宝鸡,34.272137,107.75237,610326, +CN101110909,taibai,太白,CN,China,中国,shaanxi,陕西,baoji,宝鸡,34.059216,107.316536,610331, +CN101110910,fengxian,凤县,CN,China,中国,shaanxi,陕西,baoji,宝鸡,33.912464,106.525215,610330, +CN101110911,longxian,陇县,CN,China,中国,shaanxi,陕西,baoji,宝鸡,34.89326,106.85706,610327, +CN101110912,chencang,陈仓,CN,China,中国,shaanxi,陕西,baoji,宝鸡,34.35275,107.383644,610304, +CN101110913,jintai,金台,CN,China,中国,shaanxi,陕西,baoji,宝鸡,34.37519,107.14994,610303, +CN101111001,tongchuan,铜川,CN,China,中国,shaanxi,陕西,tongchuan,铜川,34.91658,108.97961,"610201,610200", +CN101111003,yijun,宜君,CN,China,中国,shaanxi,陕西,tongchuan,铜川,35.398766,109.11828,610222, +CN101111004,yaozhou,耀州,CN,China,中国,shaanxi,陕西,tongchuan,铜川,34.910206,108.96254,610204, +CN101111005,wangyi,王益,CN,China,中国,shaanxi,陕西,tongchuan,铜川,35.0691,109.07586,610202, +CN101111006,yintai,印台,CN,China,中国,shaanxi,陕西,tongchuan,铜川,35.111927,109.100815,610203, +CN101111101,yangling,杨凌,CN,China,中国,shaanxi,陕西,yangling,杨凌,34.28,108.07,610403, +CN101111102,yangling,杨陵,CN,China,中国,shaanxi,陕西,yangling,杨凌,34.27135,108.08635,610403, +CN101120101,jinan,济南,CN,China,中国,shandong,山东,jinan,济南,36.675808,117.00092,"370101,370100,370000", +CN101120102,changqing,长清,CN,China,中国,shandong,山东,jinan,济南,36.56105,116.74588,370113, +CN101120103,shanghe,商河,CN,China,中国,shandong,山东,jinan,济南,37.310543,117.15637,370126, +CN101120104,zhangqiu,章丘,CN,China,中国,shandong,山东,jinan,济南,36.71209,117.54069,370114, +CN101120105,pingyin,平阴,CN,China,中国,shandong,山东,jinan,济南,36.286922,116.455055,370124, +CN101120106,jiyang,济阳,CN,China,中国,shandong,山东,jinan,济南,36.976772,117.17603,370125, +CN101120107,lixia,历下,CN,China,中国,shandong,山东,jinan,济南,36.66417,117.03862,370102, +CN101120108,shizhong,市中,CN,China,中国,shandong,山东,jinan,济南,36.657352,116.99898,370103, +CN101120109,huaiyin,槐荫,CN,China,中国,shandong,山东,jinan,济南,36.668205,116.94792,370104, +CN101120110,tianqiao,天桥,CN,China,中国,shandong,山东,jinan,济南,36.693375,116.996086,370105, +CN101120111,licheng,历城,CN,China,中国,shandong,山东,jinan,济南,36.681744,117.06374,370112, +CN101120201,qingdao,青岛,CN,China,中国,shandong,山东,qingdao,青岛,36.08298,120.35517,"370201,370200", +CN101120202,laoshan,崂山,CN,China,中国,shandong,山东,qingdao,青岛,36.10257,120.46739,370212, +CN101120203,shinan,市南,CN,China,中国,shandong,山东,qingdao,青岛,36.070892,120.395966,370202, +CN101120204,jimo,即墨,CN,China,中国,shandong,山东,qingdao,青岛,36.390846,120.44735,370282, +CN101120205,jiaozhou,胶州,CN,China,中国,shandong,山东,qingdao,青岛,36.285877,120.0062,370281, +CN101120206,huangdao,黄岛,CN,China,中国,shandong,山东,qingdao,青岛,35.875137,119.99552,370211, +CN101120207,laixi,莱西,CN,China,中国,shandong,山东,qingdao,青岛,36.86509,120.52622,370285, +CN101120208,pingdu,平度,CN,China,中国,shandong,山东,qingdao,青岛,36.78883,119.959015,370283, +CN101120209,shibei,市北,CN,China,中国,shandong,山东,qingdao,青岛,36.08382,120.35503,370203, +CN101120210,licang,李沧,CN,China,中国,shandong,山东,qingdao,青岛,36.160023,120.421234,370213, +CN101120211,chengyang,城阳,CN,China,中国,shandong,山东,qingdao,青岛,36.30683,120.38914,370214, +CN101120301,zibo,淄博,CN,China,中国,shandong,山东,zibo,淄博,36.814938,118.047646,"370301,370300", +CN101120302,zichuan,淄川,CN,China,中国,shandong,山东,zibo,淄博,36.64727,117.9677,370302, +CN101120303,boshan,博山,CN,China,中国,shandong,山东,zibo,淄博,36.497566,117.85823,370304, +CN101120304,gaoqing,高青,CN,China,中国,shandong,山东,zibo,淄博,37.169582,117.82984,370322, +CN101120305,zhoucun,周村,CN,China,中国,shandong,山东,zibo,淄博,36.8037,117.851036,370306, +CN101120306,yiyuan,沂源,CN,China,中国,shandong,山东,zibo,淄博,36.186283,118.16616,370323, +CN101120307,huantai,桓台,CN,China,中国,shandong,山东,zibo,淄博,36.959774,118.101555,370321, +CN101120308,linzi,临淄,CN,China,中国,shandong,山东,zibo,淄博,36.816658,118.306015,370305, +CN101120309,zhangdian,张店,CN,China,中国,shandong,山东,zibo,淄博,36.80705,118.05352,370303, +CN101120401,dezhou,德州,CN,China,中国,shandong,山东,dezhou,德州,37.453968,116.30743,"371401,371400", +CN101120402,wucheng,武城,CN,China,中国,shandong,山东,dezhou,德州,37.209526,116.07863,371428, +CN101120403,linyi,临邑,CN,China,中国,shandong,山东,dezhou,德州,37.192043,116.86703,371424, +CN101120404,lingxian,陵县,CN,China,中国,shandong,山东,dezhou,德州,37.334652,116.56899,371403, +CN101120405,qihe,齐河,CN,China,中国,shandong,山东,dezhou,德州,36.795498,116.75839,371425, +CN101120406,leling,乐陵,CN,China,中国,shandong,山东,dezhou,德州,37.729115,117.21666,371481, +CN101120407,qingyun,庆云,CN,China,中国,shandong,山东,dezhou,德州,37.777725,117.39051,371423, +CN101120408,pingyuan,平原,CN,China,中国,shandong,山东,dezhou,德州,37.164467,116.43391,371426, +CN101120409,ningjin,宁津,CN,China,中国,shandong,山东,dezhou,德州,37.64962,116.79372,371422, +CN101120410,xiajin,夏津,CN,China,中国,shandong,山东,dezhou,德州,36.9505,116.003815,371427, +CN101120411,yucheng,禹城,CN,China,中国,shandong,山东,dezhou,德州,36.934486,116.642555,371482, +CN101120412,decheng,德城,CN,China,中国,shandong,山东,dezhou,德州,37.453922,116.307076,371402, +CN101120413,lingcheng,陵城,CN,China,中国,shandong,山东,dezhou,德州,37.332848,116.57493,371403, +CN101120501,yantai,烟台,CN,China,中国,shandong,山东,yantai,烟台,37.539295,121.39138,"370601,370600", +CN101120502,laizhou,莱州,CN,China,中国,shandong,山东,yantai,烟台,37.182724,119.94214,370683, +CN101120503,changdao,长岛,CN,China,中国,shandong,山东,yantai,烟台,37.916195,120.73834,370634, +CN101120504,penglai,蓬莱,CN,China,中国,shandong,山东,yantai,烟台,37.81117,120.76269,370684, +CN101120505,longkou,龙口,CN,China,中国,shandong,山东,yantai,烟台,37.648445,120.52833,370681, +CN101120506,zhaoyuan,招远,CN,China,中国,shandong,山东,yantai,烟台,37.364918,120.403145,370685, +CN101120507,qixia,栖霞,CN,China,中国,shandong,山东,yantai,烟台,37.305855,120.8341,370686, +CN101120508,fushan,福山,CN,China,中国,shandong,山东,yantai,烟台,37.496876,121.26474,370611, +CN101120509,moup,牟平,CN,China,中国,shandong,山东,yantai,烟台,37.388355,121.60151,370612, +CN101120510,laiyang,莱阳,CN,China,中国,shandong,山东,yantai,烟台,36.977036,120.71115,370682, +CN101120511,haiyang,海阳,CN,China,中国,shandong,山东,yantai,烟台,36.78066,121.16839,370687, +CN101120512,zhifu,芝罘,CN,China,中国,shandong,山东,yantai,烟台,37.540924,121.38588,370602, +CN101120513,laishan,莱山,CN,China,中国,shandong,山东,yantai,烟台,37.47355,121.44887,370613, +CN101120601,weifang,潍坊,CN,China,中国,shandong,山东,weifang,潍坊,36.70925,119.10708,"370701,370700", +CN101120602,qingzhou,青州,CN,China,中国,shandong,山东,weifang,潍坊,36.697857,118.484695,370781, +CN101120603,shouguang,寿光,CN,China,中国,shandong,山东,weifang,潍坊,36.874413,118.73645,370783, +CN101120604,linqu,临朐,CN,China,中国,shandong,山东,weifang,潍坊,36.516373,118.53988,370724, +CN101120605,changle,昌乐,CN,China,中国,shandong,山东,weifang,潍坊,36.703255,118.84,370725, +CN101120606,changyi,昌邑,CN,China,中国,shandong,山东,weifang,潍坊,36.85494,119.3945,370786, +CN101120607,anqiu,安丘,CN,China,中国,shandong,山东,weifang,潍坊,36.427418,119.20689,370784, +CN101120608,gaomi,高密,CN,China,中国,shandong,山东,weifang,潍坊,36.37754,119.757034,370785, +CN101120609,zhucheng,诸城,CN,China,中国,shandong,山东,weifang,潍坊,35.997093,119.40318,370782, +CN101120610,weicheng,潍城,CN,China,中国,shandong,山东,weifang,潍坊,36.71006,119.10378,370702, +CN101120611,hanting,寒亭,CN,China,中国,shandong,山东,weifang,潍坊,36.772102,119.20786,370703, +CN101120612,fangzi,坊子,CN,China,中国,shandong,山东,weifang,潍坊,36.654617,119.16633,370704, +CN101120613,kuiwen,奎文,CN,China,中国,shandong,山东,weifang,潍坊,36.709496,119.13736,370705, +CN101120701,jining,济宁,CN,China,中国,shandong,山东,jining,济宁,35.415394,116.58724,"370801,370800", +CN101120702,jiaxiang,嘉祥,CN,China,中国,shandong,山东,jining,济宁,35.398098,116.34289,370829, +CN101120703,weishan,微山,CN,China,中国,shandong,山东,jining,济宁,34.809525,117.12861,370826, +CN101120704,yutai,鱼台,CN,China,中国,shandong,山东,jining,济宁,34.997707,116.650024,370827, +CN101120705,yanzhou,兖州,CN,China,中国,shandong,山东,jining,济宁,35.556446,116.828995,370812, +CN101120706,jinxiang,金乡,CN,China,中国,shandong,山东,jining,济宁,35.06977,116.31036,370828, +CN101120707,wenshang,汶上,CN,China,中国,shandong,山东,jining,济宁,35.721745,116.487144,370830, +CN101120708,sishui,泗水,CN,China,中国,shandong,山东,jining,济宁,35.653217,117.273605,370831, +CN101120709,liangshan,梁山,CN,China,中国,shandong,山东,jining,济宁,35.80184,116.08963,370832, +CN101120710,qufu,曲阜,CN,China,中国,shandong,山东,jining,济宁,35.59279,116.99188,370881, +CN101120711,zoucheng,邹城,CN,China,中国,shandong,山东,jining,济宁,35.40526,116.96673,370883, +CN101120712,rencheng,任城,CN,China,中国,shandong,山东,jining,济宁,35.41483,116.59526,370811, +CN101120801,taian,泰安,CN,China,中国,shandong,山东,taian,泰安,36.19497,117.12907,"370901,370900", +CN101120802,xintai,新泰,CN,China,中国,shandong,山东,taian,泰安,35.910385,117.76609,370982, +CN101120803,taishan,泰山,CN,China,中国,shandong,山东,taian,泰安,36.189312,117.12998,370902, +CN101120804,feicheng,肥城,CN,China,中国,shandong,山东,taian,泰安,36.1856,116.7637,370983, +CN101120805,dongping,东平,CN,China,中国,shandong,山东,taian,泰安,35.930466,116.46105,370923, +CN101120806,ningyang,宁阳,CN,China,中国,shandong,山东,taian,泰安,35.76754,116.79929,370921, +CN101120807,daiyue,岱岳,CN,China,中国,shandong,山东,taian,泰安,36.1841,117.04353,370911, +CN101120901,linyi,临沂,CN,China,中国,shandong,山东,linyi,临沂,35.06528,118.32645,"371301,371300", +CN101120902,junan,莒南,CN,China,中国,shandong,山东,linyi,临沂,35.17591,118.838326,371327, +CN101120903,yinan,沂南,CN,China,中国,shandong,山东,linyi,临沂,35.547,118.4554,371321, +CN101120904,lanling,兰陵,CN,China,中国,shandong,山东,linyi,临沂,34.85557,118.049965,371324, +CN101120905,linshu,临沭,CN,China,中国,shandong,山东,linyi,临沂,34.91706,118.64838,371329, +CN101120906,tancheng,郯城,CN,China,中国,shandong,山东,linyi,临沂,34.614742,118.342964,371322, +CN101120907,mengyin,蒙阴,CN,China,中国,shandong,山东,linyi,临沂,35.712437,117.94327,371328, +CN101120908,pingyi,平邑,CN,China,中国,shandong,山东,linyi,临沂,35.51152,117.63188,371326, +CN101120909,feixian,费县,CN,China,中国,shandong,山东,linyi,临沂,35.269173,117.96887,371325, +CN101120910,yishui,沂水,CN,China,中国,shandong,山东,linyi,临沂,35.78703,118.634544,371323, +CN101120911,lanshan,兰山,CN,China,中国,shandong,山东,linyi,临沂,35.06163,118.32767,371302, +CN101120912,luozhuang,罗庄,CN,China,中国,shandong,山东,linyi,临沂,34.997204,118.2848,371311, +CN101120913,hedong,河东,CN,China,中国,shandong,山东,linyi,临沂,35.085003,118.39829,371312, +CN101121001,heze,菏泽,CN,China,中国,shandong,山东,heze,菏泽,35.246532,115.46938,"371701,371700", +CN101121002,juancheng,鄄城,CN,China,中国,shandong,山东,heze,菏泽,35.560257,115.51434,371726, +CN101121003,yuncheng,郓城,CN,China,中国,shandong,山东,heze,菏泽,35.594772,115.93885,371725, +CN101121004,dongming,东明,CN,China,中国,shandong,山东,heze,菏泽,35.28964,115.09841,371728, +CN101121005,dingtao,定陶,CN,China,中国,shandong,山东,heze,菏泽,35.0727,115.5696,371703, +CN101121006,juye,巨野,CN,China,中国,shandong,山东,heze,菏泽,35.391,116.08934,371724, +CN101121007,caoxian,曹县,CN,China,中国,shandong,山东,heze,菏泽,34.823254,115.549484,371721, +CN101121008,chengwu,成武,CN,China,中国,shandong,山东,heze,菏泽,34.947365,115.89735,371723, +CN101121009,shanxian,单县,CN,China,中国,shandong,山东,heze,菏泽,34.79085,116.08262,371722, +CN101121010,mudan,牡丹,CN,China,中国,shandong,山东,heze,菏泽,35.24311,115.47095,371702, +CN101121101,binzhou,滨州,CN,China,中国,shandong,山东,binzhou,滨州,37.38354,118.016975,"371601,371600", +CN101121102,boxing,博兴,CN,China,中国,shandong,山东,binzhou,滨州,37.147003,118.12309,371625, +CN101121103,wudi,无棣,CN,China,中国,shandong,山东,binzhou,滨州,37.74085,117.616325,371623, +CN101121104,yangxin,阳信,CN,China,中国,shandong,山东,binzhou,滨州,37.64049,117.58133,371622, +CN101121105,huimin,惠民,CN,China,中国,shandong,山东,binzhou,滨州,37.483875,117.50894,371621, +CN101121106,zhanhua,沾化,CN,China,中国,shandong,山东,binzhou,滨州,37.698456,118.129906,371603, +CN101121107,zouping,邹平,CN,China,中国,shandong,山东,binzhou,滨州,36.87803,117.73681,371626, +CN101121108,bincheng,滨城,CN,China,中国,shandong,山东,binzhou,滨州,37.384842,118.02015,371602, +CN101121201,dongying,东营,CN,China,中国,shandong,山东,dongying,东营,37.461567,118.507545,"370501,370500,370502", +CN101121202,hekou,河口,CN,China,中国,shandong,山东,dongying,东营,37.886017,118.52961,370503, +CN101121203,kenli,垦利,CN,China,中国,shandong,山东,dongying,东营,37.58868,118.551315,370505, +CN101121204,lijin,利津,CN,China,中国,shandong,山东,dongying,东营,37.493366,118.248856,370522, +CN101121205,guangrao,广饶,CN,China,中国,shandong,山东,dongying,东营,37.05161,118.407524,370523, +CN101121301,weihai,威海,CN,China,中国,shandong,山东,weihai,威海,37.50969,122.116394,"371001,371000", +CN101121302,wendeng,文登,CN,China,中国,shandong,山东,weihai,威海,37.196213,122.05714,371003, +CN101121303,rongcheng,荣成,CN,China,中国,shandong,山东,weihai,威海,37.160133,122.4229,371082, +CN101121304,rushan,乳山,CN,China,中国,shandong,山东,weihai,威海,36.91962,121.53635,371083, +CN101121305,chengshantou,成山头,CN,China,中国,shandong,山东,weihai,威海,37.39439,122.70412,371082, +CN101121306,shidao,石岛,CN,China,中国,shandong,山东,weihai,威海,36.89434,122.426506,371082, +CN101121307,huancui,环翠,CN,China,中国,shandong,山东,weihai,威海,37.510754,122.11619,371002, +CN101121401,zaozhuang,枣庄,CN,China,中国,shandong,山东,zaozhuang,枣庄,34.856422,117.55796,"370401,370400", +CN101121402,xuecheng,薛城,CN,China,中国,shandong,山东,zaozhuang,枣庄,34.79789,117.26529,370403, +CN101121403,yicheng,峄城,CN,China,中国,shandong,山东,zaozhuang,枣庄,34.76771,117.58632,370404, +CN101121404,taierzhuang,台儿庄,CN,China,中国,shandong,山东,zaozhuang,枣庄,34.564816,117.73475,370405, +CN101121405,tengzhou,滕州,CN,China,中国,shandong,山东,zaozhuang,枣庄,35.088497,117.1621,370481, +CN101121406,shizhong,市中,CN,China,中国,shandong,山东,zaozhuang,枣庄,34.85665,117.55728,370402, +CN101121407,shanting,山亭,CN,China,中国,shandong,山东,zaozhuang,枣庄,35.096077,117.45897,370406, +CN101121501,rizhao,日照,CN,China,中国,shandong,山东,rizhao,日照,35.42859,119.461205,"371101,371100", +CN101121502,wulian,五莲,CN,China,中国,shandong,山东,rizhao,日照,35.751938,119.20674,371121, +CN101121503,juxian,莒县,CN,China,中国,shandong,山东,rizhao,日照,35.588116,118.832855,371122, +CN101121504,donggang,东港,CN,China,中国,shandong,山东,rizhao,日照,35.42615,119.4577,371102, +CN101121505,lanshan,岚山,CN,China,中国,shandong,山东,rizhao,日照,35.119793,119.31584,371103, +CN101121601,laiwu,莱芜,CN,China,中国,shandong,山东,laiwu,莱芜,36.214397,117.677734,"371201,371200", +CN101121602,laicheng,莱城,CN,China,中国,shandong,山东,laiwu,莱芜,36.21366,117.67835,371202, +CN101121603,gangcheng,钢城,CN,China,中国,shandong,山东,laiwu,莱芜,36.058037,117.82033,371203, +CN101121701,liaocheng,聊城,CN,China,中国,shandong,山东,liaocheng,聊城,36.456013,115.98037,"371501,371500", +CN101121702,guanxian,冠县,CN,China,中国,shandong,山东,liaocheng,聊城,36.483753,115.44481,371525, +CN101121703,yanggu,阳谷,CN,China,中国,shandong,山东,liaocheng,聊城,36.11371,115.78429,371521, +CN101121704,gaotang,高唐,CN,China,中国,shandong,山东,liaocheng,聊城,36.859756,116.22966,371526, +CN101121705,chiping,茌平,CN,China,中国,shandong,山东,liaocheng,聊城,36.591934,116.25335,371523, +CN101121706,donge,东阿,CN,China,中国,shandong,山东,liaocheng,聊城,36.336002,116.248856,371524, +CN101121707,linqing,临清,CN,China,中国,shandong,山东,liaocheng,聊城,36.842598,115.71346,371581, +CN101121708,dongchangfu,东昌府,CN,China,中国,shandong,山东,liaocheng,聊城,36.45606,115.98003,371502, +CN101121709,shenxian,莘县,CN,China,中国,shandong,山东,liaocheng,聊城,36.2376,115.66729,371522, +CN101130101,wulumuqi,乌鲁木齐,CN,China,中国,xinjiang,新疆,wulumuqi,乌鲁木齐,43.792816,87.61773,"650101,650100,650000", +CN101130102,tianshan,天山,CN,China,中国,xinjiang,新疆,wulumuqi,乌鲁木齐,43.79643,87.62012,650102, +CN101130103,xiaoquzi,小渠子,CN,China,中国,xinjiang,新疆,wulumuqi,乌鲁木齐,43.51582,87.12283,650121, +CN101130104,shayibake,沙依巴克,CN,China,中国,xinjiang,新疆,wulumuqi,乌鲁木齐,43.78887,87.59664,650103, +CN101130105,dabancheng,达坂城,CN,China,中国,xinjiang,新疆,wulumuqi,乌鲁木齐,43.36181,88.30994,650107, +CN101130106,xinshi,新市,CN,China,中国,xinjiang,新疆,wulumuqi,乌鲁木齐,43.87088,87.56065,650104, +CN101130107,shuimogou,水磨沟,CN,China,中国,xinjiang,新疆,wulumuqi,乌鲁木齐,43.816746,87.61309,650105, +CN101130109,tianchi,天池,CN,China,中国,xinjiang,新疆,wulumuqi,乌鲁木齐,43.879143,88.12783,652302, +CN101130111,toutunhe,头屯河,CN,China,中国,xinjiang,新疆,wulumuqi,乌鲁木齐,43.876053,87.42582,650106, +CN101130112,midong,米东,CN,China,中国,xinjiang,新疆,wulumuqi,乌鲁木齐,43.960983,87.6918,650109, +CN101130113,wulumuqixian,乌鲁木齐县,CN,China,中国,xinjiang,新疆,wulumuqi,乌鲁木齐,43.982548,87.5056,650121, +CN101130114,xibaiyanggou,西白杨沟,CN,China,中国,xinjiang,新疆,wulumuqi,乌鲁木齐,43.3839,87.13792,650121, +CN101130201,kelamayi,克拉玛依,CN,China,中国,xinjiang,新疆,kelamayi,克拉玛依,45.595886,84.87395,"650201,650200,650203", +CN101130202,wuerhe,乌尔禾,CN,China,中国,xinjiang,新疆,kelamayi,克拉玛依,46.08776,85.69777,650205, +CN101130203,baijiantan,白碱滩,CN,China,中国,xinjiang,新疆,kelamayi,克拉玛依,45.689022,85.12988,650204, +CN101130204,dushanzi,独山子,CN,China,中国,xinjiang,新疆,kelamayi,克拉玛依,44.327206,84.88227,650202, +CN101130301,shihezi,石河子,CN,China,中国,xinjiang,新疆,shihezi,石河子,44.305885,86.04108,"659001,659009", +CN101130302,paotai,炮台,CN,China,中国,xinjiang,新疆,shihezi,石河子,44.821697,85.584625,659001, +CN101130303,mosuowan,莫索湾,CN,China,中国,xinjiang,新疆,shihezi,石河子,44.59994,86.09258,652324, +CN101130401,changji,昌吉,CN,China,中国,xinjiang,新疆,changji,昌吉,44.014576,87.30401,"652301,652300", +CN101130402,hutubi,呼图壁,CN,China,中国,xinjiang,新疆,changji,昌吉,44.189342,86.88861,652323, +CN101130404,fukang,阜康,CN,China,中国,xinjiang,新疆,changji,昌吉,44.152153,87.98384,652302, +CN101130405,jimusaer,吉木萨尔,CN,China,中国,xinjiang,新疆,changji,昌吉,43.99716,89.18129,652327, +CN101130406,qitai,奇台,CN,China,中国,xinjiang,新疆,changji,昌吉,44.021996,89.59144,652325, +CN101130407,manasi,玛纳斯,CN,China,中国,xinjiang,新疆,changji,昌吉,44.305626,86.21769,652324, +CN101130408,mulei,木垒,CN,China,中国,xinjiang,新疆,changji,昌吉,43.832443,90.28283,652328, +CN101130409,caijiahu,蔡家湖,CN,China,中国,xinjiang,新疆,changji,昌吉,44.40734,87.5394,652301, +CN101130501,tulufan,吐鲁番,CN,China,中国,xinjiang,新疆,tulufan,吐鲁番,42.947613,89.184074,650400, +CN101130502,tuokexun,托克逊,CN,China,中国,xinjiang,新疆,tulufan,吐鲁番,42.793537,88.65577,650422, +CN101130503,gaochang,高昌,CN,China,中国,xinjiang,新疆,tulufan,吐鲁番,42.947628,89.18233,650402, +CN101130504,shanshan,鄯善,CN,China,中国,xinjiang,新疆,tulufan,吐鲁番,42.8655,90.21269,650421, +CN101130601,kuerle,库尔勒,CN,China,中国,xinjiang,新疆,bayinguoleng,巴音郭楞,41.763123,86.14595,652801, +CN101130602,luntai,轮台,CN,China,中国,xinjiang,新疆,bayinguoleng,巴音郭楞,41.781265,84.24854,652822, +CN101130603,yuli,尉犁,CN,China,中国,xinjiang,新疆,bayinguoleng,巴音郭楞,41.33743,86.26341,652823, +CN101130604,ruoqiang,若羌,CN,China,中国,xinjiang,新疆,bayinguoleng,巴音郭楞,39.023808,88.16881,652824, +CN101130605,qiemo,且末,CN,China,中国,xinjiang,新疆,bayinguoleng,巴音郭楞,38.13856,85.53263,652825, +CN101130606,hejing,和静,CN,China,中国,xinjiang,新疆,bayinguoleng,巴音郭楞,42.31716,86.39107,652827, +CN101130607,yanqi,焉耆,CN,China,中国,xinjiang,新疆,bayinguoleng,巴音郭楞,42.06435,86.5698,652826, +CN101130608,shuo,和硕,CN,China,中国,xinjiang,新疆,bayinguoleng,巴音郭楞,42.268864,86.864944,652828, +CN101130609,bayinguoleng,巴音郭楞,CN,China,中国,xinjiang,新疆,bayinguoleng,巴音郭楞,41.76855,86.15097,652800, +CN101130610,bayinbuluke,巴音布鲁克,CN,China,中国,xinjiang,新疆,bayinguoleng,巴音郭楞,43.031853,84.15905,652827, +CN101130611,tieganlike,铁干里克,CN,China,中国,xinjiang,新疆,bayinguoleng,巴音郭楞,39.02878,88.17605,652824, +CN101130612,bohu,博湖,CN,China,中国,xinjiang,新疆,bayinguoleng,巴音郭楞,41.980167,86.63158,652829, +CN101130613,tazhong,塔中,CN,China,中国,xinjiang,新疆,bayinguoleng,巴音郭楞,39.017822,83.615654,652825, +CN101130614,baluntai,巴仑台,CN,China,中国,xinjiang,新疆,bayinguoleng,巴音郭楞,42.74718,86.312126,652827, +CN101130701,alaer,阿拉尔,CN,China,中国,xinjiang,新疆,alaer,阿拉尔,40.541916,81.28588,659002, +CN101130801,akesu,阿克苏,CN,China,中国,xinjiang,新疆,akesu,阿克苏,41.17071,80.26507,"652901,652900", +CN101130802,wushi,乌什,CN,China,中国,xinjiang,新疆,akesu,阿克苏,41.21587,79.230804,652927, +CN101130803,wensu,温宿,CN,China,中国,xinjiang,新疆,akesu,阿克苏,41.272995,80.24327,652922, +CN101130804,baicheng,拜城,CN,China,中国,xinjiang,新疆,akesu,阿克苏,41.7961,81.86988,652926, +CN101130805,xinhe,新和,CN,China,中国,xinjiang,新疆,akesu,阿克苏,41.551174,82.610825,652925, +CN101130806,shaya,沙雅,CN,China,中国,xinjiang,新疆,akesu,阿克苏,41.22627,82.78077,652924, +CN101130807,kuche,库车,CN,China,中国,xinjiang,新疆,akesu,阿克苏,41.71714,82.96304,652923, +CN101130808,keping,柯坪,CN,China,中国,xinjiang,新疆,akesu,阿克苏,40.50624,79.04785,652929, +CN101130809,awati,阿瓦提,CN,China,中国,xinjiang,新疆,akesu,阿克苏,40.63842,80.378426,652928, +CN101130901,kashi,喀什,CN,China,中国,xinjiang,新疆,kashi,喀什,39.467663,75.989136,"653101,653100", +CN101130902,yingjisha,英吉沙,CN,China,中国,xinjiang,新疆,kashi,喀什,38.92984,76.17429,653123, +CN101130903,tashikuergan,塔什库尔干,CN,China,中国,xinjiang,新疆,kashi,喀什,37.775436,75.228065,653131, +CN101130904,maigaiti,麦盖提,CN,China,中国,xinjiang,新疆,kashi,喀什,38.903385,77.651535,653127, +CN101130905,shache,莎车,CN,China,中国,xinjiang,新疆,kashi,喀什,38.414497,77.248886,653125, +CN101130906,yecheng,叶城,CN,China,中国,xinjiang,新疆,kashi,喀什,37.884678,77.42036,653126, +CN101130907,zepu,泽普,CN,China,中国,xinjiang,新疆,kashi,喀什,38.191216,77.27359,653124, +CN101130908,bachu,巴楚,CN,China,中国,xinjiang,新疆,kashi,喀什,39.783478,78.55041,653130, +CN101130909,yuepuhu,岳普湖,CN,China,中国,xinjiang,新疆,kashi,喀什,39.23525,76.7724,653128, +CN101130910,jiashi,伽师,CN,China,中国,xinjiang,新疆,kashi,喀什,39.494324,76.74198,653129, +CN101130911,shufu,疏附,CN,China,中国,xinjiang,新疆,kashi,喀什,39.378307,75.863075,653121, +CN101130912,shule,疏勒,CN,China,中国,xinjiang,新疆,kashi,喀什,39.39946,76.05365,653122, +CN101131001,yining,伊宁,CN,China,中国,xinjiang,新疆,yili,伊犁,43.92221,81.316345,654002, +CN101131002,chabuchaer,察布查尔,CN,China,中国,xinjiang,新疆,yili,伊犁,43.838882,81.15087,654022, +CN101131003,nileke,尼勒克,CN,China,中国,xinjiang,新疆,yili,伊犁,43.789738,82.50412,654028, +CN101131004,yiningxian,伊宁县,CN,China,中国,xinjiang,新疆,yili,伊犁,43.977875,81.52467,654021, +CN101131005,gongliu,巩留,CN,China,中国,xinjiang,新疆,yili,伊犁,43.481617,82.22704,654024, +CN101131006,xinyuan,新源,CN,China,中国,xinjiang,新疆,yili,伊犁,43.43425,83.25849,654025, +CN101131007,zhaosu,昭苏,CN,China,中国,xinjiang,新疆,yili,伊犁,43.157764,81.12603,654026, +CN101131008,tekesi,特克斯,CN,China,中国,xinjiang,新疆,yili,伊犁,43.214863,81.84006,654027, +CN101131009,huocheng,霍城,CN,China,中国,xinjiang,新疆,yili,伊犁,44.04991,80.872505,654023, +CN101131010,huoerguosi,霍尔果斯,CN,China,中国,xinjiang,新疆,yili,伊犁,44.201668,80.42076,654004, +CN101131011,kuitunshi,奎屯,CN,China,中国,xinjiang,新疆,yili,伊犁,44.423447,84.9016,654003, +CN101131012,yili,伊犁,CN,China,中国,xinjiang,新疆,yili,伊犁,43.92186,81.31795,654000, +CN101131101,tacheng,塔城,CN,China,中国,xinjiang,新疆,tacheng,塔城,46.74628,82.983986,"654201,654200", +CN101131102,yumin,裕民,CN,China,中国,xinjiang,新疆,tacheng,塔城,46.20278,82.982155,654225, +CN101131103,emin,额敏,CN,China,中国,xinjiang,新疆,tacheng,塔城,46.522556,83.622116,654221, +CN101131104,hebukesaier,和布克赛尔,CN,China,中国,xinjiang,新疆,tacheng,塔城,46.793,85.73355,654226, +CN101131105,tuoli,托里,CN,China,中国,xinjiang,新疆,tacheng,塔城,45.935863,83.60469,654224, +CN101131106,wusu,乌苏,CN,China,中国,xinjiang,新疆,tacheng,塔城,44.430115,84.67763,654202, +CN101131107,shawan,沙湾,CN,China,中国,xinjiang,新疆,tacheng,塔城,44.329544,85.622505,654223, +CN101131201,hami,哈密,CN,China,中国,xinjiang,新疆,hami,哈密,42.83325,93.51316,650500, +CN101131202,yizhou,伊州,CN,China,中国,xinjiang,新疆,hami,哈密,42.83389,93.50917,650502, +CN101131203,balikun,巴里坤,CN,China,中国,xinjiang,新疆,hami,哈密,43.599033,93.0218,650521, +CN101131204,yiwu,伊吾,CN,China,中国,xinjiang,新疆,hami,哈密,43.25201,94.69277,650522, +CN101131301,hetian,和田,CN,China,中国,xinjiang,新疆,hetian,和田,37.108944,79.92754,"653201,653200,653221", +CN101131302,pishan,皮山,CN,China,中国,xinjiang,新疆,hetian,和田,37.616333,78.2823,653223, +CN101131303,cele,策勒,CN,China,中国,xinjiang,新疆,hetian,和田,37.00167,80.80357,653225, +CN101131304,moyu,墨玉,CN,China,中国,xinjiang,新疆,hetian,和田,37.27151,79.736626,653222, +CN101131305,luopu,洛浦,CN,China,中国,xinjiang,新疆,hetian,和田,37.074375,80.18404,653224, +CN101131306,minfeng,民丰,CN,China,中国,xinjiang,新疆,hetian,和田,37.06491,82.69235,653227, +CN101131307,yutian,于田,CN,China,中国,xinjiang,新疆,hetian,和田,36.85463,81.66785,653226, +CN101131401,aletai,阿勒泰,CN,China,中国,xinjiang,新疆,aletai,阿勒泰,47.84891,88.13874,"654301,654300", +CN101131402,habahe,哈巴河,CN,China,中国,xinjiang,新疆,aletai,阿勒泰,48.059284,86.41896,654324, +CN101131405,jimunai,吉木乃,CN,China,中国,xinjiang,新疆,aletai,阿勒泰,47.43463,85.87606,654326, +CN101131406,buerjin,布尔津,CN,China,中国,xinjiang,新疆,aletai,阿勒泰,47.70453,86.86186,654321, +CN101131407,fuhai,福海,CN,China,中国,xinjiang,新疆,aletai,阿勒泰,47.11313,87.49457,654323, +CN101131408,fuyun,富蕴,CN,China,中国,xinjiang,新疆,aletai,阿勒泰,46.993107,89.524994,654322, +CN101131409,qinghe,青河,CN,China,中国,xinjiang,新疆,aletai,阿勒泰,46.672447,90.38156,654325, +CN101131501,atushi,阿图什,CN,China,中国,xinjiang,新疆,kezhou,克州,39.7129,76.17394,653001, +CN101131502,wuqia,乌恰,CN,China,中国,xinjiang,新疆,kezhou,克州,39.716633,75.25969,653024, +CN101131503,aketao,阿克陶,CN,China,中国,xinjiang,新疆,kezhou,克州,39.14708,75.94516,653022, +CN101131504,aheqi,阿合奇,CN,China,中国,xinjiang,新疆,kezhou,克州,40.93757,78.450165,653023, +CN101131505,kezhou,克州,CN,China,中国,xinjiang,新疆,kezhou,克州,39.713966,76.176796,653000, +CN101131601,bole,博乐,CN,China,中国,xinjiang,新疆,boertala,博尔塔拉,44.903088,82.072235,652701, +CN101131602,wenquan,温泉,CN,China,中国,xinjiang,新疆,boertala,博尔塔拉,44.97375,81.03099,652723, +CN101131603,jinghe,精河,CN,China,中国,xinjiang,新疆,boertala,博尔塔拉,44.605644,82.89294,652722, +CN101131604,boertala,博尔塔拉,CN,China,中国,xinjiang,新疆,boertala,博尔塔拉,44.90326,82.074776,652700, +CN101131606,alashankou,阿拉山口,CN,China,中国,xinjiang,新疆,boertala,博尔塔拉,45.16777,82.56939,652702, +CN101131701,tumushuke,图木舒克,CN,China,中国,xinjiang,新疆,tumushuke,图木舒克,39.867317,79.07798,659003, +CN101131801,wujiaqu,五家渠,CN,China,中国,xinjiang,新疆,wujiaqu,五家渠,44.1674,87.526886,659004, +CN101131901,tiemenguan,铁门关,CN,China,中国,xinjiang,新疆,tiemenguan,铁门关,41.82725,85.50122,659006, +CN101131920,kunyu,昆玉,CN,China,中国,xinjiang,新疆,kunyu,昆玉,37.20964,79.291084,659009, +CN101132101,beitun,北屯,CN,China,中国,xinjiang,新疆,beitun,北屯,47.353176,87.82493,659005, +CN101132201,shuanghe,双河,CN,China,中国,xinjiang,新疆,shuanghe,双河,44.840523,82.35365,659007, +CN101132301,kekedala,可克达拉,CN,China,中国,xinjiang,新疆,kekedala,可克达拉,43.6832,80.63579,659008, +CN101140101,lasa,拉萨,CN,China,中国,xizang,西藏,lasa,拉萨,29.66036,91.13221,"540101,540100,540000", +CN101140102,dangxiong,当雄,CN,China,中国,xizang,西藏,lasa,拉萨,30.47482,91.10355,540122, +CN101140103,nimu,尼木,CN,China,中国,xizang,西藏,lasa,拉萨,29.431347,90.16554,540123, +CN101140104,linzhou,林周,CN,China,中国,xizang,西藏,lasa,拉萨,29.895754,91.26184,540121, +CN101140105,duilongdeqing,堆龙德庆,CN,China,中国,xizang,西藏,lasa,拉萨,29.647346,91.00282,540103, +CN101140106,qushui,曲水,CN,China,中国,xizang,西藏,lasa,拉萨,29.349895,90.73805,540124, +CN101140107,dazi,达孜,CN,China,中国,xizang,西藏,lasa,拉萨,29.670315,91.350975,540104, +CN101140108,mozhugongka,墨竹工卡,CN,China,中国,xizang,西藏,lasa,拉萨,29.834658,91.731155,540127, +CN101140109,chengguan,城关,CN,China,中国,xicang,西藏,lasa,拉萨,29.659472,91.13291,540102, +CN101140201,rikaze,日喀则,CN,China,中国,xizang,西藏,rikaze,日喀则,29.267519,88.88515,540200, +CN101140202,lazi,拉孜,CN,China,中国,xizang,西藏,rikaze,日喀则,29.085136,87.63743,540225, +CN101140203,nanmulin,南木林,CN,China,中国,xizang,西藏,rikaze,日喀则,29.680458,89.099434,540221, +CN101140204,nielamu,聂拉木,CN,China,中国,xizang,西藏,rikaze,日喀则,28.15595,85.98196,540235, +CN101140205,anri,定日,CN,China,中国,xizang,西藏,rikaze,日喀则,28.656668,87.123886,540223, +CN101140206,jiangzi,江孜,CN,China,中国,xizang,西藏,rikaze,日喀则,28.908846,89.60504,540222, +CN101140207,pali,帕里,CN,China,中国,xizang,西藏,rikaze,日喀则,27.71821,89.15495,540233, +CN101140208,zhongba,仲巴,CN,China,中国,xizang,西藏,rikaze,日喀则,29.768335,84.03283,540232, +CN101140209,saga,萨嘎,CN,China,中国,xizang,西藏,rikaze,日喀则,29.328194,85.23462,540236, +CN101140210,jilong,吉隆,CN,China,中国,xizang,西藏,rikaze,日喀则,28.852415,85.29835,540234, +CN101140211,angren,昂仁,CN,China,中国,xizang,西藏,rikaze,日喀则,29.294758,87.23578,540226, +CN101140212,dingjie,定结,CN,China,中国,xizang,西藏,rikaze,日喀则,28.36409,87.76772,540231, +CN101140213,sajia,萨迦,CN,China,中国,xizang,西藏,rikaze,日喀则,28.901077,88.02301,540224, +CN101140214,xietongmen,谢通门,CN,China,中国,xizang,西藏,rikaze,日喀则,29.431597,88.26051,540227, +CN101140215,sangzhuzi,桑珠孜,CN,China,中国,xicang,西藏,rikaze,日喀则,29.267002,88.88667,540202, +CN101140216,gangba,岗巴,CN,China,中国,xizang,西藏,rikaze,日喀则,28.27437,88.518906,540237, +CN101140217,bailang,白朗,CN,China,中国,xizang,西藏,rikaze,日喀则,29.106627,89.26362,540228, +CN101140218,yadong,亚东,CN,China,中国,xizang,西藏,rikaze,日喀则,27.482773,88.90681,540233, +CN101140219,kangma,康马,CN,China,中国,xizang,西藏,rikaze,日喀则,28.55472,89.6834,540230, +CN101140220,renbu,仁布,CN,China,中国,xizang,西藏,rikaze,日喀则,29.230299,89.84321,540229, +CN101140301,shannan,山南,CN,China,中国,xizang,西藏,shannan,山南,29.236023,91.766525,540500, +CN101140302,gongga,贡嘎,CN,China,中国,xizang,西藏,shannan,山南,29.289078,90.98527,540522, +CN101140303,zhanang,扎囊,CN,China,中国,xizang,西藏,shannan,山南,29.246475,91.338,540521, +CN101140304,jiacha,加查,CN,China,中国,xizang,西藏,shannan,山南,29.14092,92.59104,540528, +CN101140305,langkazi,浪卡子,CN,China,中国,xizang,西藏,shannan,山南,28.96836,90.39875,540531, +CN101140306,cuona,错那,CN,China,中国,xizang,西藏,shannan,山南,27.991707,91.96013,540530, +CN101140307,longzi,隆子,CN,China,中国,xizang,西藏,shannan,山南,28.408548,92.46331,540529, +CN101140308,zedang,泽当,CN,China,中国,xizang,西藏,shannan,山南,29.225254,91.7629,540502, +CN101140309,naidong,乃东,CN,China,中国,xizang,西藏,shannan,山南,29.236107,91.76525,540502, +CN101140310,sangri,桑日,CN,China,中国,xizang,西藏,shannan,山南,29.259773,92.01573,540523, +CN101140311,luozha,洛扎,CN,China,中国,xizang,西藏,shannan,山南,28.385765,90.858246,540527, +CN101140312,cuomei,措美,CN,China,中国,xizang,西藏,shannan,山南,28.437353,91.43235,540526, +CN101140313,qiongjie,琼结,CN,China,中国,xizang,西藏,shannan,山南,29.025242,91.683754,540524, +CN101140314,qusong,曲松,CN,China,中国,xizang,西藏,shannan,山南,29.063656,92.201065,540525, +CN101140401,linzhi,林芝,CN,China,中国,xizang,西藏,linzi,林芝,29.654694,94.36235,540400, +CN101140402,bomi,波密,CN,China,中国,xizang,西藏,linzi,林芝,29.85877,95.76815,540424, +CN101140403,milin,米林,CN,China,中国,xizang,西藏,linzi,林芝,29.213812,94.21368,540422, +CN101140404,chayu,察隅,CN,China,中国,xizang,西藏,linzi,林芝,28.660244,97.465004,540425, +CN101140405,gongbujiangda,工布江达,CN,China,中国,xizang,西藏,linzhi,林芝,29.88447,93.24651,540421, +CN101140406,langxian,朗县,CN,China,中国,xizang,西藏,linzhi,林芝,29.0446,93.073425,540426, +CN101140407,motuo,墨脱,CN,China,中国,xizang,西藏,linzhi,林芝,29.32573,95.332245,540423, +CN101140408,bayi,巴宜,CN,China,中国,xicang,西藏,linzhi,林芝,29.653732,94.360985,540402, +CN101140501,changdu,昌都,CN,China,中国,xizang,西藏,changdu,昌都,31.136875,97.17845,540300, +CN101140502,dingqing,丁青,CN,China,中国,xizang,西藏,changdu,昌都,31.41068,95.59775,540324, +CN101140503,bianba,边坝,CN,China,中国,xizang,西藏,changdu,昌都,30.93385,94.707504,540330, +CN101140504,luolong,洛隆,CN,China,中国,xizang,西藏,changdu,昌都,30.741947,95.82342,540329, +CN101140505,zuogong,左贡,CN,China,中国,xizang,西藏,changdu,昌都,29.671335,97.84053,540327, +CN101140506,mangkang,芒康,CN,China,中国,xizang,西藏,changdu,昌都,29.686615,98.59644,540328, +CN101140507,leiwuqi,类乌齐,CN,China,中国,xizang,西藏,changdu,昌都,31.213049,96.60126,540323, +CN101140508,basu,八宿,CN,China,中国,xizang,西藏,changdu,昌都,30.053408,96.91789,540326, +CN101140509,jiangda,江达,CN,China,中国,xizang,西藏,changdu,昌都,31.499535,98.21835,540321, +CN101140510,chaya,察雅,CN,China,中国,xizang,西藏,changdu,昌都,30.653038,97.565704,540325, +CN101140511,gongjue,贡觉,CN,China,中国,xizang,西藏,changdu,昌都,30.859205,98.271194,540322, +CN101140512,karuo,卡若,CN,China,中国,xicang,西藏,changdou,昌都,31.137035,97.17825,540302, +CN101140601,naqu,那曲,CN,China,中国,xizang,西藏,naqu,那曲,31.476004,92.06021,540600, +CN101140602,nima,尼玛,CN,China,中国,xizang,西藏,naqu,那曲,31.784979,87.23665,540629, +CN101140603,jiali,嘉黎,CN,China,中国,xizang,西藏,naqu,那曲,30.640846,93.23291,540621, +CN101140604,bange,班戈,CN,China,中国,xizang,西藏,naqu,那曲,31.394579,90.011826,540627, +CN101140605,anduo,安多,CN,China,中国,xizang,西藏,naqu,那曲,32.2603,91.68188,540624, +CN101140606,suoxian,索县,CN,China,中国,xizang,西藏,naqu,那曲,31.886173,93.784966,540626, +CN101140607,nierong,聂荣,CN,China,中国,xizang,西藏,naqu,那曲,32.107857,92.30366,540623, +CN101140608,baqing,巴青,CN,China,中国,xizang,西藏,naqu,那曲,31.918692,94.05405,540628, +CN101140609,biru,比如,CN,China,中国,xizang,西藏,naqu,那曲,31.479918,93.68044,540622, +CN101140610,shuanghu,双湖,CN,China,中国,xizang,西藏,naqu,那曲,32.86092,88.8936,540630, +CN101140611,shenza,申扎,CN,China,中国,xizang,西藏,naqu,那曲,30.929056,88.70978,540625, +CN101140612,seni,色尼,CN,China,中国,xicang,西藏,naqu,那曲,31.469643,92.0535,540602, +CN101140701,ali,阿里,CN,China,中国,xizang,西藏,ali,阿里,32.503185,80.1055,542500, +CN101140702,gaize,改则,CN,China,中国,xizang,西藏,ali,阿里,32.302074,84.062386,542526, +CN101140704,shiquanhe,狮泉河,CN,China,中国,xizang,西藏,ali,阿里,32.501472,80.091,542523, +CN101140705,pulan,普兰,CN,China,中国,xizang,西藏,ali,阿里,30.291897,81.17759,542521, +CN101140706,zhada,札达,CN,China,中国,xizang,西藏,ali,阿里,31.478586,79.80319,542522, +CN101140707,gaer,噶尔,CN,China,中国,xizang,西藏,ali,阿里,32.503372,80.105,542523, +CN101140708,ritu,日土,CN,China,中国,xizang,西藏,ali,阿里,33.382454,79.73193,542524, +CN101140709,geji,革吉,CN,China,中国,xizang,西藏,ali,阿里,32.38919,81.1429,542525, +CN101140710,cuoqin,措勤,CN,China,中国,xizang,西藏,ali,阿里,31.016773,85.159256,542527, +CN101150101,xining,西宁,CN,China,中国,qinghai,青海,xining,西宁,36.623177,101.778915,"630101,630100,630000", +CN101150102,datong,大通,CN,China,中国,qinghai,青海,xining,西宁,36.931343,101.68418,630121, +CN101150103,huangyuan,湟源,CN,China,中国,qinghai,青海,xining,西宁,36.68482,101.263435,630123, +CN101150104,huangzhong,湟中,CN,China,中国,qinghai,青海,xining,西宁,36.50042,101.56947,630122, +CN101150105,chengdong,城东,CN,China,中国,qinghai,青海,xining,西宁,36.616043,101.7961,630102, +CN101150106,chengzhong,城中,CN,China,中国,qinghai,青海,xining,西宁,36.62118,101.78455,630103, +CN101150107,chengxi,城西,CN,China,中国,qinghai,青海,xining,西宁,36.628323,101.76365,630104, +CN101150108,chengbei,城北,CN,China,中国,qinghai,青海,xining,西宁,36.64845,101.7613,630105, +CN101150201,pingan,平安,CN,China,中国,qinghai,青海,haidong,海东,36.502712,102.104294,630203, +CN101150202,ledu,乐都,CN,China,中国,qinghai,青海,haidong,海东,36.48029,102.40243,630202, +CN101150203,minhe,民和,CN,China,中国,qinghai,青海,haidong,海东,36.329453,102.80421,630222, +CN101150204,huzhu,互助,CN,China,中国,qinghai,青海,haidong,海东,36.83994,101.95673,630223, +CN101150205,hualong,化隆,CN,China,中国,qinghai,青海,haidong,海东,36.098324,102.26233,630224, +CN101150206,xunhua,循化,CN,China,中国,qinghai,青海,haidong,海东,35.847248,102.486534,630225, +CN101150207,haidong,海东,CN,China,中国,qinghai,青海,haidong,海东,36.502914,102.10327,630200, +CN101150301,tongren,同仁,CN,China,中国,qinghai,青海,huangnan,黄南,35.51634,102.0176,632321, +CN101150302,jianzha,尖扎,CN,China,中国,qinghai,青海,huangnan,黄南,35.938206,102.03195,632322, +CN101150303,zeku,泽库,CN,China,中国,qinghai,青海,huangnan,黄南,35.036842,101.469345,632323, +CN101150304,henan,河南,CN,China,中国,qinghai,青海,huangnan,黄南,34.734524,101.61188,632324, +CN101150305,huangnan,黄南,CN,China,中国,qinghai,青海,huangnan,黄南,35.517742,102.01999,632300, +CN101150401,gonghe,共和,CN,China,中国,qinghai,青海,hainan,海南,36.280285,100.6196,632521, +CN101150402,hainan,海南,CN,China,中国,qinghai,青海,hainan,海南,36.280354,100.619545,632500, +CN101150404,guide,贵德,CN,China,中国,qinghai,青海,hainan,海南,36.040455,101.431854,632523, +CN101150406,xinghai,兴海,CN,China,中国,qinghai,青海,hainan,海南,35.58909,99.98696,632524, +CN101150407,guinan,贵南,CN,China,中国,qinghai,青海,hainan,海南,35.587086,100.74792,632525, +CN101150408,tongde,同德,CN,China,中国,qinghai,青海,hainan,海南,35.254494,100.57947,632522, +CN101150501,maqin,玛沁,CN,China,中国,qinghai,青海,guoluo,果洛,34.473385,100.24353,632621, +CN101150502,banma,班玛,CN,China,中国,qinghai,青海,guoluo,果洛,32.931587,100.73795,632622, +CN101150503,gande,甘德,CN,China,中国,qinghai,青海,guoluo,果洛,33.966988,99.90259,632623, +CN101150504,dari,达日,CN,China,中国,qinghai,青海,guoluo,果洛,33.753258,99.65172,632624, +CN101150505,jiuzhi,久治,CN,China,中国,qinghai,青海,guoluo,果洛,33.430218,101.484886,632625, +CN101150506,madu,玛多,CN,China,中国,qinghai,青海,guoluo,果洛,34.91528,98.21134,632626, +CN101150507,guoluo,果洛,CN,China,中国,qinghai,青海,guoluo,果洛,34.4736,100.24214,632600, +CN101150601,yushu,玉树,CN,China,中国,qinghai,青海,yushu,玉树,33.004047,97.00852,"632701,632700", +CN101150602,chenduo,称多,CN,China,中国,qinghai,青海,yushu,玉树,33.367886,97.11089,632723, +CN101150603,zhiduo,治多,CN,China,中国,qinghai,青海,yushu,玉树,33.85232,95.616844,632724, +CN101150604,zaduo,杂多,CN,China,中国,qinghai,青海,yushu,玉树,32.891888,95.29343,632722, +CN101150605,nangqian,囊谦,CN,China,中国,qinghai,青海,yushu,玉树,32.203205,96.4798,632725, +CN101150606,qumacai,曲麻莱,CN,China,中国,qinghai,青海,yushu,玉树,34.12654,95.800674,632726, +CN101150701,delingha,德令哈,CN,China,中国,qinghai,青海,haixi,海西,37.374554,97.37014,632802, +CN101150702,haixi,海西,CN,China,中国,qinghai,青海,haixi,海西,37.85363,95.35723,632800, +CN101150708,tianjun,天峻,CN,China,中国,qinghai,青海,haixi,海西,37.29906,99.02078,632823, +CN101150709,wulan,乌兰,CN,China,中国,qinghai,青海,haixi,海西,36.93039,98.47985,632821, +CN101150712,mangai,茫崖,CN,China,中国,qinghai,青海,haixi,海西,38.15,90.51,632825, +CN101150713,dachaidan,大柴旦,CN,China,中国,qinghai,青海,haixi,海西,37.51,95.22,632825, +CN101150714,geermu,格尔木,CN,China,中国,qinghai,青海,haixi,海西,36.401543,94.90578,632801, +CN101150715,dulan,都兰,CN,China,中国,qinghai,青海,haixi,海西,36.298553,98.089165,632822, +CN101150716,lenghu,冷湖,CN,China,中国,qinghai,青海,haixi,海西,37.37,97.37,632825, +CN101150801,haiyan,海晏,CN,China,中国,qinghai,青海,haibei,海北,36.95954,100.90049,632223, +CN101150802,menyuan,门源,CN,China,中国,qinghai,青海,haibei,海北,37.37663,101.61846,632221, +CN101150803,qilian,祁连,CN,China,中国,qinghai,青海,haibei,海北,38.175407,100.24978,632222, +CN101150804,haibei,海北,CN,China,中国,qinghai,青海,haibei,海北,36.959435,100.90106,632200, +CN101150806,gangcha,刚察,CN,China,中国,qinghai,青海,haibei,海北,37.326263,100.13842,632224, +CN101160101,lanzhou,兰州,CN,China,中国,gansu,甘肃,lanzhou,兰州,36.05804,103.823555,"620101,620100,620000", +CN101160102,gaolan,皋兰,CN,China,中国,gansu,甘肃,lanzhou,兰州,36.331253,103.94933,620122, +CN101160103,yongdeng,永登,CN,China,中国,gansu,甘肃,lanzhou,兰州,36.73443,103.2622,620121, +CN101160104,yuzhong,榆中,CN,China,中国,gansu,甘肃,lanzhou,兰州,35.84443,104.114975,620123, +CN101160105,chengguan,城关,CN,China,中国,gansu,甘肃,lanzhou,兰州,36.049114,103.841034,620102, +CN101160106,qilihe,七里河,CN,China,中国,gansu,甘肃,lanzhou,兰州,36.06673,103.784325,620103, +CN101160107,xigu,西固,CN,China,中国,gansu,甘肃,lanzhou,兰州,36.10037,103.62233,620104, +CN101160108,anning,安宁,CN,China,中国,gansu,甘肃,lanzhou,兰州,36.10329,103.72404,620105, +CN101160109,honggu,红古,CN,China,中国,gansu,甘肃,lanzhou,兰州,36.344177,102.86182,620111, +CN101160201,dingxi,定西,CN,China,中国,gansu,甘肃,dingxi,定西,35.57958,104.6263,"621101,621100", +CN101160202,tongwei,通渭,CN,China,中国,gansu,甘肃,dingxi,定西,35.208923,105.2501,621121, +CN101160203,longxi,陇西,CN,China,中国,gansu,甘肃,dingxi,定西,35.00341,104.63755,621122, +CN101160204,weiyuan,渭源,CN,China,中国,gansu,甘肃,dingxi,定西,35.133022,104.21174,621123, +CN101160205,lintao,临洮,CN,China,中国,gansu,甘肃,dingxi,定西,35.376232,103.86218,621124, +CN101160206,zhangxian,漳县,CN,China,中国,gansu,甘肃,dingxi,定西,34.84864,104.46676,621125, +CN101160207,minxian,岷县,CN,China,中国,gansu,甘肃,dingxi,定西,34.439106,104.03988,621126, +CN101160208,anding,安定,CN,China,中国,gansu,甘肃,dingxi,定西,35.579765,104.62577,621102, +CN101160301,pingliang,平凉,CN,China,中国,gansu,甘肃,pingliang,平凉,35.54279,106.68469,"620801,620800", +CN101160302,jingchuan,泾川,CN,China,中国,gansu,甘肃,pingliang,平凉,35.33528,107.36522,620821, +CN101160303,lingtai,灵台,CN,China,中国,gansu,甘肃,pingliang,平凉,35.06401,107.62059,620822, +CN101160304,chongxin,崇信,CN,China,中国,gansu,甘肃,pingliang,平凉,35.30453,107.03125,620823, +CN101160305,huating,华亭,CN,China,中国,gansu,甘肃,pingliang,平凉,35.215343,106.64931,620824, +CN101160306,zhuanglang,庄浪,CN,China,中国,gansu,甘肃,pingliang,平凉,35.203426,106.04198,620825, +CN101160307,jingning,静宁,CN,China,中国,gansu,甘肃,pingliang,平凉,35.52524,105.73349,620826, +CN101160308,kongtong,崆峒,CN,China,中国,gansu,甘肃,pingliang,平凉,35.54173,106.68422,620802, +CN101160401,qingyang,庆阳,CN,China,中国,gansu,甘肃,qingyang,庆阳,35.73422,107.638374,"621001,621000", +CN101160402,xifeng,西峰,CN,China,中国,gansu,甘肃,qingyang,庆阳,35.73371,107.638824,621002, +CN101160403,huanxian,环县,CN,China,中国,gansu,甘肃,qingyang,庆阳,36.56932,107.308754,621022, +CN101160404,huachi,华池,CN,China,中国,gansu,甘肃,qingyang,庆阳,36.457302,107.98629,621023, +CN101160405,heshui,合水,CN,China,中国,gansu,甘肃,qingyang,庆阳,35.819004,108.01987,621024, +CN101160406,zhengning,正宁,CN,China,中国,gansu,甘肃,qingyang,庆阳,35.490643,108.36107,621025, +CN101160407,ningxian,宁县,CN,China,中国,gansu,甘肃,qingyang,庆阳,35.50201,107.92118,621026, +CN101160408,zhenyuan,镇原,CN,China,中国,gansu,甘肃,qingyang,庆阳,35.677807,107.19571,621027, +CN101160409,qingcheng,庆城,CN,China,中国,gansu,甘肃,qingyang,庆阳,36.013504,107.885666,621021, +CN101160501,wuwei,武威,CN,China,中国,gansu,甘肃,wuwei,武威,37.929996,102.6347,"620601,620600", +CN101160502,minqin,民勤,CN,China,中国,gansu,甘肃,wuwei,武威,38.624622,103.09065,620621, +CN101160503,gulang,古浪,CN,China,中国,gansu,甘肃,wuwei,武威,37.47057,102.89805,620622, +CN101160504,liangzhou,凉州,CN,China,中国,gansu,甘肃,wuwei,武威,37.93025,102.63449,620602, +CN101160505,tianzhu,天祝,CN,China,中国,gansu,甘肃,wuwei,武威,36.97168,103.14204,620623, +CN101160601,jinchang,金昌,CN,China,中国,gansu,甘肃,jinchang,金昌,38.514236,102.18789,"620301,620300", +CN101160602,yongchang,永昌,CN,China,中国,gansu,甘肃,jinchang,金昌,38.247353,101.971954,620321, +CN101160603,jinchuan,金川,CN,China,中国,gansu,甘肃,jinchang,金昌,38.513794,102.18768,620302, +CN101160701,zhangye,张掖,CN,China,中国,gansu,甘肃,zhangye,张掖,38.932896,100.455475,"620701,620700", +CN101160702,sunan,肃南,CN,China,中国,gansu,甘肃,zhangye,张掖,38.83727,99.61709,620721, +CN101160703,minle,民乐,CN,China,中国,gansu,甘肃,zhangye,张掖,38.434456,100.81662,620722, +CN101160704,linze,临泽,CN,China,中国,gansu,甘肃,zhangye,张掖,39.15215,100.166336,620723, +CN101160705,gaotai,高台,CN,China,中国,gansu,甘肃,zhangye,张掖,39.37631,99.81665,620724, +CN101160706,shandan,山丹,CN,China,中国,gansu,甘肃,zhangye,张掖,38.78484,101.08844,620725, +CN101160707,ganzhou,甘州,CN,China,中国,gansu,甘肃,zhangye,张掖,38.931774,100.454865,620702, +CN101160801,jiuquan,酒泉,CN,China,中国,gansu,甘肃,jiuquan,酒泉,39.744022,98.510796,"620901,620900", +CN101160802,suzhou,肃州,CN,China,中国,gansu,甘肃,jiuquan,酒泉,39.74386,98.511154,620902, +CN101160803,jinta,金塔,CN,China,中国,gansu,甘肃,jiuquan,酒泉,39.983036,98.90296,620921, +CN101160804,akesai,阿克塞,CN,China,中国,gansu,甘肃,jiuquan,酒泉,39.63164,94.33764,620924, +CN101160805,guazhou,瓜州,CN,China,中国,gansu,甘肃,jiuquan,酒泉,40.516525,95.780594,620922, +CN101160806,subei,肃北,CN,China,中国,gansu,甘肃,jiuquan,酒泉,39.51224,94.87728,620923, +CN101160807,yumen,玉门,CN,China,中国,gansu,甘肃,jiuquan,酒泉,40.28682,97.03721,620981, +CN101160808,dunhuang,敦煌,CN,China,中国,gansu,甘肃,jiuquan,酒泉,40.141117,94.664276,620982, +CN101160901,tianshui,天水,CN,China,中国,gansu,甘肃,tianshui,天水,34.57853,105.725,"620501,620500", +CN101160902,qinzhou,秦州,CN,China,中国,gansu,甘肃,tianshui,天水,34.578644,105.72448,620502, +CN101160903,qingshui,清水,CN,China,中国,gansu,甘肃,tianshui,天水,34.75287,106.13988,620521, +CN101160904,qinan,秦安,CN,China,中国,gansu,甘肃,tianshui,天水,34.862354,105.6733,620522, +CN101160905,gangu,甘谷,CN,China,中国,gansu,甘肃,tianshui,天水,34.747326,105.332344,620523, +CN101160906,wushan,武山,CN,China,中国,gansu,甘肃,tianshui,天水,34.721954,104.89169,620524, +CN101160907,zhangjiachuan,张家川,CN,China,中国,gansu,甘肃,tianshui,天水,34.993237,106.21242,620525, +CN101160908,maiji,麦积,CN,China,中国,gansu,甘肃,tianshui,天水,34.563503,105.89763,620503, +CN101161001,wudu,武都,CN,China,中国,gansu,甘肃,longnan,陇南,33.388157,104.92986,621202, +CN101161002,chengxian,成县,CN,China,中国,gansu,甘肃,longnan,陇南,33.739864,105.734436,621221, +CN101161003,wenxian,文县,CN,China,中国,gansu,甘肃,longnan,陇南,32.94217,104.68245,621222, +CN101161004,dangchang,宕昌,CN,China,中国,gansu,甘肃,longnan,陇南,34.042656,104.39448,621223, +CN101161005,kangxian,康县,CN,China,中国,gansu,甘肃,longnan,陇南,33.328266,105.609535,621224, +CN101161006,xihe,西和,CN,China,中国,gansu,甘肃,longnan,陇南,34.013718,105.299736,621225, +CN101161007,lixian,礼县,CN,China,中国,gansu,甘肃,longnan,陇南,34.18939,105.18162,621226, +CN101161008,huixian,徽县,CN,China,中国,gansu,甘肃,longnan,陇南,33.767784,106.08563,621227, +CN101161009,liangdang,两当,CN,China,中国,gansu,甘肃,longnan,陇南,33.91073,106.30696,621228, +CN101161010,longnan,陇南,CN,China,中国,gansu,甘肃,longnan,陇南,33.3886,104.92938,"621201,621200", +CN101161101,linxia,临夏,CN,China,中国,gansu,甘肃,linxia,临夏,35.59941,103.21163,"622901,622900,622921", +CN101161102,kangle,康乐,CN,China,中国,gansu,甘肃,linxia,临夏,35.371906,103.709854,622922, +CN101161103,yongjing,永靖,CN,China,中国,gansu,甘肃,linxia,临夏,35.938934,103.31987,622923, +CN101161104,guanghe,广河,CN,China,中国,gansu,甘肃,linxia,临夏,35.48169,103.57619,622924, +CN101161105,hezheng,和政,CN,China,中国,gansu,甘肃,linxia,临夏,35.425972,103.35036,622925, +CN101161106,dongxiang,东乡,CN,China,中国,gansu,甘肃,linxia,临夏,35.66383,103.389565,622926, +CN101161107,jishishan,积石山,CN,China,中国,gansu,甘肃,linxia,临夏,35.712906,102.87747,622927, +CN101161201,hezuo,合作,CN,China,中国,gansu,甘肃,gannan,甘南,34.985973,102.91149,623001, +CN101161202,lintan,临潭,CN,China,中国,gansu,甘肃,gannan,甘南,34.69164,103.35305,623021, +CN101161203,zhuoni,卓尼,CN,China,中国,gansu,甘肃,gannan,甘南,34.588165,103.50851,623022, +CN101161204,zhouqu,舟曲,CN,China,中国,gansu,甘肃,gannan,甘南,33.782963,104.37027,623023, +CN101161205,diebu,迭部,CN,China,中国,gansu,甘肃,gannan,甘南,34.055347,103.22101,623024, +CN101161206,maqu,玛曲,CN,China,中国,gansu,甘肃,gannan,甘南,33.99807,102.07577,623025, +CN101161207,luqu,碌曲,CN,China,中国,gansu,甘肃,gannan,甘南,34.589592,102.488495,623026, +CN101161208,xiahe,夏河,CN,China,中国,gansu,甘肃,gannan,甘南,35.20085,102.520744,623027, +CN101161209,gannan,甘南,CN,China,中国,gansu,甘肃,gannan,甘南,34.986355,102.91101,623000, +CN101161301,baiyin,白银,CN,China,中国,gansu,甘肃,baiyin,白银,36.54568,104.17361,"620401,620400,620402", +CN101161302,jingyuan,靖远,CN,China,中国,gansu,甘肃,baiyin,白银,36.561424,104.68697,620421, +CN101161303,huining,会宁,CN,China,中国,gansu,甘肃,baiyin,白银,35.692486,105.05434,620422, +CN101161304,pingchuan,平川,CN,China,中国,gansu,甘肃,baiyin,白银,36.72921,104.81921,620403, +CN101161305,jingtai,景泰,CN,China,中国,gansu,甘肃,baiyin,白银,37.19352,104.06639,620423, +CN101161401,jiayuguan,嘉峪关,CN,China,中国,gansu,甘肃,jiayuguan,嘉峪关,39.78653,98.277306,"620201,620200", +CN101170101,yinchuan,银川,CN,China,中国,ningxia,宁夏,yinchuan,银川,38.46637,106.278175,"640101,640100,640000", +CN101170102,yongning,永宁,CN,China,中国,ningxia,宁夏,yinchuan,银川,38.28043,106.253784,640121, +CN101170103,lingwu,灵武,CN,China,中国,ningxia,宁夏,yinchuan,银川,38.09406,106.3347,640181, +CN101170104,helan,贺兰,CN,China,中国,ningxia,宁夏,yinchuan,银川,38.55456,106.3459,640122, +CN101170105,xingqing,兴庆,CN,China,中国,ningxia,宁夏,yinchuan,银川,38.46747,106.2784,640104, +CN101170106,xixia,西夏,CN,China,中国,ningxia,宁夏,yinchuan,银川,38.492424,106.13212,640105, +CN101170107,jinfeng,金凤,CN,China,中国,ningxia,宁夏,yinchuan,银川,38.477352,106.228485,640106, +CN101170201,shizuishan,石嘴山,CN,China,中国,ningxia,宁夏,shizuishan,石嘴山,39.01333,106.376175,"640201,640200", +CN101170202,huinong,惠农,CN,China,中国,ningxia,宁夏,shizuishan,石嘴山,39.230095,106.77551,640205, +CN101170203,pingluo,平罗,CN,China,中国,ningxia,宁夏,shizuishan,石嘴山,38.90674,106.54489,640221, +CN101170204,taole,陶乐,CN,China,中国,ningxia,宁夏,shizuishan,石嘴山,38.81181,106.69325,640221, +CN101170205,dawukou,大武口,CN,China,中国,ningxia,宁夏,shizuishan,石嘴山,39.014156,106.37665,640202, +CN101170301,wuzhong,吴忠,CN,China,中国,ningxia,宁夏,wuzhong,吴忠,37.986164,106.19941,"640301,640300", +CN101170302,tongxin,同心,CN,China,中国,ningxia,宁夏,wuzhong,吴忠,36.9829,105.914764,640324, +CN101170303,yanchi,盐池,CN,China,中国,ningxia,宁夏,wuzhong,吴忠,37.78422,107.40541,640323, +CN101170304,litong,利通,CN,China,中国,ningxia,宁夏,wuzhong,吴忠,37.985966,106.19942,640302, +CN101170305,hongsibao,红寺堡,CN,China,中国,ningxia,宁夏,wuzhong,吴忠,37.421616,106.067314,640303, +CN101170306,qingtongxia,青铜峡,CN,China,中国,ningxia,宁夏,wuzhong,吴忠,38.021507,106.07539,640381, +CN101170401,guyuan,固原,CN,China,中国,ningxia,宁夏,guyuan,固原,36.004562,106.28524,"640401,640400", +CN101170402,xiji,西吉,CN,China,中国,ningxia,宁夏,guyuan,固原,35.965385,105.731804,640422, +CN101170403,longde,隆德,CN,China,中国,ningxia,宁夏,guyuan,固原,35.618233,106.12344,640423, +CN101170404,jinyuan,泾源,CN,China,中国,ningxia,宁夏,guyuan,固原,35.49344,106.33868,640424, +CN101170405,yuanzhou,原州,CN,China,中国,ningxia,宁夏,guyuan,固原,36.005337,106.28477,640402, +CN101170406,pengyang,彭阳,CN,China,中国,ningxia,宁夏,guyuan,固原,35.849976,106.64151,640425, +CN101170501,zhongwei,中卫,CN,China,中国,ningxia,宁夏,zhongwei,中卫,37.51495,105.18957,"640501,640500", +CN101170502,zhongning,中宁,CN,China,中国,ningxia,宁夏,zhongwei,中卫,37.489735,105.67578,640521, +CN101170503,shapotou,沙坡头,CN,China,中国,ningxia,宁夏,zhongwei,中卫,37.514565,105.19054,640502, +CN101170504,haiyuan,海原,CN,China,中国,ningxia,宁夏,zhongwei,中卫,36.562008,105.64732,640522, +CN101180101,zhengzhou,郑州,CN,China,中国,henan,河南,zhengzhou,郑州,34.757977,113.66541,"410101,410100,410000", +CN101180102,gongyi,巩义,CN,China,中国,henan,河南,zhengzhou,郑州,34.75218,112.98283,410181, +CN101180103,xingyang,荥阳,CN,China,中国,henan,河南,zhengzhou,郑州,34.789078,113.391525,410182, +CN101180104,dengfeng,登封,CN,China,中国,henan,河南,zhengzhou,郑州,34.459938,113.037766,410185, +CN101180105,xinmi,新密,CN,China,中国,henan,河南,zhengzhou,郑州,34.537846,113.380615,410183, +CN101180106,xinzheng,新郑,CN,China,中国,henan,河南,zhengzhou,郑州,34.39422,113.73967,410184, +CN101180107,zhongmou,中牟,CN,China,中国,henan,河南,zhengzhou,郑州,34.721977,114.02252,410122, +CN101180108,shangjie,上街,CN,China,中国,henan,河南,zhengzhou,郑州,34.80869,113.29828,410106, +CN101180109,zhongyuan,中原,CN,China,中国,henan,河南,zhengzhou,郑州,34.748287,113.61157,410102, +CN101180110,erqi,二七,CN,China,中国,henan,河南,zhengzhou,郑州,34.730934,113.645424,410103, +CN101180111,guancheng,管城,CN,China,中国,henan,河南,zhengzhou,郑州,34.746452,113.68531,410104, +CN101180112,jinshui,金水,CN,China,中国,henan,河南,zhengzhou,郑州,34.775837,113.686035,410105, +CN101180113,huiji,惠济,CN,China,中国,henan,河南,zhengzhou,郑州,34.82859,113.61836,410108, +CN101180201,anyang,安阳,CN,China,中国,henan,河南,anyang,安阳,36.103443,114.352486,"410501,410500,410522", +CN101180202,tangyin,汤阴,CN,China,中国,henan,河南,anyang,安阳,35.922348,114.36236,410523, +CN101180203,huaxian,滑县,CN,China,中国,henan,河南,anyang,安阳,35.574627,114.524,410526, +CN101180204,neihuang,内黄,CN,China,中国,henan,河南,anyang,安阳,35.9537,114.90458,410527, +CN101180205,linzhou,林州,CN,China,中国,henan,河南,anyang,安阳,36.063404,113.82377,410581, +CN101180206,wenfeng,文峰,CN,China,中国,henan,河南,anyang,安阳,36.098103,114.35256,410502, +CN101180207,beiguan,北关,CN,China,中国,henan,河南,anyang,安阳,36.10978,114.352646,410503, +CN101180208,yindou,殷都,CN,China,中国,henan,河南,anyang,安阳,36.108974,114.300095,410505, +CN101180209,longan,龙安,CN,China,中国,henan,河南,anyang,安阳,36.09557,114.323524,410506, +CN101180301,xinxiang,新乡,CN,China,中国,henan,河南,xinxiang,新乡,35.19002,113.80618,"410701,410700,410721", +CN101180302,huojia,获嘉,CN,China,中国,henan,河南,xinxiang,新乡,35.261684,113.65725,410724, +CN101180303,yuanyang,原阳,CN,China,中国,henan,河南,xinxiang,新乡,35.054,113.965965,410725, +CN101180304,huixian,辉县,CN,China,中国,henan,河南,xinxiang,新乡,35.46132,113.80252,410782, +CN101180305,weihui,卫辉,CN,China,中国,henan,河南,xinxiang,新乡,35.404297,114.06586,410781, +CN101180306,yanjin,延津,CN,China,中国,henan,河南,xinxiang,新乡,35.149513,114.20098,410726, +CN101180307,fengqiu,封丘,CN,China,中国,henan,河南,xinxiang,新乡,35.04057,114.42341,410727, +CN101180308,changyuan,长垣,CN,China,中国,henan,河南,xinxiang,新乡,35.19615,114.673805,410728, +CN101180309,hongqi,红旗,CN,China,中国,henan,河南,xinxiang,新乡,35.302685,113.87816,410702, +CN101180310,weibin,卫滨,CN,China,中国,henan,河南,xinxiang,新乡,35.304905,113.866066,410703, +CN101180311,fengquan,凤泉,CN,China,中国,henan,河南,xinxiang,新乡,35.379856,113.906715,410704, +CN101180312,muye,牧野,CN,China,中国,henan,河南,xinxiang,新乡,35.312973,113.89716,410711, +CN101180401,xuchang,许昌,CN,China,中国,henan,河南,xuchang,许昌,34.022957,113.826065,"411001,411000,411003", +CN101180402,yanling,鄢陵,CN,China,中国,henan,河南,xuchang,许昌,34.100502,114.18851,411024, +CN101180403,xiangcheng,襄城,CN,China,中国,henan,河南,xuchang,许昌,33.85594,113.493164,411025, +CN101180404,changge,长葛,CN,China,中国,henan,河南,xuchang,许昌,34.219257,113.76891,411082, +CN101180405,yuzhou,禹州,CN,China,中国,henan,河南,xuchang,许昌,34.154404,113.47131,411081, +CN101180406,weidou,魏都,CN,China,中国,henan,河南,xuchang,许昌,34.02711,113.82831,411002, +CN101180407,jianan,建安,CN,China,中国,henan,河南,xuchang,许昌,34.12467,113.82299,411003, +CN101180501,pingdingshan,平顶山,CN,China,中国,henan,河南,pingdingshan,平顶山,33.73524,113.30772,"410401,410400", +CN101180502,jiaxian,郏县,CN,China,中国,henan,河南,pingdingshan,平顶山,33.971992,113.22045,410425, +CN101180503,baofeng,宝丰,CN,China,中国,henan,河南,pingdingshan,平顶山,33.86636,113.06681,410421, +CN101180504,ruzhou,汝州,CN,China,中国,henan,河南,pingdingshan,平顶山,34.167408,112.84534,410482, +CN101180505,yexian,叶县,CN,China,中国,henan,河南,pingdingshan,平顶山,33.62125,113.3583,410422, +CN101180506,wugang,舞钢,CN,China,中国,henan,河南,pingdingshan,平顶山,33.302082,113.52625,410481, +CN101180507,lushan,鲁山,CN,China,中国,henan,河南,pingdingshan,平顶山,33.740326,112.9067,410423, +CN101180508,shilong,石龙,CN,China,中国,henan,河南,pingdingshan,平顶山,33.90154,112.889885,410404, +CN101180509,xinhua,新华,CN,China,中国,henan,河南,pingdingshan,平顶山,33.73758,113.299065,410402, +CN101180510,weidong,卫东,CN,China,中国,henan,河南,pingdingshan,平顶山,33.739285,113.310326,410403, +CN101180511,zhanhe,湛河,CN,China,中国,henan,河南,pingdingshan,平顶山,33.72568,113.32087,410411, +CN101180601,xinyang,信阳,CN,China,中国,henan,河南,xinyang,信阳,32.123276,114.07503,"411501,411500", +CN101180602,xixian,息县,CN,China,中国,henan,河南,xinyang,信阳,32.344746,114.740715,411528, +CN101180603,luoshan,罗山,CN,China,中国,henan,河南,xinyang,信阳,32.203205,114.53342,411521, +CN101180604,guangshan,光山,CN,China,中国,henan,河南,xinyang,信阳,32.0104,114.90358,411522, +CN101180605,xinxian,新县,CN,China,中国,henan,河南,xinyang,信阳,31.63515,114.87705,411523, +CN101180606,huaibin,淮滨,CN,China,中国,henan,河南,xinyang,信阳,32.45264,115.41545,411527, +CN101180607,huangchuan,潢川,CN,China,中国,henan,河南,xinyang,信阳,32.134026,115.050125,411526, +CN101180608,gushi,固始,CN,China,中国,henan,河南,xinyang,信阳,32.183075,115.66733,411525, +CN101180609,shangcheng,商城,CN,China,中国,henan,河南,xinyang,信阳,31.799982,115.406296,411524, +CN101180610,shihe,浉河,CN,China,中国,henan,河南,xinyang,信阳,32.123276,114.07503,411502, +CN101180611,pingqiao,平桥,CN,China,中国,henan,河南,xinyang,信阳,32.098396,114.12603,411503, +CN101180701,nanyang,南阳,CN,China,中国,henan,河南,nanyang,南阳,32.99908,112.54092,"411301,411300", +CN101180702,nanzhao,南召,CN,China,中国,henan,河南,nanyang,南阳,33.488617,112.435585,411321, +CN101180703,fangcheng,方城,CN,China,中国,henan,河南,nanyang,南阳,33.25514,113.01093,411322, +CN101180704,sheqi,社旗,CN,China,中国,henan,河南,nanyang,南阳,33.056126,112.93828,411327, +CN101180705,xixia,西峡,CN,China,中国,henan,河南,nanyang,南阳,33.302982,111.48577,411323, +CN101180706,neixiang,内乡,CN,China,中国,henan,河南,nanyang,南阳,33.046356,111.8438,411325, +CN101180707,zhenping,镇平,CN,China,中国,henan,河南,nanyang,南阳,33.03665,112.23272,411324, +CN101180708,xichuan,淅川,CN,China,中国,henan,河南,nanyang,南阳,33.136105,111.48903,411326, +CN101180709,xinye,新野,CN,China,中国,henan,河南,nanyang,南阳,32.524006,112.36562,411329, +CN101180710,tanghe,唐河,CN,China,中国,henan,河南,nanyang,南阳,32.687893,112.83849,411328, +CN101180711,dengzhou,邓州,CN,China,中国,henan,河南,nanyang,南阳,32.68164,112.09271,411381, +CN101180712,tongbai,桐柏,CN,China,中国,henan,河南,nanyang,南阳,32.367153,113.40606,411330, +CN101180713,wancheng,宛城,CN,China,中国,henan,河南,nanyang,南阳,32.994858,112.54459,411302, +CN101180714,wolong,卧龙,CN,China,中国,henan,河南,nanyang,南阳,32.989876,112.528786,411303, +CN101180801,kaifeng,开封,CN,China,中国,henan,河南,kaifeng,开封,34.79705,114.341446,"410201,410200", +CN101180802,qixian,杞县,CN,China,中国,henan,河南,kaifeng,开封,34.554585,114.77047,410221, +CN101180803,weishi,尉氏,CN,China,中国,henan,河南,kaifeng,开封,34.412254,114.193924,410223, +CN101180804,tongxu,通许,CN,China,中国,henan,河南,kaifeng,开封,34.477303,114.467735,410222, +CN101180805,lankao,兰考,CN,China,中国,henan,河南,kaifeng,开封,34.8299,114.82057,410225, +CN101180806,longting,龙亭,CN,China,中国,henan,河南,kaifeng,开封,34.79983,114.35335,410202, +CN101180807,shunhe,顺河,CN,China,中国,henan,河南,kaifeng,开封,34.80046,114.364876,410203, +CN101180808,gulou,鼓楼,CN,China,中国,henan,河南,kaifeng,开封,34.79238,114.3485,410204, +CN101180809,yuwangtai,禹王台,CN,China,中国,henan,河南,kaifeng,开封,34.779728,114.35024,410205, +CN101180810,xiangfu,祥符,CN,China,中国,henan,河南,kaifeng,开封,34.756477,114.43762,410212, +CN101180901,luoyang,洛阳,CN,China,中国,henan,河南,luoyang,洛阳,34.66304,112.43447,"410301,410300", +CN101180902,xinan,新安,CN,China,中国,henan,河南,luoyang,洛阳,34.72868,112.1414,410323, +CN101180903,mengjin,孟津,CN,China,中国,henan,河南,luoyang,洛阳,34.826485,112.44389,410322, +CN101180904,yiyang,宜阳,CN,China,中国,henan,河南,luoyang,洛阳,34.51648,112.17999,410327, +CN101180905,luoning,洛宁,CN,China,中国,henan,河南,luoyang,洛阳,34.38718,111.655396,410328, +CN101180906,yichuan,伊川,CN,China,中国,henan,河南,luoyang,洛阳,34.423416,112.42938,410329, +CN101180907,songxian,嵩县,CN,China,中国,henan,河南,luoyang,洛阳,34.13156,112.08777,410325, +CN101180908,yanshi,偃师,CN,China,中国,henan,河南,luoyang,洛阳,34.72304,112.78774,410381, +CN101180909,luanchuan,栾川,CN,China,中国,henan,河南,luoyang,洛阳,33.783195,111.618385,410324, +CN101180910,ruyang,汝阳,CN,China,中国,henan,河南,luoyang,洛阳,34.15323,112.473785,410326, +CN101180911,jili,吉利,CN,China,中国,henan,河南,luoyang,洛阳,34.899094,112.58479,410306, +CN101180912,laocheng,老城,CN,China,中国,henan,河南,luoyang,洛阳,34.682945,112.477295,410302, +CN101180913,xigong,西工,CN,China,中国,henan,河南,luoyang,洛阳,34.667847,112.44323,410303, +CN101180914,chanhe,瀍河,CN,China,中国,henan,河南,luoyang,洛阳,34.68474,112.49162,410304, +CN101180915,jianxi,涧西,CN,China,中国,henan,河南,luoyang,洛阳,34.65425,112.39925,410305, +CN101180916,luolong,洛龙,CN,China,中国,henan,河南,luoyang,洛阳,34.618557,112.456635,410311, +CN101181001,shangqiu,商丘,CN,China,中国,henan,河南,shangqiu,商丘,34.437054,115.6505,"411401,411400", +CN101181002,liangyuan,梁园,CN,China,中国,henan,河南,shangqiu,商丘,34.436554,115.65459,411402, +CN101181003,suixian,睢县,CN,China,中国,henan,河南,shangqiu,商丘,34.428432,115.07011,411422, +CN101181004,minquan,民权,CN,China,中国,henan,河南,shangqiu,商丘,34.648457,115.14815,411421, +CN101181005,yucheng,虞城,CN,China,中国,henan,河南,shangqiu,商丘,34.399635,115.86381,411425, +CN101181006,zhecheng,柘城,CN,China,中国,henan,河南,shangqiu,商丘,34.075275,115.307434,411424, +CN101181007,ningling,宁陵,CN,China,中国,henan,河南,shangqiu,商丘,34.4493,115.32005,411423, +CN101181008,xiayi,夏邑,CN,China,中国,henan,河南,shangqiu,商丘,34.240894,116.13989,411426, +CN101181009,yongcheng,永城,CN,China,中国,henan,河南,shangqiu,商丘,33.931316,116.44967,411481, +CN101181010,suiyang,睢阳,CN,China,中国,henan,河南,shangqiu,商丘,34.390537,115.65382,411403, +CN101181101,jiaozuo,焦作,CN,China,中国,henan,河南,jiaozuo,焦作,35.23904,113.238266,"410801,410800", +CN101181102,xiuwu,修武,CN,China,中国,henan,河南,jiaozuo,焦作,35.229923,113.447464,410821, +CN101181103,wuzhi,武陟,CN,China,中国,henan,河南,jiaozuo,焦作,35.09885,113.40833,410823, +CN101181104,qinyang,沁阳,CN,China,中国,henan,河南,jiaozuo,焦作,35.08901,112.93454,410882, +CN101181105,jiefang,解放,CN,China,中国,henan,河南,jiaozuo,焦作,35.241352,113.22613,410802, +CN101181106,boai,博爱,CN,China,中国,henan,河南,jiaozuo,焦作,35.17035,113.06931,410822, +CN101181107,wenxian,温县,CN,China,中国,henan,河南,jiaozuo,焦作,34.941235,113.07912,410825, +CN101181108,mengzhou,孟州,CN,China,中国,henan,河南,jiaozuo,焦作,34.90963,112.78708,410883, +CN101181109,zhongzhan,中站,CN,China,中国,henan,河南,jiaozuo,焦作,35.236145,113.17548,410803, +CN101181110,macun,马村,CN,China,中国,henan,河南,jiaozuo,焦作,35.265453,113.3217,410804, +CN101181111,shanyang,山阳,CN,China,中国,henan,河南,jiaozuo,焦作,35.21476,113.26766,410811, +CN101181201,hebi,鹤壁,CN,China,中国,henan,河南,hebi,鹤壁,35.748238,114.29544,"410601,410600", +CN101181202,xunxian,浚县,CN,China,中国,henan,河南,hebi,鹤壁,35.671284,114.55016,410621, +CN101181203,qixian,淇县,CN,China,中国,henan,河南,hebi,鹤壁,35.609478,114.20038,410622, +CN101181204,heshan,鹤山,CN,China,中国,henan,河南,hebi,鹤壁,35.936127,114.16655,410602, +CN101181205,shancheng,山城,CN,China,中国,henan,河南,hebi,鹤壁,35.896057,114.184204,410603, +CN101181206,qibin,淇滨,CN,China,中国,henan,河南,hebi,鹤壁,35.748383,114.293915,410611, +CN101181301,puyang,濮阳,CN,China,中国,henan,河南,puyang,濮阳,35.768234,115.0413,"410901,410900,410928", +CN101181302,taiqian,台前,CN,China,中国,henan,河南,puyang,濮阳,35.996475,115.85568,410927, +CN101181303,nanle,南乐,CN,China,中国,henan,河南,puyang,濮阳,36.075203,115.20434,410923, +CN101181304,qingfeng,清丰,CN,China,中国,henan,河南,puyang,濮阳,35.902412,115.107285,410922, +CN101181305,fanxian,范县,CN,China,中国,henan,河南,puyang,濮阳,35.85198,115.50421,410926, +CN101181306,hualong,华龙,CN,China,中国,henan,河南,puyang,濮阳,35.76047,115.03184,410902, +CN101181401,zhoukou,周口,CN,China,中国,henan,河南,zhoukou,周口,33.620358,114.64965,"411601,411600", +CN101181402,fugou,扶沟,CN,China,中国,henan,河南,zhoukou,周口,34.05406,114.392006,411621, +CN101181403,taikang,太康,CN,China,中国,henan,河南,zhoukou,周口,34.06531,114.853836,411627, +CN101181404,huaiyang,淮阳,CN,China,中国,henan,河南,zhoukou,周口,33.732548,114.87016,411626, +CN101181405,xihua,西华,CN,China,中国,henan,河南,zhoukou,周口,33.784378,114.53007,411622, +CN101181406,shangshui,商水,CN,China,中国,henan,河南,zhoukou,周口,33.543846,114.60927,411623, +CN101181407,xiangcheng,项城,CN,China,中国,henan,河南,zhoukou,周口,33.443085,114.89952,411681, +CN101181408,dancheng,郸城,CN,China,中国,henan,河南,zhoukou,周口,33.643852,115.189,411625, +CN101181409,luyi,鹿邑,CN,China,中国,henan,河南,zhoukou,周口,33.86107,115.48639,411628, +CN101181410,shenqiu,沈丘,CN,China,中国,henan,河南,zhoukou,周口,33.395515,115.07838,411624, +CN101181411,chuanhui,川汇,CN,China,中国,henan,河南,zhoukou,周口,33.614838,114.65214,411602, +CN101181501,luohe,漯河,CN,China,中国,henan,河南,luohe,漯河,33.575855,114.026405,"411101,411100", +CN101181502,linying,临颍,CN,China,中国,henan,河南,luohe,漯河,33.80609,113.93889,411122, +CN101181503,wuyang,舞阳,CN,China,中国,henan,河南,luohe,漯河,33.43628,113.610565,411121, +CN101181504,yuanhui,源汇,CN,China,中国,henan,河南,luohe,漯河,33.56544,114.017944,411102, +CN101181505,yancheng,郾城,CN,China,中国,henan,河南,luohe,漯河,33.588898,114.016815,411103, +CN101181506,zhaoling,召陵,CN,China,中国,henan,河南,luohe,漯河,33.567554,114.05169,411104, +CN101181601,zhumadian,驻马店,CN,China,中国,henan,河南,zhumadian,驻马店,32.980167,114.024734,"411701,411700", +CN101181602,xiping,西平,CN,China,中国,henan,河南,zhumadian,驻马店,33.382317,114.02686,411721, +CN101181603,suiping,遂平,CN,China,中国,henan,河南,zhumadian,驻马店,33.14698,114.00371,411728, +CN101181604,shangcai,上蔡,CN,China,中国,henan,河南,zhumadian,驻马店,33.264717,114.26689,411722, +CN101181605,runan,汝南,CN,China,中国,henan,河南,zhumadian,驻马店,33.004536,114.3595,411727, +CN101181606,biyang,泌阳,CN,China,中国,henan,河南,zhumadian,驻马店,32.72513,113.32605,411726, +CN101181607,pingyu,平舆,CN,China,中国,henan,河南,zhumadian,驻马店,32.955627,114.63711,411723, +CN101181608,xincai,新蔡,CN,China,中国,henan,河南,zhumadian,驻马店,32.749947,114.97524,411729, +CN101181609,queshan,确山,CN,China,中国,henan,河南,zhumadian,驻马店,32.801537,114.02668,411725, +CN101181610,zhengyang,正阳,CN,China,中国,henan,河南,zhumadian,驻马店,32.601826,114.38948,411724, +CN101181611,yicheng,驿城,CN,China,中国,henan,河南,zhumadian,驻马店,32.97756,114.02915,411702, +CN101181701,sanmenxia,三门峡,CN,China,中国,henan,河南,sanmenxia,三门峡,34.777336,111.1941,"411201,411200", +CN101181702,lingbao,灵宝,CN,China,中国,henan,河南,sanmenxia,三门峡,34.521263,110.88577,411282, +CN101181703,mianchi,渑池,CN,China,中国,henan,河南,sanmenxia,三门峡,34.76349,111.76299,411221, +CN101181704,lushi,卢氏,CN,China,中国,henan,河南,sanmenxia,三门峡,34.053993,111.05265,411224, +CN101181705,yima,义马,CN,China,中国,henan,河南,sanmenxia,三门峡,34.74687,111.869415,411281, +CN101181707,hubin,湖滨,CN,China,中国,henan,河南,sanmenxia,三门峡,34.77812,111.19487,411202, +CN101181708,shanzhou,陕州,CN,China,中国,henan,河南,sanmenxia,三门峡,34.720245,111.10385,411203, +CN101181801,jiyuan,济源,CN,China,中国,henan,河南,jiyuan,济源,35.090378,112.59005,419001, +CN101190101,nanjing,南京,CN,China,中国,jiangsu,江苏,nanjing,南京,32.041546,118.76741,"320101,320100,320000", +CN101190102,lishui,溧水,CN,China,中国,jiangsu,江苏,nanjing,南京,31.65306,119.02873,320117, +CN101190103,gaochun,高淳,CN,China,中国,jiangsu,江苏,nanjing,南京,31.327131,118.87589,320118, +CN101190104,jiangning,江宁,CN,China,中国,jiangsu,江苏,nanjing,南京,31.953419,118.850624,320115, +CN101190105,luhe,六合,CN,China,中国,jiangsu,江苏,nanjing,南京,32.340656,118.85065,320116, +CN101190107,pukou,浦口,CN,China,中国,jiangsu,江苏,nanjing,南京,32.05839,118.625305,320111, +CN101190108,xuanwu,玄武,CN,China,中国,jiangsu,江苏,nanjing,南京,32.05068,118.7922,320102, +CN101190109,qinhuai,秦淮,CN,China,中国,jiangsu,江苏,nanjing,南京,32.033817,118.78609,320104, +CN101190110,jianye,建邺,CN,China,中国,jiangsu,江苏,nanjing,南京,32.00454,118.73269,320105, +CN101190111,gulou,鼓楼,CN,China,中国,jiangsu,江苏,nanjing,南京,32.066967,118.76974,320106, +CN101190112,qixia,栖霞,CN,China,中国,jiangsu,江苏,nanjing,南京,32.102146,118.8087,320113, +CN101190113,yuhuatai,雨花台,CN,China,中国,jiangsu,江苏,nanjing,南京,31.995947,118.77207,320114, +CN101190201,wuxi,无锡,CN,China,中国,jiangsu,江苏,wuxi,无锡,31.57473,120.30167,"320201,320200", +CN101190202,jiangyin,江阴,CN,China,中国,jiangsu,江苏,wuxi,无锡,31.910984,120.275894,320281, +CN101190203,yixing,宜兴,CN,China,中国,jiangsu,江苏,wuxi,无锡,31.364384,119.82054,320282, +CN101190204,xishan,锡山,CN,China,中国,jiangsu,江苏,wuxi,无锡,31.58556,120.3573,320205, +CN101190205,huishan,惠山,CN,China,中国,jiangsu,江苏,wuxi,无锡,31.681019,120.30354,320206, +CN101190206,binhu,滨湖,CN,China,中国,jiangsu,江苏,wuxi,无锡,31.550228,120.26605,320211, +CN101190207,liangxi,梁溪,CN,China,中国,jiangsu,江苏,wuxi,无锡,31.575706,120.29659,320213, +CN101190208,xinwu,新吴,CN,China,中国,jiangsu,江苏,wuxi,无锡,31.550966,120.35278,320214, +CN101190301,zhenjiang,镇江,CN,China,中国,jiangsu,江苏,zhenjiang,镇江,32.204403,119.45275,"321101,321100", +CN101190302,danyang,丹阳,CN,China,中国,jiangsu,江苏,zhenjiang,镇江,31.991459,119.58191,321181, +CN101190303,yangzhong,扬中,CN,China,中国,jiangsu,江苏,zhenjiang,镇江,32.237267,119.82806,321182, +CN101190304,jurong,句容,CN,China,中国,jiangsu,江苏,zhenjiang,镇江,31.947355,119.16714,321183, +CN101190305,dantu,丹徒,CN,China,中国,jiangsu,江苏,zhenjiang,镇江,32.12897,119.43388,321112, +CN101190306,jingkou,京口,CN,China,中国,jiangsu,江苏,zhenjiang,镇江,32.206192,119.454575,321102, +CN101190307,runzhou,润州,CN,China,中国,jiangsu,江苏,zhenjiang,镇江,32.2135,119.41488,321111, +CN101190401,suzhou,苏州,CN,China,中国,jiangsu,江苏,suzhou,苏州,31.29938,120.61958,"320501,320500", +CN101190402,changshu,常熟,CN,China,中国,jiangsu,江苏,suzhou,苏州,31.658155,120.74852,320581, +CN101190403,zhangjiagang,张家港,CN,China,中国,jiangsu,江苏,suzhou,苏州,31.865553,120.54344,320582, +CN101190404,kunshan,昆山,CN,China,中国,jiangsu,江苏,suzhou,苏州,31.381926,120.95814,320583, +CN101190405,wuzhong,吴中,CN,China,中国,jiangsu,江苏,suzhou,苏州,31.27084,120.62462,320506, +CN101190406,huqiu,虎丘,CN,China,中国,jiangsu,江苏,suzhou,苏州,31.294846,120.56683,320505, +CN101190407,wujiang,吴江,CN,China,中国,jiangsu,江苏,suzhou,苏州,31.160404,120.6416,320509, +CN101190408,taicang,太仓,CN,China,中国,jiangsu,江苏,suzhou,苏州,31.452568,121.112274,320585, +CN101190409,xiangcheng,相城,CN,China,中国,jiangsu,江苏,suzhou,苏州,31.396685,120.61896,320507, +CN101190410,gusu,姑苏,CN,China,中国,jiangsu,江苏,suzhou,苏州,31.311415,120.622246,320508, +CN101190501,nantong,南通,CN,China,中国,jiangsu,江苏,nantong,南通,32.016212,120.86461,"320601,320600", +CN101190502,haian,海安,CN,China,中国,jiangsu,江苏,nantong,南通,32.54029,120.465996,320621, +CN101190503,rugao,如皋,CN,China,中国,jiangsu,江苏,nantong,南通,32.39159,120.56632,320682, +CN101190504,rudong,如东,CN,China,中国,jiangsu,江苏,nantong,南通,32.311832,121.18609,320623, +CN101190505,chongchuan,崇川,CN,China,中国,jiangsu,江苏,nantong,南通,32.015278,120.86635,320602, +CN101190506,gangzha,港闸,CN,China,中国,jiangsu,江苏,nantong,南通,32.0403,120.8339,320611, +CN101190507,qidong,启东,CN,China,中国,jiangsu,江苏,nantong,南通,31.810158,121.65972,320681, +CN101190508,haimen,海门,CN,China,中国,jiangsu,江苏,nantong,南通,31.893528,121.176605,320684, +CN101190509,tongzhou,通州,CN,China,中国,jiangsu,江苏,nantong,南通,32.084286,121.07317,320612, +CN101190601,yangzhou,扬州,CN,China,中国,jiangsu,江苏,yangzhou,扬州,32.393158,119.421005,"321001,321000", +CN101190602,baoying,宝应,CN,China,中国,jiangsu,江苏,yangzhou,扬州,33.23694,119.32128,321023, +CN101190603,yizheng,仪征,CN,China,中国,jiangsu,江苏,yangzhou,扬州,32.271965,119.18244,321081, +CN101190604,gaoyou,高邮,CN,China,中国,jiangsu,江苏,yangzhou,扬州,32.785164,119.44384,321084, +CN101190605,jiangdu,江都,CN,China,中国,jiangsu,江苏,yangzhou,扬州,32.426563,119.56748,321012, +CN101190606,hanjiang,邗江,CN,China,中国,jiangsu,江苏,yangzhou,扬州,32.3779,119.39777,321003, +CN101190607,guangling,广陵,CN,China,中国,jiangsu,江苏,yangzhou,扬州,32.392155,119.44227,321002, +CN101190701,yancheng,盐城,CN,China,中国,jiangsu,江苏,yancheng,盐城,33.377632,120.14,"320901,320900", +CN101190702,xiangshui,响水,CN,China,中国,jiangsu,江苏,yancheng,盐城,34.19996,119.579575,320921, +CN101190703,binhai,滨海,CN,China,中国,jiangsu,江苏,yancheng,盐城,33.989887,119.82844,320922, +CN101190704,funing,阜宁,CN,China,中国,jiangsu,江苏,yancheng,盐城,33.78573,119.805336,320923, +CN101190705,sheyang,射阳,CN,China,中国,jiangsu,江苏,yancheng,盐城,33.77378,120.25745,320924, +CN101190706,jianhu,建湖,CN,China,中国,jiangsu,江苏,yancheng,盐城,33.472622,119.793106,320925, +CN101190707,dongtai,东台,CN,China,中国,jiangsu,江苏,yancheng,盐城,32.853172,120.3141,320981, +CN101190708,dafeng,大丰,CN,China,中国,jiangsu,江苏,yancheng,盐城,33.19953,120.47032,320904, +CN101190709,yandu,盐都,CN,China,中国,jiangsu,江苏,yancheng,盐城,33.34129,120.139755,320903, +CN101190710,tinghu,亭湖,CN,China,中国,jiangsu,江苏,yancheng,盐城,33.38391,120.13608,320902, +CN101190801,xuzhou,徐州,CN,China,中国,jiangsu,江苏,xuzhou,徐州,34.26179,117.184814,"320301,320300", +CN101190802,tongshan,铜山,CN,China,中国,jiangsu,江苏,xuzhou,徐州,34.19288,117.18389,320312, +CN101190803,fengxian,丰县,CN,China,中国,jiangsu,江苏,xuzhou,徐州,34.696945,116.59289,320321, +CN101190804,peixian,沛县,CN,China,中国,jiangsu,江苏,xuzhou,徐州,34.729046,116.93718,320322, +CN101190805,pizhou,邳州,CN,China,中国,jiangsu,江苏,xuzhou,徐州,34.31471,117.96392,320382, +CN101190806,suining,睢宁,CN,China,中国,jiangsu,江苏,xuzhou,徐州,33.899223,117.95066,320324, +CN101190807,xinyi,新沂,CN,China,中国,jiangsu,江苏,xuzhou,徐州,34.36878,118.345825,320381, +CN101190808,gulou,鼓楼,CN,China,中国,jiangsu,江苏,xuzhou,徐州,34.269398,117.19294,320302, +CN101190809,yunlong,云龙,CN,China,中国,jiangsu,江苏,xuzhou,徐州,34.254807,117.19459,320303, +CN101190810,jiawang,贾汪,CN,China,中国,jiangsu,江苏,xuzhou,徐州,34.441643,117.45021,320305, +CN101190811,quanshan,泉山,CN,China,中国,jiangsu,江苏,xuzhou,徐州,34.26225,117.18223,320311, +CN101190901,huaian,淮安,CN,China,中国,jiangsu,江苏,huaian,淮安,33.597507,119.02126,"320801,320800", +CN101190902,jinhu,金湖,CN,China,中国,jiangsu,江苏,huaian,淮安,33.01816,119.01694,320831, +CN101190903,xuyi,盱眙,CN,China,中国,jiangsu,江苏,huaian,淮安,33.00439,118.49382,320830, +CN101190904,hongze,洪泽,CN,China,中国,jiangsu,江苏,huaian,淮安,33.294975,118.867874,320813, +CN101190905,lianshui,涟水,CN,China,中国,jiangsu,江苏,huaian,淮安,33.77131,119.266075,320826, +CN101190906,huaiyinqu,淮阴区,CN,China,中国,jiangsu,江苏,huaian,淮安,33.62245,119.02082,320804, +CN101190907,qingjiangpu,清江浦,CN,China,中国,jiangsu,江苏,huaian,淮安,33.591652,119.02562,320812, +CN101190908,huaianqu,淮安区,CN,China,中国,jiangsu,江苏,huaian,淮安,33.5075,119.14634,320803, +CN101191001,lianyungang,连云港,CN,China,中国,jiangsu,江苏,lianyungang,连云港,34.600018,119.17882,"320701,320700,320703", +CN101191002,donghai,东海,CN,China,中国,jiangsu,江苏,lianyungang,连云港,34.522858,118.76649,320722, +CN101191003,ganyu,赣榆,CN,China,中国,jiangsu,江苏,lianyungang,连云港,34.839153,119.12878,320707, +CN101191004,guanyun,灌云,CN,China,中国,jiangsu,江苏,lianyungang,连云港,34.298435,119.25574,320723, +CN101191005,guannan,灌南,CN,China,中国,jiangsu,江苏,lianyungang,连云港,34.092552,119.35233,320724, +CN101191006,haizhou,海州,CN,China,中国,jiangsu,江苏,lianyungang,连云港,34.601585,119.179794,320706, +CN101191007,lianyun,连云,CN,China,中国,jiangsu,江苏,lianyungang,连云港,34.760246,119.33878,320703, +CN101191101,changzhou,常州,CN,China,中国,jiangsu,江苏,changzhou,常州,31.772753,119.946976,"320401,320400", +CN101191102,liyang,溧阳,CN,China,中国,jiangsu,江苏,changzhou,常州,31.42708,119.487816,320481, +CN101191103,jintan,金坛,CN,China,中国,jiangsu,江苏,changzhou,常州,31.744398,119.573395,320413, +CN101191104,wujin,武进,CN,China,中国,jiangsu,江苏,changzhou,常州,31.718567,119.95877,320412, +CN101191105,tianning,天宁,CN,China,中国,jiangsu,江苏,changzhou,常州,31.779633,119.96378,320402, +CN101191106,zhonglou,钟楼,CN,China,中国,jiangsu,江苏,changzhou,常州,31.78096,119.94839,320404, +CN101191107,xinbei,新北,CN,China,中国,jiangsu,江苏,changzhou,常州,31.824663,119.974655,320411, +CN101191201,taizhou,泰州,CN,China,中国,jiangsu,江苏,taizhou,泰州,32.484882,119.91518,"321201,321200", +CN101191202,xinghua,兴化,CN,China,中国,jiangsu,江苏,taizhou,泰州,32.938065,119.840164,321281, +CN101191203,taixing,泰兴,CN,China,中国,jiangsu,江苏,taizhou,泰州,32.168785,120.020226,321283, +CN101191204,jiangyan,姜堰,CN,China,中国,jiangsu,江苏,taizhou,泰州,32.508484,120.14821,321204, +CN101191205,jingjiang,靖江,CN,China,中国,jiangsu,江苏,taizhou,泰州,32.01817,120.26825,321282, +CN101191206,hailing,海陵,CN,China,中国,jiangsu,江苏,taizhou,泰州,32.488407,119.92019,321202, +CN101191207,gaogang,高港,CN,China,中国,jiangsu,江苏,taizhou,泰州,32.3157,119.88166,321203, +CN101191301,suqian,宿迁,CN,China,中国,jiangsu,江苏,suqian,宿迁,33.96301,118.27516,"321301,321300", +CN101191302,shuyang,沭阳,CN,China,中国,jiangsu,江苏,suqian,宿迁,34.129097,118.77589,321322, +CN101191303,siyang,泗阳,CN,China,中国,jiangsu,江苏,suqian,宿迁,33.711433,118.68128,321323, +CN101191304,sihong,泗洪,CN,China,中国,jiangsu,江苏,suqian,宿迁,33.45654,118.21182,321324, +CN101191305,suyu,宿豫,CN,China,中国,jiangsu,江苏,suqian,宿迁,33.94107,118.33001,321311, +CN101191306,sucheng,宿城,CN,China,中国,jiangsu,江苏,suqian,宿迁,33.937725,118.278984,321302, +CN101200101,wuhan,武汉,CN,China,中国,hubei,湖北,wuhan,武汉,30.584354,114.29857,"420101,420100,420000", +CN101200102,caidian,蔡甸,CN,China,中国,hubei,湖北,wuhan,武汉,30.582186,114.02934,420114, +CN101200103,huangpi,黄陂,CN,China,中国,hubei,湖北,wuhan,武汉,30.874155,114.37402,420116, +CN101200104,xinzhou,新洲,CN,China,中国,hubei,湖北,wuhan,武汉,30.84215,114.80211,420117, +CN101200105,jiangxia,江夏,CN,China,中国,hubei,湖北,wuhan,武汉,30.349045,114.31396,420115, +CN101200106,dongxihu,东西湖,CN,China,中国,hubei,湖北,wuhan,武汉,30.622467,114.14249,420112, +CN101200107,jiangan,江岸,CN,China,中国,hubei,湖北,wuhan,武汉,30.594912,114.30304,420102, +CN101200108,jianghan,江汉,CN,China,中国,hubei,湖北,wuhan,武汉,30.578772,114.28311,420103, +CN101200109,qiaokou,硚口,CN,China,中国,hubei,湖北,wuhan,武汉,30.57061,114.264565,420104, +CN101200110,hanyang,汉阳,CN,China,中国,hubei,湖北,wuhan,武汉,30.549326,114.26581,420105, +CN101200111,wuchang,武昌,CN,China,中国,hubei,湖北,wuhan,武汉,30.546535,114.30734,420106, +CN101200112,qingshan,青山,CN,China,中国,hubei,湖北,wuhan,武汉,30.634214,114.39707,420107, +CN101200113,hongshan,洪山,CN,China,中国,hubei,湖北,wuhan,武汉,30.50426,114.40072,420111, +CN101200114,hannan,汉南,CN,China,中国,hubei,湖北,wuhan,武汉,30.309637,114.08124,420113, +CN101200201,xiangyang,襄阳,CN,China,中国,hubei,湖北,xiangyang,襄阳,32.042427,112.14415,"420601,420600", +CN101200202,xiangzhou,襄州,CN,China,中国,hubei,湖北,xiangyang,襄阳,32.085518,112.19738,420607, +CN101200203,baokang,保康,CN,China,中国,hubei,湖北,xiangyang,襄阳,31.873507,111.26224,420626, +CN101200204,nanzhang,南漳,CN,China,中国,hubei,湖北,xiangyang,襄阳,31.77692,111.84442,420624, +CN101200205,yicheng,宜城,CN,China,中国,hubei,湖北,xiangyang,襄阳,31.709204,112.261444,420684, +CN101200206,laohekou,老河口,CN,China,中国,hubei,湖北,xiangyang,襄阳,32.385437,111.675735,420682, +CN101200207,gucheng,谷城,CN,China,中国,hubei,湖北,xiangyang,襄阳,32.262676,111.640144,420625, +CN101200208,zaoyang,枣阳,CN,China,中国,hubei,湖北,xiangyang,襄阳,32.12308,112.76527,420683, +CN101200209,xiangcheng,襄城,CN,China,中国,hubei,湖北,xiangyang,襄阳,32.015087,112.15033,420602, +CN101200210,fancheng,樊城,CN,China,中国,hubei,湖北,xiangyang,襄阳,32.05859,112.13957,420606, +CN101200301,ezhou,鄂州,CN,China,中国,hubei,湖北,ezhou,鄂州,30.396536,114.890594,"420701,420700", +CN101200302,liangzihu,梁子湖,CN,China,中国,hubei,湖北,ezhou,鄂州,30.09819,114.68197,420702, +CN101200303,huarong,华容,CN,China,中国,hubei,湖北,ezhou,鄂州,30.534468,114.74148,420703, +CN101200304,echeng,鄂城,CN,China,中国,hubei,湖北,ezhou,鄂州,30.39669,114.890015,420704, +CN101200401,xiaogan,孝感,CN,China,中国,hubei,湖北,xiaogan,孝感,30.926422,113.92666,"420901,420900", +CN101200402,anlu,安陆,CN,China,中国,hubei,湖北,xiaogan,孝感,31.26174,113.6904,420982, +CN101200403,yunmeng,云梦,CN,China,中国,hubei,湖北,xiaogan,孝感,31.02169,113.75062,420923, +CN101200404,dawu,大悟,CN,China,中国,hubei,湖北,xiaogan,孝感,31.565483,114.12625,420922, +CN101200405,yingcheng,应城,CN,China,中国,hubei,湖北,xiaogan,孝感,30.939037,113.573845,420981, +CN101200406,hanchuan,汉川,CN,China,中国,hubei,湖北,xiaogan,孝感,30.652164,113.835304,420984, +CN101200407,xiaochang,孝昌,CN,China,中国,hubei,湖北,xiaogan,孝感,31.251617,113.98896,420921, +CN101200408,xiaonan,孝南,CN,China,中国,hubei,湖北,xiaogan,孝感,30.925966,113.92585,420902, +CN101200501,huanggang,黄冈,CN,China,中国,hubei,湖北,huanggang,黄冈,30.447712,114.879364,"421101,421100", +CN101200502,hongan,红安,CN,China,中国,hubei,湖北,huanggang,黄冈,31.284777,114.6151,421122, +CN101200503,macheng,麻城,CN,China,中国,hubei,湖北,huanggang,黄冈,31.177906,115.02541,421181, +CN101200504,luotian,罗田,CN,China,中国,hubei,湖北,huanggang,黄冈,30.78168,115.39899,421123, +CN101200505,yingshan,英山,CN,China,中国,hubei,湖北,huanggang,黄冈,30.735794,115.67753,421124, +CN101200506,xishui,浠水,CN,China,中国,hubei,湖北,huanggang,黄冈,30.454838,115.26344,421125, +CN101200507,qichun,蕲春,CN,China,中国,hubei,湖北,huanggang,黄冈,30.234926,115.43397,421126, +CN101200508,huangmei,黄梅,CN,China,中国,hubei,湖北,huanggang,黄冈,30.075113,115.94255,421127, +CN101200509,wuxue,武穴,CN,China,中国,hubei,湖北,huanggang,黄冈,29.849342,115.56242,421182, +CN101200510,tuanfeng,团风,CN,China,中国,hubei,湖北,huanggang,黄冈,30.63569,114.87203,421121, +CN101200511,huangzhou,黄州,CN,China,中国,hubei,湖北,huanggang,黄冈,30.447435,114.87894,421102, +CN101200601,huangshi,黄石,CN,China,中国,hubei,湖北,huangshi,黄石,30.220074,115.07705,"420201,420200", +CN101200602,daye,大冶,CN,China,中国,hubei,湖北,huangshi,黄石,30.098804,114.97484,420281, +CN101200603,yangxin,阳新,CN,China,中国,hubei,湖北,huangshi,黄石,29.841572,115.21288,420222, +CN101200604,tieshan,铁山,CN,China,中国,hubei,湖北,huangshi,黄石,30.20601,114.90137,420205, +CN101200605,xialu,下陆,CN,China,中国,hubei,湖北,huangshi,黄石,30.177845,114.97575,420204, +CN101200606,xisaishan,西塞山,CN,China,中国,hubei,湖北,huangshi,黄石,30.205364,115.09335,420203, +CN101200607,huangshigang,黄石港,CN,China,中国,hubei,湖北,huangshi,黄石,30.212086,115.090164,420202, +CN101200701,xianning,咸宁,CN,China,中国,hubei,湖北,xianning,咸宁,29.832798,114.328964,"421201,421200", +CN101200702,chibi,赤壁,CN,China,中国,hubei,湖北,xianning,咸宁,29.716879,113.88366,421281, +CN101200703,jiayu,嘉鱼,CN,China,中国,hubei,湖北,xianning,咸宁,29.973364,113.92155,421221, +CN101200704,chongyang,崇阳,CN,China,中国,hubei,湖北,xianning,咸宁,29.54101,114.04996,421223, +CN101200705,tongcheng,通城,CN,China,中国,hubei,湖北,xianning,咸宁,29.246077,113.81413,421222, +CN101200706,tongshan,通山,CN,China,中国,hubei,湖北,xianning,咸宁,29.604456,114.493164,421224, +CN101200707,xianan,咸安,CN,China,中国,hubei,湖北,xianning,咸宁,29.824717,114.33389,421202, +CN101200801,jingzhou,荆州,CN,China,中国,hubei,湖北,jingzhou,荆州,30.326857,112.23813,"421001,421000,421003", +CN101200802,jiangling,江陵,CN,China,中国,hubei,湖北,jingzhou,荆州,30.033918,112.41735,421024, +CN101200803,gongan,公安,CN,China,中国,hubei,湖北,jingzhou,荆州,30.059065,112.23018,421022, +CN101200804,shishou,石首,CN,China,中国,hubei,湖北,jingzhou,荆州,29.716436,112.40887,421081, +CN101200805,jianli,监利,CN,China,中国,hubei,湖北,jingzhou,荆州,29.82008,112.90434,421023, +CN101200806,honghu,洪湖,CN,China,中国,hubei,湖北,jingzhou,荆州,29.81297,113.47031,421083, +CN101200807,songzi,松滋,CN,China,中国,hubei,湖北,jingzhou,荆州,30.176037,111.77818,421087, +CN101200808,shashi,沙市,CN,China,中国,hubei,湖北,jingzhou,荆州,30.315895,112.25743,421002, +CN101200901,yichang,宜昌,CN,China,中国,hubei,湖北,yichang,宜昌,30.702637,111.29084,"420501,420500", +CN101200902,yuanan,远安,CN,China,中国,hubei,湖北,yichang,宜昌,31.059626,111.64331,420525, +CN101200903,zigui,秭归,CN,China,中国,hubei,湖北,yichang,宜昌,30.823908,110.97678,420527, +CN101200904,xingshan,兴山,CN,China,中国,hubei,湖北,yichang,宜昌,31.34795,110.7545,420526, +CN101200905,xiling,西陵,CN,China,中国,hubei,湖北,yichang,宜昌,30.702477,111.29547,420502, +CN101200906,wufeng,五峰,CN,China,中国,hubei,湖北,yichang,宜昌,30.199251,110.674934,420529, +CN101200907,dangyang,当阳,CN,China,中国,hubei,湖北,yichang,宜昌,30.824492,111.79342,420582, +CN101200908,changyang,长阳,CN,China,中国,hubei,湖北,yichang,宜昌,30.466534,111.19848,420528, +CN101200909,yidu,宜都,CN,China,中国,hubei,湖北,yichang,宜昌,30.387234,111.45437,420581, +CN101200910,zhijiang,枝江,CN,China,中国,hubei,湖北,yichang,宜昌,30.425364,111.7518,420583, +CN101200911,sanxia,三峡,CN,China,中国,hubei,湖北,yichang,宜昌,30.795382,111.16401,420506, +CN101200912,yiling,夷陵,CN,China,中国,hubei,湖北,yichang,宜昌,30.770199,111.326744,420506, +CN101200913,wujiagang,伍家岗,CN,China,中国,hubei,湖北,yichang,宜昌,30.679052,111.30721,420503, +CN101200914,dianjun,点军,CN,China,中国,hubei,湖北,yichang,宜昌,30.692322,111.268166,420504, +CN101200915,xiaoting,猇亭,CN,China,中国,hubei,湖北,yichang,宜昌,30.530745,111.42764,420505, +CN101201001,enshi,恩施,CN,China,中国,hubei,湖北,enshi,恩施,30.283113,109.48699,"422801,422800", +CN101201002,lichuan,利川,CN,China,中国,hubei,湖北,enshi,恩施,30.294247,108.94349,422802, +CN101201003,jianshi,建始,CN,China,中国,hubei,湖北,enshi,恩施,30.601631,109.72382,422822, +CN101201004,xianfeng,咸丰,CN,China,中国,hubei,湖北,enshi,恩施,29.678967,109.15041,422826, +CN101201005,xuanen,宣恩,CN,China,中国,hubei,湖北,enshi,恩施,29.98867,109.48282,422825, +CN101201006,hefeng,鹤峰,CN,China,中国,hubei,湖北,enshi,恩施,29.887299,110.0337,422828, +CN101201007,laifeng,来凤,CN,China,中国,hubei,湖北,enshi,恩施,29.506945,109.408325,422827, +CN101201008,badong,巴东,CN,China,中国,hubei,湖北,enshi,恩施,31.041403,110.33666,422823, +CN101201101,shiyan,十堰,CN,China,中国,hubei,湖北,shiyan,十堰,32.646908,110.78792,"420301,420300", +CN101201102,zhuxi,竹溪,CN,China,中国,hubei,湖北,shiyan,十堰,32.315342,109.71719,420324, +CN101201103,yunxi,郧西,CN,China,中国,hubei,湖北,shiyan,十堰,32.99146,110.426476,420322, +CN101201104,yunyang,郧阳,CN,China,中国,hubei,湖北,shiyan,十堰,32.83827,110.812096,420304, +CN101201105,zhushan,竹山,CN,China,中国,hubei,湖北,shiyan,十堰,32.22586,110.2296,420323, +CN101201106,fangxian,房县,CN,China,中国,hubei,湖北,shiyan,十堰,32.055,110.74197,420325, +CN101201107,danjiangkou,丹江口,CN,China,中国,hubei,湖北,shiyan,十堰,32.538837,111.513794,420381, +CN101201108,maojian,茅箭,CN,China,中国,hubei,湖北,shiyan,十堰,32.644463,110.78621,420302, +CN101201109,zhangwan,张湾,CN,China,中国,hubei,湖北,shiyan,十堰,32.652515,110.77236,420303, +CN101201201,shennongjia,神农架,CN,China,中国,hubei,湖北,shennongjia,神农架,31.74445,110.671524,429021, +CN101201301,suizhou,随州,CN,China,中国,hubei,湖北,suizhou,随州,31.717497,113.37377,"421301,421300", +CN101201302,guangshui,广水,CN,China,中国,hubei,湖北,suizhou,随州,31.617731,113.8266,421381, +CN101201303,zengdou,曾都,CN,China,中国,hubei,湖北,suizhou,随州,31.717522,113.37452,421303, +CN101201304,suixian,随县,CN,China,中国,hubei,湖北,suizhou,随州,31.854246,113.301384,421321, +CN101201401,jingmen,荆门,CN,China,中国,hubei,湖北,jingmen,荆门,31.03542,112.204254,"420801,420800", +CN101201402,zhongxiang,钟祥,CN,China,中国,hubei,湖北,jingmen,荆门,31.165573,112.587265,420881, +CN101201403,jingshan,京山,CN,China,中国,hubei,湖北,jingmen,荆门,31.022457,113.11459,420821, +CN101201404,duodao,掇刀,CN,China,中国,hubei,湖北,jingmen,荆门,30.980799,112.19841,420804, +CN101201405,shayang,沙洋,CN,China,中国,hubei,湖北,jingmen,荆门,30.70359,112.595215,420822, +CN101201406,dongbao,东宝,CN,China,中国,hubei,湖北,jingmen,荆门,31.03346,112.2048,420802, +CN101201501,tianmen,天门,CN,China,中国,hubei,湖北,tianmen,天门,30.65306,113.16586,429006, +CN101201601,xiantao,仙桃,CN,China,中国,hubei,湖北,xiantao,仙桃,30.364952,113.45397,429004, +CN101201701,qianjiang,潜江,CN,China,中国,hubei,湖北,qianjiang,潜江,30.421215,112.896866,429005, +CN101210101,hangzhou,杭州,CN,China,中国,zhejiang,浙江,hangzhou,杭州,30.287458,120.15358,"330101,330100,330000", +CN101210102,xiaoshan,萧山,CN,China,中国,zhejiang,浙江,hangzhou,杭州,30.162931,120.27069,330109, +CN101210103,tonglu,桐庐,CN,China,中国,zhejiang,浙江,hangzhou,杭州,29.797438,119.68504,330122, +CN101210104,chunan,淳安,CN,China,中国,zhejiang,浙江,hangzhou,杭州,29.604177,119.04427,330127, +CN101210105,jiande,建德,CN,China,中国,zhejiang,浙江,hangzhou,杭州,29.472284,119.27909,330182, +CN101210106,yuhang,余杭,CN,China,中国,zhejiang,浙江,hangzhou,杭州,30.421186,120.301735,330110, +CN101210107,linan,临安,CN,China,中国,zhejiang,浙江,hangzhou,杭州,30.231153,119.7151,330112, +CN101210108,fuyang,富阳,CN,China,中国,zhejiang,浙江,hangzhou,杭州,30.049871,119.94987,330111, +CN101210109,shangcheng,上城,CN,China,中国,zhejiang,浙江,hangzhou,杭州,30.250237,120.17146,330102, +CN101210110,xiacheng,下城,CN,China,中国,zhejiang,浙江,hangzhou,杭州,30.276272,120.17276,330103, +CN101210111,jianggan,江干,CN,China,中国,zhejiang,浙江,hangzhou,杭州,30.266603,120.20264,330104, +CN101210112,gongshu,拱墅,CN,China,中国,zhejiang,浙江,hangzhou,杭州,30.314697,120.150055,330105, +CN101210113,xihu,西湖,CN,China,中国,zhejiang,浙江,hangzhou,杭州,30.272934,120.14738,330106, +CN101210114,binjiang,滨江,CN,China,中国,zhejiang,浙江,hangzhou,杭州,30.206615,120.21062,330108, +CN101210201,huzhou,湖州,CN,China,中国,zhejiang,浙江,huzhou,湖州,30.867199,120.1024,"330501,330500", +CN101210202,changxing,长兴,CN,China,中国,zhejiang,浙江,huzhou,湖州,31.00475,119.910126,330522, +CN101210203,anji,安吉,CN,China,中国,zhejiang,浙江,huzhou,湖州,30.631973,119.68789,330523, +CN101210204,deqing,德清,CN,China,中国,zhejiang,浙江,huzhou,湖州,30.534927,119.96766,330521, +CN101210205,wuxing,吴兴,CN,China,中国,zhejiang,浙江,huzhou,湖州,30.867252,120.10142,330502, +CN101210206,nanxun,南浔,CN,China,中国,zhejiang,浙江,huzhou,湖州,30.872742,120.4172,330503, +CN101210301,jiaxing,嘉兴,CN,China,中国,zhejiang,浙江,jiaxing,嘉兴,30.762653,120.75086,"330401,330400", +CN101210302,jiashan,嘉善,CN,China,中国,zhejiang,浙江,jiaxing,嘉兴,30.841352,120.92187,330421, +CN101210303,haining,海宁,CN,China,中国,zhejiang,浙江,jiaxing,嘉兴,30.525543,120.68882,330481, +CN101210304,tongxiang,桐乡,CN,China,中国,zhejiang,浙江,jiaxing,嘉兴,30.629065,120.55109,330483, +CN101210305,pinghu,平湖,CN,China,中国,zhejiang,浙江,jiaxing,嘉兴,30.698921,121.01466,330482, +CN101210306,haiyan,海盐,CN,China,中国,zhejiang,浙江,jiaxing,嘉兴,30.522223,120.94202,330424, +CN101210307,nanhu,南湖,CN,China,中国,zhejiang,浙江,jiaxing,嘉兴,30.764652,120.749954,330402, +CN101210308,xiuzhou,秀洲,CN,China,中国,zhejiang,浙江,jiaxing,嘉兴,30.763323,120.72043,330411, +CN101210401,ningbo,宁波,CN,China,中国,zhejiang,浙江,ningbo,宁波,29.868387,121.54979,"330201,330200", +CN101210402,haishu,海曙,CN,China,中国,zhejiang,浙江,ningbo,宁波,29.874453,121.539696,330203, +CN101210403,cixi,慈溪,CN,China,中国,zhejiang,浙江,ningbo,宁波,30.177141,121.248055,330282, +CN101210404,yuyao,余姚,CN,China,中国,zhejiang,浙江,ningbo,宁波,30.045404,121.156296,330281, +CN101210405,fenghua,奉化,CN,China,中国,zhejiang,浙江,ningbo,宁波,29.662348,121.41089,330213, +CN101210406,xiangshan,象山,CN,China,中国,zhejiang,浙江,ningbo,宁波,29.470205,121.87709,330225, +CN101210408,ninghai,宁海,CN,China,中国,zhejiang,浙江,ningbo,宁波,29.299835,121.43261,330226, +CN101210409,jiangbei,江北,CN,China,中国,zhejiang,浙江,ningbo,宁波,29.888361,121.55928,330205, +CN101210410,beilun,北仑,CN,China,中国,zhejiang,浙江,ningbo,宁波,29.90944,121.83131,330206, +CN101210411,yinzhou,鄞州,CN,China,中国,zhejiang,浙江,ningbo,宁波,29.831661,121.55843,330212, +CN101210412,zhenhai,镇海,CN,China,中国,zhejiang,浙江,ningbo,宁波,29.952106,121.713165,330211, +CN101210501,yuecheng,越城,CN,China,中国,zhejiang,浙江,shaoxing,绍兴,29.996992,120.58531,330602, +CN101210502,zhuji,诸暨,CN,China,中国,zhejiang,浙江,shaoxing,绍兴,29.713661,120.24432,330681, +CN101210503,shangyu,上虞,CN,China,中国,zhejiang,浙江,shaoxing,绍兴,30.01677,120.87418,330604, +CN101210504,xinchang,新昌,CN,China,中国,zhejiang,浙江,shaoxing,绍兴,29.501205,120.90566,330624, +CN101210505,shengzhou,嵊州,CN,China,中国,zhejiang,浙江,shaoxing,绍兴,29.586605,120.82888,330683, +CN101210506,keqiao,柯桥,CN,China,中国,zhejiang,浙江,shaoxing,绍兴,30.078037,120.476074,330603, +CN101210507,shaoxing,绍兴,CN,China,中国,zhejiang,浙江,shaoxing,绍兴,29.997116,120.582115,"330601,330600", +CN101210601,taizhou,台州,CN,China,中国,zhejiang,浙江,taizhou,台州,28.661379,121.4286,"331001,331000", +CN101210603,yuhuan,玉环,CN,China,中国,zhejiang,浙江,taizhou,台州,28.12842,121.23234,331083, +CN101210604,sanmen,三门,CN,China,中国,zhejiang,浙江,taizhou,台州,29.118956,121.37643,331022, +CN101210605,tiantai,天台,CN,China,中国,zhejiang,浙江,taizhou,台州,29.141127,121.03123,331023, +CN101210606,xianju,仙居,CN,China,中国,zhejiang,浙江,taizhou,台州,28.849213,120.73508,331024, +CN101210607,wenling,温岭,CN,China,中国,zhejiang,浙江,taizhou,台州,28.36878,121.37361,331081, +CN101210610,linhai,临海,CN,China,中国,zhejiang,浙江,taizhou,台州,28.845442,121.131226,331082, +CN101210611,jiaojiang,椒江,CN,China,中国,zhejiang,浙江,taizhou,台州,28.67615,121.431046,331002, +CN101210612,huangyan,黄岩,CN,China,中国,zhejiang,浙江,taizhou,台州,28.64488,121.26214,331003, +CN101210613,luqiao,路桥,CN,China,中国,zhejiang,浙江,taizhou,台州,28.581799,121.37292,331004, +CN101210701,wenzhou,温州,CN,China,中国,zhejiang,浙江,wenzhou,温州,28.000574,120.67211,"330301,330300", +CN101210702,taishun,泰顺,CN,China,中国,zhejiang,浙江,wenzhou,温州,27.557308,119.71624,330329, +CN101210703,wencheng,文成,CN,China,中国,zhejiang,浙江,wenzhou,温州,27.789133,120.09245,330328, +CN101210704,pingyang,平阳,CN,China,中国,zhejiang,浙江,wenzhou,温州,27.6693,120.564384,330326, +CN101210705,ruian,瑞安,CN,China,中国,zhejiang,浙江,wenzhou,温州,27.779322,120.64617,330381, +CN101210706,dongtou,洞头,CN,China,中国,zhejiang,浙江,wenzhou,温州,27.836058,121.15618,330305, +CN101210707,yueqing,乐清,CN,China,中国,zhejiang,浙江,wenzhou,温州,28.116083,120.96715,330382, +CN101210708,yongjia,永嘉,CN,China,中国,zhejiang,浙江,wenzhou,温州,28.153887,120.69097,330324, +CN101210709,cangnan,苍南,CN,China,中国,zhejiang,浙江,wenzhou,温州,27.507744,120.40626,330327, +CN101210710,lucheng,鹿城,CN,China,中国,zhejiang,浙江,wenzhou,温州,28.003351,120.67423,330302, +CN101210711,longwan,龙湾,CN,China,中国,zhejiang,浙江,wenzhou,温州,27.970255,120.763466,330303, +CN101210712,ouhai,瓯海,CN,China,中国,zhejiang,浙江,wenzhou,温州,28.006445,120.637146,330304, +CN101210801,lishui,丽水,CN,China,中国,zhejiang,浙江,lishui,丽水,28.451994,119.92178,"331101,331100", +CN101210802,suichang,遂昌,CN,China,中国,zhejiang,浙江,lishui,丽水,28.5924,119.27589,331123, +CN101210803,longquan,龙泉,CN,China,中国,zhejiang,浙江,lishui,丽水,28.069178,119.13232,331181, +CN101210804,jinyun,缙云,CN,China,中国,zhejiang,浙江,lishui,丽水,28.654207,120.078964,331122, +CN101210805,qingtian,青田,CN,China,中国,zhejiang,浙江,lishui,丽水,28.135246,120.29194,331121, +CN101210806,yunhe,云和,CN,China,中国,zhejiang,浙江,lishui,丽水,28.111076,119.56946,331125, +CN101210807,qingyuan,庆元,CN,China,中国,zhejiang,浙江,lishui,丽水,27.61823,119.06723,331126, +CN101210808,songyang,松阳,CN,China,中国,zhejiang,浙江,lishui,丽水,28.449938,119.48529,331124, +CN101210809,jingning,景宁,CN,China,中国,zhejiang,浙江,lishui,丽水,27.977247,119.63467,331127, +CN101210810,liandou,莲都,CN,China,中国,zhejiang,浙江,lishui,丽水,28.451103,119.922295,331102, +CN101210901,jinhua,金华,CN,China,中国,zhejiang,浙江,jinhua,金华,29.089523,119.649506,"330701,330700", +CN101210902,pujiang,浦江,CN,China,中国,zhejiang,浙江,jinhua,金华,29.451254,119.893364,330726, +CN101210903,lanxi,兰溪,CN,China,中国,zhejiang,浙江,jinhua,金华,29.210066,119.46052,330781, +CN101210904,yiwu,义乌,CN,China,中国,zhejiang,浙江,jinhua,金华,29.306864,120.07491,330782, +CN101210905,dongyang,东阳,CN,China,中国,zhejiang,浙江,jinhua,金华,29.262547,120.23334,330783, +CN101210906,wuyi,武义,CN,China,中国,zhejiang,浙江,jinhua,金华,28.896563,119.81916,330723, +CN101210907,yongkang,永康,CN,China,中国,zhejiang,浙江,jinhua,金华,28.895292,120.03633,330784, +CN101210908,panan,磐安,CN,China,中国,zhejiang,浙江,jinhua,金华,29.052628,120.44513,330727, +CN101210909,wucheng,婺城,CN,China,中国,zhejiang,浙江,jinhua,金华,29.082607,119.65258,330702, +CN101210910,jindong,金东,CN,China,中国,zhejiang,浙江,jinhua,金华,29.095835,119.68127,330703, +CN101211001,quzhou,衢州,CN,China,中国,zhejiang,浙江,quzhou,衢州,28.941708,118.87263,"330801,330800", +CN101211002,changshan,常山,CN,China,中国,zhejiang,浙江,quzhou,衢州,28.90004,118.52165,330822, +CN101211003,kaihua,开化,CN,China,中国,zhejiang,浙江,quzhou,衢州,29.136503,118.41444,330824, +CN101211004,longyou,龙游,CN,China,中国,zhejiang,浙江,quzhou,衢州,29.031364,119.17252,330825, +CN101211005,jiangshan,江山,CN,China,中国,zhejiang,浙江,quzhou,衢州,28.734674,118.62788,330881, +CN101211006,qujiang,衢江,CN,China,中国,zhejiang,浙江,quzhou,衢州,28.973194,118.95768,330803, +CN101211007,kecheng,柯城,CN,China,中国,zhejiang,浙江,quzhou,衢州,28.944538,118.87304,330802, +CN101211101,zhoushan,舟山,CN,China,中国,zhejiang,浙江,zhoushan,舟山,30.016027,122.106865,"330901,330900", +CN101211102,shengsi,嵊泗,CN,China,中国,zhejiang,浙江,zhoushan,舟山,30.727165,122.45781,330922, +CN101211104,daishan,岱山,CN,China,中国,zhejiang,浙江,zhoushan,舟山,30.242865,122.20113,330921, +CN101211105,putuo,普陀,CN,China,中国,zhejiang,浙江,zhoushan,舟山,29.945614,122.301956,330903, +CN101211106,dinghai,定海,CN,China,中国,zhejiang,浙江,zhoushan,舟山,30.016422,122.1085,330902, +CN101220101,hefei,合肥,CN,China,中国,anhui,安徽,hefei,合肥,31.86119,117.28304,"340101,340100,340000", +CN101220102,changfeng,长丰,CN,China,中国,anhui,安徽,hefei,合肥,32.478546,117.164696,340121, +CN101220103,feidong,肥东,CN,China,中国,anhui,安徽,hefei,合肥,31.883991,117.46322,340122, +CN101220104,feixi,肥西,CN,China,中国,anhui,安徽,hefei,合肥,31.719646,117.166115,340123, +CN101220105,chaohu,巢湖,CN,China,中国,anhui,安徽,hefei,合肥,31.600517,117.87415,340181, +CN101220106,lujiang,庐江,CN,China,中国,anhui,安徽,hefei,合肥,31.251488,117.28984,340124, +CN101220107,yaohai,瑶海,CN,China,中国,anhui,安徽,hefei,合肥,31.86961,117.31536,340102, +CN101220108,luyang,庐阳,CN,China,中国,anhui,安徽,hefei,合肥,31.86901,117.283775,340103, +CN101220109,shushan,蜀山,CN,China,中国,anhui,安徽,hefei,合肥,31.855867,117.26207,340104, +CN101220110,baohe,包河,CN,China,中国,anhui,安徽,hefei,合肥,31.82956,117.28575,340111, +CN101220201,bengbu,蚌埠,CN,China,中国,anhui,安徽,bengbu,蚌埠,32.939667,117.36323,"340301,340300", +CN101220202,huaiyuan,怀远,CN,China,中国,anhui,安徽,bengbu,蚌埠,32.956936,117.20017,340321, +CN101220203,guzhen,固镇,CN,China,中国,anhui,安徽,bengbu,蚌埠,33.31868,117.31596,340323, +CN101220204,wuhe,五河,CN,China,中国,anhui,安徽,bengbu,蚌埠,33.146202,117.88881,340322, +CN101220205,longzihu,龙子湖,CN,China,中国,anhui,安徽,bangbu,蚌埠,32.95045,117.38231,340302, +CN101220206,bangshan,蚌山,CN,China,中国,anhui,安徽,bangbu,蚌埠,32.938065,117.35579,340303, +CN101220207,yuhui,禹会,CN,China,中国,anhui,安徽,bangbu,蚌埠,32.931934,117.35259,340304, +CN101220208,huaishang,淮上,CN,China,中国,anhui,安徽,bangbu,蚌埠,32.963146,117.34709,340311, +CN101220301,wuhu,芜湖,CN,China,中国,anhui,安徽,wuhu,芜湖,31.326319,118.37645,"340201,340200", +CN101220302,fanyang,繁昌,CN,China,中国,anhui,安徽,wuhu,芜湖,31.080896,118.20135,340222, +CN101220303,wuhuxian,芜湖县,CN,China,中国,anhui,安徽,wuhu,芜湖,31.145262,118.5723,340221, +CN101220304,nanling,南陵,CN,China,中国,anhui,安徽,wuhu,芜湖,30.919638,118.337105,340223, +CN101220305,wuwei,无为,CN,China,中国,anhui,安徽,wuhu,芜湖,31.303076,117.91143,340225, +CN101220306,jinghu,镜湖,CN,China,中国,anhui,安徽,wuhu,芜湖,31.32559,118.37634,340202, +CN101220307,yijiang,弋江,CN,China,中国,anhui,安徽,wuhu,芜湖,31.313395,118.37748,340203, +CN101220308,jiujiang,鸠江,CN,China,中国,anhui,安徽,wuhu,芜湖,31.362717,118.40018,340207, +CN101220309,sanshan,三山,CN,China,中国,anhui,安徽,wuhu,芜湖,31.225424,118.233986,340208, +CN101220401,huainan,淮南,CN,China,中国,anhui,安徽,huainan,淮南,32.647575,117.018326,"340401,340400", +CN101220402,fengtai,凤台,CN,China,中国,anhui,安徽,huainan,淮南,32.705383,116.72277,340421, +CN101220403,panji,潘集,CN,China,中国,anhui,安徽,huainan,淮南,32.782116,116.81688,340406, +CN101220404,datong,大通,CN,China,中国,anhui,安徽,huainan,淮南,32.632065,117.052925,340402, +CN101220405,tianjiaan,田家庵,CN,China,中国,anhui,安徽,huainan,淮南,32.64434,117.01832,340403, +CN101220406,xiejiaji,谢家集,CN,China,中国,anhui,安徽,huainan,淮南,32.59829,116.86536,340404, +CN101220407,bagongshan,八公山,CN,China,中国,anhui,安徽,huainan,淮南,32.628227,116.84111,340405, +CN101220408,shouxian,寿县,CN,China,中国,anhui,安徽,huainan,淮南,32.577305,116.78535,340422, +CN101220501,maanshan,马鞍山,CN,China,中国,anhui,安徽,maanshan,马鞍山,31.689362,118.507904,"340501,340500", +CN101220502,dangtu,当涂,CN,China,中国,anhui,安徽,maanshan,马鞍山,31.556168,118.489876,340521, +CN101220503,hanshan,含山,CN,China,中国,anhui,安徽,maanshan,马鞍山,31.727758,118.105545,340522, +CN101220504,hexian,和县,CN,China,中国,anhui,安徽,maanshan,马鞍山,31.716635,118.363,340523, +CN101220505,huashan,花山,CN,China,中国,anhui,安徽,maanshan,马鞍山,31.69902,118.51131,340503, +CN101220506,yushan,雨山,CN,China,中国,anhui,安徽,maanshan,马鞍山,31.685911,118.4931,340504, +CN101220507,bowang,博望,CN,China,中国,anhui,安徽,maanshan,马鞍山,31.56232,118.84374,340506, +CN101220601,anqing,安庆,CN,China,中国,anhui,安徽,anqing,安庆,30.50883,117.04355,"340801,340800", +CN101220603,taihu,太湖,CN,China,中国,anhui,安徽,anqing,安庆,30.451868,116.30522,340825, +CN101220604,qianshan,潜山,CN,China,中国,anhui,安徽,anqing,安庆,30.638222,116.57367,340824, +CN101220605,huaining,怀宁,CN,China,中国,anhui,安徽,anqing,安庆,30.734995,116.82867,340822, +CN101220606,susong,宿松,CN,China,中国,anhui,安徽,anqing,安庆,30.158327,116.1202,340826, +CN101220607,wangjiang,望江,CN,China,中国,anhui,安徽,anqing,安庆,30.12491,116.690926,340827, +CN101220608,yuexi,岳西,CN,China,中国,anhui,安徽,anqing,安庆,30.848501,116.36048,340828, +CN101220609,tongcheng,桐城,CN,China,中国,anhui,安徽,anqing,安庆,31.050575,116.959656,340881, +CN101220610,yingjiang,迎江,CN,China,中国,anhui,安徽,anqing,安庆,30.506374,117.04497,340802, +CN101220611,daguan,大观,CN,China,中国,anhui,安徽,anqing,安庆,30.505632,117.034515,340803, +CN101220612,yixiu,宜秀,CN,China,中国,anhui,安徽,anqing,安庆,30.541323,117.07,340811, +CN101220701,suzhou,宿州,CN,China,中国,anhui,安徽,suzhou,宿州,33.633892,116.984085,"341301,341300", +CN101220702,dangshan,砀山,CN,China,中国,anhui,安徽,suzhou,宿州,34.426247,116.35111,341321, +CN101220703,lingbi,灵璧,CN,China,中国,anhui,安徽,suzhou,宿州,33.54063,117.55149,341323, +CN101220704,sixian,泗县,CN,China,中国,anhui,安徽,suzhou,宿州,33.47758,117.885445,341324, +CN101220705,xiaoxian,萧县,CN,China,中国,anhui,安徽,suzhou,宿州,34.183266,116.9454,341322, +CN101220706,yongqiao,埇桥,CN,China,中国,anhui,安徽,suzhou,宿州,33.633854,116.98331,341302, +CN101220801,fuyang,阜阳,CN,China,中国,anhui,安徽,fuyang,阜阳,32.89697,115.81973,"341201,341200", +CN101220802,funan,阜南,CN,China,中国,anhui,安徽,fuyang,阜阳,32.638103,115.59053,341225, +CN101220803,yingshang,颍上,CN,China,中国,anhui,安徽,fuyang,阜阳,32.637066,116.259125,341226, +CN101220804,linquan,临泉,CN,China,中国,anhui,安徽,fuyang,阜阳,33.0627,115.26169,341221, +CN101220805,jieshou,界首,CN,China,中国,anhui,安徽,fuyang,阜阳,33.26153,115.362114,341282, +CN101220806,taihe,太和,CN,China,中国,anhui,安徽,fuyang,阜阳,33.16229,115.62724,341222, +CN101220807,yingzhou,颍州,CN,China,中国,anhui,安徽,fuyang,阜阳,32.89124,115.81391,341202, +CN101220808,yingdong,颍东,CN,China,中国,anhui,安徽,fuyang,阜阳,32.90886,115.85875,341203, +CN101220809,yingquan,颍泉,CN,China,中国,anhui,安徽,fuyang,阜阳,32.924797,115.80453,341204, +CN101220901,bozhou,亳州,CN,China,中国,anhui,安徽,bozhou,亳州,33.86934,115.782936,"341601,341600", +CN101220902,guoyang,涡阳,CN,China,中国,anhui,安徽,bozhou,亳州,33.50283,116.21155,341621, +CN101220903,lixin,利辛,CN,China,中国,anhui,安徽,bozhou,亳州,33.1435,116.20778,341623, +CN101220904,mengcheng,蒙城,CN,China,中国,anhui,安徽,bozhou,亳州,33.260815,116.56033,341622, +CN101220905,qiaocheng,谯城,CN,China,中国,anhui,安徽,bozhou,亳州,33.869286,115.78121,341602, +CN101221001,huangshan,黄山,CN,China,中国,anhui,安徽,huangshan,黄山,29.709238,118.31732,"341001,341000", +CN101221002,huangshanqu,黄山区,CN,China,中国,anhui,安徽,huangshan,黄山,30.294518,118.13664,341003, +CN101221003,tunxi,屯溪,CN,China,中国,anhui,安徽,huangshan,黄山,29.709187,118.31735,341002, +CN101221004,qimen,祁门,CN,China,中国,anhui,安徽,huangshan,黄山,29.853472,117.71724,341024, +CN101221005,yixian,黟县,CN,China,中国,anhui,安徽,huangshan,黄山,29.923813,117.94291,341023, +CN101221006,shexian,歙县,CN,China,中国,anhui,安徽,huangshan,黄山,29.867748,118.428024,341021, +CN101221007,xiuning,休宁,CN,China,中国,anhui,安徽,huangshan,黄山,29.788877,118.18853,341022, +CN101221008,huangshanfengjingqu,黄山风景区(光明顶),CN,China,中国,anhui,安徽,huangshan,黄山,30.132376,118.16954,341003, +CN101221009,huizhou,徽州,CN,China,中国,anhui,安徽,huangshan,黄山,29.825201,118.339745,341004, +CN101221101,chuzhou,滁州,CN,China,中国,anhui,安徽,chuzhou,滁州,32.303627,118.31626,"341101,341100", +CN101221102,fengyang,凤阳,CN,China,中国,anhui,安徽,chuzhou,滁州,32.867146,117.56246,341126, +CN101221103,mingguang,明光,CN,China,中国,anhui,安徽,chuzhou,滁州,32.781204,117.99805,341182, +CN101221104,dingyuan,定远,CN,China,中国,anhui,安徽,chuzhou,滁州,32.527103,117.683716,341125, +CN101221105,quanjiao,全椒,CN,China,中国,anhui,安徽,chuzhou,滁州,32.09385,118.26858,341124, +CN101221106,laian,来安,CN,China,中国,anhui,安徽,chuzhou,滁州,32.45023,118.4333,341122, +CN101221107,tianchang,天长,CN,China,中国,anhui,安徽,chuzhou,滁州,32.6815,119.011215,341181, +CN101221108,langya,琅琊,CN,China,中国,anhui,安徽,chuzhou,滁州,32.3038,118.316475,341102, +CN101221109,nanqiao,南谯,CN,China,中国,anhui,安徽,chuzhou,滁州,32.32984,118.29695,341103, +CN101221201,huaibei,淮北,CN,China,中国,anhui,安徽,huaibei,淮北,33.971706,116.79466,"340601,340600", +CN101221202,suixi,濉溪,CN,China,中国,anhui,安徽,huaibei,淮北,33.91641,116.76743,340621, +CN101221203,duji,杜集,CN,China,中国,anhui,安徽,huaibei,淮北,33.99122,116.83392,340602, +CN101221204,xiangshan,相山,CN,China,中国,anhui,安徽,huaibei,淮北,33.970917,116.79077,340603, +CN101221205,lieshan,烈山,CN,China,中国,anhui,安徽,huaibei,淮北,33.88953,116.80946,340604, +CN101221301,tongling,铜陵,CN,China,中国,anhui,安徽,tongling,铜陵,30.929935,117.816574,"340701,340700", +CN101221302,tongguan,铜官,CN,China,中国,anhui,安徽,tongling,铜陵,30.93182,117.81843,340705, +CN101221303,yian,义安,CN,China,中国,anhui,安徽,tongling,铜陵,30.952337,117.79229,340706, +CN101221304,jiaoqu,郊区,CN,China,中国,anhui,安徽,tongling,铜陵,30.908928,117.80707,340711, +CN101221305,zongyang,枞阳,CN,China,中国,anhui,安徽,tongling,铜陵,30.700615,117.22203,340722, +CN101221401,xuancheng,宣城,CN,China,中国,anhui,安徽,xuancheng,宣城,30.945667,118.757996,"341801,341800", +CN101221402,jingxian,泾县,CN,China,中国,anhui,安徽,xuancheng,宣城,30.685974,118.4124,341823, +CN101221403,jingde,旌德,CN,China,中国,anhui,安徽,xuancheng,宣城,30.288057,118.54308,341825, +CN101221404,ningguo,宁国,CN,China,中国,anhui,安徽,xuancheng,宣城,30.62653,118.983406,341881, +CN101221405,jixi,绩溪,CN,China,中国,anhui,安徽,xuancheng,宣城,30.065268,118.5947,341824, +CN101221406,guangde,广德,CN,China,中国,anhui,安徽,xuancheng,宣城,30.893116,119.41752,341822, +CN101221407,langxi,郎溪,CN,China,中国,anhui,安徽,xuancheng,宣城,31.127834,119.18502,341821, +CN101221408,xuanzhou,宣州,CN,China,中国,anhui,安徽,xuancheng,宣城,30.946003,118.758415,341802, +CN101221501,luan,六安,CN,China,中国,anhui,安徽,luan,六安,31.75289,116.507675,"341501,341500", +CN101221502,huoqiu,霍邱,CN,China,中国,anhui,安徽,liuan,六安,32.341305,116.27888,341522, +CN101221504,jinan,金安,CN,China,中国,anhui,安徽,liuan,六安,31.754492,116.50329,341502, +CN101221505,jinzhai,金寨,CN,China,中国,anhui,安徽,liuan,六安,31.681623,115.87852,341524, +CN101221506,huoshan,霍山,CN,China,中国,anhui,安徽,liuan,六安,31.402456,116.33308,341525, +CN101221507,shucheng,舒城,CN,China,中国,anhui,安徽,liuan,六安,31.462849,116.94409,341523, +CN101221508,yuan,裕安,CN,China,中国,anhui,安徽,liuan,六安,31.750692,116.494545,341503, +CN101221509,yeji,叶集,CN,China,中国,anhui,安徽,liuan,六安,31.84768,115.9136,341504, +CN101221701,chizhou,池州,CN,China,中国,anhui,安徽,chizhou,池州,30.656036,117.48916,"341701,341700", +CN101221702,dongzhi,东至,CN,China,中国,anhui,安徽,chizhou,池州,30.096567,117.02148,341721, +CN101221703,qingyang,青阳,CN,China,中国,anhui,安徽,chizhou,池州,30.63818,117.85739,341723, +CN101221704,jiuhuashan,九华山,CN,China,中国,anhui,安徽,chizhou,池州,30.29,117.47,341723, +CN101221705,shitai,石台,CN,China,中国,anhui,安徽,chizhou,池州,30.210323,117.48291,341722, +CN101221706,guichi,贵池,CN,China,中国,anhui,安徽,chizhou,池州,30.657377,117.48834,341702, +CN101230101,fuzhou,福州,CN,China,中国,fujian,福建,fuzhou,福州,26.075302,119.30624,"350101,350100,350000", +CN101230102,minqing,闽清,CN,China,中国,fujian,福建,fuzhou,福州,26.223793,118.868416,350124, +CN101230103,minhou,闽侯,CN,China,中国,fujian,福建,fuzhou,福州,26.148567,119.14512,350121, +CN101230104,luoyuan,罗源,CN,China,中国,fujian,福建,fuzhou,福州,26.487234,119.55264,350123, +CN101230105,lianjiang,连江,CN,China,中国,fujian,福建,fuzhou,福州,26.202108,119.53837,350122, +CN101230106,gulou,鼓楼,CN,China,中国,fujian,福建,fuzhou,福州,26.082285,119.29929,350102, +CN101230107,yongtai,永泰,CN,China,中国,fujian,福建,fuzhou,福州,25.864824,118.93909,350125, +CN101230108,pingtan,平潭,CN,China,中国,fujian,福建,fuzhou,福州,25.503672,119.7912,350128, +CN101230109,taijiang,台江,CN,China,中国,fujian,福建,fuzhou,福州,26.058617,119.31016,350103, +CN101230110,changle,长乐,CN,China,中国,fujian,福建,fuzhou,福州,25.960583,119.51085,350112, +CN101230111,fuqing,福清,CN,China,中国,fujian,福建,fuzhou,福州,25.720402,119.37699,350181, +CN101230112,cangshan,仓山,CN,China,中国,fujian,福建,fuzhou,福州,26.038912,119.32099,350104, +CN101230113,mawei,马尾,CN,China,中国,fujian,福建,fuzhou,福州,25.991976,119.458725,350105, +CN101230114,jinan,晋安,CN,China,中国,fujian,福建,fuzhou,福州,26.078836,119.3286,350111, +CN101230201,xiamen,厦门,CN,China,中国,fujian,福建,xiamen,厦门,24.490475,118.11022,"350201,350200", +CN101230202,tongan,同安,CN,China,中国,fujian,福建,xiamen,厦门,24.729334,118.15045,350212, +CN101230203,siming,思明,CN,China,中国,fujian,福建,xiamen,厦门,24.462059,118.08783,350203, +CN101230204,haicang,海沧,CN,China,中国,fujian,福建,xiamen,厦门,24.492512,118.03636,350205, +CN101230205,huli,湖里,CN,China,中国,fujian,福建,xiamen,厦门,24.512764,118.10943,350206, +CN101230206,jimei,集美,CN,China,中国,fujian,福建,xiamen,厦门,24.572874,118.10087,350211, +CN101230207,xiangan,翔安,CN,China,中国,fujian,福建,xiamen,厦门,24.63748,118.24281,350213, +CN101230301,ningde,宁德,CN,China,中国,fujian,福建,ningde,宁德,26.65924,119.527084,"350901,350900", +CN101230302,gutian,古田,CN,China,中国,fujian,福建,ningde,宁德,26.577492,118.74316,350922, +CN101230303,xiapu,霞浦,CN,China,中国,fujian,福建,ningde,宁德,26.882069,120.00521,350921, +CN101230304,shouning,寿宁,CN,China,中国,fujian,福建,ningde,宁德,27.457798,119.50674,350924, +CN101230305,zhouning,周宁,CN,China,中国,fujian,福建,ningde,宁德,27.103106,119.33824,350925, +CN101230306,fuan,福安,CN,China,中国,fujian,福建,ningde,宁德,27.084246,119.650795,350981, +CN101230307,zherong,柘荣,CN,China,中国,fujian,福建,ningde,宁德,27.236162,119.898224,350926, +CN101230308,fuding,福鼎,CN,China,中国,fujian,福建,ningde,宁德,27.318884,120.219765,350982, +CN101230309,pingnan,屏南,CN,China,中国,fujian,福建,ningde,宁德,26.910826,118.98754,350923, +CN101230310,jiaocheng,蕉城,CN,China,中国,fujian,福建,ningde,宁德,26.659252,119.52722,350902, +CN101230401,putian,莆田,CN,China,中国,fujian,福建,putian,莆田,25.431011,119.00756,"350301,350300", +CN101230402,xianyou,仙游,CN,China,中国,fujian,福建,putian,莆田,25.35653,118.69433,350322, +CN101230404,hanjiang,涵江,CN,China,中国,fujian,福建,putian,莆田,25.459272,119.1191,350303, +CN101230405,xiuyu,秀屿,CN,China,中国,fujian,福建,putian,莆田,25.316141,119.092606,350305, +CN101230406,licheng,荔城,CN,China,中国,fujian,福建,putian,莆田,25.430046,119.02005,350304, +CN101230407,chengxiang,城厢,CN,China,中国,fujian,福建,putian,莆田,25.433737,119.00103,350302, +CN101230501,quanzhou,泉州,CN,China,中国,fujian,福建,quanzhou,泉州,24.908854,118.589424,"350501,350500", +CN101230502,anxi,安溪,CN,China,中国,fujian,福建,quanzhou,泉州,25.056824,118.18601,350524, +CN101230503,jinmen,金门,CN,China,中国,fujian,福建,quanzhou,泉州,24.436417,118.32322,350527, +CN101230504,yongchun,永春,CN,China,中国,fujian,福建,quanzhou,泉州,25.32072,118.29503,350525, +CN101230505,dehua,德化,CN,China,中国,fujian,福建,quanzhou,泉州,25.489004,118.24299,350526, +CN101230506,nanan,南安,CN,China,中国,fujian,福建,quanzhou,泉州,24.959494,118.38703,350583, +CN101230507,chongwu,崇武,CN,China,中国,fujian,福建,quanzhou,泉州,24.893684,118.91855,350521, +CN101230508,huian,惠安,CN,China,中国,fujian,福建,quanzhou,泉州,25.028719,118.79895,350521, +CN101230509,jinjiang,晋江,CN,China,中国,fujian,福建,quanzhou,泉州,24.807322,118.57734,350582, +CN101230510,shishi,石狮,CN,China,中国,fujian,福建,quanzhou,泉州,24.731977,118.6284,350581, +CN101230511,licheng,鲤城,CN,China,中国,fujian,福建,quanzhou,泉州,24.907644,118.58893,350502, +CN101230512,fengze,丰泽,CN,China,中国,fujian,福建,quanzhou,泉州,24.896042,118.60515,350503, +CN101230513,luojiang,洛江,CN,China,中国,fujian,福建,quanzhou,泉州,24.941153,118.67031,350504, +CN101230514,quangang,泉港,CN,China,中国,fujian,福建,quanzhou,泉州,25.12686,118.912285,350505, +CN101230601,zhangzhou,漳州,CN,China,中国,fujian,福建,zhangzhou,漳州,24.510897,117.661804,"350601,350600", +CN101230602,changtai,长泰,CN,China,中国,fujian,福建,zhangzhou,漳州,24.621475,117.75591,350625, +CN101230603,nanjing,南靖,CN,China,中国,fujian,福建,zhangzhou,漳州,24.516424,117.36546,350627, +CN101230604,pinghe,平和,CN,China,中国,fujian,福建,zhangzhou,漳州,24.366158,117.313545,350628, +CN101230605,longhai,龙海,CN,China,中国,fujian,福建,zhangzhou,漳州,24.445341,117.81729,350681, +CN101230606,zhangpu,漳浦,CN,China,中国,fujian,福建,zhangzhou,漳州,24.117907,117.61402,350623, +CN101230607,zhaoan,诏安,CN,China,中国,fujian,福建,zhangzhou,漳州,23.710835,117.17609,350624, +CN101230608,dongshan,东山,CN,China,中国,fujian,福建,zhangzhou,漳州,23.702845,117.42768,350626, +CN101230609,yunxiao,云霄,CN,China,中国,fujian,福建,zhangzhou,漳州,23.950485,117.34094,350622, +CN101230610,huaan,华安,CN,China,中国,fujian,福建,zhangzhou,漳州,25.001415,117.53631,350629, +CN101230611,xiangcheng,芗城,CN,China,中国,fujian,福建,zhangzhou,漳州,24.509954,117.65646,350602, +CN101230612,longwen,龙文,CN,China,中国,fujian,福建,zhangzhou,漳州,24.515656,117.67139,350603, +CN101230701,longyan,龙岩,CN,China,中国,fujian,福建,longyan,龙岩,25.091602,117.02978,"350801,350800", +CN101230702,changting,长汀,CN,China,中国,fujian,福建,longyan,龙岩,25.842278,116.36101,350821, +CN101230703,liancheng,连城,CN,China,中国,fujian,福建,longyan,龙岩,25.708506,116.75668,350825, +CN101230704,wuping,武平,CN,China,中国,fujian,福建,longyan,龙岩,25.08865,116.10093,350824, +CN101230705,shanghang,上杭,CN,China,中国,fujian,福建,longyan,龙岩,25.050018,116.424774,350823, +CN101230706,yongding,永定,CN,China,中国,fujian,福建,longyan,龙岩,24.720442,116.73269,350803, +CN101230707,zhangping,漳平,CN,China,中国,fujian,福建,longyan,龙岩,25.291597,117.42073,350881, +CN101230708,xinluo,新罗,CN,China,中国,fujian,福建,longyan,龙岩,25.0918,117.03072,350802, +CN101230801,sanming,三明,CN,China,中国,fujian,福建,sanming,三明,26.265444,117.635,"350401,350400", +CN101230802,ninghua,宁化,CN,China,中国,fujian,福建,sanming,三明,26.259932,116.65972,350424, +CN101230803,qingliu,清流,CN,China,中国,fujian,福建,sanming,三明,26.17761,116.81582,350423, +CN101230804,taining,泰宁,CN,China,中国,fujian,福建,sanming,三明,26.897995,117.17752,350429, +CN101230805,jiangle,将乐,CN,China,中国,fujian,福建,sanming,三明,26.728666,117.47356,350428, +CN101230806,jianning,建宁,CN,China,中国,fujian,福建,sanming,三明,26.831398,116.84583,350430, +CN101230807,mingxi,明溪,CN,China,中国,fujian,福建,sanming,三明,26.357374,117.20184,350421, +CN101230808,shaxian,沙县,CN,China,中国,fujian,福建,sanming,三明,26.397362,117.78909,350427, +CN101230809,youxi,尤溪,CN,China,中国,fujian,福建,sanming,三明,26.169262,118.188576,350426, +CN101230810,yongan,永安,CN,China,中国,fujian,福建,sanming,三明,25.974075,117.36445,350481, +CN101230811,datian,大田,CN,China,中国,fujian,福建,sanming,三明,25.690804,117.84936,350425, +CN101230812,meilie,梅列,CN,China,中国,fujian,福建,sanming,三明,26.269209,117.63687,350402, +CN101230813,sanyuan,三元,CN,China,中国,fujian,福建,sanming,三明,26.234192,117.607414,350403, +CN101230901,nanping,南平,CN,China,中国,fujian,福建,nanping,南平,26.635628,118.17846,"350701,350700", +CN101230902,shunchang,顺昌,CN,China,中国,fujian,福建,nanping,南平,26.79285,117.80771,350721, +CN101230903,guangze,光泽,CN,China,中国,fujian,福建,nanping,南平,27.542803,117.3379,350723, +CN101230904,shaowu,邵武,CN,China,中国,fujian,福建,nanping,南平,27.337952,117.49155,350781, +CN101230905,wuyishan,武夷山,CN,China,中国,fujian,福建,nanping,南平,27.751734,118.0328,350782, +CN101230906,pucheng,浦城,CN,China,中国,fujian,福建,nanping,南平,27.920412,118.53682,350722, +CN101230907,jianyang,建阳,CN,China,中国,fujian,福建,nanping,南平,27.332067,118.12267,350703, +CN101230908,songxi,松溪,CN,China,中国,fujian,福建,nanping,南平,27.525785,118.78349,350724, +CN101230909,zhenghe,政和,CN,China,中国,fujian,福建,nanping,南平,27.365398,118.85866,350725, +CN101230910,jianou,建瓯,CN,China,中国,fujian,福建,nanping,南平,27.03502,118.32176,350783, +CN101230911,yanping,延平,CN,China,中国,fujian,福建,nanping,南平,26.63608,118.17892,350702, +CN101231001,diaoyudao,钓鱼岛,CN,China,中国,fujian,福建,diaoyudao,钓鱼岛,25.73,123.46,710000, +CN101240101,nanchang,南昌,CN,China,中国,jiangxi,江西,nanchang,南昌,28.676493,115.89215,"360101,360100,360000", +CN101240102,xinjian,新建,CN,China,中国,jiangxi,江西,nanchang,南昌,28.690788,115.82081,360112, +CN101240103,nanchangxian,南昌县,CN,China,中国,jiangxi,江西,nanchang,南昌,28.543781,115.94247,360121, +CN101240104,anyi,安义,CN,China,中国,jiangxi,江西,nanchang,南昌,28.841333,115.55311,360123, +CN101240105,jinxian,进贤,CN,China,中国,jiangxi,江西,nanchang,南昌,28.36568,116.26767,360124, +CN101240106,donghu,东湖,CN,China,中国,jiangxi,江西,nanchang,南昌,28.682987,115.88967,360102, +CN101240107,xihu,西湖,CN,China,中国,jiangxi,江西,nanchang,南昌,28.6629,115.91065,360103, +CN101240108,qingyunpu,青云谱,CN,China,中国,jiangxi,江西,nanchang,南昌,28.635723,115.907295,360104, +CN101240109,wanli,湾里,CN,China,中国,jiangxi,江西,nanchang,南昌,28.714804,115.73132,360105, +CN101240110,qingshanhu,青山湖,CN,China,中国,jiangxi,江西,nanchang,南昌,28.689293,115.94904,360111, +CN101240201,jiujiang,九江,CN,China,中国,jiangxi,江西,jiujiang,九江,29.712034,115.99281,"360401,360400,360402,360421", +CN101240202,ruichang,瑞昌,CN,China,中国,jiangxi,江西,jiujiang,九江,29.6766,115.66908,360481, +CN101240203,lushan,庐山,CN,China,中国,jiangxi,江西,jiujiang,九江,29.45617,116.04374,360483, +CN101240204,wuning,武宁,CN,China,中国,jiangxi,江西,jiujiang,九江,29.260181,115.105644,360423, +CN101240205,dean,德安,CN,China,中国,jiangxi,江西,jiujiang,九江,29.327475,115.76261,360426, +CN101240206,yongxiu,永修,CN,China,中国,jiangxi,江西,jiujiang,九江,29.018211,115.80905,360425, +CN101240207,hukou,湖口,CN,China,中国,jiangxi,江西,jiujiang,九江,29.7263,116.244316,360429, +CN101240208,pengze,彭泽,CN,China,中国,jiangxi,江西,jiujiang,九江,29.898865,116.55584,360430, +CN101240210,duchang,都昌,CN,China,中国,jiangxi,江西,jiujiang,九江,29.275105,116.20512,360428, +CN101240211,xunyang,浔阳,CN,China,中国,jiangxi,江西,jiujiang,九江,29.72465,115.99595,360403, +CN101240212,xiushui,修水,CN,China,中国,jiangxi,江西,jiujiang,九江,29.032728,114.573425,360424, +CN101240213,gongqingcheng,共青城,CN,China,中国,jiangxi,江西,jiujiang,九江,29.247885,115.80571,360482, +CN101240214,lianxi,濂溪,CN,China,中国,jiangxi,江西,jiujiang,九江,29.671888,116.02854,360402, +CN101240215,chaisang,柴桑,CN,China,中国,jiangxi,江西,jiujiang,九江,29.60843,115.91132,360404, +CN101240301,shangrao,上饶,CN,China,中国,jiangxi,江西,shangrao,上饶,28.44442,117.97118,"361101,361100", +CN101240302,poyang,鄱阳,CN,China,中国,jiangxi,江西,shangrao,上饶,28.993374,116.673744,361128, +CN101240303,wuyuan,婺源,CN,China,中国,jiangxi,江西,shangrao,上饶,29.254015,117.86219,361130, +CN101240304,xinzhou,信州,CN,China,中国,jiangxi,江西,shangrao,上饶,28.445377,117.97052,361102, +CN101240305,yugan,余干,CN,China,中国,jiangxi,江西,shangrao,上饶,28.69173,116.69107,361127, +CN101240306,wannian,万年,CN,China,中国,jiangxi,江西,shangrao,上饶,28.692589,117.07015,361129, +CN101240307,dexing,德兴,CN,China,中国,jiangxi,江西,shangrao,上饶,28.945034,117.578735,361181, +CN101240308,shangraoxian,上饶县,CN,China,中国,jiangxi,江西,shangrao,上饶,28.453897,117.90612,361121, +CN101240309,yiyang,弋阳,CN,China,中国,jiangxi,江西,shangrao,上饶,28.402391,117.435005,361126, +CN101240310,hengfeng,横峰,CN,China,中国,jiangxi,江西,shangrao,上饶,28.415104,117.608246,361125, +CN101240311,yanshan,铅山,CN,China,中国,jiangxi,江西,shangrao,上饶,28.310892,117.71191,361124, +CN101240312,yushan,玉山,CN,China,中国,jiangxi,江西,shangrao,上饶,28.67348,118.24441,361123, +CN101240313,guangfeng,广丰,CN,China,中国,jiangxi,江西,shangrao,上饶,28.440285,118.18985,361103, +CN101240401,fuzhou,抚州,CN,China,中国,jiangxi,江西,fuzhou,抚州,27.98385,116.35835,"361001,361000", +CN101240402,guangchang,广昌,CN,China,中国,jiangxi,江西,fuzhou,抚州,26.838427,116.32729,361030, +CN101240403,anle,乐安,CN,China,中国,jiangxi,江西,fuzhou,抚州,27.420101,115.83843,361025, +CN101240404,chongren,崇仁,CN,China,中国,jiangxi,江西,fuzhou,抚州,27.760906,116.05911,361024, +CN101240405,jinxi,金溪,CN,China,中国,jiangxi,江西,fuzhou,抚州,27.907387,116.77875,361027, +CN101240406,zixi,资溪,CN,China,中国,jiangxi,江西,fuzhou,抚州,27.70653,117.06609,361028, +CN101240407,yihuang,宜黄,CN,China,中国,jiangxi,江西,fuzhou,抚州,27.546513,116.22302,361026, +CN101240408,nancheng,南城,CN,China,中国,jiangxi,江西,fuzhou,抚州,27.55531,116.63945,361021, +CN101240409,nanfeng,南丰,CN,China,中国,jiangxi,江西,fuzhou,抚州,27.210133,116.533,361023, +CN101240410,lichuan,黎川,CN,China,中国,jiangxi,江西,fuzhou,抚州,27.29256,116.91457,361022, +CN101240411,dongxiang,东乡,CN,China,中国,jiangxi,江西,fuzhou,抚州,28.2325,116.60534,361003, +CN101240412,linchuan,临川,CN,China,中国,jiangxi,江西,fuzhou,抚州,27.981918,116.361404,361002, +CN101240501,yichun,宜春,CN,China,中国,jiangxi,江西,yichun,宜春,27.8043,114.391136,"360901,360900", +CN101240502,tonggu,铜鼓,CN,China,中国,jiangxi,江西,yichun,宜春,28.520956,114.37014,360926, +CN101240503,yifeng,宜丰,CN,China,中国,jiangxi,江西,yichun,宜春,28.388288,114.787384,360924, +CN101240504,wanzai,万载,CN,China,中国,jiangxi,江西,yichun,宜春,28.104528,114.44901,360922, +CN101240505,shanggao,上高,CN,China,中国,jiangxi,江西,yichun,宜春,28.234789,114.932655,360923, +CN101240506,jingan,靖安,CN,China,中国,jiangxi,江西,yichun,宜春,28.86054,115.36175,360925, +CN101240507,fengxin,奉新,CN,China,中国,jiangxi,江西,yichun,宜春,28.700672,115.3899,360921, +CN101240508,gaoan,高安,CN,China,中国,jiangxi,江西,yichun,宜春,28.420952,115.38153,360983, +CN101240509,zhangshu,樟树,CN,China,中国,jiangxi,江西,yichun,宜春,28.055899,115.54339,360982, +CN101240510,fengcheng,丰城,CN,China,中国,jiangxi,江西,yichun,宜春,28.191584,115.786,360981, +CN101240511,yuanzhou,袁州,CN,China,中国,jiangxi,江西,yichun,宜春,27.800117,114.38738,360902, +CN101240601,jian,吉安,CN,China,中国,jiangxi,江西,jian,吉安,27.111698,114.986374,"360801,360800", +CN101240602,jianxian,吉安县,CN,China,中国,jiangxi,江西,jian,吉安,27.040043,114.90511,360821, +CN101240603,jishui,吉水,CN,China,中国,jiangxi,江西,jian,吉安,27.213446,115.13457,360822, +CN101240604,xingan,新干,CN,China,中国,jiangxi,江西,jian,吉安,27.755758,115.39929,360824, +CN101240605,xiajiang,峡江,CN,China,中国,jiangxi,江西,jian,吉安,27.580862,115.31933,360823, +CN101240606,yongfeng,永丰,CN,China,中国,jiangxi,江西,jian,吉安,27.321087,115.43556,360825, +CN101240607,yongxin,永新,CN,China,中国,jiangxi,江西,jian,吉安,26.944721,114.24253,360830, +CN101240608,jinggangshan,井冈山,CN,China,中国,jiangxi,江西,jian,吉安,26.745918,114.284424,360881, +CN101240609,wanan,万安,CN,China,中国,jiangxi,江西,jian,吉安,26.462086,114.78469,360828, +CN101240610,suichuan,遂川,CN,China,中国,jiangxi,江西,jian,吉安,26.323706,114.51689,360827, +CN101240611,taihe,泰和,CN,China,中国,jiangxi,江西,jian,吉安,26.790165,114.90139,360826, +CN101240612,anfu,安福,CN,China,中国,jiangxi,江西,jian,吉安,27.382746,114.61384,360829, +CN101240614,jizhou,吉州,CN,China,中国,jiangxi,江西,jian,吉安,27.112368,114.98733,360802, +CN101240615,qingyuan,青原,CN,China,中国,jiangxi,江西,jian,吉安,27.105879,115.016304,360803, +CN101240616,xiaping,厦坪,CN,China,中国,jiangxi,江西,jian,吉安,26.720444,114.26942,360881, +CN101240701,ganzhou,赣州,CN,China,中国,jiangxi,江西,ganzhou,赣州,25.85097,114.94028,"360701,360700", +CN101240702,chongyi,崇义,CN,China,中国,jiangxi,江西,ganzhou,赣州,25.68791,114.30735,360725, +CN101240703,shangyou,上犹,CN,China,中国,jiangxi,江西,ganzhou,赣州,25.794285,114.540535,360724, +CN101240704,nankang,南康,CN,China,中国,jiangxi,江西,ganzhou,赣州,25.66172,114.756935,360703, +CN101240705,dayu,大余,CN,China,中国,jiangxi,江西,ganzhou,赣州,25.395937,114.36224,360723, +CN101240706,xinfeng,信丰,CN,China,中国,jiangxi,江西,ganzhou,赣州,25.38023,114.93089,360722, +CN101240707,ningdu,宁都,CN,China,中国,jiangxi,江西,ganzhou,赣州,26.472054,116.01878,360730, +CN101240708,shicheng,石城,CN,China,中国,jiangxi,江西,ganzhou,赣州,26.326582,116.34225,360735, +CN101240709,ruijin,瑞金,CN,China,中国,jiangxi,江西,ganzhou,赣州,25.875278,116.03485,360781, +CN101240710,yudu,于都,CN,China,中国,jiangxi,江西,ganzhou,赣州,25.955032,115.4112,360731, +CN101240711,huichang,会昌,CN,China,中国,jiangxi,江西,ganzhou,赣州,25.599125,115.79116,360733, +CN101240712,anyuan,安远,CN,China,中国,jiangxi,江西,ganzhou,赣州,25.13459,115.39233,360726, +CN101240713,quannan,全南,CN,China,中国,jiangxi,江西,ganzhou,赣州,24.742651,114.531586,360729, +CN101240714,longnan,龙南,CN,China,中国,jiangxi,江西,ganzhou,赣州,24.90476,114.792656,360727, +CN101240715,dingnan,定南,CN,China,中国,jiangxi,江西,ganzhou,赣州,24.774277,115.03267,360728, +CN101240716,xunwu,寻乌,CN,China,中国,jiangxi,江西,ganzhou,赣州,24.954136,115.6514,360734, +CN101240717,xingguo,兴国,CN,China,中国,jiangxi,江西,ganzhou,赣州,26.330488,115.3519,360732, +CN101240718,ganxian,赣县,CN,China,中国,jiangxi,江西,ganzhou,赣州,25.865433,115.01846,360704, +CN101240719,zhanggong,章贡,CN,China,中国,jiangxi,江西,ganzhou,赣州,25.851368,114.93872,360702, +CN101240801,jingdezhen,景德镇,CN,China,中国,jiangxi,江西,jingdezhen,景德镇,29.29256,117.21466,"360201,360200", +CN101240802,leping,乐平,CN,China,中国,jiangxi,江西,jingdezhen,景德镇,28.967361,117.12938,360281, +CN101240803,fuliang,浮梁,CN,China,中国,jiangxi,江西,jingdezhen,景德镇,29.352251,117.21761,360222, +CN101240804,changjiang,昌江,CN,China,中国,jiangxi,江西,jingdezhen,景德镇,29.288465,117.19502,360202, +CN101240805,zhushan,珠山,CN,China,中国,jiangxi,江西,jingdezhen,景德镇,29.292812,117.21481,360203, +CN101240901,pingxiang,萍乡,CN,China,中国,jiangxi,江西,pingxiang,萍乡,27.622946,113.85219,"360301,360300", +CN101240902,lianhua,莲花,CN,China,中国,jiangxi,江西,pingxiang,萍乡,27.127808,113.95558,360321, +CN101240903,shangli,上栗,CN,China,中国,jiangxi,江西,pingxiang,萍乡,27.87704,113.80052,360322, +CN101240904,anyuan,安源,CN,China,中国,jiangxi,江西,pingxiang,萍乡,27.625826,113.85504,360302, +CN101240905,luxi,芦溪,CN,China,中国,jiangxi,江西,pingxiang,萍乡,27.633633,114.04121,360323, +CN101240906,xiangdong,湘东,CN,China,中国,jiangxi,江西,pingxiang,萍乡,27.639318,113.7456,360313, +CN101241001,xinyu,新余,CN,China,中国,jiangxi,江西,xinyu,新余,27.810835,114.93083,"360501,360500", +CN101241002,fenyi,分宜,CN,China,中国,jiangxi,江西,xinyu,新余,27.8113,114.67526,360521, +CN101241003,yushui,渝水,CN,China,中国,jiangxi,江西,xinyu,新余,27.819172,114.92392,360502, +CN101241101,yingtan,鹰潭,CN,China,中国,jiangxi,江西,yingtan,鹰潭,28.238638,117.03384,"360601,360600", +CN101241102,yujiang,余江,CN,China,中国,jiangxi,江西,yingtan,鹰潭,28.206177,116.82276,360622, +CN101241103,guixi,贵溪,CN,China,中国,jiangxi,江西,yingtan,鹰潭,28.283693,117.212105,360681, +CN101241104,yuehu,月湖,CN,China,中国,jiangxi,江西,yingtan,鹰潭,28.239077,117.03411,360602, +CN101250101,changsha,长沙,CN,China,中国,hunan,湖南,changsha,长沙,28.19409,112.98228,"430101,430100,430000", +CN101250102,ningxiang,宁乡,CN,China,中国,hunan,湖南,changsha,长沙,28.253927,112.553185,430182, +CN101250103,liuyang,浏阳,CN,China,中国,hunan,湖南,changsha,长沙,28.141111,113.6333,430181, +CN101250104,xiangjiangxinqu,湘江新区,CN,China,中国,hunan,湖南,changsha,长沙,28.12,113.05,430104, +CN101250105,wangcheng,望城,CN,China,中国,hunan,湖南,changsha,长沙,28.347458,112.81955,430112, +CN101250106,changshaxian,长沙县,CN,China,中国,hunan,湖南,changsha,长沙,28.237888,113.0801,430121, +CN101250107,furong,芙蓉,CN,China,中国,hunan,湖南,changsha,长沙,28.193106,112.98809,430102, +CN101250108,tianxin,天心,CN,China,中国,hunan,湖南,changsha,长沙,28.192375,112.97307,430103, +CN101250109,yuelu,岳麓,CN,China,中国,hunan,湖南,changsha,长沙,28.213043,112.91159,430104, +CN101250110,kaifu,开福,CN,China,中国,hunan,湖南,changsha,长沙,28.201336,112.98553,430105, +CN101250111,yuhua,雨花,CN,China,中国,hunan,湖南,changsha,长沙,28.109938,113.016335,430111, +CN101250201,xiangtan,湘潭,CN,China,中国,hunan,湖南,xiangtan,湘潭,27.82973,112.94405,"430301,430300,430321", +CN101250202,shaoshan,韶山,CN,China,中国,hunan,湖南,xiangtan,湘潭,27.922682,112.52848,430382, +CN101250203,xiangxiang,湘乡,CN,China,中国,hunan,湖南,xiangtan,湘潭,27.734919,112.525215,430381, +CN101250204,yuhu,雨湖,CN,China,中国,hunan,湖南,xiangtan,湘潭,27.86077,112.907425,430302, +CN101250205,yuetang,岳塘,CN,China,中国,hunan,湖南,xiangtan,湘潭,27.828854,112.927704,430304, +CN101250301,zhuzhou,株洲,CN,China,中国,hunan,湖南,zhuzhou,株洲,27.835806,113.15173,"430201,430200,430221", +CN101250302,youxian,攸县,CN,China,中国,hunan,湖南,zhuzhou,株洲,27.00007,113.34577,430223, +CN101250303,liling,醴陵,CN,China,中国,hunan,湖南,zhuzhou,株洲,27.657873,113.50716,430281, +CN101250304,hetang,荷塘,CN,China,中国,hunan,湖南,zhuzhou,株洲,27.833036,113.162544,430202, +CN101250305,chaling,茶陵,CN,China,中国,hunan,湖南,zhuzhou,株洲,26.789534,113.54651,430224, +CN101250306,yanling,炎陵,CN,China,中国,hunan,湖南,zhuzhou,株洲,26.489458,113.776886,430225, +CN101250307,lusong,芦淞,CN,China,中国,hunan,湖南,zhuzhou,株洲,27.827246,113.15517,430203, +CN101250308,shifeng,石峰,CN,China,中国,hunan,湖南,zhuzhou,株洲,27.871944,113.11295,430204, +CN101250309,tianyuan,天元,CN,China,中国,hunan,湖南,zhuzhou,株洲,27.826908,113.13625,430211, +CN101250401,hengyang,衡阳,CN,China,中国,hunan,湖南,hengyang,衡阳,26.900358,112.6077,"430401,430400", +CN101250402,hengshan,衡山,CN,China,中国,hunan,湖南,hengyang,衡阳,27.234808,112.86971,430423, +CN101250403,hengdong,衡东,CN,China,中国,hunan,湖南,hengyang,衡阳,27.08353,112.95041,430424, +CN101250404,qidong,祁东,CN,China,中国,hunan,湖南,hengyang,衡阳,26.78711,112.11119,430426, +CN101250405,hengyangxian,衡阳县,CN,China,中国,hunan,湖南,hengyang,衡阳,26.962387,112.37965,430421, +CN101250406,changning,常宁,CN,China,中国,hunan,湖南,hengyang,衡阳,26.406773,112.39682,430482, +CN101250407,hengnan,衡南,CN,China,中国,hunan,湖南,hengyang,衡阳,26.739973,112.67746,430422, +CN101250408,leiyang,耒阳,CN,China,中国,hunan,湖南,hengyang,衡阳,26.414162,112.84721,430481, +CN101250409,nanyue,南岳,CN,China,中国,hunan,湖南,hengyang,衡阳,27.240536,112.734146,430412, +CN101250410,zhuhui,珠晖,CN,China,中国,hunan,湖南,hengyang,衡阳,26.891064,112.62633,430405, +CN101250411,yanfeng,雁峰,CN,China,中国,hunan,湖南,hengyang,衡阳,26.893694,112.61224,430406, +CN101250412,shigu,石鼓,CN,China,中国,hunan,湖南,hengyang,衡阳,26.903908,112.607635,430407, +CN101250413,zhengxiang,蒸湘,CN,China,中国,hunan,湖南,hengyang,衡阳,26.89087,112.57061,430408, +CN101250501,chenzhou,郴州,CN,China,中国,hunan,湖南,chenzhou,郴州,25.793589,113.03207,"431001,431000", +CN101250502,guiyang,桂阳,CN,China,中国,hunan,湖南,chenzhou,郴州,25.737448,112.73447,431021, +CN101250503,jiahe,嘉禾,CN,China,中国,hunan,湖南,chenzhou,郴州,25.587309,112.37062,431024, +CN101250504,yizhang,宜章,CN,China,中国,hunan,湖南,chenzhou,郴州,25.394344,112.94788,431022, +CN101250505,linwu,临武,CN,China,中国,hunan,湖南,chenzhou,郴州,25.27912,112.56459,431025, +CN101250506,beihu,北湖,CN,China,中国,hunan,湖南,chenzhou,郴州,25.792627,113.03221,431002, +CN101250507,zixing,资兴,CN,China,中国,hunan,湖南,chenzhou,郴州,25.974152,113.23682,431081, +CN101250508,rucheng,汝城,CN,China,中国,hunan,湖南,chenzhou,郴州,25.553759,113.685684,431026, +CN101250509,anren,安仁,CN,China,中国,hunan,湖南,chenzhou,郴州,26.708626,113.27217,431028, +CN101250510,yongxing,永兴,CN,China,中国,hunan,湖南,chenzhou,郴州,26.129393,113.11482,431023, +CN101250511,guidong,桂东,CN,China,中国,hunan,湖南,chenzhou,郴州,26.073917,113.94588,431027, +CN101250512,suxian,苏仙,CN,China,中国,hunan,湖南,chenzhou,郴州,25.793158,113.0387,431003, +CN101250601,changde,常德,CN,China,中国,hunan,湖南,changde,常德,29.040224,111.691345,"430701,430700", +CN101250602,anxiang,安乡,CN,China,中国,hunan,湖南,changde,常德,29.414482,112.17229,430721, +CN101250603,taoyuan,桃源,CN,China,中国,hunan,湖南,changde,常德,28.902735,111.484505,430725, +CN101250604,hanshou,汉寿,CN,China,中国,hunan,湖南,changde,常德,28.907318,111.968506,430722, +CN101250605,lixian,澧县,CN,China,中国,hunan,湖南,changde,常德,29.64264,111.76168,430723, +CN101250606,linli,临澧,CN,China,中国,hunan,湖南,changde,常德,29.443216,111.6456,430724, +CN101250607,shimen,石门,CN,China,中国,hunan,湖南,changde,常德,29.584703,111.37909,430726, +CN101250608,jinshi,津市,CN,China,中国,hunan,湖南,changde,常德,29.630867,111.87961,430781, +CN101250609,wuling,武陵,CN,China,中国,hunan,湖南,changde,常德,29.040478,111.69072,430702, +CN101250610,dingcheng,鼎城,CN,China,中国,hunan,湖南,changde,常德,29.014425,111.685326,430703, +CN101250700,yiyang,益阳,CN,China,中国,hunan,湖南,yiyang,益阳,28.570066,112.35504,"430901,430900", +CN101250701,heshanqu,赫山区,CN,China,中国,hunan,湖南,yiyang,益阳,28.568327,112.36095,430903, +CN101250702,nanxian,南县,CN,China,中国,hunan,湖南,yiyang,益阳,29.37218,112.4104,430921, +CN101250703,taojiang,桃江,CN,China,中国,hunan,湖南,yiyang,益阳,28.520992,112.13973,430922, +CN101250704,anhua,安化,CN,China,中国,hunan,湖南,yiyang,益阳,28.37742,111.221825,430923, +CN101250705,yuanjiang,沅江,CN,China,中国,hunan,湖南,yiyang,益阳,28.839712,112.36109,430981, +CN101250706,ziyang,资阳,CN,China,中国,hunan,湖南,yiyang,益阳,28.592772,112.33084,430902, +CN101250801,loudi,娄底,CN,China,中国,hunan,湖南,loudi,娄底,27.728136,112.0085,"431301,431300", +CN101250802,shuangfeng,双峰,CN,China,中国,hunan,湖南,loudi,娄底,27.459126,112.19824,431321, +CN101250803,lengshuijiang,冷水江,CN,China,中国,hunan,湖南,loudi,娄底,27.685759,111.43468,431381, +CN101250804,louxing,娄星,CN,China,中国,hunan,湖南,loudi,娄底,27.726643,112.008484,431302, +CN101250805,xinhua,新化,CN,China,中国,hunan,湖南,loudi,娄底,27.737455,111.30675,431322, +CN101250806,lianyuan,涟源,CN,China,中国,hunan,湖南,loudi,娄底,27.6923,111.670845,431382, +CN101250901,shaoyang,邵阳,CN,China,中国,hunan,湖南,shaoyang,邵阳,27.237843,111.46923,"430501,430500", +CN101250902,longhui,隆回,CN,China,中国,hunan,湖南,shaoyang,邵阳,27.116001,111.03879,430524, +CN101250903,dongkou,洞口,CN,China,中国,hunan,湖南,shaoyang,邵阳,27.062286,110.57921,430525, +CN101250904,xinshao,新邵,CN,China,中国,hunan,湖南,shaoyang,邵阳,27.311428,111.45976,430522, +CN101250905,shaodong,邵东,CN,China,中国,hunan,湖南,shaoyang,邵阳,27.257273,111.74317,430521, +CN101250906,suining,绥宁,CN,China,中国,hunan,湖南,shaoyang,邵阳,26.580622,110.155075,430527, +CN101250907,xinning,新宁,CN,China,中国,hunan,湖南,shaoyang,邵阳,26.438911,110.859116,430528, +CN101250908,wugang,武冈,CN,China,中国,hunan,湖南,shaoyang,邵阳,26.732086,110.6368,430581, +CN101250909,chengbu,城步,CN,China,中国,hunan,湖南,shaoyang,邵阳,26.363575,110.313225,430529, +CN101250910,shaoyangxian,邵阳县,CN,China,中国,hunan,湖南,shaoyang,邵阳,26.989714,111.2757,430523, +CN101250911,shuangqing,双清,CN,China,中国,hunan,湖南,shaoyang,邵阳,27.240002,111.47976,430502, +CN101250912,daxiang,大祥,CN,China,中国,hunan,湖南,shaoyang,邵阳,27.233593,111.46297,430503, +CN101250913,beita,北塔,CN,China,中国,hunan,湖南,shaoyang,邵阳,27.245687,111.45232,430511, +CN101251001,yueyang,岳阳,CN,China,中国,hunan,湖南,yueyang,岳阳,29.37029,113.13286,"430601,430600,430621", +CN101251002,huarong,华容,CN,China,中国,hunan,湖南,yueyang,岳阳,29.524107,112.55937,430623, +CN101251003,xiangyin,湘阴,CN,China,中国,hunan,湖南,yueyang,岳阳,28.677498,112.88975,430624, +CN101251004,miluo,汨罗,CN,China,中国,hunan,湖南,yueyang,岳阳,28.803148,113.07942,430681, +CN101251005,pingjiang,平江,CN,China,中国,hunan,湖南,yueyang,岳阳,28.701523,113.59375,430626, +CN101251006,linxiang,临湘,CN,China,中国,hunan,湖南,yueyang,岳阳,29.471594,113.450806,430682, +CN101251007,yueyanglouqu,岳阳楼区,CN,China,中国,hunan,湖南,yueyang,岳阳,29.366783,113.12075,430602, +CN101251008,yunxi,云溪,CN,China,中国,hunan,湖南,yueyang,岳阳,29.473394,113.27387,430603, +CN101251009,junshan,君山,CN,China,中国,hunan,湖南,yueyang,岳阳,29.438063,113.00408,430611, +CN101251101,zhangjiajie,张家界,CN,China,中国,hunan,湖南,zhangjiajie,张家界,29.127401,110.47992,"430801,430800", +CN101251102,sangzhi,桑植,CN,China,中国,hunan,湖南,zhangjiajie,张家界,29.399939,110.16404,430822, +CN101251103,cili,慈利,CN,China,中国,hunan,湖南,zhangjiajie,张家界,29.423876,111.132706,430821, +CN101251104,wulingyuan,武陵源,CN,China,中国,hunan,湖南,zhangjiajie,张家界,29.347828,110.54758,430811, +CN101251105,yongding,永定,CN,China,中国,hunan,湖南,zhangjiajie,张家界,29.125961,110.48456,430802, +CN101251201,huaihua,怀化,CN,China,中国,hunan,湖南,huaihua,怀化,27.550081,109.97824,"431201,431200", +CN101251202,hecheng,鹤城,CN,China,中国,hunan,湖南,huaihua,怀化,27.548473,109.98224,431202, +CN101251203,yuanling,沅陵,CN,China,中国,hunan,湖南,huaihua,怀化,28.455553,110.39916,431222, +CN101251204,chenxi,辰溪,CN,China,中国,hunan,湖南,huaihua,怀化,28.005474,110.19695,431223, +CN101251205,jingzhou,靖州,CN,China,中国,hunan,湖南,huaihua,怀化,26.573511,109.69116,431229, +CN101251206,huitong,会同,CN,China,中国,hunan,湖南,huaihua,怀化,26.870789,109.72079,431225, +CN101251207,tongdao,通道,CN,China,中国,hunan,湖南,huaihua,怀化,26.158348,109.783356,431230, +CN101251208,mayang,麻阳,CN,China,中国,hunan,湖南,huaihua,怀化,27.865992,109.80281,431226, +CN101251209,xinhuang,新晃,CN,China,中国,hunan,湖南,huaihua,怀化,27.359898,109.174446,431227, +CN101251210,zhijiang,芷江,CN,China,中国,hunan,湖南,huaihua,怀化,27.437996,109.687775,431228, +CN101251211,xupu,溆浦,CN,China,中国,hunan,湖南,huaihua,怀化,27.903803,110.593376,431224, +CN101251212,zhongfang,中方,CN,China,中国,hunan,湖南,huaihua,怀化,27.43736,109.94806,431221, +CN101251213,hongjiang,洪江,CN,China,中国,hunan,湖南,huaihua,怀化,27.201876,109.831764,431281, +CN101251401,yongzhou,永州,CN,China,中国,hunan,湖南,yongzhou,永州,26.434517,111.60802,"431101,431100", +CN101251402,qiyang,祁阳,CN,China,中国,hunan,湖南,yongzhou,永州,26.58593,111.85734,431121, +CN101251403,dongan,东安,CN,China,中国,hunan,湖南,yongzhou,永州,26.397278,111.313034,431122, +CN101251404,shuangpai,双牌,CN,China,中国,hunan,湖南,yongzhou,永州,25.959396,111.66215,431123, +CN101251405,daoxian,道县,CN,China,中国,hunan,湖南,yongzhou,永州,25.518444,111.59161,431124, +CN101251406,ningyuan,宁远,CN,China,中国,hunan,湖南,yongzhou,永州,25.584112,111.94453,431126, +CN101251407,jiangyong,江永,CN,China,中国,hunan,湖南,yongzhou,永州,25.268154,111.3468,431125, +CN101251408,lanshan,蓝山,CN,China,中国,hunan,湖南,yongzhou,永州,25.375256,112.1942,431127, +CN101251409,xintian,新田,CN,China,中国,hunan,湖南,yongzhou,永州,25.906927,112.220345,431128, +CN101251410,jianghua,江华,CN,China,中国,hunan,湖南,yongzhou,永州,25.182596,111.57728,431129, +CN101251411,lengshuitan,冷水滩,CN,China,中国,hunan,湖南,yongzhou,永州,26.434364,111.607155,431103, +CN101251412,lingling,零陵,CN,China,中国,hunan,湖南,yongzhou,永州,26.223347,111.62635,431102, +CN101251501,jishou,吉首,CN,China,中国,hunan,湖南,xiangxi,湘西,28.314827,109.73827,433101, +CN101251502,baojing,保靖,CN,China,中国,hunan,湖南,xiangxi,湘西,28.709604,109.65144,433125, +CN101251503,yongshun,永顺,CN,China,中国,hunan,湖南,xiangxi,湘西,28.998068,109.853294,433127, +CN101251504,guzhang,古丈,CN,China,中国,hunan,湖南,xiangxi,湘西,28.616974,109.94959,433126, +CN101251505,fenghuang,凤凰,CN,China,中国,hunan,湖南,xiangxi,湘西,27.948309,109.59919,433123, +CN101251506,luxi,泸溪,CN,China,中国,hunan,湖南,xiangxi,湘西,28.214516,110.21443,433122, +CN101251507,longshan,龙山,CN,China,中国,hunan,湖南,xiangxi,湘西,29.453438,109.44119,433130, +CN101251508,huayuan,花垣,CN,China,中国,hunan,湖南,xiangxi,湘西,28.581352,109.479065,433124, +CN101251509,xiangxi,湘西,CN,China,中国,hunan,湖南,xiangxi,湘西,28.314297,109.73974,433100, +CN101260101,guiyang,贵阳,CN,China,中国,guizhou,贵州,guiyang,贵阳,26.578342,106.71348,"520101,520100,520000", +CN101260102,baiyun,白云,CN,China,中国,guizhou,贵州,guiyang,贵阳,26.67685,106.63303,520113, +CN101260103,huaxi,花溪,CN,China,中国,guizhou,贵州,guiyang,贵阳,26.410463,106.67079,520111, +CN101260104,wudang,乌当,CN,China,中国,guizhou,贵州,guiyang,贵阳,26.630928,106.76212,520112, +CN101260105,xifeng,息烽,CN,China,中国,guizhou,贵州,guiyang,贵阳,27.092665,106.73769,520122, +CN101260106,kaiyang,开阳,CN,China,中国,guizhou,贵州,guiyang,贵阳,27.056793,106.96944,520121, +CN101260107,xiuwen,修文,CN,China,中国,guizhou,贵州,guiyang,贵阳,26.840672,106.59922,520123, +CN101260108,qingzhen,清镇,CN,China,中国,guizhou,贵州,guiyang,贵阳,26.551289,106.470276,520181, +CN101260110,yunyan,云岩,CN,China,中国,guizhou,贵州,guiyang,贵阳,26.58301,106.713394,520103, +CN101260111,nanming,南明,CN,China,中国,guizhou,贵州,guiyang,贵阳,26.573744,106.715965,520102, +CN101260112,guanshanhu,观山湖,CN,China,中国,guizhou,贵州,guiyang,贵阳,26.646358,106.62632,520115, +CN101260201,zunyi,遵义,CN,China,中国,guizhou,贵州,zunyi,遵义,27.706627,106.93726,"520301,520300", +CN101260203,renhuai,仁怀,CN,China,中国,guizhou,贵州,zunyi,遵义,27.803377,106.412476,520382, +CN101260204,suiyang,绥阳,CN,China,中国,guizhou,贵州,zunyi,遵义,27.951342,107.191025,520323, +CN101260205,meitan,湄潭,CN,China,中国,guizhou,贵州,zunyi,遵义,27.765839,107.485725,520328, +CN101260206,fenggang,凤冈,CN,China,中国,guizhou,贵州,zunyi,遵义,27.960857,107.72202,520327, +CN101260207,tongzi,桐梓,CN,China,中国,guizhou,贵州,zunyi,遵义,28.13156,106.82659,520322, +CN101260208,chishui,赤水,CN,China,中国,guizhou,贵州,zunyi,遵义,28.587057,105.69811,520381, +CN101260209,xishui,习水,CN,China,中国,guizhou,贵州,zunyi,遵义,28.327826,106.20095,520330, +CN101260210,daozhen,道真,CN,China,中国,guizhou,贵州,zunyi,遵义,28.880089,107.60534,520325, +CN101260211,zhengan,正安,CN,China,中国,guizhou,贵州,zunyi,遵义,28.550337,107.44187,520324, +CN101260212,wuchuan,务川,CN,China,中国,guizhou,贵州,zunyi,遵义,28.521566,107.887856,520326, +CN101260213,yuqing,余庆,CN,China,中国,guizhou,贵州,zunyi,遵义,27.221552,107.89256,520329, +CN101260214,huichuan,汇川,CN,China,中国,guizhou,贵州,zunyi,遵义,27.706627,106.93726,520303, +CN101260215,honghuagang,红花岗,CN,China,中国,guizhou,贵州,zunyi,遵义,27.694395,106.94379,520302, +CN101260216,bozhou,播州,CN,China,中国,guizhou,贵州,zunyi,遵义,27.535288,106.831665,520304, +CN101260301,anshun,安顺,CN,China,中国,guizhou,贵州,anshun,安顺,26.245544,105.93219,"520401,520400", +CN101260302,puding,普定,CN,China,中国,guizhou,贵州,anshun,安顺,26.305794,105.745605,520422, +CN101260303,zhenning,镇宁,CN,China,中国,guizhou,贵州,anshun,安顺,26.056095,105.768654,520423, +CN101260304,pingba,平坝,CN,China,中国,guizhou,贵州,anshun,安顺,26.40608,106.25994,520403, +CN101260305,ziyun,紫云,CN,China,中国,guizhou,贵州,anshun,安顺,25.751568,106.08452,520425, +CN101260306,guanling,关岭,CN,China,中国,guizhou,贵州,anshun,安顺,25.944248,105.618454,520424, +CN101260307,xixiu,西秀,CN,China,中国,guizhou,贵州,anshun,安顺,26.248323,105.94617,520402, +CN101260401,duyun,都匀,CN,China,中国,guizhou,贵州,qiannan,黔南,26.258205,107.51702,522701, +CN101260402,guiding,贵定,CN,China,中国,guizhou,贵州,qiannan,黔南,26.580807,107.23359,522723, +CN101260403,wengan,瓮安,CN,China,中国,guizhou,贵州,qiannan,黔南,27.06634,107.47842,522725, +CN101260404,changshun,长顺,CN,China,中国,guizhou,贵州,qiannan,黔南,26.022116,106.44737,522729, +CN101260405,fuquan,福泉,CN,China,中国,guizhou,贵州,qiannan,黔南,26.702509,107.51351,522702, +CN101260406,huishui,惠水,CN,China,中国,guizhou,贵州,qiannan,黔南,26.128637,106.657845,522731, +CN101260407,longli,龙里,CN,China,中国,guizhou,贵州,qiannan,黔南,26.448809,106.97773,522730, +CN101260408,luodian,罗甸,CN,China,中国,guizhou,贵州,qiannan,黔南,25.429893,106.75001,522728, +CN101260409,pingtang,平塘,CN,China,中国,guizhou,贵州,qiannan,黔南,25.831802,107.32405,522727, +CN101260410,dushan,独山,CN,China,中国,guizhou,贵州,qiannan,黔南,25.826283,107.542755,522726, +CN101260411,sandu,三都,CN,China,中国,guizhou,贵州,qiannan,黔南,25.985184,107.87747,522732, +CN101260412,libo,荔波,CN,China,中国,guizhou,贵州,qiannan,黔南,25.41224,107.8838,522722, +CN101260413,qiannan,黔南,CN,China,中国,guizhou,贵州,qiannan,黔南,26.258219,107.51716,522700, +CN101260501,kaili,凯里,CN,China,中国,guizhou,贵州,qiandongnan,黔东南,26.582964,107.97754,522601, +CN101260502,cengong,岑巩,CN,China,中国,guizhou,贵州,qiandongnan,黔东南,27.173244,108.81646,522626, +CN101260503,shibing,施秉,CN,China,中国,guizhou,贵州,qiandongnan,黔东南,27.034657,108.12678,522623, +CN101260504,zhenyuan,镇远,CN,China,中国,guizhou,贵州,qiandongnan,黔东南,27.050234,108.42365,522625, +CN101260505,huangping,黄平,CN,China,中国,guizhou,贵州,qiandongnan,黔东南,26.896973,107.90134,522622, +CN101260506,qiandongnan,黔东南,CN,China,中国,guizhou,贵州,qiandongnan,黔东南,26.583351,107.977486,522600, +CN101260507,majiang,麻江,CN,China,中国,guizhou,贵州,qiandongnan,黔东南,26.494802,107.59317,522635, +CN101260508,danzhai,丹寨,CN,China,中国,guizhou,贵州,qiandongnan,黔东南,26.199497,107.79481,522636, +CN101260509,sansui,三穗,CN,China,中国,guizhou,贵州,qiandongnan,黔东南,26.959885,108.68112,522624, +CN101260510,taijiang,台江,CN,China,中国,guizhou,贵州,qiandongnan,黔东南,26.669138,108.31464,522630, +CN101260511,jianhe,剑河,CN,China,中国,guizhou,贵州,qiandongnan,黔东南,26.727348,108.4405,522629, +CN101260512,leishan,雷山,CN,China,中国,guizhou,贵州,qiandongnan,黔东南,26.381027,108.07961,522634, +CN101260513,liping,黎平,CN,China,中国,guizhou,贵州,qiandongnan,黔东南,26.230637,109.136505,522631, +CN101260514,tianzhu,天柱,CN,China,中国,guizhou,贵州,qiandongnan,黔东南,26.909683,109.2128,522627, +CN101260515,jinping,锦屏,CN,China,中国,guizhou,贵州,qiandongnan,黔东南,26.680626,109.20252,522628, +CN101260516,rongjiang,榕江,CN,China,中国,guizhou,贵州,qiandongnan,黔东南,25.931086,108.52103,522632, +CN101260517,congjiang,从江,CN,China,中国,guizhou,贵州,qiandongnan,黔东南,25.747059,108.91265,522633, +CN101260601,tongren,铜仁,CN,China,中国,guizhou,贵州,tongren,铜仁,27.718346,109.19155,520600, +CN101260602,jiangkou,江口,CN,China,中国,guizhou,贵州,tongren,铜仁,27.691904,108.84843,520621, +CN101260603,yuping,玉屏,CN,China,中国,guizhou,贵州,tongren,铜仁,27.238024,108.917885,520622, +CN101260604,wanshan,万山,CN,China,中国,guizhou,贵州,tongren,铜仁,27.51903,109.21199,520603, +CN101260605,sinan,思南,CN,China,中国,guizhou,贵州,tongren,铜仁,27.941332,108.25583,520624, +CN101260606,bijiang,碧江,CN,China,中国,guizhou,贵州,tongren,铜仁,27.718744,109.192116,520602, +CN101260607,yinjiang,印江,CN,China,中国,guizhou,贵州,tongren,铜仁,27.997976,108.40552,520625, +CN101260608,shiqian,石阡,CN,China,中国,guizhou,贵州,tongren,铜仁,27.519386,108.22985,520623, +CN101260609,yanhe,沿河,CN,China,中国,guizhou,贵州,tongren,铜仁,28.560488,108.49574,520627, +CN101260610,dejiang,德江,CN,China,中国,guizhou,贵州,tongren,铜仁,28.26094,108.11732,520626, +CN101260611,songtao,松桃,CN,China,中国,guizhou,贵州,tongren,铜仁,28.165419,109.20263,520628, +CN101260701,bijie,毕节,CN,China,中国,guizhou,贵州,bijie,毕节,27.301693,105.28501,520500, +CN101260702,hezhang,赫章,CN,China,中国,guizhou,贵州,bijie,毕节,27.119244,104.72644,520527, +CN101260703,jinsha,金沙,CN,China,中国,guizhou,贵州,bijie,毕节,27.459694,106.2221,520523, +CN101260704,weining,威宁,CN,China,中国,guizhou,贵州,bijie,毕节,26.859098,104.28652,520526, +CN101260705,dafang,大方,CN,China,中国,guizhou,贵州,bijie,毕节,27.14352,105.60925,520521, +CN101260706,nayong,纳雍,CN,China,中国,guizhou,贵州,bijie,毕节,26.769875,105.37532,520525, +CN101260707,zhijin,织金,CN,China,中国,guizhou,贵州,bijie,毕节,26.668497,105.769,520524, +CN101260708,qianxi,黔西,CN,China,中国,guizhou,贵州,bijie,毕节,27.024923,106.0383,520522, +CN101260709,qixingguan,七星关,CN,China,中国,guizhou,贵州,bijie,毕节,27.302086,105.28485,520502, +CN101260801,shuicheng,水城,CN,China,中国,guizhou,贵州,liupanshui,六盘水,26.540478,104.95685,520221, +CN101260802,liuzhi,六枝,CN,China,中国,guizhou,贵州,liupanshui,六盘水,26.210663,105.474236,520203, +CN101260803,liupanshui,六盘水,CN,China,中国,guizhou,贵州,liupanshui,六盘水,26.584642,104.84674,520200, +CN101260804,panzhou,盘州,CN,China,中国,guizhou,贵州,liupanshui,六盘水,25.706966,104.46837,520281, +CN101260805,zhongshan,钟山,CN,China,中国,guizhou,贵州,liupanshui,六盘水,26.584805,104.846245,520201, +CN101260901,xingyi,兴义,CN,China,中国,guizhou,贵州,qianxinan,黔西南,25.088598,104.89798,522301, +CN101260902,qinglong,晴隆,CN,China,中国,guizhou,贵州,qianxinan,黔西南,25.832882,105.21877,522324, +CN101260903,xingren,兴仁,CN,China,中国,guizhou,贵州,qianxinan,黔西南,25.431377,105.19278,522322, +CN101260904,zhenfeng,贞丰,CN,China,中国,guizhou,贵州,qianxinan,黔西南,25.385752,105.65013,522325, +CN101260905,wangmo,望谟,CN,China,中国,guizhou,贵州,qianxinan,黔西南,25.166668,106.09156,522326, +CN101260906,qianxinan,黔西南,CN,China,中国,guizhou,贵州,qianxinan,黔西南,25.08812,104.89797,522300, +CN101260907,anlong,安龙,CN,China,中国,guizhou,贵州,qianxinan,黔西南,25.10896,105.4715,522328, +CN101260908,ceheng,册亨,CN,China,中国,guizhou,贵州,qianxinan,黔西南,24.983337,105.81241,522327, +CN101260909,puan,普安,CN,China,中国,guizhou,贵州,qianxinan,黔西南,25.786404,104.955345,522323, +CN101270101,chengdu,成都,CN,China,中国,sichuan,四川,chengdu,成都,30.659462,104.065735,"510101,510100,510000", +CN101270102,longquanyi,龙泉驿,CN,China,中国,sichuan,四川,chengdu,成都,30.56065,104.26918,510112, +CN101270103,xindu,新都,CN,China,中国,sichuan,四川,chengdu,成都,30.824223,104.16022,510114, +CN101270104,wenjiang,温江,CN,China,中国,sichuan,四川,chengdu,成都,30.697996,103.83678,510115, +CN101270105,jintang,金堂,CN,China,中国,sichuan,四川,chengdu,成都,30.858418,104.4156,510121, +CN101270106,shuangliu,双流,CN,China,中国,sichuan,四川,chengdu,成都,30.573242,103.92271,510116, +CN101270107,pidu,郫都,CN,China,中国,sichuan,四川,chengdu,成都,30.808752,103.88784,510117, +CN101270108,dayi,大邑,CN,China,中国,sichuan,四川,chengdu,成都,30.586601,103.5224,510129, +CN101270109,pujiang,蒲江,CN,China,中国,sichuan,四川,chengdu,成都,30.194359,103.51154,510131, +CN101270110,xinjin,新津,CN,China,中国,sichuan,四川,chengdu,成都,30.414284,103.81245,510132, +CN101270111,dujiangyan,都江堰,CN,China,中国,sichuan,四川,chengdu,成都,30.99114,103.6279,510181, +CN101270112,pengzhou,彭州,CN,China,中国,sichuan,四川,chengdu,成都,30.98516,103.94117,510182, +CN101270113,qionglai,邛崃,CN,China,中国,sichuan,四川,chengdu,成都,30.41327,103.46143,510183, +CN101270114,chongzhou,崇州,CN,China,中国,sichuan,四川,chengdu,成都,30.631477,103.67105,510184, +CN101270115,qingbaijiang,青白江,CN,China,中国,sichuan,四川,chengdu,成都,30.883438,104.25494,510113, +CN101270116,jinjiang,锦江,CN,China,中国,sichuan,四川,chengdou,成都,30.657688,104.080986,510104, +CN101270117,qingyang,青羊,CN,China,中国,sichuan,四川,chengdou,成都,30.667648,104.05573,510105, +CN101270118,jinniu,金牛,CN,China,中国,sichuan,四川,chengdou,成都,30.692059,104.04349,510106, +CN101270119,wuhou,武侯,CN,China,中国,sichuan,四川,chengdou,成都,30.630861,104.05167,510107, +CN101270120,chenghua,成华,CN,China,中国,sichuan,四川,chengdou,成都,30.660275,104.10308,510108, +CN101270121,jianyang,简阳,CN,China,中国,sichuan,四川,chengdu,成都,30.390665,104.55034,510185, +CN101270201,panzhihua,攀枝花,CN,China,中国,sichuan,四川,panzhihua,攀枝花,26.580446,101.716,"510401,510400", +CN101270202,renhe,仁和,CN,China,中国,sichuan,四川,panzhihua,攀枝花,26.497185,101.737915,510411, +CN101270203,miyi,米易,CN,China,中国,sichuan,四川,panzhihua,攀枝花,26.887474,102.10988,510421, +CN101270204,yanbian,盐边,CN,China,中国,sichuan,四川,panzhihua,攀枝花,26.67762,101.851845,510422, +CN101270205,dongqu,东区,CN,China,中国,sichuan,四川,panzhihua,攀枝花,26.580887,101.71513,510402, +CN101270206,xiqu,西区,CN,China,中国,sichuan,四川,panzhihua,攀枝花,26.596775,101.63797,510403, +CN101270301,zigong,自贡,CN,China,中国,sichuan,四川,zigong,自贡,29.352764,104.773445,"510301,510300", +CN101270302,fushun,富顺,CN,China,中国,sichuan,四川,zigong,自贡,29.181282,104.98425,510322, +CN101270303,rongxian,荣县,CN,China,中国,sichuan,四川,zigong,自贡,29.454851,104.423935,510321, +CN101270304,ziliujing,自流井,CN,China,中国,sichuan,四川,zigong,自贡,29.343231,104.77819,510302, +CN101270305,gongjing,贡井,CN,China,中国,sichuan,四川,zigong,自贡,29.345675,104.71437,510303, +CN101270306,daan,大安,CN,China,中国,sichuan,四川,zigong,自贡,29.367136,104.783226,510304, +CN101270307,yantan,沿滩,CN,China,中国,sichuan,四川,zigong,自贡,29.27252,104.87642,510311, +CN101270401,mianyang,绵阳,CN,China,中国,sichuan,四川,mianyang,绵阳,31.46402,104.74172,"510701,510700", +CN101270402,santai,三台,CN,China,中国,sichuan,四川,mianyang,绵阳,31.090908,105.09032,510722, +CN101270403,yanting,盐亭,CN,China,中国,sichuan,四川,mianyang,绵阳,31.22318,105.39199,510723, +CN101270405,zitong,梓潼,CN,China,中国,sichuan,四川,mianyang,绵阳,31.635225,105.16353,510725, +CN101270406,beichuan,北川,CN,China,中国,sichuan,四川,mianyang,绵阳,31.615864,104.46807,510726, +CN101270407,pingwu,平武,CN,China,中国,sichuan,四川,mianyang,绵阳,32.40759,104.530556,510727, +CN101270408,jiangyou,江油,CN,China,中国,sichuan,四川,mianyang,绵阳,31.776386,104.74443,510781, +CN101270409,fucheng,涪城,CN,China,中国,sichuan,四川,mianyang,绵阳,31.463556,104.740974,510703, +CN101270410,youxian,游仙,CN,China,中国,sichuan,四川,mianyang,绵阳,31.484772,104.770004,510704, +CN101270411,anzhou,安州,CN,China,中国,sichuan,四川,mianyang,绵阳,31.53894,104.56034,510705, +CN101270501,nanchong,南充,CN,China,中国,sichuan,四川,nanchong,南充,30.79528,106.08298,"511301,511300", +CN101270502,nanbu,南部,CN,China,中国,sichuan,四川,nanchong,南充,31.349407,106.061134,511321, +CN101270503,yingshan,营山,CN,China,中国,sichuan,四川,nanchong,南充,31.075907,106.564896,511322, +CN101270504,pengan,蓬安,CN,China,中国,sichuan,四川,nanchong,南充,31.027979,106.41349,511323, +CN101270505,yilong,仪陇,CN,China,中国,sichuan,四川,nanchong,南充,31.271261,106.29708,511324, +CN101270506,xichong,西充,CN,China,中国,sichuan,四川,nanchong,南充,30.994616,105.89302,511325, +CN101270507,langzhong,阆中,CN,China,中国,sichuan,四川,nanchong,南充,31.580465,105.975266,511381, +CN101270508,shunqing,顺庆,CN,China,中国,sichuan,四川,nanchong,南充,30.795572,106.08409,511302, +CN101270509,gaoping,高坪,CN,China,中国,sichuan,四川,nanchong,南充,30.781809,106.10899,511303, +CN101270510,jialing,嘉陵,CN,China,中国,sichuan,四川,nanchong,南充,30.762976,106.067024,511304, +CN101270601,dazhou,达州,CN,China,中国,sichuan,四川,dazhou,达州,31.209484,107.50226,"511701,511700", +CN101270602,xuanhan,宣汉,CN,China,中国,sichuan,四川,dazhou,达州,31.355024,107.72225,511722, +CN101270603,kaijiang,开江,CN,China,中国,sichuan,四川,dazhou,达州,31.085537,107.864136,511723, +CN101270604,dazhu,大竹,CN,China,中国,sichuan,四川,dazhou,达州,30.736288,107.20742,511724, +CN101270605,quxian,渠县,CN,China,中国,sichuan,四川,dazhou,达州,30.836348,106.97075,511725, +CN101270606,wanyuan,万源,CN,China,中国,sichuan,四川,dazhou,达州,32.06777,108.037544,511781, +CN101270607,tongchuan,通川,CN,China,中国,sichuan,四川,dazhou,达州,31.213522,107.50106,511702, +CN101270608,dachuan,达川,CN,China,中国,sichuan,四川,dazhou,达州,31.199062,107.50793,511703, +CN101270701,suining,遂宁,CN,China,中国,sichuan,四川,suining,遂宁,30.513311,105.57133,"510901,510900", +CN101270702,pengxi,蓬溪,CN,China,中国,sichuan,四川,suining,遂宁,30.774883,105.7137,510921, +CN101270703,shehong,射洪,CN,China,中国,sichuan,四川,suining,遂宁,30.868752,105.38185,510922, +CN101270704,chuanshan,船山,CN,China,中国,sichuan,四川,suining,遂宁,30.502647,105.582214,510903, +CN101270705,anju,安居,CN,China,中国,sichuan,四川,suining,遂宁,30.34612,105.45938,510904, +CN101270706,daying,大英,CN,China,中国,sichuan,四川,suining,遂宁,30.581572,105.25219,510923, +CN101270801,guangan,广安,CN,China,中国,sichuan,四川,guangan,广安,30.456398,106.63337,"511601,511600,511602", +CN101270802,yuechi,岳池,CN,China,中国,sichuan,四川,guangan,广安,30.533539,106.44445,511621, +CN101270803,wusheng,武胜,CN,China,中国,sichuan,四川,guangan,广安,30.344292,106.29247,511622, +CN101270804,linshui,邻水,CN,China,中国,sichuan,四川,guangan,广安,30.334324,106.93497,511623, +CN101270805,huaying,华蓥,CN,China,中国,sichuan,四川,guangan,广安,30.380573,106.777885,511681, +CN101270806,qianfeng,前锋,CN,China,中国,sichuan,四川,guangan,广安,30.4963,106.89328,511603, +CN101270901,bazhong,巴中,CN,China,中国,sichuan,四川,bazhong,巴中,31.858809,106.75367,"511901,511900", +CN101270902,tongjiang,通江,CN,China,中国,sichuan,四川,bazhong,巴中,31.91212,107.24762,511921, +CN101270903,nanjiang,南江,CN,China,中国,sichuan,四川,bazhong,巴中,32.353165,106.843414,511922, +CN101270904,pingchang,平昌,CN,China,中国,sichuan,四川,bazhong,巴中,31.562815,107.10194,511923, +CN101270905,bazhou,巴州,CN,China,中国,sichuan,四川,bazhong,巴中,31.858366,106.75367,511902, +CN101270906,enyang,恩阳,CN,China,中国,sichuan,四川,bazhong,巴中,31.816336,106.48651,511903, +CN101271001,luzhou,泸州,CN,China,中国,sichuan,四川,luzhou,泸州,28.889137,105.44335,"510501,510500", +CN101271002,jiangyang,江阳,CN,China,中国,sichuan,四川,luzhou,泸州,28.882889,105.44513,510502, +CN101271003,luxian,泸县,CN,China,中国,sichuan,四川,luzhou,泸州,29.151287,105.376335,510521, +CN101271004,hejiang,合江,CN,China,中国,sichuan,四川,luzhou,泸州,28.810326,105.8341,510522, +CN101271005,xuyong,叙永,CN,China,中国,sichuan,四川,luzhou,泸州,28.16792,105.437775,510524, +CN101271006,gulin,古蔺,CN,China,中国,sichuan,四川,luzhou,泸州,28.03948,105.81336,510525, +CN101271007,naxi,纳溪,CN,China,中国,sichuan,四川,luzhou,泸州,28.77631,105.37721,510503, +CN101271008,longmatan,龙马潭,CN,China,中国,sichuan,四川,luzhou,泸州,28.897572,105.43523,510504, +CN101271101,yibin,宜宾,CN,China,中国,sichuan,四川,yibin,宜宾,28.76019,104.63082,"511501,511500", +CN101271102,cuiping,翠屏,CN,China,中国,sichuan,四川,yibin,宜宾,28.76018,104.63023,511502, +CN101271103,yibinxian,宜宾县,CN,China,中国,sichuan,四川,yibin,宜宾,28.695679,104.54149,511521, +CN101271104,nanxi,南溪,CN,China,中国,sichuan,四川,yibin,宜宾,28.839806,104.98113,511503, +CN101271105,jiangan,江安,CN,China,中国,sichuan,四川,yibin,宜宾,28.728102,105.068695,511523, +CN101271106,changning,长宁,CN,China,中国,sichuan,四川,yibin,宜宾,28.57727,104.92112,511524, +CN101271107,gaoxian,高县,CN,China,中国,sichuan,四川,yibin,宜宾,28.435677,104.51919,511525, +CN101271108,gongxian,珙县,CN,China,中国,sichuan,四川,yibin,宜宾,28.449041,104.712265,511526, +CN101271109,junlian,筠连,CN,China,中国,sichuan,四川,yibin,宜宾,28.162018,104.50785,511527, +CN101271110,xingwen,兴文,CN,China,中国,sichuan,四川,yibin,宜宾,28.302988,105.23655,511528, +CN101271111,pingshan,屏山,CN,China,中国,sichuan,四川,yibin,宜宾,28.64237,104.16262,511529, +CN101271201,neijiang,内江,CN,China,中国,sichuan,四川,neijiang,内江,29.58708,105.06614,"511001,511000", +CN101271202,dongxing,东兴,CN,China,中国,sichuan,四川,neijiang,内江,29.600107,105.0672,511011, +CN101271203,weiyuan,威远,CN,China,中国,sichuan,四川,neijiang,内江,29.52686,104.66833,511024, +CN101271204,zizhong,资中,CN,China,中国,sichuan,四川,neijiang,内江,29.775295,104.85246,511025, +CN101271205,longchang,隆昌,CN,China,中国,sichuan,四川,neijiang,内江,29.338161,105.28807,511083, +CN101271206,shizhong,市中,CN,China,中国,sichuan,四川,najiang,内江,29.585264,105.06547,511002, +CN101271301,ziyang,资阳,CN,China,中国,sichuan,四川,ziyang,资阳,30.122211,104.641914,"512001,512000", +CN101271302,anyue,安岳,CN,China,中国,sichuan,四川,ziyang,资阳,30.099207,105.33676,512021, +CN101271303,lezhi,乐至,CN,China,中国,sichuan,四川,ziyang,资阳,30.27562,105.03114,512022, +CN101271305,yanjiang,雁江,CN,China,中国,sichuan,四川,ziyang,资阳,30.121687,104.64234,512002, +CN101271401,leshan,乐山,CN,China,中国,sichuan,四川,leshan,乐山,29.582024,103.76126,"511101,511100", +CN101271402,qianwei,犍为,CN,China,中国,sichuan,四川,leshan,乐山,29.209782,103.94427,511123, +CN101271403,jingyan,井研,CN,China,中国,sichuan,四川,leshan,乐山,29.651646,104.06885,511124, +CN101271404,jiajiang,夹江,CN,China,中国,sichuan,四川,leshan,乐山,29.741018,103.578865,511126, +CN101271405,muchuan,沐川,CN,China,中国,sichuan,四川,leshan,乐山,28.956339,103.90211,511129, +CN101271406,ebian,峨边,CN,China,中国,sichuan,四川,leshan,乐山,29.23027,103.262146,511132, +CN101271407,mabian,马边,CN,China,中国,sichuan,四川,leshan,乐山,28.838934,103.54685,511133, +CN101271409,emeishan,峨眉山,CN,China,中国,sichuan,四川,leshan,乐山,29.597479,103.492485,511181, +CN101271410,shizhong,市中,CN,China,中国,sichuan,四川,leshan,乐山,29.588327,103.75539,511102, +CN101271411,shawan,沙湾,CN,China,中国,sichuan,四川,leshan,乐山,29.416536,103.54996,511111, +CN101271412,wutongqiao,五通桥,CN,China,中国,sichuan,四川,leshan,乐山,29.406185,103.81683,511112, +CN101271413,jinkouhe,金口河,CN,China,中国,sichuan,四川,leshan,乐山,29.24602,103.07783,511113, +CN101271414,emeishanshi,峨眉山市,CN,China,中国,sichuan,四川,leshan,乐山,29.601198,103.484505,511181, +CN101271501,meishan,眉山,CN,China,中国,sichuan,四川,meishan,眉山,30.048319,103.83179,"511401,511400", +CN101271502,renshou,仁寿,CN,China,中国,sichuan,四川,meishan,眉山,29.996721,104.147644,511421, +CN101271503,pengshan,彭山,CN,China,中国,sichuan,四川,meishan,眉山,30.192299,103.8701,511403, +CN101271504,hongya,洪雅,CN,China,中国,sichuan,四川,meishan,眉山,29.904867,103.37501,511423, +CN101271505,danleng,丹棱,CN,China,中国,sichuan,四川,meishan,眉山,30.01275,103.51833,511424, +CN101271506,qingshen,青神,CN,China,中国,sichuan,四川,meishan,眉山,29.831469,103.84613,511425, +CN101271507,dongpo,东坡,CN,China,中国,sichuan,四川,meishan,眉山,30.048128,103.83155,511402, +CN101271601,liangshan,凉山,CN,China,中国,sichuan,四川,liangshan,凉山,27.886763,102.25874,513400, +CN101271603,muli,木里,CN,China,中国,sichuan,四川,liangshan,凉山,27.926859,101.28018,513422, +CN101271604,yanyuan,盐源,CN,China,中国,sichuan,四川,liangshan,凉山,27.423414,101.50891,513423, +CN101271605,dechang,德昌,CN,China,中国,sichuan,四川,liangshan,凉山,27.403828,102.17885,513424, +CN101271606,huili,会理,CN,China,中国,sichuan,四川,liangshan,凉山,26.658703,102.24955,513425, +CN101271607,huidong,会东,CN,China,中国,sichuan,四川,liangshan,凉山,26.630713,102.57899,513426, +CN101271608,ningnan,宁南,CN,China,中国,sichuan,四川,liangshan,凉山,27.065205,102.75738,513427, +CN101271609,puge,普格,CN,China,中国,sichuan,四川,liangshan,凉山,27.376827,102.541084,513428, +CN101271610,xichang,西昌,CN,China,中国,sichuan,四川,liangshan,凉山,27.885786,102.25876,513401, +CN101271611,jinyang,金阳,CN,China,中国,sichuan,四川,liangshan,凉山,27.695915,103.2487,513430, +CN101271612,zhaojue,昭觉,CN,China,中国,sichuan,四川,liangshan,凉山,28.010553,102.843994,513431, +CN101271613,xide,喜德,CN,China,中国,sichuan,四川,liangshan,凉山,28.305487,102.41234,513432, +CN101271614,mianning,冕宁,CN,China,中国,sichuan,四川,liangshan,凉山,28.550844,102.170044,513433, +CN101271615,yuexi,越西,CN,China,中国,sichuan,四川,liangshan,凉山,28.639631,102.50887,513434, +CN101271616,ganluo,甘洛,CN,China,中国,sichuan,四川,liangshan,凉山,28.977095,102.775925,513435, +CN101271617,leibo,雷波,CN,China,中国,sichuan,四川,liangshan,凉山,28.262945,103.57159,513437, +CN101271618,meigu,美姑,CN,China,中国,sichuan,四川,liangshan,凉山,28.327946,103.132,513436, +CN101271619,butuo,布拖,CN,China,中国,sichuan,四川,liangshan,凉山,27.709063,102.8088,513429, +CN101271701,yaan,雅安,CN,China,中国,sichuan,四川,yaan,雅安,29.987722,103.00103,"511801,511800", +CN101271702,mingshan,名山,CN,China,中国,sichuan,四川,yaan,雅安,30.084719,103.11221,511803, +CN101271703,yingjing,荥经,CN,China,中国,sichuan,四川,yaan,雅安,29.795528,102.84467,511822, +CN101271704,hanyuan,汉源,CN,China,中国,sichuan,四川,yaan,雅安,29.349915,102.67715,511823, +CN101271705,shimian,石棉,CN,China,中国,sichuan,四川,yaan,雅安,29.234062,102.35962,511824, +CN101271706,tianquan,天全,CN,China,中国,sichuan,四川,yaan,雅安,30.059956,102.76346,511825, +CN101271707,lushan,芦山,CN,China,中国,sichuan,四川,yaan,雅安,30.152906,102.92402,511826, +CN101271708,baoxing,宝兴,CN,China,中国,sichuan,四川,yaan,雅安,30.369026,102.81338,511827, +CN101271709,yucheng,雨城,CN,China,中国,sichuan,四川,yaan,雅安,29.98183,103.003395,511802, +CN101271801,ganzi,甘孜,CN,China,中国,sichuan,四川,ganzi,甘孜,30.050663,101.96381,"513300,513328", +CN101271802,kangding,康定,CN,China,中国,sichuan,四川,ganzi,甘孜,30.050737,101.96406,513301, +CN101271803,luding,泸定,CN,China,中国,sichuan,四川,ganzi,甘孜,29.912481,102.23322,513322, +CN101271804,danba,丹巴,CN,China,中国,sichuan,四川,ganzi,甘孜,30.877083,101.88612,513323, +CN101271805,jiulong,九龙,CN,China,中国,sichuan,四川,ganzi,甘孜,29.001974,101.50694,513324, +CN101271806,yajiang,雅江,CN,China,中国,sichuan,四川,ganzi,甘孜,30.03225,101.01573,513325, +CN101271807,daofu,道孚,CN,China,中国,sichuan,四川,ganzi,甘孜,30.978767,101.12333,513326, +CN101271808,luhuo,炉霍,CN,China,中国,sichuan,四川,ganzi,甘孜,31.392673,100.6795,513327, +CN101271809,xinlong,新龙,CN,China,中国,sichuan,四川,ganzi,甘孜,30.93896,100.312096,513329, +CN101271810,dege,德格,CN,China,中国,sichuan,四川,ganzi,甘孜,31.806728,98.57999,513330, +CN101271811,baiyu,白玉,CN,China,中国,sichuan,四川,ganzi,甘孜,31.208805,98.82434,513331, +CN101271812,shiqu,石渠,CN,China,中国,sichuan,四川,ganzi,甘孜,32.975304,98.10088,513332, +CN101271813,seda,色达,CN,China,中国,sichuan,四川,ganzi,甘孜,32.268776,100.33166,513333, +CN101271814,litang,理塘,CN,China,中国,sichuan,四川,ganzi,甘孜,29.991808,100.26986,513334, +CN101271815,batang,巴塘,CN,China,中国,sichuan,四川,ganzi,甘孜,30.005724,99.10904,513335, +CN101271816,xiangcheng,乡城,CN,China,中国,sichuan,四川,ganzi,甘孜,28.930855,99.79994,513336, +CN101271817,daocheng,稻城,CN,China,中国,sichuan,四川,ganzi,甘孜,29.037544,100.29669,513337, +CN101271818,derong,得荣,CN,China,中国,sichuan,四川,ganzi,甘孜,28.71134,99.28803,513338, +CN101271901,aba,阿坝,CN,China,中国,sichuan,四川,aba,阿坝,31.899792,102.221375,"513200,513231", +CN101271902,wenchuan,汶川,CN,China,中国,sichuan,四川,aba,阿坝,31.47463,103.58067,513221, +CN101271903,lixian,理县,CN,China,中国,sichuan,四川,aba,阿坝,31.436764,103.16549,513222, +CN101271904,maoxian,茂县,CN,China,中国,sichuan,四川,aba,阿坝,31.680407,103.850685,513223, +CN101271905,songfan,松潘,CN,China,中国,sichuan,四川,aba,阿坝,32.63838,103.599174,513224, +CN101271906,jiuzhaigou,九寨沟,CN,China,中国,sichuan,四川,aba,阿坝,33.262096,104.23634,513225, +CN101271907,jinchuan,金川,CN,China,中国,sichuan,四川,aba,阿坝,31.476357,102.064644,513226, +CN101271908,xiaojin,小金,CN,China,中国,sichuan,四川,aba,阿坝,30.999016,102.36319,513227, +CN101271909,heishui,黑水,CN,China,中国,sichuan,四川,aba,阿坝,32.06172,102.99081,513228, +CN101271910,maerkang,马尔康,CN,China,中国,sichuan,四川,aba,阿坝,31.899761,102.22118,513201, +CN101271911,rangtang,壤塘,CN,China,中国,sichuan,四川,aba,阿坝,32.26489,100.97913,513230, +CN101271912,nuoergai,若尔盖,CN,China,中国,sichuan,四川,aba,阿坝,33.575935,102.96372,513232, +CN101271913,hongyuan,红原,CN,China,中国,sichuan,四川,aba,阿坝,32.793903,102.54491,513233, +CN101272001,deyang,德阳,CN,China,中国,sichuan,四川,deyang,德阳,31.12799,104.39865,"510601,510600", +CN101272002,zhongjiang,中江,CN,China,中国,sichuan,四川,deyang,德阳,31.03681,104.67783,510623, +CN101272003,guanghan,广汉,CN,China,中国,sichuan,四川,deyang,德阳,30.97715,104.281906,510681, +CN101272004,shifang,什邡,CN,China,中国,sichuan,四川,deyang,德阳,31.12688,104.17365,510682, +CN101272005,mianzhu,绵竹,CN,China,中国,sichuan,四川,deyang,德阳,31.343084,104.200165,510683, +CN101272006,luojiang,罗江,CN,China,中国,sichuan,四川,deyang,德阳,31.303282,104.507126,510626, +CN101272007,jingyang,旌阳,CN,China,中国,sichuan,四川,deyang,德阳,31.130428,104.38965,510603, +CN101272101,guangyuan,广元,CN,China,中国,sichuan,四川,guangyuan,广元,32.433666,105.82976,"510801,510800", +CN101272102,wangcang,旺苍,CN,China,中国,sichuan,四川,guangyuan,广元,32.22833,106.29043,510821, +CN101272103,qingchuan,青川,CN,China,中国,sichuan,四川,guangyuan,广元,32.585655,105.238846,510822, +CN101272104,jiange,剑阁,CN,China,中国,sichuan,四川,guangyuan,广元,32.28652,105.52704,510823, +CN101272105,cangxi,苍溪,CN,China,中国,sichuan,四川,guangyuan,广元,31.73225,105.939705,510824, +CN101272106,lizhou,利州,CN,China,中国,sichuan,四川,guangyuan,广元,32.432278,105.826195,510802, +CN101272107,zhaohua,昭化,CN,China,中国,sichuan,四川,guangyuan,广元,32.32279,105.96412,510811, +CN101272108,chaotian,朝天,CN,China,中国,sichuan,四川,guangyuan,广元,32.64263,105.88917,510812, +CN101280101,guangzhou,广州,CN,China,中国,guangdong,广东,guangzhou,广州,23.125177,113.28064,"440101,440100,440000,442101", +CN101280102,panyu,番禺,CN,China,中国,guangdong,广东,guangzhou,广州,22.938581,113.36462,440113, +CN101280103,conghua,从化,CN,China,中国,guangdong,广东,guangzhou,广州,23.545282,113.58739,440117, +CN101280104,zengcheng,增城,CN,China,中国,guangdong,广东,guangzhou,广州,23.290497,113.82958,440118, +CN101280105,huadu,花都,CN,China,中国,guangdong,广东,guangzhou,广州,23.39205,113.21118,440114, +CN101280106,liwan,荔湾,CN,China,中国,guangdong,广东,guangzhou,广州,23.124943,113.243034,440103, +CN101280107,yuexiu,越秀,CN,China,中国,guangdong,广东,guangzhou,广州,23.125624,113.280716,440104, +CN101280108,haizhu,海珠,CN,China,中国,guangdong,广东,guangzhou,广州,23.10313,113.26201,440105, +CN101280109,tianhe,天河,CN,China,中国,guangdong,广东,guangzhou,广州,23.13559,113.335365,440106, +CN101280110,baiyun,白云,CN,China,中国,guangdong,广东,guangzhou,广州,23.162281,113.26283,440111, +CN101280111,huangpu,黄埔,CN,China,中国,guangdong,广东,guangzhou,广州,23.10324,113.45076,440112, +CN101280112,nansha,南沙,CN,China,中国,guangdong,广东,guangzhou,广州,22.79453,113.53738,440115, +CN101280201,shaoguan,韶关,CN,China,中国,guangdong,广东,shaoguan,韶关,24.801323,113.591545,"440201,440200", +CN101280202,ruyuan,乳源,CN,China,中国,guangdong,广东,shaoguan,韶关,24.77611,113.27842,440232, +CN101280203,shixing,始兴,CN,China,中国,guangdong,广东,shaoguan,韶关,24.948364,114.06721,440222, +CN101280204,wengyuan,翁源,CN,China,中国,guangdong,广东,shaoguan,韶关,24.353888,114.13129,440229, +CN101280205,lechang,乐昌,CN,China,中国,guangdong,广东,shaoguan,韶关,25.128445,113.35241,440281, +CN101280206,renhua,仁化,CN,China,中国,guangdong,广东,shaoguan,韶关,25.088226,113.74863,440224, +CN101280207,nanxiong,南雄,CN,China,中国,guangdong,广东,shaoguan,韶关,25.115328,114.31123,440282, +CN101280208,xinfeng,新丰,CN,China,中国,guangdong,广东,shaoguan,韶关,24.055412,114.20703,440233, +CN101280209,qujiang,曲江,CN,China,中国,guangdong,广东,shaoguan,韶关,24.680195,113.60558,440205, +CN101280210,zhenjiang,浈江,CN,China,中国,guangdong,广东,shaoguan,韶关,24.803976,113.59922,440204, +CN101280211,wujiang,武江,CN,China,中国,guangdong,广东,shaoguan,韶关,24.80016,113.58829,440203, +CN101280301,huizhou,惠州,CN,China,中国,guangdong,广东,huizhou,惠州,23.079405,114.4126,"441301,441300", +CN101280302,boluo,博罗,CN,China,中国,guangdong,广东,huizhou,惠州,23.167576,114.284256,441322, +CN101280303,huiyang,惠阳,CN,China,中国,guangdong,广东,huizhou,惠州,22.78851,114.469444,441303, +CN101280304,huidong,惠东,CN,China,中国,guangdong,广东,huizhou,惠州,22.983036,114.72309,441323, +CN101280305,longmen,龙门,CN,China,中国,guangdong,广东,huizhou,惠州,23.723894,114.25999,441324, +CN101280306,huicheng,惠城,CN,China,中国,guangdong,广东,huizhou,惠州,23.079884,114.41398,441302, +CN101280401,meizhou,梅州,CN,China,中国,guangdong,广东,meizhou,梅州,24.299112,116.117584,"441401,441400", +CN101280402,xingning,兴宁,CN,China,中国,guangdong,广东,meizhou,梅州,24.138077,115.73165,441481, +CN101280403,jiaoling,蕉岭,CN,China,中国,guangdong,广东,meizhou,梅州,24.653313,116.17053,441427, +CN101280404,dabu,大埔,CN,China,中国,guangdong,广东,meizhou,梅州,24.351587,116.69552,441422, +CN101280405,meijiang,梅江,CN,China,中国,guangdong,广东,meizhou,梅州,24.302593,116.12116,441402, +CN101280406,fengshun,丰顺,CN,China,中国,guangdong,广东,meizhou,梅州,23.752771,116.18442,441423, +CN101280407,pingyuan,平远,CN,China,中国,guangdong,广东,meizhou,梅州,24.56965,115.89173,441426, +CN101280408,wuhua,五华,CN,China,中国,guangdong,广东,meizhou,梅州,23.925425,115.775,441424, +CN101280409,meixian,梅县,CN,China,中国,guangdong,广东,meizhou,梅州,24.267824,116.08348,441403, +CN101280501,shantou,汕头,CN,China,中国,guangdong,广东,shantou,汕头,23.37102,116.708466,"440501,440500", +CN101280502,chaoyang,潮阳,CN,China,中国,guangdong,广东,shantou,汕头,23.262337,116.6026,440513, +CN101280503,chenghai,澄海,CN,China,中国,guangdong,广东,shantou,汕头,23.46844,116.76336,440515, +CN101280504,nanao,南澳,CN,China,中国,guangdong,广东,shantou,汕头,23.419561,117.02711,440523, +CN101280505,longhu,龙湖,CN,China,中国,guangdong,广东,shantou,汕头,23.373755,116.73202,440507, +CN101280506,jinping,金平,CN,China,中国,guangdong,广东,shantou,汕头,23.367071,116.70358,440511, +CN101280507,haojiang,濠江,CN,China,中国,guangdong,广东,shantou,汕头,23.279345,116.72953,440512, +CN101280508,chaonan,潮南,CN,China,中国,guangdong,广东,shantou,汕头,23.249798,116.42361,440514, +CN101280601,shenzhen,深圳,CN,China,中国,guangdong,广东,shenzhen,深圳,22.547,114.085945,"440301,440300,440309,440310", +CN101280602,luohu,罗湖,CN,China,中国,guangdong,广东,shenzhen,深圳,22.555342,114.123886,440303, +CN101280603,futian,福田,CN,China,中国,guangdong,广东,shenzhen,深圳,22.54101,114.05096,440304, +CN101280604,nanshan,南山,CN,China,中国,guangdong,广东,shenzhen,深圳,22.531221,113.92943,440305, +CN101280605,baoan,宝安,CN,China,中国,guangdong,广东,shenzhen,深圳,22.560078,113.901024,440306, +CN101280606,longgang,龙岗,CN,China,中国,guangdong,广东,shenzhen,深圳,22.721512,114.25137,440307, +CN101280607,yantian,盐田,CN,China,中国,guangdong,广东,shenzhen,深圳,22.555069,114.23537,440308, +CN101280608,longhua,龙华,CN,China,中国,guangdong,广东,shenzhen,深圳,22.696678,114.04544,440309, +CN101280609,pingshan,坪山,CN,China,中国,guangdong,广东,shenzhen,深圳,22.689812,114.34818,440310, +CN101280701,zhuhai,珠海,CN,China,中国,guangdong,广东,zhuhai,珠海,22.22498,113.553986,"440401,440400", +CN101280702,doumen,斗门,CN,China,中国,guangdong,广东,zhuhai,珠海,22.209118,113.29774,440403, +CN101280703,jinwan,金湾,CN,China,中国,guangdong,广东,zhuhai,珠海,22.139122,113.34507,440404, +CN101280704,xiangzhou,香洲,CN,China,中国,guangdong,广东,zhuhai,珠海,22.27125,113.55027,440402, +CN101280800,foshan,佛山,CN,China,中国,guangdong,广东,foshan,佛山,23.028763,113.12272,"440601,440600", +CN101280801,shunde,顺德,CN,China,中国,guangdong,广东,foshan,佛山,22.75851,113.28182,440606, +CN101280802,sanshui,三水,CN,China,中国,guangdong,广东,foshan,佛山,23.16504,112.899414,440607, +CN101280803,nanhai,南海,CN,China,中国,guangdong,广东,foshan,佛山,23.031563,113.14558,440605, +CN101280804,gaoming,高明,CN,China,中国,guangdong,广东,foshan,佛山,22.893854,112.882126,440608, +CN101280805,chancheng,禅城,CN,China,中国,guangdong,广东,foshan,佛山,23.019644,113.11241,440604, +CN101280901,zhaoqing,肇庆,CN,China,中国,guangdong,广东,zhaoqing,肇庆,23.051546,112.47253,"441201,441200", +CN101280902,guangning,广宁,CN,China,中国,guangdong,广东,zhaoqing,肇庆,23.631487,112.44042,441223, +CN101280903,sihui,四会,CN,China,中国,guangdong,广东,zhaoqing,肇庆,23.340324,112.69503,441284, +CN101280904,duanzhou,端州,CN,China,中国,guangdong,广东,zhaoqing,肇庆,23.052662,112.47233,441202, +CN101280905,deqing,德庆,CN,China,中国,guangdong,广东,zhaoqing,肇庆,23.14171,111.78156,441226, +CN101280906,huaiji,怀集,CN,China,中国,guangdong,广东,zhaoqing,肇庆,23.913073,112.182465,441224, +CN101280907,fengkai,封开,CN,China,中国,guangdong,广东,zhaoqing,肇庆,23.43473,111.502975,441225, +CN101280908,gaoyao,高要,CN,China,中国,guangdong,广东,zhaoqing,肇庆,23.027695,112.460846,441204, +CN101280909,dinghu,鼎湖,CN,China,中国,guangdong,广东,zhaoqing,肇庆,23.155823,112.56525,441203, +CN101281001,zhanjiang,湛江,CN,China,中国,guangdong,广东,zhanjiang,湛江,21.274899,110.364975,"440801,440800", +CN101281002,wuchuan,吴川,CN,China,中国,guangdong,广东,zhanjiang,湛江,21.428453,110.78051,440883, +CN101281003,leizhou,雷州,CN,China,中国,guangdong,广东,zhanjiang,湛江,20.908524,110.08827,440882, +CN101281004,xuwen,徐闻,CN,China,中国,guangdong,广东,zhanjiang,湛江,20.326082,110.17572,440825, +CN101281005,lianjiang,廉江,CN,China,中国,guangdong,广东,zhanjiang,湛江,21.61128,110.28496,440881, +CN101281006,chikan,赤坎,CN,China,中国,guangdong,广东,zhanjiang,湛江,21.273365,110.36163,440802, +CN101281007,suixi,遂溪,CN,China,中国,guangdong,广东,zhanjiang,湛江,21.376915,110.25532,440823, +CN101281008,potou,坡头,CN,China,中国,guangdong,广东,zhanjiang,湛江,21.24441,110.455635,440804, +CN101281009,xiashan,霞山,CN,China,中国,guangdong,广东,zhanjiang,湛江,21.19423,110.40638,440803, +CN101281010,mazhang,麻章,CN,China,中国,guangdong,广东,zhanjiang,湛江,21.265997,110.32917,440811, +CN101281101,jiangmen,江门,CN,China,中国,guangdong,广东,jiangmen,江门,22.590431,113.09494,"440701,440700", +CN101281103,kaiping,开平,CN,China,中国,guangdong,广东,jiangmen,江门,22.366285,112.69226,440783, +CN101281104,xinhui,新会,CN,China,中国,guangdong,广东,jiangmen,江门,22.520247,113.03858,440705, +CN101281105,enping,恩平,CN,China,中国,guangdong,广东,jiangmen,江门,22.182957,112.31405,440785, +CN101281106,taishan,台山,CN,China,中国,guangdong,广东,jiangmen,江门,22.250713,112.79341,440781, +CN101281107,pengjiang,蓬江,CN,China,中国,guangdong,广东,jiangmen,江门,22.59677,113.07859,440703, +CN101281108,heshan,鹤山,CN,China,中国,guangdong,广东,jiangmen,江门,22.768105,112.96179,440784, +CN101281109,jianghai,江海,CN,China,中国,guangdong,广东,jiangmen,江门,22.57221,113.1206,440704, +CN101281201,heyuan,河源,CN,China,中国,guangdong,广东,heyuan,河源,23.746265,114.6978,"441601,441600", +CN101281202,zijin,紫金,CN,China,中国,guangdong,广东,heyuan,河源,23.633743,115.18438,441621, +CN101281203,lianping,连平,CN,China,中国,guangdong,广东,heyuan,河源,24.364227,114.49595,441623, +CN101281204,heping,和平,CN,China,中国,guangdong,广东,heyuan,河源,24.44318,114.941475,441624, +CN101281205,longchuan,龙川,CN,China,中国,guangdong,广东,heyuan,河源,24.101173,115.25642,441622, +CN101281206,dongyuan,东源,CN,China,中国,guangdong,广东,heyuan,河源,23.789093,114.742714,441625, +CN101281207,yuancheng,源城,CN,China,中国,guangdong,广东,heyuan,河源,23.746256,114.69683,441602, +CN101281301,qingyuan,清远,CN,China,中国,guangdong,广东,qingyuan,清远,23.685022,113.05122,"441801,441800", +CN101281302,liannan,连南,CN,China,中国,guangdong,广东,qingyuan,清远,24.719097,112.29081,441826, +CN101281303,lianzhou,连州,CN,China,中国,guangdong,广东,qingyuan,清远,24.783966,112.37927,441882, +CN101281304,lianshan,连山,CN,China,中国,guangdong,广东,qingyuan,清远,24.56727,112.086555,441825, +CN101281305,yangshan,阳山,CN,China,中国,guangdong,广东,qingyuan,清远,24.470285,112.63402,441823, +CN101281306,fogang,佛冈,CN,China,中国,guangdong,广东,qingyuan,清远,23.86674,113.534096,441821, +CN101281307,yingde,英德,CN,China,中国,guangdong,广东,qingyuan,清远,24.18612,113.4054,441881, +CN101281308,qingxin,清新,CN,China,中国,guangdong,广东,qingyuan,清远,23.73695,113.015205,441803, +CN101281309,qingcheng,清城,CN,China,中国,guangdong,广东,qingyuan,清远,23.688976,113.0487,441802, +CN101281401,yunfu,云浮,CN,China,中国,guangdong,广东,yunfu,云浮,22.929802,112.04444,"445301,445300", +CN101281402,luoding,罗定,CN,China,中国,guangdong,广东,yunfu,云浮,22.765415,111.5782,445381, +CN101281403,xinxing,新兴,CN,China,中国,guangdong,广东,yunfu,云浮,22.703203,112.23083,445321, +CN101281404,yunan,郁南,CN,China,中国,guangdong,广东,yunfu,云浮,23.237709,111.53592,445322, +CN101281405,yuncheng,云城,CN,China,中国,guangdong,广东,yunfu,云浮,22.930826,112.04471,445302, +CN101281406,yunan,云安,CN,China,中国,guangdong,广东,yunfu,云浮,23.073153,112.00561,445303, +CN101281501,chaozhou,潮州,CN,China,中国,guangdong,广东,chaozhou,潮州,23.661701,116.6323,"445101,445100", +CN101281502,raoping,饶平,CN,China,中国,guangdong,广东,chaozhou,潮州,23.66817,117.00205,445122, +CN101281503,chaoan,潮安,CN,China,中国,guangdong,广东,chaozhou,潮州,23.461012,116.67931,445103, +CN101281504,xiangqiao,湘桥,CN,China,中国,guangdong,广东,chaozhou,潮州,23.664675,116.63365,445102, +CN101281601,dongguan,东莞,CN,China,中国,guangdong,广东,dongguan,东莞,23.046238,113.74626,441900, +CN101281701,zhongshan,中山,CN,China,中国,guangdong,广东,zhongshan,中山,22.521112,113.38239,442000, +CN101281801,yangjiang,阳江,CN,China,中国,guangdong,广东,yangjiang,阳江,21.859222,111.975105,"441701,441700", +CN101281802,yangchun,阳春,CN,China,中国,guangdong,广东,yangjiang,阳江,22.169598,111.7905,441781, +CN101281803,yangdong,阳东,CN,China,中国,guangdong,广东,yangjiang,阳江,21.864729,112.01127,441704, +CN101281804,yangxi,阳西,CN,China,中国,guangdong,广东,yangjiang,阳江,21.75367,111.61755,441721, +CN101281805,jiangcheng,江城,CN,China,中国,guangdong,广东,yangjiang,阳江,21.859182,111.96891,441702, +CN101281901,jieyang,揭阳,CN,China,中国,guangdong,广东,jieyang,揭阳,23.543777,116.355736,"445201,445200", +CN101281902,jiexi,揭西,CN,China,中国,guangdong,广东,jieyang,揭阳,23.4273,115.83871,445222, +CN101281903,puning,普宁,CN,China,中国,guangdong,广东,jieyang,揭阳,23.29788,116.165085,445281, +CN101281904,huilai,惠来,CN,China,中国,guangdong,广东,jieyang,揭阳,23.029835,116.29583,445224, +CN101281905,jiedong,揭东,CN,China,中国,guangdong,广东,jieyang,揭阳,23.569887,116.41295,445203, +CN101281906,rongcheng,榕城,CN,China,中国,guangdong,广东,jieyang,揭阳,23.535524,116.35705,445202, +CN101282001,maoming,茂名,CN,China,中国,guangdong,广东,maoming,茂名,21.659752,110.91923,"440901,440900", +CN101282002,gaozhou,高州,CN,China,中国,guangdong,广东,maoming,茂名,21.915154,110.85325,440981, +CN101282003,huazhou,化州,CN,China,中国,guangdong,广东,maoming,茂名,21.654953,110.63839,440982, +CN101282004,dianbai,电白,CN,China,中国,guangdong,广东,maoming,茂名,21.50722,111.00726,440904, +CN101282005,xinyi,信宜,CN,China,中国,guangdong,广东,maoming,茂名,22.35268,110.94166,440983, +CN101282007,maonan,茂南,CN,China,中国,guangdong,广东,maoming,茂名,21.660425,110.92054,440902, +CN101282101,shanwei,汕尾,CN,China,中国,guangdong,广东,shanwei,汕尾,22.774485,115.364235,"441501,441500,441502", +CN101282102,haifeng,海丰,CN,China,中国,guangdong,广东,shanwei,汕尾,22.971043,115.337326,441521, +CN101282103,lufeng,陆丰,CN,China,中国,guangdong,广东,shanwei,汕尾,22.946104,115.6442,441581, +CN101282104,luhe,陆河,CN,China,中国,guangdong,广东,shanwei,汕尾,23.302683,115.65756,441523, +CN101290101,kunming,昆明,CN,China,中国,yunnan,云南,kunming,昆明,25.04061,102.71225,"530101,530100,530000", +CN101290102,wuhua,五华,CN,China,中国,yunnan,云南,kunming,昆明,25.042166,102.704414,530102, +CN101290103,dongchuan,东川,CN,China,中国,yunnan,云南,kunming,昆明,26.08349,103.182,530113, +CN101290104,xundian,寻甸,CN,China,中国,yunnan,云南,kunming,昆明,25.559475,103.25759,530129, +CN101290105,jinning,晋宁,CN,China,中国,yunnan,云南,kunming,昆明,24.666945,102.594986,530115, +CN101290106,yiliang,宜良,CN,China,中国,yunnan,云南,kunming,昆明,24.918215,103.14599,530125, +CN101290107,shilin,石林,CN,China,中国,yunnan,云南,kunming,昆明,24.754545,103.271965,530126, +CN101290108,chenggong,呈贡,CN,China,中国,yunnan,云南,kunming,昆明,24.889275,102.801384,530114, +CN101290109,fumin,富民,CN,China,中国,yunnan,云南,kunming,昆明,25.219667,102.49789,530124, +CN101290110,songming,嵩明,CN,China,中国,yunnan,云南,kunming,昆明,25.335087,103.03878,530127, +CN101290111,luquan,禄劝,CN,China,中国,yunnan,云南,kunming,昆明,25.556534,102.46905,530128, +CN101290112,anning,安宁,CN,China,中国,yunnan,云南,kunming,昆明,24.921785,102.48554,530181, +CN101290113,taihuashan,太华山,CN,China,中国,yunnan,云南,kunming,昆明,24.959295,102.62554,530112, +CN101290114,panlong,盘龙,CN,China,中国,yunnan,云南,kunming,昆明,25.070238,102.72904,530103, +CN101290115,guandu,官渡,CN,China,中国,yunnan,云南,kunming,昆明,25.021212,102.723434,530111, +CN101290116,xishan,西山,CN,China,中国,yunnan,云南,kunming,昆明,25.02436,102.7059,530112, +CN101290201,dali,大理,CN,China,中国,yunnan,云南,dali,大理,25.589449,100.22567,"532901,532900", +CN101290202,yunlong,云龙,CN,China,中国,yunnan,云南,dali,大理,25.884954,99.3694,532929, +CN101290203,yangbi,漾濞,CN,China,中国,yunnan,云南,dali,大理,25.669542,99.95797,532922, +CN101290204,yongping,永平,CN,China,中国,yunnan,云南,dali,大理,25.46128,99.53354,532928, +CN101290205,binchuan,宾川,CN,China,中国,yunnan,云南,dali,大理,25.825905,100.57896,532924, +CN101290206,midu,弥渡,CN,China,中国,yunnan,云南,dali,大理,25.342594,100.49067,532925, +CN101290207,xiangyun,祥云,CN,China,中国,yunnan,云南,dali,大理,25.477072,100.55402,532923, +CN101290208,weishan,巍山,CN,China,中国,yunnan,云南,dali,大理,25.23091,100.30793,532927, +CN101290209,jianchuan,剑川,CN,China,中国,yunnan,云南,dali,大理,26.530066,99.90588,532931, +CN101290210,eryuan,洱源,CN,China,中国,yunnan,云南,dali,大理,26.111183,99.951706,532930, +CN101290211,heqing,鹤庆,CN,China,中国,yunnan,云南,dali,大理,26.55839,100.17338,532932, +CN101290212,nanjian,南涧,CN,China,中国,yunnan,云南,dali,大理,25.041279,100.518684,532926, +CN101290301,honghe,红河,CN,China,中国,yunnan,云南,honghe,红河,23.366776,103.384186,"532500,532529", +CN101290302,shiping,石屏,CN,China,中国,yunnan,云南,honghe,红河,23.712568,102.48447,532525, +CN101290303,jianshui,建水,CN,China,中国,yunnan,云南,honghe,红河,23.618387,102.820496,532524, +CN101290304,mile,弥勒,CN,China,中国,yunnan,云南,honghe,红河,24.40837,103.43699,532504, +CN101290305,yuanyang,元阳,CN,China,中国,yunnan,云南,honghe,红河,23.219772,102.83706,532528, +CN101290306,lvchun,绿春,CN,China,中国,yunnan,云南,honghe,红河,22.99352,102.39286,532531, +CN101290307,kaiyuan,开远,CN,China,中国,yunnan,云南,honghe,红河,23.713833,103.25868,532502, +CN101290308,gejiu,个旧,CN,China,中国,yunnan,云南,honghe,红河,23.360382,103.154755,532501, +CN101290309,mengzi,蒙自,CN,China,中国,yunnan,云南,honghe,红河,23.366842,103.385,532503, +CN101290310,pingbian,屏边,CN,China,中国,yunnan,云南,honghe,红河,22.987013,103.687225,532523, +CN101290311,luxi,泸西,CN,China,中国,yunnan,云南,honghe,红河,24.532368,103.75962,532527, +CN101290312,jinping,金平,CN,China,中国,yunnan,云南,honghe,红河,22.779982,103.228355,532530, +CN101290313,hekou,河口,CN,China,中国,yunnan,云南,honghe,红河,22.507563,103.96159,532532, +CN101290401,qujing,曲靖,CN,China,中国,yunnan,云南,qujing,曲靖,25.501556,103.79785,"530301,530300", +CN101290402,zhanyi,沾益,CN,China,中国,yunnan,云南,qujing,曲靖,25.600878,103.81926,530303, +CN101290403,luliang,陆良,CN,China,中国,yunnan,云南,qujing,曲靖,25.022879,103.655235,530322, +CN101290404,fuyuan,富源,CN,China,中国,yunnan,云南,qujing,曲靖,25.67064,104.25692,530325, +CN101290405,malong,马龙,CN,China,中国,yunnan,云南,qujing,曲靖,25.429451,103.57876,530321, +CN101290406,shizong,师宗,CN,China,中国,yunnan,云南,qujing,曲靖,24.825682,103.993805,530323, +CN101290407,luoping,罗平,CN,China,中国,yunnan,云南,qujing,曲靖,24.885708,104.309265,530324, +CN101290408,huize,会泽,CN,China,中国,yunnan,云南,qujing,曲靖,26.41286,103.30004,530326, +CN101290409,xuanwei,宣威,CN,China,中国,yunnan,云南,qujing,曲靖,26.227777,104.09554,530381, +CN101290410,qilin,麒麟,CN,China,中国,yunnan,云南,qujing,曲靖,25.501268,103.79806,530302, +CN101290501,baoshan,保山,CN,China,中国,yunnan,云南,baoshan,保山,25.111801,99.16713,"530501,530500", +CN101290502,longyang,隆阳,CN,China,中国,yunnan,云南,baoshan,保山,25.112144,99.165825,530502, +CN101290503,longling,龙陵,CN,China,中国,yunnan,云南,baoshan,保山,24.591911,98.693565,530523, +CN101290504,sidian,施甸,CN,China,中国,yunnan,云南,baoshan,保山,24.730846,99.18376,530521, +CN101290505,changning,昌宁,CN,China,中国,yunnan,云南,baoshan,保山,24.823662,99.61234,530524, +CN101290506,tengchong,腾冲,CN,China,中国,yunnan,云南,baoshan,保山,25.01757,98.49729,530581, +CN101290601,wenshan,文山,CN,China,中国,yunnan,云南,wenshan,文山,23.36951,104.24401,"532601,532600", +CN101290602,xichou,西畴,CN,China,中国,yunnan,云南,wenshan,文山,23.437439,104.67571,532623, +CN101290603,maguan,马关,CN,China,中国,yunnan,云南,wenshan,文山,23.011723,104.39862,532625, +CN101290604,malipo,麻栗坡,CN,China,中国,yunnan,云南,wenshan,文山,23.124203,104.7019,532624, +CN101290605,yanshan,砚山,CN,China,中国,yunnan,云南,wenshan,文山,23.6123,104.34399,532622, +CN101290606,qiubei,丘北,CN,China,中国,yunnan,云南,wenshan,文山,24.040981,104.19437,532626, +CN101290607,guangnan,广南,CN,China,中国,yunnan,云南,wenshan,文山,24.050272,105.05669,532627, +CN101290608,funing,富宁,CN,China,中国,yunnan,云南,wenshan,文山,23.626493,105.62856,532628, +CN101290701,yuxi,玉溪,CN,China,中国,yunnan,云南,yuxi,玉溪,24.35046,102.54391,"530401,530400", +CN101290702,chengjiang,澄江,CN,China,中国,yunnan,云南,yuxi,玉溪,24.66968,102.91665,530422, +CN101290703,jiangchuan,江川,CN,China,中国,yunnan,云南,yuxi,玉溪,24.291006,102.74984,530403, +CN101290704,tonghai,通海,CN,China,中国,yunnan,云南,yuxi,玉溪,24.112206,102.76004,530423, +CN101290705,huaning,华宁,CN,China,中国,yunnan,云南,yuxi,玉溪,24.189808,102.928986,530424, +CN101290706,xinping,新平,CN,China,中国,yunnan,云南,yuxi,玉溪,24.0664,101.990906,530427, +CN101290707,yimen,易门,CN,China,中国,yunnan,云南,yuxi,玉溪,24.669598,102.16211,530425, +CN101290708,eshan,峨山,CN,China,中国,yunnan,云南,yuxi,玉溪,24.173256,102.40436,530426, +CN101290709,yuanjiang,元江,CN,China,中国,yunnan,云南,yuxi,玉溪,23.597618,101.99966,530428, +CN101290710,hongta,红塔,CN,China,中国,yunnan,云南,yuxi,玉溪,24.350754,102.543465,530402, +CN101290801,chuxiong,楚雄,CN,China,中国,yunnan,云南,chuxiong,楚雄,25.041988,101.54604,"532301,532300", +CN101290802,dayao,大姚,CN,China,中国,yunnan,云南,chuxiong,楚雄,25.722347,101.3236,532326, +CN101290803,yuanmou,元谋,CN,China,中国,yunnan,云南,chuxiong,楚雄,25.703314,101.870834,532328, +CN101290804,yaoan,姚安,CN,China,中国,yunnan,云南,chuxiong,楚雄,25.505404,101.238396,532325, +CN101290805,mouding,牟定,CN,China,中国,yunnan,云南,chuxiong,楚雄,25.31211,101.543045,532323, +CN101290806,nanhua,南华,CN,China,中国,yunnan,云南,chuxiong,楚雄,25.192408,101.274994,532324, +CN101290807,wuding,武定,CN,China,中国,yunnan,云南,chuxiong,楚雄,25.5301,102.406784,532329, +CN101290808,lufeng,禄丰,CN,China,中国,yunnan,云南,chuxiong,楚雄,25.14327,102.07569,532331, +CN101290809,shuangbai,双柏,CN,China,中国,yunnan,云南,chuxiong,楚雄,24.685095,101.63824,532322, +CN101290810,yongren,永仁,CN,China,中国,yunnan,云南,chuxiong,楚雄,26.056316,101.67117,532327, +CN101290901,puer,普洱,CN,China,中国,yunnan,云南,puer,普洱,22.77732,100.97234,"530801,530800", +CN101290902,jinggu,景谷,CN,China,中国,yunnan,云南,puer,普洱,23.500278,100.70142,530824, +CN101290903,jingdong,景东,CN,China,中国,yunnan,云南,puer,普洱,24.448523,100.84001,530823, +CN101290904,lancang,澜沧,CN,China,中国,yunnan,云南,puer,普洱,22.553083,99.9312,530828, +CN101290905,simao,思茅,CN,China,中国,yunnan,云南,puer,普洱,22.776594,100.97323,530802, +CN101290906,mojiang,墨江,CN,China,中国,yunnan,云南,puer,普洱,23.428165,101.68761,530822, +CN101290907,jiangcheng,江城,CN,China,中国,yunnan,云南,puer,普洱,22.58336,101.859146,530826, +CN101290908,menglian,孟连,CN,China,中国,yunnan,云南,puer,普洱,22.325924,99.5854,530827, +CN101290909,ximeng,西盟,CN,China,中国,yunnan,云南,puer,普洱,22.644423,99.594376,530829, +CN101290911,zhenyuan,镇沅,CN,China,中国,yunnan,云南,puer,普洱,24.005713,101.10851,530825, +CN101290912,ninger,宁洱,CN,China,中国,yunnan,云南,puer,普洱,23.062508,101.04524,530821, +CN101291001,zhaotong,昭通,CN,China,中国,yunnan,云南,zhaotong,昭通,27.337,103.71722,"530601,530600", +CN101291002,ludian,鲁甸,CN,China,中国,yunnan,云南,zhaotong,昭通,27.191637,103.54933,530621, +CN101291003,yiliang,彝良,CN,China,中国,yunnan,云南,zhaotong,昭通,27.627424,104.04849,530628, +CN101291004,zhenxiong,镇雄,CN,China,中国,yunnan,云南,zhaotong,昭通,27.436268,104.873055,530627, +CN101291005,weixin,威信,CN,China,中国,yunnan,云南,zhaotong,昭通,27.843382,105.04869,530629, +CN101291006,qiaojia,巧家,CN,China,中国,yunnan,云南,zhaotong,昭通,26.9117,102.92928,530622, +CN101291007,suijiang,绥江,CN,China,中国,yunnan,云南,zhaotong,昭通,28.599953,103.9611,530626, +CN101291008,yongshan,永善,CN,China,中国,yunnan,云南,zhaotong,昭通,28.231525,103.63732,530625, +CN101291009,yanjin,盐津,CN,China,中国,yunnan,云南,zhaotong,昭通,28.106922,104.23506,530623, +CN101291010,daguan,大关,CN,China,中国,yunnan,云南,zhaotong,昭通,27.747114,103.89161,530624, +CN101291011,shuifu,水富,CN,China,中国,yunnan,云南,zhaotong,昭通,28.629688,104.415375,530630, +CN101291012,zhaoyang,昭阳,CN,China,中国,yunnan,云南,zhaotong,昭通,27.336636,103.71727,530602, +CN101291101,lincang,临沧,CN,China,中国,yunnan,云南,lincang,临沧,23.886566,100.08697,"530901,530900", +CN101291102,cangyuan,沧源,CN,China,中国,yunnan,云南,lincang,临沧,23.146887,99.2474,530927, +CN101291103,gengma,耿马,CN,China,中国,yunnan,云南,lincang,临沧,23.534578,99.4025,530926, +CN101291104,shuangjiang,双江,CN,China,中国,yunnan,云南,lincang,临沧,23.477476,99.82442,530925, +CN101291105,fengqing,凤庆,CN,China,中国,yunnan,云南,lincang,临沧,24.592737,99.91871,530921, +CN101291106,yongde,永德,CN,China,中国,yunnan,云南,lincang,临沧,24.028158,99.25368,530923, +CN101291107,yunxian,云县,CN,China,中国,yunnan,云南,lincang,临沧,24.439026,100.12563,530922, +CN101291108,zhenkang,镇康,CN,China,中国,yunnan,云南,lincang,临沧,23.761415,98.82743,530924, +CN101291109,linxiang,临翔,CN,China,中国,yunnan,云南,lincang,临沧,23.886562,100.08649,530902, +CN101291201,nujiang,怒江,CN,China,中国,yunnan,云南,nujiang,怒江,25.850948,98.8543,533300, +CN101291203,fugong,福贡,CN,China,中国,yunnan,云南,nujiang,怒江,26.902739,98.86742,533323, +CN101291204,lanping,兰坪,CN,China,中国,yunnan,云南,nujiang,怒江,26.453838,99.42138,533325, +CN101291205,lushui,泸水,CN,China,中国,yunnan,云南,nujiang,怒江,25.851143,98.854065,533301, +CN101291207,gongshan,贡山,CN,China,中国,yunnan,云南,nujiang,怒江,27.738054,98.66614,533324, +CN101291301,xianggelila,香格里拉,CN,China,中国,yunnan,云南,diqing,迪庆,27.825804,99.708664,533401, +CN101291302,deqin,德钦,CN,China,中国,yunnan,云南,diqing,迪庆,28.483273,98.91506,533422, +CN101291303,weixi,维西,CN,China,中国,yunnan,云南,diqing,迪庆,27.180948,99.286354,533423, +CN101291305,diqing,迪庆,CN,China,中国,yunnan,云南,diqing,迪庆,27.826853,99.70647,533400, +CN101291401,lijiang,丽江,CN,China,中国,yunnan,云南,lijiang,丽江,26.872108,100.233025,"530701,530700", +CN101291402,yongsheng,永胜,CN,China,中国,yunnan,云南,lijiang,丽江,26.685623,100.7509,530722, +CN101291403,huaping,华坪,CN,China,中国,yunnan,云南,lijiang,丽江,26.628834,101.2678,530723, +CN101291404,ninglang,宁蒗,CN,China,中国,yunnan,云南,lijiang,丽江,27.281109,100.852425,530724, +CN101291405,gucheng,古城,CN,China,中国,yunnan,云南,lijiang,丽江,26.872229,100.23441,530702, +CN101291406,yulong,玉龙,CN,China,中国,yunnan,云南,lijiang,丽江,26.830593,100.23831,530721, +CN101291501,dehong,德宏,CN,China,中国,yunnan,云南,dehong,德宏,24.436693,98.57836,533100, +CN101291503,longchuan,陇川,CN,China,中国,yunnan,云南,dehong,德宏,24.184065,97.79444,533124, +CN101291504,yingjiang,盈江,CN,China,中国,yunnan,云南,dehong,德宏,24.709541,97.93393,533123, +CN101291506,ruili,瑞丽,CN,China,中国,yunnan,云南,dehong,德宏,24.010735,97.85588,533102, +CN101291507,lianghe,梁河,CN,China,中国,yunnan,云南,dehong,德宏,24.80742,98.298195,533122, +CN101291508,mangshi,芒市,CN,China,中国,yunnan,云南,dehong,德宏,24.436699,98.57761,533103, +CN101291601,jinghong,景洪,CN,China,中国,yunnan,云南,xishuangbanna,西双版纳,22.002087,100.79795,532801, +CN101291602,xishuangbanna,西双版纳,CN,China,中国,yunnan,云南,xishuangbanna,西双版纳,22.001724,100.79794,532800, +CN101291603,menghai,勐海,CN,China,中国,yunnan,云南,xishuangbanna,西双版纳,21.955866,100.44829,532822, +CN101291605,mengla,勐腊,CN,China,中国,yunnan,云南,xishuangbanna,西双版纳,21.479448,101.567055,532823, +CN101300101,nanning,南宁,CN,China,中国,guangxi,广西,nanning,南宁,22.82402,108.32001,"450101,450100,450000", +CN101300102,xingning,兴宁,CN,China,中国,guangxi,广西,nanning,南宁,22.819511,108.32019,450102, +CN101300103,yongning,邕宁,CN,China,中国,guangxi,广西,nanning,南宁,22.756598,108.48425,450109, +CN101300104,hengxian,横县,CN,China,中国,guangxi,广西,nanning,南宁,22.68743,109.27099,450127, +CN101300105,longan,隆安,CN,China,中国,guangxi,广西,nanning,南宁,23.174763,107.68866,450123, +CN101300106,mashan,马山,CN,China,中国,guangxi,广西,nanning,南宁,23.711758,108.172905,450124, +CN101300107,shanglin,上林,CN,China,中国,guangxi,广西,nanning,南宁,23.431768,108.603935,450125, +CN101300108,wuming,武鸣,CN,China,中国,guangxi,广西,nanning,南宁,23.157164,108.280716,450110, +CN101300109,binyang,宾阳,CN,China,中国,guangxi,广西,nanning,南宁,23.216885,108.816734,450126, +CN101300110,qingxiu,青秀,CN,China,中国,guangxi,广西,nanning,南宁,22.816614,108.346115,450103, +CN101300111,jiangnan,江南,CN,China,中国,guangxi,广西,nanning,南宁,22.799593,108.31048,450105, +CN101300112,xixiangtang,西乡塘,CN,China,中国,guangxi,广西,nanning,南宁,22.832779,108.3069,450107, +CN101300113,liangqing,良庆,CN,China,中国,guangxi,广西,nanning,南宁,22.75909,108.322105,450108, +CN101300201,chongzuo,崇左,CN,China,中国,guangxi,广西,chongzuo,崇左,22.404108,107.35393,"451401,451400", +CN101300202,tiandeng,天等,CN,China,中国,guangxi,广西,chongzuo,崇左,23.082483,107.14244,451425, +CN101300203,longzhou,龙州,CN,China,中国,guangxi,广西,chongzuo,崇左,22.343716,106.857506,451423, +CN101300204,pingxiang,凭祥,CN,China,中国,guangxi,广西,chongzuo,崇左,22.108883,106.75904,451481, +CN101300205,daxin,大新,CN,China,中国,guangxi,广西,chongzuo,崇左,22.833368,107.200806,451424, +CN101300206,fusui,扶绥,CN,China,中国,guangxi,广西,chongzuo,崇左,22.63582,107.91153,451421, +CN101300207,ningming,宁明,CN,China,中国,guangxi,广西,chongzuo,崇左,22.131353,107.06762,451422, +CN101300208,jiangzhou,江州,CN,China,中国,guangxi,广西,chongzuo,崇左,22.40469,107.35445,451402, +CN101300301,liuzhou,柳州,CN,China,中国,guangxi,广西,liuzhou,柳州,24.314617,109.411705,"450201,450200", +CN101300302,liucheng,柳城,CN,China,中国,guangxi,广西,liuzhou,柳州,24.65512,109.24581,450222, +CN101300303,chengzhong,城中,CN,China,中国,guangxi,广西,liuzhou,柳州,24.312325,109.41175,450202, +CN101300304,luzhai,鹿寨,CN,China,中国,guangxi,广西,liuzhou,柳州,24.483404,109.74081,450223, +CN101300305,liujiang,柳江,CN,China,中国,guangxi,广西,liuzhou,柳州,24.257511,109.3345,450206, +CN101300306,rongan,融安,CN,China,中国,guangxi,广西,liuzhou,柳州,25.214703,109.40362,450224, +CN101300307,rongshui,融水,CN,China,中国,guangxi,广西,liuzhou,柳州,25.068811,109.25275,450225, +CN101300308,sanjiang,三江,CN,China,中国,guangxi,广西,liuzhou,柳州,25.78553,109.614845,450226, +CN101300309,yufeng,鱼峰,CN,China,中国,guangxi,广西,liuzhou,柳州,24.303848,109.41537,450203, +CN101300310,liunan,柳南,CN,China,中国,guangxi,广西,liuzhou,柳州,24.287012,109.395935,450204, +CN101300311,liubei,柳北,CN,China,中国,guangxi,广西,liuzhou,柳州,24.359144,109.40658,450205, +CN101300401,laibin,来宾,CN,China,中国,guangxi,广西,laibin,来宾,23.733767,109.229774,"451301,451300", +CN101300402,xicheng,忻城,CN,China,中国,guangxi,广西,laibin,来宾,24.06478,108.66736,451321, +CN101300403,jinxiu,金秀,CN,China,中国,guangxi,广西,laibin,来宾,24.134941,110.18855,451324, +CN101300404,xiangzhou,象州,CN,China,中国,guangxi,广西,laibin,来宾,23.959824,109.684555,451322, +CN101300405,wuxuan,武宣,CN,China,中国,guangxi,广西,laibin,来宾,23.604162,109.66287,451323, +CN101300406,heshan,合山,CN,China,中国,guangxi,广西,laibin,来宾,23.81311,108.88858,451381, +CN101300407,xingbin,兴宾,CN,China,中国,guangxi,广西,laibin,来宾,23.732925,109.23054,451302, +CN101300501,guilin,桂林,CN,China,中国,guangxi,广西,guilin,桂林,25.274216,110.29912,"450301,450300", +CN101300502,xiufeng,秀峰,CN,China,中国,guangxi,广西,guilin,桂林,25.278543,110.29244,450302, +CN101300503,longsheng,龙胜,CN,China,中国,guangxi,广西,guilin,桂林,25.796429,110.00942,450328, +CN101300504,yongfu,永福,CN,China,中国,guangxi,广西,guilin,桂林,24.986692,109.989204,450326, +CN101300505,lingui,临桂,CN,China,中国,guangxi,广西,guilin,桂林,25.246258,110.20549,450312, +CN101300506,xingan,兴安,CN,China,中国,guangxi,广西,guilin,桂林,25.609554,110.670784,450325, +CN101300507,lingchuan,灵川,CN,China,中国,guangxi,广西,guilin,桂林,25.40854,110.325714,450323, +CN101300508,quanzhou,全州,CN,China,中国,guangxi,广西,guilin,桂林,25.929897,111.07299,450324, +CN101300509,guanyang,灌阳,CN,China,中国,guangxi,广西,guilin,桂林,25.489098,111.16025,450327, +CN101300510,yangshuo,阳朔,CN,China,中国,guangxi,广西,guilin,桂林,24.77534,110.4947,450321, +CN101300511,gongcheng,恭城,CN,China,中国,guangxi,广西,guilin,桂林,24.833612,110.82952,450332, +CN101300512,pingle,平乐,CN,China,中国,guangxi,广西,guilin,桂林,24.632215,110.64282,450330, +CN101300513,lipu,荔浦,CN,China,中国,guangxi,广西,guilin,桂林,24.497786,110.40015,450331, +CN101300514,ziyuan,资源,CN,China,中国,guangxi,广西,guilin,桂林,26.0342,110.642586,450329, +CN101300515,diecai,叠彩,CN,China,中国,guangxi,广西,guilin,桂林,25.301334,110.30078,450303, +CN101300516,xiangshan,象山,CN,China,中国,guangxi,广西,guilin,桂林,25.261986,110.28488,450304, +CN101300517,qixing,七星,CN,China,中国,guangxi,广西,guilin,桂林,25.25434,110.31757,450305, +CN101300518,yanshan,雁山,CN,China,中国,guangxi,广西,guilin,桂林,25.077646,110.305664,450311, +CN101300601,wuzhou,梧州,CN,China,中国,guangxi,广西,wuzhou,梧州,23.474804,111.29761,"450401,450400", +CN101300602,tengxian,藤县,CN,China,中国,guangxi,广西,wuzhou,梧州,23.373962,110.93182,450422, +CN101300603,wanxiu,万秀,CN,China,中国,guangxi,广西,wuzhou,梧州,23.471317,111.31582,450403, +CN101300604,cangwu,苍梧,CN,China,中国,guangxi,广西,wuzhou,梧州,23.845097,111.54401,450421, +CN101300605,mengshan,蒙山,CN,China,中国,guangxi,广西,wuzhou,梧州,24.19983,110.5226,450423, +CN101300606,cenxi,岑溪,CN,China,中国,guangxi,广西,wuzhou,梧州,22.918406,110.998116,450481, +CN101300607,changzhou,长洲,CN,China,中国,guangxi,广西,wuzhou,梧州,23.4777,111.27568,450405, +CN101300608,longwei,龙圩,CN,China,中国,guangxi,广西,wuzhou,梧州,23.40996,111.24603,450406, +CN101300701,hezhou,贺州,CN,China,中国,guangxi,广西,hezhou,贺州,24.41414,111.552055,"451101,451100", +CN101300702,zhaoping,昭平,CN,China,中国,guangxi,广西,hezhou,贺州,24.172958,110.81087,451121, +CN101300703,fuchuan,富川,CN,China,中国,guangxi,广西,hezhou,贺州,24.81896,111.27723,451123, +CN101300704,zhongshan,钟山,CN,China,中国,guangxi,广西,hezhou,贺州,24.528566,111.30363,451122, +CN101300705,babu,八步,CN,China,中国,guangxi,广西,hezhou,贺州,24.412445,111.551994,451102, +CN101300706,pinggui,平桂,CN,China,中国,guangxi,广西,hezhou,贺州,24.417149,111.52402,451103, +CN101300801,guigang,贵港,CN,China,中国,guangxi,广西,guigang,贵港,23.0936,109.60214,"450801,450800", +CN101300802,guiping,桂平,CN,China,中国,guangxi,广西,guigang,贵港,23.382473,110.07467,450881, +CN101300803,pingnan,平南,CN,China,中国,guangxi,广西,guigang,贵港,23.544546,110.397484,450821, +CN101300804,gangbei,港北,CN,China,中国,guangxi,广西,guigang,贵港,23.107677,109.59481,450802, +CN101300805,gangnan,港南,CN,China,中国,guangxi,广西,guigang,贵港,23.067516,109.60467,450803, +CN101300806,tantang,覃塘,CN,China,中国,guangxi,广西,guigang,贵港,23.132814,109.415695,450804, +CN101300901,yulin,玉林,CN,China,中国,guangxi,广西,yulin,玉林,22.63136,110.154396,"450901,450900", +CN101300902,bobai,博白,CN,China,中国,guangxi,广西,yulin,玉林,22.271284,109.98,450923, +CN101300903,beiliu,北流,CN,China,中国,guangxi,广西,yulin,玉林,22.701649,110.34805,450981, +CN101300904,rongxian,容县,CN,China,中国,guangxi,广西,yulin,玉林,22.856436,110.55247,450921, +CN101300905,luchuan,陆川,CN,China,中国,guangxi,广西,yulin,玉林,22.321054,110.26484,450922, +CN101300906,xingye,兴业,CN,China,中国,guangxi,广西,yulin,玉林,22.74187,109.87777,450924, +CN101300907,yuzhou,玉州,CN,China,中国,guangxi,广西,yulin,玉林,22.632132,110.154915,450902, +CN101300908,fumian,福绵,CN,China,中国,guangxi,广西,yulin,玉林,22.58163,110.05415,450903, +CN101301001,baise,百色,CN,China,中国,guangxi,广西,baise,百色,23.897741,106.61629,"451001,451000", +CN101301002,napo,那坡,CN,China,中国,guangxi,广西,baise,百色,23.400785,105.83355,451026, +CN101301003,tianyang,田阳,CN,China,中国,guangxi,广西,baise,百色,23.736078,106.90431,451021, +CN101301004,debao,德保,CN,China,中国,guangxi,广西,baise,百色,23.321465,106.618164,451024, +CN101301005,jingxi,靖西,CN,China,中国,guangxi,广西,baise,百色,23.134766,106.41755,451081, +CN101301006,tiandong,田东,CN,China,中国,guangxi,广西,baise,百色,23.600445,107.12426,451022, +CN101301007,pingguo,平果,CN,China,中国,guangxi,广西,baise,百色,23.320478,107.58041,451023, +CN101301008,longlin,隆林,CN,China,中国,guangxi,广西,baise,百色,24.774319,105.34236,451031, +CN101301009,xilin,西林,CN,China,中国,guangxi,广西,baise,百色,24.49204,105.095024,451030, +CN101301010,leye,乐业,CN,China,中国,guangxi,广西,baise,百色,24.782204,106.55964,451028, +CN101301011,lingyun,凌云,CN,China,中国,guangxi,广西,baise,百色,24.345642,106.56487,451027, +CN101301012,tianlin,田林,CN,China,中国,guangxi,广西,baise,百色,24.290262,106.23505,451029, +CN101301013,youjiang,右江,CN,China,中国,guangxi,广西,baise,百色,23.897675,106.61573,451002, +CN101301101,qinzhou,钦州,CN,China,中国,guangxi,广西,qinzhou,钦州,21.967127,108.624176,"450701,450700", +CN101301102,pubei,浦北,CN,China,中国,guangxi,广西,qinzhou,钦州,22.268335,109.55634,450722, +CN101301103,lingshan,灵山,CN,China,中国,guangxi,广西,qinzhou,钦州,22.418041,109.293465,450721, +CN101301104,qinnan,钦南,CN,China,中国,guangxi,广西,qinzhou,钦州,21.966808,108.62663,450702, +CN101301105,qinbei,钦北,CN,China,中国,guangxi,广西,qinzhou,钦州,22.132761,108.44911,450703, +CN101301201,hechi,河池,CN,China,中国,guangxi,广西,hechi,河池,24.695898,108.0621,"451201,451200", +CN101301202,tiane,天峨,CN,China,中国,guangxi,广西,hechi,河池,24.985964,107.17494,451222, +CN101301203,donglan,东兰,CN,China,中国,guangxi,广西,hechi,河池,24.509367,107.373695,451224, +CN101301204,bama,巴马,CN,China,中国,guangxi,广西,hechi,河池,24.139538,107.25313,451227, +CN101301205,huanjiang,环江,CN,China,中国,guangxi,广西,hechi,河池,24.827627,108.25867,451226, +CN101301206,luocheng,罗城,CN,China,中国,guangxi,广西,hechi,河池,24.779327,108.90245,451225, +CN101301207,yizhou,宜州,CN,China,中国,guangxi,广西,hechi,河池,24.492193,108.65397,451203, +CN101301208,fengshan,凤山,CN,China,中国,guangxi,广西,hechi,河池,24.544561,107.04459,451223, +CN101301209,nandan,南丹,CN,China,中国,guangxi,广西,hechi,河池,24.983192,107.54661,451221, +CN101301210,andu,都安,CN,China,中国,guangxi,广西,hechi,河池,23.934963,108.10276,451228, +CN101301211,dahua,大化,CN,China,中国,guangxi,广西,hechi,河池,23.739595,107.9945,451229, +CN101301212,jinchengjiang,金城江,CN,China,中国,guangxi,广西,hechi,河池,24.695625,108.06213,451202, +CN101301301,beihai,北海,CN,China,中国,guangxi,广西,beihai,北海,21.473343,109.119255,"450501,450500", +CN101301302,hepu,合浦,CN,China,中国,guangxi,广西,beihai,北海,21.663553,109.20069,450521, +CN101301303,weizhoudao,涠洲岛,CN,China,中国,guangxi,广西,beihai,北海,21.042196,109.1166,450502, +CN101301304,haicheng,海城,CN,China,中国,guangxi,广西,beihai,北海,21.468443,109.10753,450502, +CN101301305,yinhai,银海,CN,China,中国,guangxi,广西,beihai,北海,21.444908,109.118706,450503, +CN101301306,tieshangang,铁山港,CN,China,中国,guangxi,广西,beihai,北海,21.5928,109.45058,450512, +CN101301401,fangchenggang,防城港,CN,China,中国,guangxi,广西,fangchenggang,防城港,21.614632,108.345474,"450601,450600", +CN101301402,shangsi,上思,CN,China,中国,guangxi,广西,fangchenggang,防城港,22.151423,107.98214,450621, +CN101301403,dongxing,东兴,CN,China,中国,guangxi,广西,fangchenggang,防城港,21.541172,107.97017,450681, +CN101301404,gangkou,港口,CN,China,中国,guangxi,广西,fangchenggang,防城港,21.614407,108.34628,450602, +CN101301405,fangcheng,防城,CN,China,中国,guangxi,广西,fangchenggang,防城港,21.764757,108.35843,450603, +CN101310101,haikou,海口,CN,China,中国,hainan,海南,haikou,海口,20.031971,110.33119,"460101,460100,460000", +CN101310102,xiuying,秀英,CN,China,中国,hainan,海南,haikou,海口,20.008144,110.282394,460105, +CN101310103,longhua,龙华,CN,China,中国,hainan,海南,haikou,海口,20.031027,110.330376,460106, +CN101310104,qiongshan,琼山,CN,China,中国,hainan,海南,haikou,海口,20.00105,110.35472,460107, +CN101310105,meilan,美兰,CN,China,中国,hainan,海南,haikou,海口,20.03074,110.35657,460108, +CN101310201,sanya,三亚,CN,China,中国,hainan,海南,sanya,三亚,18.247871,109.50827,"460201,460200", +CN101310202,dongfang,东方,CN,China,中国,hainan,海南,dongfang,东方,19.10198,108.653786,469007, +CN101310203,lingao,临高,CN,China,中国,hainan,海南,lingao,临高,19.908293,109.6877,469024, +CN101310204,chengmai,澄迈,CN,China,中国,hainan,海南,chengmai,澄迈,19.737095,110.00715,469023, +CN101310205,danzhou,儋州,CN,China,中国,hainan,海南,zhanzhou,儋州,19.517487,109.57678,460400, +CN101310206,changjiang,昌江,CN,China,中国,hainan,海南,changjiang,昌江,19.260967,109.05335,469026, +CN101310207,baisha,白沙,CN,China,中国,hainan,海南,baisha,白沙,19.224585,109.45261,469025, +CN101310208,qiongzhong,琼中,CN,China,中国,hainan,海南,qiongzhong,琼中,19.03557,109.84,469030, +CN101310209,dingan,定安,CN,China,中国,hainan,海南,dingan,定安,19.684965,110.349236,469021, +CN101310210,tunchang,屯昌,CN,China,中国,hainan,海南,tunchang,屯昌,19.362917,110.102776,469022, +CN101310211,qionghai,琼海,CN,China,中国,hainan,海南,qionghai,琼海,19.246012,110.46678,469002, +CN101310212,wenchang,文昌,CN,China,中国,hainan,海南,wenchang,文昌,19.612986,110.753975,469005, +CN101310213,haitang,海棠,CN,China,中国,hainan,海南,sanya,三亚,18.407516,109.76078,460202, +CN101310214,baoting,保亭,CN,China,中国,hainan,海南,baoting,保亭,18.636372,109.70245,469029, +CN101310215,wanning,万宁,CN,China,中国,hainan,海南,wanning,万宁,18.796215,110.388794,469006, +CN101310216,lingshui,陵水,CN,China,中国,hainan,海南,lingshui,陵水,18.505007,110.03722,469028, +CN101310218,jiyang,吉阳,CN,China,中国,hainan,海南,sanya,三亚,18.247437,109.51208,460203, +CN101310219,tianya,天涯,CN,China,中国,hainan,海南,sanya,三亚,18.24734,109.506355,460204, +CN101310221,ledong,乐东,CN,China,中国,hainan,海南,ledong,乐东,18.74758,109.175446,469027, +CN101310222,wuzhishan,五指山,CN,China,中国,hainan,海南,wuzhishan,五指山,18.77692,109.51666,469001, +CN101310223,yazhou,崖州,CN,China,中国,hainan,海南,sanya,三亚,18.352192,109.17431,460205, +CN101310301,sansha,三沙,CN,China,中国,hainan,海南,sansha,三沙,16.83104,112.34882,"460301,460300", +CN101310302,xisha,西沙,CN,China,中国,hainan,海南,sansha,三沙,16.204546,111.792946,460321, +CN101310303,zhongsha,中沙,CN,China,中国,hainan,海南,sansha,三沙,15.206118,118.16009,460323, +CN101310304,nansha,南沙,CN,China,中国,hainan,海南,sansha,三沙,9.900863,115.530174,460322, +CN101310305,huangyandao,黄岩岛,CN,China,中国,hainan,海南,sansha,三沙,15.198058,117.72041,460323, +CN101320101,hongkong,香港,CN,China,中国,hongkong,香港,hongkong,香港,22.307,114.177,"810000,810001,810002,810003,810004,810005,810006,810008,810009,810010,810011,810012,810013,810014,810015,810016,810017", +CN101320102,jiulong,九龙,CN,China,中国,hongkong,香港,hongkong,香港,22.312372,114.19305,810007, +CN101320103,xinjie,新界,CN,China,中国,hongkong,香港,hongkong,香港,22.381,114.188,810018, +CN101330101,macao,澳门,CN,China,中国,macao,澳门,macao,澳门,22.202,113.544,"820000,820001,820002,820003,820004,820005,820007", +CN101330102,dangzidao,氹仔岛,CN,China,中国,macao,澳门,macao,澳门,22.202,113.544,820006, +CN101330103,luhuandao,路环岛,CN,China,中国,macao,澳门,macao,澳门,22.202,113.544,820008, +CN101340101,Taibei,台北,CN,China,中国,taiwan,台湾,taibei,台北,25.04,121.516,710000, +CN101340102,taoyuan,桃园,CN,China,中国,taiwan,台湾,taibei,台北,24.998,121.306,710000, +CN101340103,xinzhu,新竹,CN,China,中国,taiwan,台湾,taibei,台北,24.809,120.958,710000, +CN101340104,yilan,宜兰,CN,China,中国,taiwan,台湾,taibei,台北,24.757,121.741,710000, +CN101340201,gaoxiong,高雄,CN,China,中国,taiwan,台湾,gaoxiong,高雄,22.619,120.276,710000, +CN101340202,jiayi,嘉义,CN,China,中国,taiwan,台湾,gaoxiong,高雄,23.487,120.441,710000, +CN101340203,tainan,台南,CN,China,中国,taiwan,台湾,gaoxiong,高雄,23.004,120.2,710000, +CN101340204,taidong,台东,CN,China,中国,taiwan,台湾,gaoxiong,高雄,22.764,121.151,710000, +CN101340205,pingdong,屏东,CN,China,中国,taiwan,台湾,gaoxiong,高雄,22.682,120.485,710000, +CN101340401,taizhong,台中,CN,China,中国,taiwan,台湾,taizhong,台中,24.144,120.67,710000, +CN101340402,miaoli,苗栗,CN,China,中国,taiwan,台湾,taizhong,台中,24.558,120.812,710000, +CN101340403,zhanghua,彰化,CN,China,中国,taiwan,台湾,taizhong,台中,24.077,120.535,710000, +CN101340404,nantou,南投,CN,China,中国,taiwan,台湾,taizhong,台中,23.916,120.685,710000, +CN101340405,hualian,花莲,CN,China,中国,taiwan,台湾,taizhong,台中,23.983,121.603,710000, +CN101340406,yunlin,云林,CN,China,中国,taiwan,台湾,taizhong,台中,23.718,120.538,710000, \ No newline at end of file diff -Nru indicator-china-weather-2.2.8/debian/changelog indicator-china-weather-3.0.2~201904291430/debian/changelog --- indicator-china-weather-2.2.8/debian/changelog 2018-04-17 02:29:19.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/debian/changelog 2019-04-24 07:48:18.000000000 +0000 @@ -1,3 +1,29 @@ +indicator-china-weather (3.0.2~201904291430) disco; urgency=medium + + * Daily build. + + -- ShuiLu Pi Wed, 24 Apr 2019 15:48:18 +0800 + +indicator-china-weather (3.0.2-0ubuntu1) disco; urgency=medium + + * Handling mouse events on pallets. + * PrimaryScreen display. + * Hide window when focusOutEvent occurred. + * Mainwindow moves with the position of panel. + * Fixed weekly error. + + -- handsome_feng Tue, 19 Feb 2019 13:53:36 +0800 + +indicator-china-weather (3.0.1-0ubuntu1) UNRELEASED; urgency=medium + + * Used the latest version of heweather API. + * New UI with Qt5. + * Fixed the bug that Refresh time error. + * Show on the bottom right of the screen when on UKUI. + * Modified the CSS style of cityitemwidget. + + -- handsome_feng Mon, 15 Oct 2018 15:55:00 +0800 + indicator-china-weather (2.2.8-0ubuntu1) bionic; urgency=medium * Remove "Recommends: python-apport" in the control file. diff -Nru indicator-china-weather-2.2.8/debian/compat indicator-china-weather-3.0.2~201904291430/debian/compat --- indicator-china-weather-2.2.8/debian/compat 2018-03-19 06:08:47.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/debian/compat 2019-04-24 03:09:16.000000000 +0000 @@ -1 +1 @@ -11 +12 diff -Nru indicator-china-weather-2.2.8/debian/control indicator-china-weather-3.0.2~201904291430/debian/control --- indicator-china-weather-2.2.8/debian/control 2018-04-17 02:29:19.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/debian/control 2019-04-24 03:09:16.000000000 +0000 @@ -1,25 +1,22 @@ Source: indicator-china-weather Section: utils Priority: optional -Maintainer: Ubuntu Kylin Team -Build-Depends: debhelper (>= 11), - dh-python, - python-xdg, - python-piston-mini-client, - python (>= 2.6.6-3~), - python-gi -X-Python3-Version: >= 2.6 -Standards-Version: 4.1.4 -Homepage: https://launchpad.net/indicator-china-weather +Maintainer: lixiang +Build-Depends: debhelper (>=12), + qtbase5-dev (>= 5.1), + qt5-qmake, + qtchooser, + qtbase5-dev-tools, + qtscript5-dev +Standards-Version: 4.3.0 +Homepage: https://github.com/ubuntukylin/indicator-china-weather +Vcs-Git: https://github.com/ubuntukylin/indicator-china-weather.git +Vcs-Browser: https://github.com/ubuntukylin/indicator-china-weather Package: indicator-china-weather -Architecture: all -Depends: gir1.2-appindicator3-0.1, - python-gi, - python-xdg, - python-piston-mini-client, - ${shlibs:Depends}, - ${misc:Depends}, +Architecture: any +Depends: ${misc:Depends},${shlibs:Depends} Description: Indicator that displays China weather information - Indicator-China-Weather displays information for one place, and you - can change it. + Kylin Weather displays detail weather information for one place, + including weather forecast and observe weather, and you can + change it. diff -Nru indicator-china-weather-2.2.8/debian/copyright indicator-china-weather-3.0.2~201904291430/debian/copyright --- indicator-china-weather-2.2.8/debian/copyright 2018-03-19 06:08:22.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/debian/copyright 2019-04-24 03:09:16.000000000 +0000 @@ -1,16 +1,21 @@ Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: indicator-china-weather -Upstream-Contact: Ubuntu Kylin Team -Source: https://launchpad.net/indicator-china-weather +Upstream-Contact: lixiang +Source: https://github.com/ukui/indicator-china-weather Files: * -Copyright: 2013 ~ 2015, National University of Defense Technology(NUDT) & Kylin Ltd. -License: GPL-3 +Copyright: 2018, lixiang +License: GPL-3.0+ -License: GPL-3 - This package is free software; you can redistribute it and/or modify +Files: debian/* +Copyright: 2018, lixiang +License: GPL-3.0+ + +License: GPL-3.0+ + This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License. + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. . This package is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -18,7 +23,7 @@ GNU General Public License for more details. . You should have received a copy of the GNU General Public License - along with this program. If not, see + along with this program. If not, see . . On Debian systems, the complete text of the GNU General - Public License version 2 can be found in "/usr/share/common-licenses/GPL-3". + Public License version 3 can be found in "/usr/share/common-licenses/GPL-3". diff -Nru indicator-china-weather-2.2.8/debian/indicator-china-weather.lintian-overrides indicator-china-weather-3.0.2~201904291430/debian/indicator-china-weather.lintian-overrides --- indicator-china-weather-2.2.8/debian/indicator-china-weather.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/debian/indicator-china-weather.lintian-overrides 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1 @@ +spelling-error-in-binary usr/bin/indicator-china-weather pres press diff -Nru indicator-china-weather-2.2.8/debian/install indicator-china-weather-3.0.2~201904291430/debian/install --- indicator-china-weather-2.2.8/debian/install 2018-04-17 02:29:19.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/debian/install 1970-01-01 00:00:00.000000000 +0000 @@ -1,10 +0,0 @@ -bin/indicator-china-weather usr/bin/ -indicator-china-weather.png usr/share/pixmaps/ -indicator-china-weather.desktop etc/xdg/autostart/ -indicator-china-weather.desktop usr/share/applications/ -icons usr/share/indicator-china-weather/ -src usr/share/indicator-china-weather/ -ui usr/share/indicator-china-weather/ -indicator-china-weather.py usr/share/indicator-china-weather/ -indicator-china-weather.png usr/share/indicator-china-weather/ -indicator-china-weather.gschema.xml usr/share/glib-2.0/schemas/ diff -Nru indicator-china-weather-2.2.8/debian/postinst indicator-china-weather-3.0.2~201904291430/debian/postinst --- indicator-china-weather-2.2.8/debian/postinst 2018-03-19 06:04:16.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/debian/postinst 1970-01-01 00:00:00.000000000 +0000 @@ -1,10 +0,0 @@ -#!/bin/sh - -set -e - -#DEBHELPER# - -echo "Installing indicator-specific icons..." -xdg-icon-resource install --theme hicolor --novendor --size 22 /usr/share/indicator-china-weather/icons/icon.png weather-indicator -xdg-icon-resource install --theme hicolor --novendor --size 22 /usr/share/indicator-china-weather/icons/icon_unknown_condition.png weather-indicator-unknown -xdg-icon-resource install --theme hicolor --novendor --size 22 /usr/share/indicator-china-weather/icons/icon_connection_error.png weather-indicator-error diff -Nru indicator-china-weather-2.2.8/debian/rules indicator-china-weather-3.0.2~201904291430/debian/rules --- indicator-china-weather-2.2.8/debian/rules 2018-03-19 06:04:16.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/debian/rules 2019-04-24 03:09:16.000000000 +0000 @@ -1,4 +1,30 @@ #!/usr/bin/make -f +# See debhelper(7) (uncomment to enable) +# output every command that modifies files on the build system. +#export DH_VERBOSE = 1 + + +export QT_SELECT=5 + +QMAKE_OPTS = DEFINES+=NO_DEBUG_ON_CONSOLE +MAKE_OPTS = PREFIX=/usr QMAKE=qmake LRELEASE=lrelease QMAKE_OPTS="$(QMAKE_OPTS)" + +override_dh_auto_configure: + QT_SELECT=qt5 dh_auto_configure \ + -- "QMAKE_CXXFLAGS=$(CFLAGS)" \ + indicator-china-weather.pro %: - dh $@ --with python2 + dh $@ + +override_dh_missing: + dh_missing --fail-missing + +override_dh_auto_clean: + [ ! -d .moc ] || $(RM) -r .moc + [ ! -d .obj ] || $(RM) -r .obj + [ ! -d .ui ] || $(RM) -r .ui + [ ! -f Makefile ] || dh_auto_clean + +override_dh_auto_build: + dh_auto_build -- $(MAKE_OPTS) diff -Nru indicator-china-weather-2.2.8/debian/source/format indicator-china-weather-3.0.2~201904291430/debian/source/format --- indicator-china-weather-2.2.8/debian/source/format 2018-03-19 06:04:16.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/debian/source/format 2019-04-24 07:48:18.000000000 +0000 @@ -1 +1 @@ -3.0 (quilt) +3.0 (native) diff -Nru indicator-china-weather-2.2.8/debian/watch indicator-china-weather-3.0.2~201904291430/debian/watch --- indicator-china-weather-2.2.8/debian/watch 2018-03-19 07:16:56.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/debian/watch 2019-04-24 03:09:16.000000000 +0000 @@ -1,2 +1,3 @@ version=4 -https://launchpad.net/indicator-china-weather/+download https://launchpad.net/indicator-china-weather/.*/.*/indicator-china-weather_(.+)\.tar\.gz +opts=filenamemangle=s/.+\/v?(\d\S+)\.tar\.gz/indicator-china-weather-$1\.tar\.gz/ \ + https://github.com/ukui/indicator-china-weather/releases .*/v?(\d\S+)\.tar\.gz Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/banner.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/banner.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/close.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/close.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/100.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/100.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/101.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/101.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/102.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/102.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/103.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/103.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/104.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/104.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/200.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/200.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/201.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/201.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/202.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/202.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/203.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/203.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/204.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/204.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/205.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/205.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/206.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/206.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/207.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/207.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/208.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/208.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/209.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/209.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/210.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/210.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/211.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/211.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/212.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/212.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/213.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/213.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/300.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/300.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/301.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/301.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/302.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/302.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/303.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/303.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/304.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/304.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/305.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/305.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/306.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/306.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/307.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/307.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/308.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/308.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/309.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/309.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/310.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/310.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/311.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/311.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/312.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/312.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/313.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/313.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/400.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/400.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/401.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/401.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/402.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/402.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/403.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/403.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/404.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/404.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/405.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/405.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/406.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/406.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/407.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/407.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/500.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/500.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/501.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/501.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/502.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/502.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/503.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/503.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/504.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/504.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/507.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/507.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/508.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/508.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/900.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/900.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/901.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/901.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/heweather/999.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/heweather/999.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/icon_connection_error.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/icon_connection_error.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/icon.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/icon.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/icon_unknown_condition.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/icon_unknown_condition.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/min.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/min.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/StatusItemBusy1.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/StatusItemBusy1.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/StatusItemBusy2.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/StatusItemBusy2.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/d0.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/d0.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/d10.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/d10.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/d11.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/d11.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/d12.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/d12.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/d13.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/d13.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/d14.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/d14.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/d15.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/d15.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/d16.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/d16.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/d17.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/d17.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/d18.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/d18.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/d19.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/d19.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/d1.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/d1.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/d20.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/d20.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/d21.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/d21.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/d22.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/d22.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/d23.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/d23.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/d24.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/d24.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/d25.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/d25.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/d26.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/d26.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/d27.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/d27.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/d28.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/d28.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/d29.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/d29.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/d2.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/d2.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/d30.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/d30.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/d31.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/d31.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/d3.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/d3.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/d4.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/d4.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/d53.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/d53.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/d5.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/d5.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/d6.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/d6.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/d7.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/d7.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/d8.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/d8.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/d9.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/d9.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/n0.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/n0.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/n10.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/n10.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/n11.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/n11.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/n12.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/n12.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/n13.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/n13.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/n14.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/n14.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/n15.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/n15.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/n16.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/n16.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/n17.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/n17.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/n18.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/n18.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/n19.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/n19.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/n1.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/n1.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/n20.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/n20.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/n21.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/n21.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/n22.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/n22.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/n23.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/n23.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/n24.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/n24.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/n25.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/n25.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/n26.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/n26.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/n27.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/n27.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/n28.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/n28.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/n29.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/n29.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/n2.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/n2.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/n30.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/n30.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/n31.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/n31.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/n3.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/n3.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/n4.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/n4.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/n53.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/n53.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/n5.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/n5.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/n6.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/n6.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/n7.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/n7.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/n8.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/n8.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/n9.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/n9.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/undefined_d.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/undefined_d.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/icons/weather/undefined_n.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/icons/weather/undefined_n.gif differ diff -Nru indicator-china-weather-2.2.8/icons/weather.css indicator-china-weather-3.0.2~201904291430/icons/weather.css --- indicator-china-weather-2.2.8/icons/weather.css 2018-03-19 06:04:16.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/icons/weather.css 1970-01-01 00:00:00.000000000 +0000 @@ -1,212 +0,0 @@ -GtkComboBox { - /*background-color: #1209a2;*/ - border: 1px solid #bebebe; - background-image: none; - border: none; - border-radius: 0px; -} - -GtkSpinButton.entry { - color: black; -} - -/*GtkCheckButton:inconsistent { - background-color: #20395a; -} -GtkCheckButton:active { - transition: 200ms ease-in-out; -}*/ -GtkCheckButton { - background-color: #e0e0e0; - border: 1px solid #bebebe; -} - - -GtkNotebook { - border: 1px solid #e0e0e0; - border-color: lightgray; - background-color: transparent; - /*background-color: #e9eef1;*/ - /*border-radius: 0px;*/ -} - -/*GtkNotebook GtkLabel { - color: #f90192; -}*/ - -/* Theme labels within notebook tabs */ -/*GtkNotebook tab GtkLabel { - color: #703910; -}*/ - -/* Theme labels in the any first notebook - tab, both selectors are equivalent */ -/*GtkNotebook tab:nth-child(first) GtkLabel, -GtkNotebook tab:first-child GtkLabel { - color: #89d012; -}*/ - -GtkLabel{ - font-size: 10px; - color: black; - font-family: Comic Sans; -} - -.title_label{ - font-size: 14px; - color: white; - background-color: transparent; -} - -.normal_btn{ - font-size: 10px; - color: #000000; - background-color: #ffffff; - border: 1px solid #bebebe; - border-radius: 0px; - border-image: none; - background-image: none; -} - -.normal_btn:hover{ - border: 1px solid #3f96e4; -} - -.normal_btn:active{ - /*padding-top: 1px; - padding-right: 1px; - */ -} - -/*.normal_btn:insensitive{ - color: #bebebe; - border-color: #bebebe; -}*/ - -.top_content{ - background-image: url("banner.png"); - border: none; - border-radius: 0px; -} - - -.min_btn{ - background: url("min.png") no-repeat; - background-color: transparent; - border-image: none; - border: none; - border-radius: 0px; -} - -.min_btn:hover{ - background: url("min.png") no-repeat -36px center; -} - -.min_btn:active{ - background: url("min.png") no-repeat -72px center; -} - -.close_btn{ - background: url("close.png") no-repeat; - background-color: transparent; - border-image: none; - border: none; - border-radius: 0px; -} - -.close_btn:hover{ - background: url("close.png") no-repeat -36px center; -} - -.close_btn:active{ - background: url("close.png") no-repeat -72px center; -} - -.frame{ - border: 1px solid #e0e0e0; - border-color: lightgray; - background-color: transparent; -} - -.frame_title{ - font-size: 11px; - font-weight: bold; - color: black; -} - -GtkGrid{ - background-color: transparent; - background-image: none; -} - -GtkGrid#content_grid{ - background-color: white; -} - -GtkTreeView column-header .button{ - background-color: #e9eef1; - color: #00609a; - border-image: none; - background-image: none; - border: none; - padding-top: 5px; - padding-bottom: 5px; - font-size: 10px; -} - -GtkScrolledWindow{ - border: none; - border-bottom: 1px solid lightgray; - font-size: 10px; -} - -GtkTreeView row{ - border: none; - border-image: none; - background: white; - color: black; - /*padding-top: 5px; - padding-bottom: 5px;*/ -} - -GtkTreeView row:hover{ - background: #d2e4ff; - color: black; -} - -GtkTreeView row:selected{ - background: #b1d4ff; - color: black; -} - -GtkWindow{ - /*box-shadow: inset 0px 0px 1px black;*/ - /*background-color: lightgray;*/ - background-color: white; -} - - -.title_label{ - font-size: 14px; - color: white; -} - -.city_label{ - font-size: 22px; - color: white; - background-color: transparent; -} - -.retry_button{ - background-color: transparent; - border-image: none; - border:1px solid #bebebe; - border-radius: 0px; -} - -.retry_button:hover{ - background-color: transparent; - border-image: none; - border:1px solid #3f96e4; - border-radius: 0px; -} diff -Nru indicator-china-weather-2.2.8/indicator-china-weather.desktop indicator-china-weather-3.0.2~201904291430/indicator-china-weather.desktop --- indicator-china-weather-2.2.8/indicator-china-weather.desktop 2018-03-19 06:31:35.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/indicator-china-weather.desktop 2019-04-24 03:09:16.000000000 +0000 @@ -1,6 +1,6 @@ [Desktop Entry] Name=indicator-china-weather -Name[zh_CN]=优客天气 +Name[zh_CN]=麒麟天气 Comment=Indicator applet for current weather conditions in China Comment[zh_CN]=中国实时天气 GenericName=China Weather Applet diff -Nru indicator-china-weather-2.2.8/indicator-china-weather.gschema.xml indicator-china-weather-3.0.2~201904291430/indicator-china-weather.gschema.xml --- indicator-china-weather-2.2.8/indicator-china-weather.gschema.xml 2018-03-19 06:04:16.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/indicator-china-weather.gschema.xml 1970-01-01 00:00:00.000000000 +0000 @@ -1,25 +0,0 @@ - - - - - 15 - Refresh rate - Refresh rate - - - '101250101' - city id - city id - - - true - show temperature - show temperature - - - "{'101250101' : '长沙', '101010100' : '北京', '101020100' : '上海'}" - places - places - - - Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/indicator-china-weather.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/indicator-china-weather.png differ diff -Nru indicator-china-weather-2.2.8/indicator-china-weather.pro indicator-china-weather-3.0.2~201904291430/indicator-china-weather.pro --- indicator-china-weather-2.2.8/indicator-china-weather.pro 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/indicator-china-weather.pro 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,131 @@ +#------------------------------------------------- +# +# Project created by QtCreator 2018-08-20T11:02:46 +# +#------------------------------------------------- + +QT += network + +#greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +isEqual(QT_MAJOR_VERSION, 5) { + QT += widgets gui core dbus +} + +TARGET = indicator-china-weather +TEMPLATE = app + +target.source += $$TARGET +target.path = /usr/bin + +icons.files += res/indicator-china-wether.png +icons.path = /usr/share/pixmaps/ + +desktop.files += indicator-china-wether.desktop +desktop.path = /usr/share/applications/ + +startdesktop.files += indicator-china-wether.desktop +startdesktop.path = /etc/xdg/autostart/ + +INSTALLS += target icons desktop startdesktop + +CONFIG += c++14 +CONFIG += qt warn_on +CONFIG += release + +QMAKE_CPPFLAGS *= $(shell dpkg-buildflags --get CPPFLAGS) +QMAKE_CFLAGS *= $(shell dpkg-buildflags --get CFLAGS) +QMAKE_CXXFLAGS *= $(shell dpkg-buildflags --get CXXFLAGS) +QMAKE_LFLAGS *= $(shell dpkg-buildflags --get LDFLAGS) + +unix { + UI_DIR = .ui + MOC_DIR = .moc + OBJECTS_DIR = .obj +} + +SOURCES += src/main.cpp \ + src/mainwindow.cpp \ + src/titlebar.cpp \ + src/contentwidget.cpp \ + src/nowweatherwidget.cpp \ + src/forecastweatherwidget.cpp \ +# src/indexweatherwidget.cpp \ + src/translucentlabel.cpp \ + src/forecastitemwidget.cpp \ + src/tooltip.cpp \ + src/indexitemwidget.cpp \ + src/settingdialog.cpp \ + src/settingtitlebar.cpp \ + src/activebutton.cpp \ +# src/searchdialog.cpp \ + src/searchtitlebar.cpp \ + src/searchinputedit.cpp \ + src/searchview.cpp \ + src/searchmodel.cpp \ + src/searchdelegate.cpp \ + src/locationworker.cpp \ + src/citywidget.cpp \ + src/citylistwidget.cpp \ + src/cityitemwidget.cpp \ + src/spinbox.cpp \ + src/aboutdialog.cpp \ + src/menuaction.cpp \ + src/menuactiongroup.cpp \ + src/global.cpp \ + src/preferences.cpp \ + src/weatherworker.cpp \ + src/networkerrorwidget.cpp \ + src/separator.cpp \ + src/tipwidget.cpp \ + src/texttip.cpp \ + src/tipmodule.cpp \ + src/promptwidget.cpp \ + src/airwidget.cpp \ + src/dbusadaptor.cpp + +HEADERS += src/mainwindow.h \ + src/titlebar.h \ + src/contentwidget.h \ + src/nowweatherwidget.h \ + src/forecastweatherwidget.h \ +# src/indexweatherwidget.h \ + src/translucentlabel.h \ + src/forecastitemwidget.h \ + src/tooltip.h \ + src/indexitemwidget.h \ + src/settingdialog.h \ + src/settingtitlebar.h \ + src/activebutton.h \ +# src/searchdialog.h \ + src/searchtitlebar.h \ + src/searchinputedit.h \ + src/searchview.h \ + src/searchmodel.h \ + src/searchdelegate.h \ + src/data.h \ + src/locationworker.h \ + src/citywidget.h \ + src/citylistwidget.h \ + src/cityitemwidget.h \ + src/spinbox.h \ + src/aboutdialog.h \ + src/menuaction.h \ + src/menuactiongroup.h \ + src/global.h \ + src/preferences.h \ + src/weatherworker.h \ + src/networkerrorwidget.h \ + src/separator.h \ + src/tipwidget.h \ + src/texttip.h \ + src/tipmodule.h \ + src/promptwidget.h \ + src/airwidget.h \ + src/dbusadaptor.h + +RESOURCES += \ + res.qrc + +TRANSLATIONS += \ + translation/indicator-china-weather_zh_CN.ts diff -Nru indicator-china-weather-2.2.8/indicator-china-weather.py indicator-china-weather-3.0.2~201904291430/indicator-china-weather.py --- indicator-china-weather-2.2.8/indicator-china-weather.py 2018-04-17 01:32:27.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/indicator-china-weather.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,1471 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- - -### BEGIN LICENSE -# Copyright (C) 2013 ~ 2017 National University of Defense Technology(NUDT) & Kylin Ltd -# Author: Kobe Lee -# -# This program is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 3, as published -# by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranties of -# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR -# PURPOSE. See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -### END LICENSE - -import gi -gi.require_version('Gtk', '3.0') -gi.require_version('AppIndicator3', '0.1') -gi.require_version('Notify', '0.7') -from gi.repository import Gio, Gtk, Gdk, Notify, GObject, GdkPixbuf -from gi.repository import AppIndicator3 as AppIndicator -import sys, shutil, tempfile -reload(sys) -sys.setdefaultencoding("utf-8") -import commands, threading -import signal -import Queue -import types -import time -import string -from src.database import Database -from src.base import * -import logging, logging.handlers -from piston_mini_client import APIError -import httplib2 -import datetime -from src.piston import WeatherPistonAPI - -MySever = ("http://service.ubuntukylin.com:8001/weather/api/1.0/") -WeatherPistonAPI.default_service_root = MySever - -from src.piston_remoter import PingBackPistonAPI -PINGBACK_SERVER = "http://service.ubuntukylin.com:8001/weather/" - -INFO_TYPE = 'type' -INFO_SETTING = 'setting' -class Settings: - db = None - BASE_KEY = 'apps.indicators.chinaweather' - REFRESH_RATE = 'refresh_rate' - CITY_KEY = 'city_id' - TEMPERATURE_KEY = 'show_temperature' - PLACES = 'places' - - INFO = { - REFRESH_RATE : { - INFO_TYPE : types.IntType, - INFO_SETTING : 'refresh-rate' - }, - CITY_KEY : { - INFO_TYPE : types.StringType, - INFO_SETTING : 'city-id' - }, - TEMPERATURE_KEY : { - INFO_TYPE : types.BooleanType, - INFO_SETTING : 'show-temperature' - }, - PLACES : { - INFO_TYPE : types.DictType, - INFO_SETTING: 'places' - }, - } - - # Open the DB - def prepare_settings_store(self): - try: - self.db = Gio.Settings.new(self.BASE_KEY) - except Exception as e: - print e - #print(e) - - def get_value(self, setting, return_id = False): - setting_name = Settings.INFO[setting][INFO_SETTING] - try: - setting_type = Settings.INFO[setting][INFO_TYPE] - get_func = { - types.IntType: self.db.get_int, - types.StringType: self.db.get_string, - types.BooleanType: self.db.get_boolean, - types.ListType: self.db.get_string, - types.DictType: self.db.get_string, - types.NoneType: self.db.get_value, - }[setting_type] - return get_func(setting_name) - except: - return None - - def set_value(self, setting, value): - value = '' if value is None else value - value = str(value) if type(value) is types.DictType else value - setting_name = Settings.INFO[setting][INFO_SETTING] - try: - setting_type = Settings.INFO[setting][INFO_TYPE] - set_func = { - types.IntType: self.db.set_int, - types.StringType: self.db.set_string, - types.BooleanType: self.db.set_boolean, - types.ListType: self.db.set_string, - types.DictType: self.db.set_string, - types.NoneType: self.db.set_value, - }[setting_type] - set_func(setting_name, value) - except: - log.debug( \ - "Settings: schema for '%s' not found, aborting" % setting) - - -class IndicatorWeather(threading.Thread): -#class IndicatorWeather(): - """ Indicator class """ - - def __init__(self): - threading.Thread.__init__(self) - #self.setDaemon(True) - #self.connect("delete-event", Gtk.main_quit) - #self.connect('destroy', lambda q: Gtk.main_quit()) - self.server = WeatherPistonAPI(service_root=MySever) - self.premoter = PingBackPistonAPI(service_root=PINGBACK_SERVER) - self.main_icon = os.path.join - self.winder = AppIndicator.Indicator.new("indicator-china-weather", "weather-indicator", AppIndicator.IndicatorCategory.OTHER) - self.winder.set_status(AppIndicator.IndicatorStatus.ACTIVE) - self.winder.set_attention_icon_full("weather-indicator-error", "Network connection unavailable") - # self.winder = appindicator.Indicator("indicator-china-weather", "weather-indicator", appindicator.CATEGORY_OTHER) - # self.winder.set_status(appindicator.STATUS_ACTIVE) - # self.winder.set_attention_icon("weather-indicator-unknown") - - self.queue = Queue.PriorityQueue() - Notify.init("indicator-china-weather") - - self.settings = Settings() - self.settings.prepare_settings_store() - self.city_id = self.settings.get_value("city_id") - self.places = str(self.settings.get_value("places")) - # trans str to dict - self.places = eval(self.places) - # 修复V1.0配置 - if type(self.places) != dict: - self.places = {'101250101' : '长沙', '101010100' : '北京', '101020100' : '上海'} - self.settings.set_value("places", str(self.places)) - self.city_id = '101250101' - self.settings.set_value("city_id", self.city_id) - - self.rate = self.settings.get_value("refresh_rate") - if self.rate in (False, None): - default_value = 15 - self.settings.set_value("refresh_rate", default_value) - self.rate = default_value - self.temp = self.settings.get_value("show_temperature") - if self.temp: - self.label_guide = "100 ˚C" # Guide for width of label - else: - self.label_guide = " " - - self.aboutdialog = None - self.icon = None - self.menu = None - self.place = None - self.actualization_time = 0 - - if self.city_id in (False, None, '[]', ''): - self.settings.set_value("places", '') - self.menu_noplace() - else: - self.menu_normal() - try: - server_result = self.access_server_pingback() - if server_result: - # when program start, it update_data - self.update_observe_data() - GObject.timeout_add_seconds(60, self.update_time) - self.submit_weather_pingback() - else: - self.winder.set_icon("weather-indicator-error") - self.winder.set_status(AppIndicator.IndicatorStatus.ATTENTION) - self.winder.set_status(AppIndicator.IndicatorStatus.ACTIVE) - #20170627 - # 不管获取实时天气成功与否,都在获取完成后更新时间去在规定的周期内重新获取 - self.actualization_time = 0 - GObject.timeout_add_seconds(60, self.update_time) - self.schedule_weather_update() - except Exception as e: - self.winder.set_icon("weather-indicator-error") - self.winder.set_status(AppIndicator.IndicatorStatus.ATTENTION) - self.winder.set_status(AppIndicator.IndicatorStatus.ACTIVE) - #20170627 - # 不管获取实时天气成功与否,都在获取完成后更新时间去在规定的周期内重新获取 - self.actualization_time = 0 - GObject.timeout_add_seconds(60, self.update_time) - self.schedule_weather_update() - - # Show a menu if no places specified - def menu_noplace(self): - menu_noplace = Gtk.Menu() - - setup = Gtk.MenuItem("配置地点...") - setup.connect("activate", self.prefs) - menu_noplace.append(setup) - setup.show() - - about = Gtk.MenuItem("关于") - about.connect("activate", self.about) - about.show() - menu_noplace.append(about) - - # quit = Gtk.ImageMenuItem(gtk.STOCK_QUIT) - quit = Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_QUIT, None) - quit.connect("activate", self.quit) - quit.show() - menu_noplace.append(quit) - - self.winder.set_menu(menu_noplace) - - self.winder.set_icon("weather-indicator") - self.winder.set_status(AppIndicator.IndicatorStatus.ATTENTION) - self.winder.set_status(AppIndicator.IndicatorStatus.ACTIVE) - - # Show menu with data - def menu_normal(self): - self.menu = Gtk.Menu() - - ##City - self.city_show = Gtk.MenuItem("城市") - self.city_show.set_sensitive(True) - self.city_show.show() - self.menu.append(self.city_show) - - ##Weather - self.weather_show = Gtk.MenuItem("天气") - self.weather_show.set_sensitive(True) - self.weather_show.show() - self.menu.append(self.weather_show) - - ##Temperature - self.temp_show = Gtk.MenuItem("当前气温") - self.temp_show.set_sensitive(True) - self.temp_show.show() - self.menu.append(self.temp_show) - - self.temp_range = Gtk.MenuItem("湿度范围") - self.temp_range.set_sensitive(True) - self.temp_range.show() - self.menu.append(self.temp_range) - - ##Humidity - self.SD_show = Gtk.MenuItem("湿度") - self.SD_show.set_sensitive(True) - self.SD_show.show() - self.menu.append(self.SD_show) - - ##Wind Direction - self.WD_show = Gtk.MenuItem("风力风向") - self.WD_show.set_sensitive(True) - self.WD_show.show() - self.menu.append(self.WD_show) - - self.pm_show = Gtk.MenuItem("空气质量") - self.pm_show.set_sensitive(True) - self.pm_show.show() - self.menu.append(self.pm_show) - - ##Update Time - self.time_show = Gtk.MenuItem("发布时间") - self.time_show.set_sensitive(True) - self.time_show.show() - self.menu.append(self.time_show) - - ext_show = Gtk.MenuItem("天气预报") - ext_show.connect("activate", self.show_forecast_weather) - ext_show.show() - self.menu.append(ext_show) - - self.place = self.places[self.city_id] - - self.menu_locations() - - ##Update Button - self.refresh_show = Gtk.MenuItem("更新") - self.refresh_show.connect("activate", self.update_observe_data) - self.refresh_show.show() - self.menu.append(self.refresh_show) - - ##Preferences - prefs_show = Gtk.MenuItem("配置...") - prefs_show.connect("activate", self.show_prefs_dialog) - prefs_show.show() - self.menu.append(prefs_show) - - ##About - about_show = Gtk.MenuItem("关于") - about_show.connect("activate", self.about) - about_show.show() - self.menu.append(about_show) - - ##Quit - # quit = Gtk.ImageMenuItem(gtk.STOCK_QUIT) - quit = Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_QUIT, None) - quit.connect("activate", self.quit) - quit.show() - self.menu.append(quit) - - self.winder.set_menu(self.menu) - self.update_label(" ") - - def on_city_changed(self, widget): - if widget.get_active(): - self.place = widget.get_label() - self.city_show.set_label(self.place) - for (d,x) in self.places.items(): - if x == self.place: - self.city_id = d - break - self.settings.set_value("city_id", self.city_id) - # after change city, it update_data - self.update_observe_data() - - def menu_locations(self): - locations_menu = Gtk.Menu() - locations_menu.set_sensitive(True) - self.city_show.set_submenu(locations_menu) - - loco1 = Gtk.RadioMenuItem.new_with_label([], self.place) - loco1.connect("toggled", self.on_city_changed)#, self.place - loco1.show() - locations_menu.append(loco1) - group = loco1.get_group() - # for place in self.places[1:]: - for (d,x) in self.places.items(): - if x != self.place: - loco = Gtk.RadioMenuItem.new_with_label(group, x) - loco.connect("toggled", self.on_city_changed)#, place[0] - loco.show() - locations_menu.append(loco) - group = loco.get_group() - - # Set a label of indicator - def update_label(self, label): - if (hasattr(self.winder, 'set_label')): - self.winder.set_label(label, self.label_guide) if self.temp else self.winder.set_label(" ", " ") - self.winder.set_status(AppIndicator.IndicatorStatus.ATTENTION) - self.winder.set_status(AppIndicator.IndicatorStatus.ACTIVE) - - # Quit the applet - def quit(self, widget, data=None): - Notify.uninit() - Gtk.main_quit() - sys.exit() - - def show_notification(self, condition, icon, severe=False): - if severe: - n = Notify.Notification.new("异常提示",condition,icon) - else: - n = Notify.Notification.new(condition, "", icon) - n.show() - - # -------------------------pingback------------------------- - def submit_weather_pingback(self): - last_time = get_last_time() - now_time = datetime.datetime.now() - - if last_time in (None, ''): - version_weather = VERSION - distro, version_os = get_distro_info() - try: - pingback = self.premoter.submit_pingback_main(distro, version_os, version_weather, self.place) - except Exception as e: - return False - if pingback: - set_last_time(now_time.strftime('%Y-%m-%d'))#'%Y-%m-%d %H:%M:%S' - return pingback - else: - last_time = datetime.datetime.strptime(last_time, '%Y-%m-%d') - now_time = now_time.strftime('%Y-%m-%d') - now_time = datetime.datetime.strptime(now_time, '%Y-%m-%d') -# myseconds = (now_time - last_time).seconds - delta = now_time - last_time#两个日期相隔的天数 - if (delta.days > 0): - version_weather = VERSION - distro, version_os = get_distro_info() - try: - pingback = self.premoter.submit_pingback_main(distro, version_os, version_weather, self.place) - except Exception as e: - return False - if pingback: - set_last_time(now_time.strftime('%Y-%m-%d')) - return pingback - else: - return False - - def access_server_pingback(self): - pingback = self.premoter.access_server_pingback() - return pingback - - def get_new_observe_weather(self, queue): - self.now_temperature = '' - observe_weather = None - try: - observe_weather = self.server.get_cma_observe_weather(self.city_id) - except IOError as e: - observe_weather = None - except ValueError as e: - observe_weather = None - except APIError as e: - observe_weather = None - except httplib2.ServerNotFoundError: - observe_weather = None - except Exception as e: - observe_weather = None - if observe_weather in (False, None, '[]', ''): - self.show_notification("实时天气获取异常", "weather-indicator-unknown", severe=True) - else: - # observe_weather = {'city': u'\u957f\u6c99', 'WD': u'\u4e1c\u98ce', 'ptime': u'2017-06-27 18:50', 'temp': u'23', 'temp2': u'25\u2103', 'temp1': u'23\u2103', 'weather': u'\u9634', 'WS': u'\u5fae\u98ce', 'time': u'2017-06-27 18:50', 'img2': 'd2.gif', 'img1': 'd2.gif', 'aqi': u'\u4f18(30)', 'SD': u'90'} - if 'temp' in observe_weather.keys(): - self.now_temperature = observe_weather['temp'] - queue.put((10,observe_weather)) - - def set_new_observe_weather(self, weather): -# self.ptime = weather['ptime'] -# pint = string.atoi(self.ptime.split(':')[0]) -# if pint > 7 or pint < 20: -# self.icon = weather_icons[weather['img1']] -# else : -# self.icon = weather_icons[weather['img2']] - self.icon = weather_icons[weather['img2']] - self.winder.set_icon(self.icon) - self.city_show.set_label(weather['city']) - self.weather_show.set_label(weather['weather']) - if weather['temp'] in ("未知", "N/A", "", None): - self.temp_show.hide() - else: - self.temp_show.show() - self.temp_show.set_label('当前气温:' + weather['temp'] + '℃') -# self.temp_range.set_label('温度范围:' + weather['temp2'] + ' - ' + weather['temp1']) - self.temp_range.set_label('温度范围:' + weather['temp1'] + ' - ' + weather['temp2']) - if weather['SD'] in ("未知", "N/A", "", None): - self.SD_show.hide() - else: - self.SD_show.show() - self.SD_show.set_label('相对湿度(%):' + weather['SD']) - self.WD_show.set_label(weather['WD'] + weather['WS'] + "级") - self.pm_show.set_label('空气质量:' + weather['aqi']) - self.time_show.set_label('发布时间:' + weather['time']) - if self.temp: - if weather['temp'] in ("未知", "N/A", "", None): - self.update_label(" ") - else: - self.update_label(weather['temp'] + '℃') - - # 不管获取实时天气成功与否,都在获取完成后更新时间去在规定的周期内重新获取 - self.actualization_time = 0 - self.update_time() - self.schedule_weather_update() - - # update time - def update_time(self): - try: - ut = int(round((time.time()-self.actualization_time)/60.0,0)) - if self.actualization_time == 0 or ut == 0: - msg = '刚刚' - else: - msg = str(ut) + '分钟之前' - self.refresh_show.set_label('更新'+' ('+msg+')') - if (time.time()-self.actualization_time) > int(self.rate)*60: - self.actualization_time = time.time() - except Exception as e: - log.debug("failed to update menu time value: '%s'" % e) - return True - - # Schedule weather update - def schedule_weather_update(self, rate_override = None): - if hasattr(self, "rate_id"): - GObject.source_remove(self.rate_id) - if rate_override: - self.rate_id = GObject.timeout_add( - int(rate_override) * 60000, self.update_observe_data) - else: - self.rate_id = GObject.timeout_add( - int(self.rate) * 60000, self.update_observe_data) - - def update_observe_data(self, widget = None): - try: - server_result = self.access_server_pingback() - if server_result: - observe_th = threading.Thread(target=self.get_new_observe_weather, - name='Fetcher', - args=(self.queue,)) - observe_th.setDaemon(True) - observe_th.start() - #observe_th.join() - try: - num, weather = self.queue.get() - if weather not in (None, False): - self.set_new_observe_weather(weather) - self.submit_weather_pingback() - self.queue.task_done() - except Queue.Empty: - self.show_notification("实时天气获取异常", "weather-indicator-unknown", severe=True) - except Exception as e: - self.show_notification("天气服务器连接失败", "weather-indicator-error", severe=True) - - # Open Preferences dialog - def show_prefs_dialog(self, widget): -# if ((not hasattr(self, 'prefswindow')) or (not self.prefswindow.get_visible())): -# self.prefswindow = PreferencesDialog() -# self.prefswindow.run() -# self.prefswindow.destroy() - if not hasattr(self, 'prefswindow'): - self.prefswindow=PreferencesDialog("PreferencesDialog") - self.prefswindow.show() - else: - self.prefswindow.show() - - def about(self, widget): - if self.aboutdialog == None: - self.aboutdialog = Gtk.AboutDialog() - self.aboutdialog.set_program_name("优客天气")#Indicator China Weather - self.aboutdialog.set_version(VERSION) - self.aboutdialog.set_title("") - - if os.path.exists(os.path.join(os.path.abspath(os.path.curdir), "icons/COPYING")): - ifile = open(os.path.join(os.path.abspath(os.path.curdir), "icons/COPYING"), "r") - self.aboutdialog.set_license(ifile.read().replace('\x0c', '')) - ifile.close() - - self.aboutdialog.set_copyright("Copyright © 2013-2017 Ubuntu Kylin Team, lixiang@kylinos.cn") - self.aboutdialog.set_comments("从 Ubuntu Kylin 天气服务端获取实时或三天天气预报信息,支持多城市切换和数据自动更新。") - self.aboutdialog.set_website("https://launchpad.net/indicator-china-weather") - self.aboutdialog.set_website_label("优客天气主页") - self.aboutdialog.set_documenters(['Zhang Zhao ', 'yanwang ', 'binghe ']) - self.aboutdialog.set_artists(['Ou Yangyu']) - logo_path = os.path.join(os.path.abspath(os.path.curdir), "indicator-china-weather.png") - self.aboutdialog.set_logo(GdkPixbuf.Pixbuf.new_from_file(logo_path)) - - self.aboutdialog.connect("response", self.about_close) - self.aboutdialog.show() - - def about_close(self, widget, event=None): - self.aboutdialog.destroy() - self.aboutdialog = None - - def show_forecast_weather(self, widget): - #try: - #server_result = self.access_server_pingback() - #if server_result: - if ((not hasattr(self, 'forecast_ui')) or \ - (not self.forecast_ui.window.get_visible())): - #if ((not hasattr(self, 'forecast_ui')) or \ - # (not self.forecast_ui.window.get_visible())): - self.forecast_ui = ExtendedForecast() -# self.forecast_ui.builder.get_object("cityName").set_text(self.place) - self.forecast_ui.show() - #self.forecast_ui.window.show() - elif not self.forecast_ui.window.is_active(): -# self.forecast_ui.builder.get_object("cityName").set_text(self.place) - self.forecast_ui.window.set_visible(True) - #except Exception as e: - # self.show_notification("天气服务器连接失败", "weather-indicator-error", severe=True) - -def forecast_data_ok(status, data): - if status: - iw.forecast_ui.show_forecast_data(data) - else: - iw.forecast_ui.show_error_status() - -def add_city_ok(county, selected_id): - # 将新增城市添加到配置页面的城市列表中 - iw.prefswindow.builder.get_object('citieslist').append([county]) - # 将新增城市id和名字写入对应的dict中,然后写入配置 - iw.places[selected_id] = county - iw.settings.set_value("places", str(iw.places)) - # 将新增城市的id告诉配置界面程序 - iw.prefswindow.pre_cur_id = selected_id - iw.city_id = selected_id - iw.settings.set_value("city_id", str(iw.city_id)) - iw.menu_normal() - iw.update_observe_data() - -class ForecastModel(threading.Thread):#20170627 - def __init__(self, server, id): - threading.Thread.__init__(self)#20170627 - self.server = server - self.city_id = id -# self.forecast6d_data = None - self.forecast3d_data = None -# self.more_day_message = False -# self.next_page = False -# self.cur_date = "0000年00月00日" - - def run(self): - try: - self.forecast3d_data = self.server.get_heweather_forecast_weather(self.city_id) - if self.forecast3d_data not in (None, ''): - GObject.idle_add(forecast_data_ok, True, self.forecast3d_data)#kobe 20170807 - else: - GObject.idle_add(forecast_data_ok, False, None) - except ValueError as e: - GObject.idle_add(forecast_data_ok, False, None) - except APIError as e:#每个新增城市第一次获取天气预报会走这里报错 - GObject.idle_add(forecast_data_ok, False, None) - except httplib2.ServerNotFoundError: - self.server._offline_mode = True - GObject.idle_add(forecast_data_ok, False, None) - except: - GObject.idle_add(forecast_data_ok, False, None) - -# def prepare_forecast3d_data(self): -# #20170627 -## self.forecast3d_data = {'f0': u'2017-05-04 15:53', 'fc0': u'16', 'fc2': u'18', 'weather1': u'\u663c:\u591a\u4e91 \u591c:\u591a\u4e91', 'weather2': u'\u663c:\u591a\u4e91 \u591c:\u591a\u4e91', 'fc1': u'18', 'fa2': u'101', 'fa0': u'101', 'fa1': u'101', 'fg0': u'3-4', 'fg1': u'\u5fae\u98ce', 'fg2': u'\u5fae\u98ce', 'weather3': u'\u663c:\u591a\u4e91 \u591c:\u591a\u4e91', 'fd1': u'27', 'fd0': u'26', 'fd2': u'22', 'c13': u'28.19409', 'fh1': u'\u5fae\u98ce', 'fh0': u'3-4', 'c14': u'112.982279', 'fb2': u'101', 'fb1': u'101', 'fb0': u'101', 'ff2': u'\u5317\u98ce', 'ff1': u'\u5317\u98ce', 'ff0': u'\u897f\u5317\u98ce', 'c3': u'\u957f\u6c99', 'fe2': u'\u5317\u98ce', 'fe0': u'\u897f\u5317\u98ce', 'fe1': u'\u5317\u98ce', 'fh2': u'\u5fae\u98ce'} -## self.forecast3d_data = {'vis2': u'16', 'vis0': u'10', 'hum1': u'84', 'astro_mr2': u'10:49', 'astro_mr0': u'08:47', 'astro_mr1': u'09:50', 'wind_spd1': u'6', 'flu_txt': u'\u98ce\u8f83\u5927\uff0c\u9634\u51b7\u6f6e\u6e7f\uff0c\u8f83\u6613\u53d1\u751f\u611f\u5192\uff0c\u4f53\u8d28\u8f83\u5f31\u7684\u670b\u53cb\u8bf7\u6ce8\u610f\u9002\u5f53\u9632\u62a4\u3002', 'pcpn0': u'3.8', 'pcpn1': u'2.3', 'comf_brf': u'\u8f83\u4e0d\u8212\u9002', 'vis1': u'14', 'pres2': u'1007', 'astro_sr0': u'05:33', 'astro_sr1': u'05:33', 'pres1': u'1008', 'pres0': u'1007', 'tmp_min2': u'23', 'astro_sr2': u'05:34', 'tmp_min0': u'23', 'wind_spd0': u'7', 'date1': u'2017-06-28', 'city': u'\u957f\u6c99', 'date2': u'2017-06-29', 'pop2': u'81', 'prov': '\xe6\x9c\xaa\xe7\x9f\xa5', 'astro_ms2': u'23:41', 'tmp_max0': u'25', 'tmp_max1': u'27', 'tmp_max2': u'30', 'cityid': '101250101', 'pcpn2': u'17.1', 'sport_brf': u'\u8f83\u4e0d\u5b9c', 'txt_n2': u'\u9635\u96e8', 'txt_n1': u'\u4e2d\u96e8', 'txt_n0': u'\u5c0f\u96e8', 'tmp_min1': u'23', 'sport_txt': u'\u6709\u964d\u6c34\uff0c\u63a8\u8350\u60a8\u5728\u5ba4\u5185\u8fdb\u884c\u4f4e\u5f3a\u5ea6\u8fd0\u52a8\uff1b\u82e5\u575a\u6301\u6237\u5916\u8fd0\u52a8\uff0c\u8bf7\u9009\u62e9\u5408\u9002\u7684\u8fd0\u52a8\uff0c\u5e76\u643a\u5e26\u96e8\u5177\u3002', 'uv_txt': u'\u5c5e\u5f31\u7d2b\u5916\u7ebf\u8f90\u5c04\u5929\u6c14\uff0c\u65e0\u9700\u7279\u522b\u9632\u62a4\u3002\u82e5\u957f\u671f\u5728\u6237\u5916\uff0c\u5efa\u8bae\u6d82\u64e6SPF\u57288-12\u4e4b\u95f4\u7684\u9632\u6652\u62a4\u80a4\u54c1\u3002', 'cw_brf': u'\u4e0d\u5b9c', 'drsg_brf': u'\u8212\u9002', 'update_time': u'2017-06-27 18:50', 'flu_brf': u'\u8f83\u6613\u53d1', 'astro_ms1': u'23:02', 'astro_ms0': u'22:19', 'date0': u'2017-06-27', 'uv0': u'9', 'uv1': u'10', 'uv2': u'10', 'wind_deg0': u'166', 'wind_deg1': u'167', 'wind_deg2': u'168', 'wind_dir_sc1': u'\u4e1c\u5357\u98ce \u5fae\u98ce', 'wind_dir_sc0': u'\u4e1c\u5357\u98ce \u5fae\u98ce', 'pop1': u'100', 'pop0': u'95', 'txt_d1': u'\u4e2d\u96e8', 'txt_d0': u'\u9635\u96e8', 'txt_d2': u'\u4e2d\u96e8', 'code_d1': u'306', 'code_d0': u'300', 'comf_txt': u'\u767d\u5929\u5929\u6c14\u591a\u4e91\uff0c\u5e76\u4e14\u7a7a\u6c14\u6e7f\u5ea6\u504f\u5927\uff0c\u5728\u8fd9\u79cd\u5929\u6c14\u6761\u4ef6\u4e0b\uff0c\u60a8\u4f1a\u611f\u5230\u6709\u4e9b\u95f7\u70ed\uff0c\u4e0d\u5f88\u8212\u9002\u3002', 'code_d2': u'306', 'cnty': u'\u4e2d\u56fd', 'astro_ss2': u'19:29', 'wind_spd2': u'7', 'code_n1': u'306', 'astro_ss1': u'19:29', 'astro_ss0': u'19:28', 'hum2': u'89', 'hum0': u'82', 'code_n0': u'305', 'trav_brf': u'\u9002\u5b9c', 'trav_txt': u'\u6e29\u5ea6\u9002\u5b9c\uff0c\u53c8\u6709\u8f83\u5f31\u964d\u6c34\u548c\u5fae\u98ce\u4f5c\u4f34\uff0c\u4f1a\u7ed9\u60a8\u7684\u65c5\u884c\u5e26\u6765\u610f\u60f3\u4e0d\u5230\u7684\u666f\u8c61\uff0c\u9002\u5b9c\u65c5\u6e38\uff0c\u53ef\u4e0d\u8981\u9519\u8fc7\u673a\u4f1a\u5466\uff01', 'uv_brf': u'\u6700\u5f31', 'wind_dir_sc2': u'\u5317\u98ce \u5fae\u98ce', 'cw_txt': u'\u4e0d\u5b9c\u6d17\u8f66\uff0c\u672a\u676524\u5c0f\u65f6\u5185\u6709\u96e8\uff0c\u5982\u679c\u5728\u6b64\u671f\u95f4\u6d17\u8f66\uff0c\u96e8\u6c34\u548c\u8def\u4e0a\u7684\u6ce5\u6c34\u53ef\u80fd\u4f1a\u518d\u6b21\u5f04\u810f\u60a8\u7684\u7231\u8f66\u3002', 'drsg_txt': u'\u5efa\u8bae\u7740\u957f\u8896T\u6064\u3001\u886c\u886b\u52a0\u5355\u88e4\u7b49\u670d\u88c5\u3002\u5e74\u8001\u4f53\u5f31\u8005\u5b9c\u7740\u9488\u7ec7\u957f\u8896\u886c\u886b\u3001\u9a6c\u7532\u548c\u957f\u88e4\u3002', 'code_n2': u'300'} -## self.next_page = True -# try: -# self.forecast3d_data = self.server.get_heweather_forecast_weather(self.city_id) -# if self.forecast3d_data not in (None, ''): -# self.next_page = True -# except ValueError as e: -# self.next_page = False -# return -# except APIError as e: -# self.next_page = False -# return -# except httplib2.ServerNotFoundError: -# self.server._offline_mode = True -# self.next_page = False -# return -# except: -# self.next_page = False -# return - -# def get_forecast3d_data(self): -# return self.forecast3d_data - - -class ExtendedForecast: - def __init__(self): - self.builder = Gtk.Builder() - ui_path = os.path.join(os.path.abspath(os.path.curdir), "ui/Forecast.ui") - self.builder.add_from_file(ui_path) - self.window = self.builder.get_object("extended_forecast") - self.builder.get_object("cityName").set_text(iw.place) - self.builder.get_object('releaselabel').set_visible(False) - self.builder.get_object('contentgrid').set_visible(False) - self.builder.get_object('statuslabel').set_visible(False) - #self.retry_button = self.builder.get_object('retry_button') - #self.retry_button.set_size_request(91, 25) - self.builder.get_object('retry_button').set_visible(False) - - self.builder.get_object('spinner').start() - self.window.set_size_request(540, 200) - add_drag_support(self.window) - self.builder.connect_signals(self) - self.window.connect("destroy", self.on_destroy) - #self.window.setLevel(WINDOW_TOPLEVEL) - #self.setup() - while Gtk.events_pending(): - Gtk.main_iteration() - #self.window.show_all() -# self.window.show() -# self.timeout_id = GObject.timeout_add(100, self.setup, None) - #self.window.run() - #self.window.destroy() - - def start_forecast_thread(self): - try: - forecast_thread = ForecastModel(iw.server, iw.city_id) - forecast_thread.setDaemon(True)#设置线程为守护状态,非守护状态线程退出时程序就退出,不等待守护状态线程 - forecast_thread.start() - except KeyError: - self.show_error_status() - - def show(self): - self.window.show() -# self.timeout_id = GObject.timeout_add(1000, self.setup, None)#20170627 - self.start_forecast_thread() - - def show_error_status(self): - self.builder.get_object('spinner').stop() - self.builder.get_object('doinglabel').set_visible(False) - self.builder.get_object('statuslabel').set_visible(True) - self.builder.get_object('retry_button').set_visible(True) - - def show_forecast_data(self, data): - self.window.set_size_request(540, 600) - self.set_forecast3d_weather(data) - self.builder.get_object('releaselabel').set_visible(True) - self.builder.get_object('contentgrid').set_visible(True) - self.builder.get_object('errorgrid').set_visible(False) - -# def setup(self, data): -# try: -# forecast = ForecastModel(iw.server, iw.city_id) -# except KeyError: -# log.error("generate forecast model failed...") -# return -# #kobe test 0504 -## self.builder.get_object('releaselabel').set_visible(False) -## self.builder.get_object('contentgrid').set_visible(False) -## self.builder.get_object('errorgrid').set_visible(False) - -# forecast.prepare_forecast3d_data() -# if forecast.next_page: -# forecast3d_data = forecast.get_forecast3d_data() -# self.builder.get_object('spinner').stop() -# if forecast3d_data in (None , ''): -# # self.builder.get_object("extended_forecast").set_title("天气预报获取失败!") -# # self.builder.get_object('maingrid').set_visible(False) -# self.builder.get_object('doinglabel').set_visible(False) -# self.builder.get_object('statuslabel').set_visible(True) -# else: -# # self.builder.get_object('maingrid').set_visible(True) -# self.show_3d_components() -# self.set_forecast3d_weather(forecast3d_data) -# self.builder.get_object('releaselabel').set_visible(True) -# self.builder.get_object('contentgrid').set_visible(True) -# self.builder.get_object('errorgrid').set_visible(False) - -# def show_3d_components(self): -# self.window.set_size_request(540, 600) -## self.builder.get_object('secondgrid').set_visible(False) - -# def get_weather_icon(self, img): -# fchh = int(self.forecast_data['fchh']) -# if 6 <= fchh < 18: -# icons_day = ('img1', 'img3', 'img5', 'img7', 'img9', 'img11') -# icons_night = ('img2', 'img4', 'img6', 'img8', 'img10', 'img12') -# else: -# icons_day = ('img2', 'img4', 'img6', 'img8', 'img10', 'img12') -# icons_night = ('img1', 'img3', 'img5', 'img7', 'img9', 'img11') -# if img in icons_day: -# if self.forecast_data[img] == '99': -# return 'icons/weather/d' + self.forecast_data[icons_night[icons_day.index(img)]] + '.gif' -# else: -# return 'icons/weather/d' + self.forecast_data[img] + '.gif' -# elif img in icons_night: -# if self.forecast_data[img] == '99': -# return 'icons/weather/n' + self.forecast_data[icons_day[icons_night.index(img)]] + '.gif' -# else: -# return 'icons/weather/n' + self.forecast_data[img] + '.gif' - - def set_forecast3d_weather(self, data): - '''℃''' - self.forecast_data = data - self.builder.get_object("extended_forecast").set_title(self.forecast_data['city'] + " - 三天天气预报") - self.builder.get_object("cityName").set_text(self.forecast_data['city']) - release_time = self.forecast_data['update_time'] - show_time = release_time - self.builder.get_object("releaselabel").set_text("发布时间:" + show_time) - if self.forecast_data['code_d0'] in (False, None, '', "未知"): - self.builder.get_object("code_d0").set_from_file('icons/heweather/999.png') - else: - self.builder.get_object("code_d0").set_from_file('icons/heweather/' + str(int(self.forecast_data['code_d0'])) + '.png') - if self.forecast_data['code_n0'] in (False, None, '' "未知"): - self.builder.get_object("code_n0").set_from_file('icons/heweather/999.png') - else: - self.builder.get_object("code_n0").set_from_file('icons/heweather/' + str(int(self.forecast_data['code_n0'])) + '.png') - - if self.forecast_data['code_d1'] in (False, None, '' "未知"): - self.builder.get_object("code_d1").set_from_file('icons/heweather/999.png') - else: - self.builder.get_object("code_d1").set_from_file('icons/heweather/' + str(int(self.forecast_data['code_d1'])) + '.png') - if self.forecast_data['code_n1'] in (False, None, '' "未知"): - self.builder.get_object("code_n1").set_from_file('icons/heweather/999.png') - else: - self.builder.get_object("code_n1").set_from_file('icons/heweather/' + str(int(self.forecast_data['code_n1'])) + '.png') - - if self.forecast_data['code_d2'] in (False, None, '' "未知"): - self.builder.get_object("code_d2").set_from_file('icons/heweather/999.png') - else: - self.builder.get_object("code_d2").set_from_file('icons/heweather/' + str(int(self.forecast_data['code_d2'])) + '.png') - if self.forecast_data['code_n2'] in (False, None, '' "未知"): - self.builder.get_object("code_n2").set_from_file('icons/heweather/999.png') - else: - self.builder.get_object("code_n2").set_from_file('icons/heweather/' + str(int(self.forecast_data['code_n2'])) + '.png') - - self.builder.get_object("date0").set_text(self.forecast_data['date0']) - self.builder.get_object("weather0").set_text("白天:" + self.forecast_data['txt_d0'] + " 夜间:" + self.forecast_data['txt_n0']) - self.builder.get_object("tmp0").set_text(self.forecast_data['tmp_min0'] + '℃ - ' + self.forecast_data['tmp_max0'] + '℃') - self.builder.get_object("wind_dir_sc0").set_text(self.forecast_data['wind_dir_sc0']) - self.builder.get_object("wind_deg0").set_text("风向(360度):" + self.forecast_data['wind_deg0']) - self.builder.get_object("wind_spd0").set_text("风速(kmph):" + self.forecast_data['wind_spd0']) - self.builder.get_object("hum0").set_text("相对湿度(%):" + self.forecast_data['hum0']) - self.builder.get_object("pcpn0").set_text("降水量(mm):" + self.forecast_data['pcpn0']) - self.builder.get_object("pop0").set_text("降水概率:" + self.forecast_data['pop0']) - self.builder.get_object("pres0").set_text("气压:" + self.forecast_data['pres0']) - self.builder.get_object("uv0").set_text("紫外线指数:" + self.forecast_data['uv0']) - self.builder.get_object("vis0").set_text("能见度(km):" + self.forecast_data['vis0']) - self.builder.get_object("astro_mr_ms0").set_text("月升月落时间:" + self.forecast_data['astro_mr0'] + ' ' + self.forecast_data['astro_ms0']) - self.builder.get_object("astro_sr_ss0").set_text("日出日落时间:" + self.forecast_data['astro_sr0'] + ' ' + self.forecast_data['astro_ss0']) - - self.builder.get_object("date1").set_text(self.forecast_data['date1']) - self.builder.get_object("weather1").set_text("白天:" + self.forecast_data['txt_d1'] + " 夜间:" + self.forecast_data['txt_n1']) - self.builder.get_object("tmp1").set_text(self.forecast_data['tmp_min1'] + '℃ - ' + self.forecast_data['tmp_max1'] + '℃') - self.builder.get_object("wind_dir_sc1").set_text(self.forecast_data['wind_dir_sc1']) - self.builder.get_object("wind_deg1").set_text("风向(360度):" + self.forecast_data['wind_deg1']) - self.builder.get_object("wind_spd1").set_text("风速(kmph):" + self.forecast_data['wind_spd1']) - self.builder.get_object("hum1").set_text("相对湿度(%):" + self.forecast_data['hum1']) - self.builder.get_object("pcpn1").set_text("降水量(mm):" + self.forecast_data['pcpn1']) - self.builder.get_object("pop1").set_text("降水概率:" + self.forecast_data['pop1']) - self.builder.get_object("pres1").set_text("气压:" + self.forecast_data['pres1']) - self.builder.get_object("uv1").set_text("紫外线指数:" + self.forecast_data['uv1']) - self.builder.get_object("vis1").set_text("能见度(km):" + self.forecast_data['vis1']) - self.builder.get_object("astro_mr_ms1").set_text("月升月落时间:" + self.forecast_data['astro_mr1'] + ' ' + self.forecast_data['astro_ms1']) - self.builder.get_object("astro_sr_ss1").set_text("日出日落时间:" + self.forecast_data['astro_sr1'] + ' ' + self.forecast_data['astro_ss1']) - - self.builder.get_object("date2").set_text(self.forecast_data['date2']) - self.builder.get_object("weather2").set_text("白天:" + self.forecast_data['txt_d2'] + " 夜间:" + self.forecast_data['txt_n2']) - self.builder.get_object("tmp2").set_text(self.forecast_data['tmp_min2'] + '℃ - ' + self.forecast_data['tmp_max2'] + '℃') - self.builder.get_object("wind_dir_sc2").set_text(self.forecast_data['wind_dir_sc2']) - self.builder.get_object("wind_deg2").set_text("风向(360度):" + self.forecast_data['wind_deg2']) - self.builder.get_object("wind_spd2").set_text("风速(kmph):" + self.forecast_data['wind_spd2']) - self.builder.get_object("hum2").set_text("相对湿度(%):" + self.forecast_data['hum2']) - self.builder.get_object("pcpn2").set_text("降水量(mm):" + self.forecast_data['pcpn2']) - self.builder.get_object("pop2").set_text("降水概率:" + self.forecast_data['pop2']) - self.builder.get_object("pres2").set_text("气压:" + self.forecast_data['pres2']) - self.builder.get_object("uv2").set_text("紫外线指数:" + self.forecast_data['uv2']) - self.builder.get_object("vis2").set_text("能见度(km):" + self.forecast_data['vis2']) - self.builder.get_object("astro_mr_ms2").set_text("月升月落时间:" + self.forecast_data['astro_mr2'] + ' ' + self.forecast_data['astro_ms2']) - self.builder.get_object("astro_sr_ss2").set_text("日出日落时间:" + self.forecast_data['astro_sr2'] + ' ' + self.forecast_data['astro_ss2']) - - self.builder.get_object("comf_brf").set_text("舒适度指数:" + self.forecast_data['comf_brf']) - self.builder.get_object("comf_brf").set_tooltip_text(self.forecast_data['comf_txt']) - self.builder.get_object("cw_brf").set_text("洗车指数:" + self.forecast_data['cw_brf']) - self.builder.get_object("cw_brf").set_tooltip_text(self.forecast_data['cw_txt']) - self.builder.get_object("drsg_brf").set_text("穿衣指数:" + self.forecast_data['drsg_brf']) - self.builder.get_object("drsg_brf").set_tooltip_text(self.forecast_data['drsg_txt']) - self.builder.get_object("flu_brf").set_text("感冒指数:" + self.forecast_data['flu_brf']) - self.builder.get_object("flu_brf").set_tooltip_text(self.forecast_data['flu_txt']) - self.builder.get_object("sport_brf").set_text("运动指数:" + self.forecast_data['sport_brf']) - self.builder.get_object("sport_brf").set_tooltip_text(self.forecast_data['sport_txt']) - self.builder.get_object("trav_brf").set_text("旅游指数:" + self.forecast_data['trav_brf']) - self.builder.get_object("trav_brf").set_tooltip_text(self.forecast_data['trav_txt']) - self.builder.get_object("uv_brf").set_text("紫外线指数:" + self.forecast_data['uv_brf']) - self.builder.get_object("uv_brf").set_tooltip_text(self.forecast_data['uv_txt']) - - - def close(self, widget, data=None): - self.window.destroy() - - def on_destroy(self, widget): - self.window.destroy() - - def on_minbtn_clicked(self, widget): - self.window.iconify() - - def on_closebtn_clicked(self, widget): - self.window.destroy() - - def on_retry_button_clicked(self, widget): - self.builder.get_object('statuslabel').set_visible(False) - self.builder.get_object('retry_button').set_visible(False) - self.builder.get_object('spinner').start() - self.builder.get_object('doinglabel').set_visible(True) - self.start_forecast_thread() - -class PreferencesDialog(GObject.GObject): - def __init__( self, ui_file ): - GObject.GObject.__init__(self) -# self.builder=Gtk.Builder() -# self.builder.add_from_file(ui_file) - self.builder = get_builder(ui_file) - self.dialog = self.builder.get_object("preferences_dialog") - self.dialog.set_size_request(320, 300) - add_drag_support(self.dialog) - self.builder.get_object('rate').set_value(int(iw.rate)) - self.show_label = self.builder.get_object('checkbutton') #display temperature - self.show_label.set_active(iw.temp) - self.spinbutton_rate = self.builder.get_object('spinbutton_rate') - self.spinbutton_rate.set_value(int(iw.rate)) - self.spinbutton_rate.set_wrap(False) - self.builder.get_object('ok_btn').set_sensitive(True) - for (d,x) in iw.places.items(): - self.builder.get_object('citieslist').append([x]) - # 将主界面的当前城市id保存下来 - self.pre_cur_id = iw.city_id -# self.builder.connect_signals(self) - self.builder.connect_signals({ - "on_closebutton_clicked": self.handle_close, - "on_minbutton_clicked": self.handle_min, - "on_addbtn_clicked": self.handle_add_location, - "on_deletebtn_clicked": self.handle_delete_location, - "on_ok_btn_clicked": self.handle_ok, - "on_cancel_btn_clicked": self.handle_close, - }) - -# def run( self ): -# self.dialog.show_all() - - def show(self, *args): - self.dialog.show() - - def close(self, *args): - self.dialog.hide() - return True - - def handle_ok(self, widget, data=None): -# GObject.idle_add(add_city_ok, county, selected_id) - new_show_label = self.show_label.get_active() - if (iw.temp != new_show_label): - iw.temp = new_show_label - iw.settings.set_value("show_temperature", new_show_label) - if iw.temp: - if iw.now_temperature in ("未知", "N/A", "", None): - iw.update_label(" ") - else: - iw.update_label(iw.now_temperature + '℃') - else: - iw.update_label(" ") - - rate_value = self.spinbutton_rate.get_text() - if int(rate_value) != iw.rate: - iw.settings.set_value("refresh_rate", int(rate_value)) - iw.rate = int(rate_value) - self.close() - - def handle_close(self, *args): - self.close() - - def handle_min(self, *args): - self.dialog.iconify() - - def handle_add_location(self, widget): -# if ((not hasattr(self, 'select_dialog')) or (not self.select_dialog.get_visible())): -# self.select_dialog = SelectDialog() -# self.select_dialog.run() -# self.select_dialog.destroy() - if not hasattr(self, 'select_dialog'): - self.select_dialog = SelectDialog("SelectDialog") - self.select_dialog.show() - else: - self.select_dialog.show() - - def handle_delete_location(self, widget): - selection = self.builder.get_object('location_list').get_selection() - model, iter = selection.get_selected() - if iter != None: - if len(iw.places) == 1: - dialog = Gtk.MessageDialog(None, Gtk.DialogFlags.DESTROY_WITH_PARENT,Gtk.MessageType.ERROR, Gtk.ButtonsType.CLOSE,"%s" % ("友情提示")) - dialog.format_secondary_text("请您至少保留一个城市,谢谢!") - dialog.run() - dialog.destroy() - else: - # 在配置界面上删去该城市 - model.remove(iter) - # 更改配置文件和更新menu - remain_cities = list() - item = self.builder.get_object('citieslist').get_iter_first() - while (item != None): - remain_cities.append(self.builder.get_object('citieslist').get_value(item, 0)) - item = self.builder.get_object('citieslist').iter_next(item) - - # conf_cities = iw.settings.get_value("places") - # 取剩下列表和配置列表的差集,即是被删除的那个城市名 - conf_cities = list() - for (d,x) in iw.places.items(): - conf_cities.append(x) - del_list = list(set(conf_cities).difference(set(remain_cities))) - del_city = del_list[0] - del_id = '' - new_places_dict = {} - for (d,x) in iw.places.items(): - if x == del_city: - del_id = d - else: - new_places_dict[d] = x - if del_id == self.pre_cur_id:# need to change self.pre_cur_id - iw.places = new_places_dict - self.pre_cur_id = new_places_dict.keys()[0] - iw.city_id = self.pre_cur_id - iw.settings.set_value("places", str(new_places_dict)) - iw.settings.set_value("city_id", str(iw.city_id)) - iw.menu_normal() - iw.update_observe_data() - else: - iw.places = new_places_dict - iw.settings.set_value("places", str(new_places_dict)) - iw.menu_normal() - iw.update_observe_data() - -#class PreferencesDialog(Gtk.Dialog): -# """ Class for preferences dialog """ -# __gtype_name__ = "PreferencesDialog" - -# # Creating a new preferences dialog -# def __new__(cls): -# builder = get_builder('PreferencesDialog') -# new_object = builder.get_object("preferences_dialog") -# new_object.finish_initializing(builder) -# return new_object - -# # Fill in preferences dialog with currect data -# def finish_initializing(self, builder): -# self.builder = builder -# self.builder.get_object('rate').set_value(int(iw.rate)) -# self.show_label = self.builder.get_object('show_label') #display temperature -# self.show_label.set_active(iw.temp) -# self.spinbutton_rate = self.builder.get_object('spinbutton_rate') -# self.spinbutton_rate.set_value(int(iw.rate)) -# self.builder.get_object('ok_button').set_sensitive(True) -# for (d,x) in iw.places.items(): -# self.builder.get_object('citieslist').append([x]) -# # 将主界面的当前城市id保存下来 -# self.pre_cur_id = iw.city_id -# self.builder.connect_signals(self) - -# # 'Remove' clicked - remove location from list -# def on_remove_location(self, widget): -# selection = self.builder.get_object('location_list').get_selection() -# model, iter = selection.get_selected() -# if iter != None: -# if len(iw.places) == 1: -# dialog = Gtk.MessageDialog(None, Gtk.DialogFlags.DESTROY_WITH_PARENT,Gtk.MessageType.ERROR, Gtk.ButtonsType.CLOSE,"%s" % ("友情提示")) -# dialog.format_secondary_text("请您至少保留一个城市,谢谢!") -# dialog.run() -# dialog.destroy() -# else: -# # 在配置界面上删去该城市 -# model.remove(iter) -# # 更改配置文件和更新menu -# remain_cities = list() -# item = self.builder.get_object('citieslist').get_iter_first() -# while (item != None): -# remain_cities.append(self.builder.get_object('citieslist').get_value(item, 0)) -# item = self.builder.get_object('citieslist').iter_next(item) - -# # conf_cities = iw.settings.get_value("places") -# # 取剩下列表和配置列表的差集,即是被删除的那个城市名 -# conf_cities = list() -# for (d,x) in iw.places.items(): -# conf_cities.append(x) -# del_list = list(set(conf_cities).difference(set(remain_cities))) -# del_city = del_list[0] -# del_id = '' -# new_places_dict = {} -# for (d,x) in iw.places.items(): -# if x == del_city: -# del_id = d -# else: -# new_places_dict[d] = x -# if del_id == self.pre_cur_id:# need to change self.pre_cur_id -# iw.places = new_places_dict -# self.pre_cur_id = new_places_dict.keys()[0] -# iw.city_id = self.pre_cur_id -# iw.settings.set_value("places", str(new_places_dict)) -# iw.settings.set_value("city_id", str(iw.city_id)) -# iw.menu_normal() -# iw.update_observe_data() -# else: -# iw.places = new_places_dict -# iw.settings.set_value("places", str(new_places_dict)) -# iw.menu_normal() -# iw.update_observe_data() - - -# # 'Add' clicked - create a new Assistant -# def on_add_location(self, widget): -# if ((not hasattr(self, 'select_dialog')) or (not self.select_dialog.get_visible())): -# self.select_dialog = SelectDialog() -# self.select_dialog.run() -# self.select_dialog.destroy() -# #self.select_dialog.show() - -# # 'OK' clicked - save settings -# def ok(self, widget, data=None): -# new_show_label = self.show_label.get_active() -# if (iw.temp != new_show_label): -# iw.temp = new_show_label -# iw.settings.set_value("show_temperature", new_show_label) -# if iw.temp: -# if iw.now_temperature in ("未知", "N/A", "", None): -# iw.update_label(" ") -# else: -# iw.update_label(iw.now_temperature + '℃') -# # iw.update_label(iw.weather_data['temp'] + '℃') -# else: -# iw.update_label(" ") - -# rate_value = self.spinbutton_rate.get_text() -# if int(rate_value) != iw.rate: -# iw.settings.set_value("refresh_rate", int(rate_value)) -# iw.rate = int(rate_value) -# self.destroy() - -# # 'Cancel' click - forget all changes -# def cancel(self, widget, data=None): -# self.destroy() - - -class SelectDialog(GObject.GObject): - def __init__(self, ui_file): - GObject.GObject.__init__(self) -# self.builder=Gtk.Builder() -# self.builder.add_from_file(ui_file) - self.builder = get_builder(ui_file) - self.dialog = self.builder.get_object("select_dialog") - self.dialog.set_size_request(400, 200) - self.dialog.set_modal(True) - self.dialog.set_keep_above(True) -# self.dialog.set_position(gtk.WIN_POS_CENTER) - add_drag_support(self.dialog) - self.builder.connect_signals(self) - self.select_dialog = self.builder.get_object("select_dialog") - self.province_comb = self.builder.get_object("province_combobox") - self.city_comb = self.builder.get_object("city_combobox") - self.county_comb = self.builder.get_object("county_combobox") - self.db = Database() - self.init_combobox_items() -# self.builder.connect_signals({ -# "on_closebutton_clicked": self.handle_close, -# "on_province_combobox_changed": self.handle_province_combobox_changed, -# "on_city_combobox_changed": self.handle_city_combobox_changed, -# "on_ok_btn_clicked": self.handle_ok, -# "on_cancel_btn_clicked": self.handle_close, -# }) - - def init_combobox_items(self): - self.province_store = Gtk.ListStore(str) - self.city_store = Gtk.ListStore(str) - self.county_store = Gtk.ListStore(str) - - self.province_comb.set_sensitive(True) - self.province_comb.set_model(self.province_store) - for word in province_list: - self.province_store.append([word]) - self.province_comb.set_active(0) - # self.province_comb.popup() - cell = Gtk.CellRendererText() - self.province_comb.pack_start(cell, True) - self.province_comb.add_attribute(cell, 'text', 0) - - self.city_comb.set_sensitive(True) - self.city_comb.set_model(self.city_store) - self.city_comb.set_active(0) - self.city_comb.popup() - cell = Gtk.CellRendererText() - self.city_comb.pack_start(cell, True) - self.city_comb.add_attribute(cell, 'text', 0) - - self.county_comb.set_sensitive(True) - self.county_comb.set_model(self.county_store) - self.county_comb.set_active(0) - self.county_comb.popup() - cell = Gtk.CellRendererText() - self.county_comb.pack_start(cell, True) - self.county_comb.add_attribute(cell, 'text', 0) - - def on_closebutton_clicked(self, widget): - self.close() - - def show(self, *args): - self.dialog.show() - - def close(self, *args): - self.dialog.hide() - return True - - def on_province_combobox_changed(self, widget): - tree_iter = self.province_comb.get_active_iter() - if tree_iter != None: - model = self.province_comb.get_model() - province = model[tree_iter][0] - db_list = self.db.search_city_table(province) - self.city_store.clear() - for line in db_list: - self.city_store.append([line[0]]) - self.city_comb.set_active(0) - - def on_city_combobox_changed(self, widget): - p_tree_iter = self.province_comb.get_active_iter() - c_tree_iter = self.city_comb.get_active_iter() - if p_tree_iter != None and c_tree_iter != None: - model_p = self.province_comb.get_model() - province = model_p[p_tree_iter][0] - model_c = self.city_comb.get_model() - city = model_c[c_tree_iter][0] - db_list = self.db.search_counties(province, city) - self.county_store.clear() - for line in db_list: - self.county_store.append([line[0]]) - self.county_comb.set_active(0) - - # 'OK' clicked - save settings - def on_ok_btn_clicked(self, widget, data=None): - province_tree_iter = self.province_comb.get_active_iter() - city_tree_iter = self.city_comb.get_active_iter() - county_tree_iter = self.county_comb.get_active_iter() - if province_tree_iter != None and city_tree_iter != None and county_tree_iter != None: - model_p = self.province_comb.get_model() - province = model_p[province_tree_iter][0] - model_city = self.city_comb.get_model() - city = model_city[city_tree_iter][0] - model_county = self.county_comb.get_model() - county = model_county[county_tree_iter][0] - if province is not None and city is not None and county is not None: - selected_id = self.db.search_id(province, city, county) - selected_id = selected_id[0][0] - if selected_id in iw.places.keys(): - dialog = Gtk.MessageDialog(None, Gtk.DialogFlags.DESTROY_WITH_PARENT,Gtk.MessageType.ERROR, Gtk.ButtonsType.CLOSE,"%s" % ("城市重复")) - dialog.format_secondary_text("您选择的城市已经存在,请重新选择或退出!") - dialog.run() - dialog.destroy() - else: - GObject.idle_add(add_city_ok, county, selected_id) -# self.dialog.destroy() -# self.dialog.hide() - self.close() - else: - dialog = Gtk.MessageDialog(None, Gtk.DialogFlags.DESTROY_WITH_PARENT,Gtk.MessageType.ERROR, Gtk.ButtonsType.CLOSE,"%s" % ("选择城市")) - dialog.format_secondary_text("请根据省市县三级选择您需要的城市!") - dialog.run() - dialog.destroy() - - # 'Cancel' click - forget all changes - def on_cancel_btn_clicked(self, widget, data=None): -# self.dialog.destroy() -# self.dialog.hide() - self.close() - -#class SelectDialog(Gtk.Dialog): -# """ Class for select dialog """ -# __gtype_name__ = "SelectDialog" - -# # Creating a new select dialog -# def __new__(cls): -# builder = get_builder('SelectDialog') -# new_object = builder.get_object("select_dialog") -# new_object.finish_initializing(builder) -# return new_object - -# def finish_initializing(self, builder): -# self.builder = builder -# self.builder.connect_signals(self) -# self.select_dialog = self.builder.get_object("select_dialog") -# self.province_comb = self.builder.get_object("province_combobox") -# self.city_comb = self.builder.get_object("city_combobox") -# self.county_comb = self.builder.get_object("county_combobox") -# self.db = Database() -# self.init_combobox_items() - -# def init_combobox_items(self): -# self.province_store = Gtk.ListStore(str) -# self.city_store = Gtk.ListStore(str) -# self.county_store = Gtk.ListStore(str) - -# self.province_comb.set_sensitive(True) -# self.province_comb.set_model(self.province_store) -# for word in province_list: -# self.province_store.append([word]) -# self.province_comb.set_active(0) -# # self.province_comb.popup() -# cell = Gtk.CellRendererText() -# self.province_comb.pack_start(cell, True) -# self.province_comb.add_attribute(cell, 'text', 0) - -# self.city_comb.set_sensitive(True) -# self.city_comb.set_model(self.city_store) -# self.city_comb.set_active(0) -# self.city_comb.popup() -# cell = Gtk.CellRendererText() -# self.city_comb.pack_start(cell, True) -# self.city_comb.add_attribute(cell, 'text', 0) - -# self.county_comb.set_sensitive(True) -# self.county_comb.set_model(self.county_store) -# self.county_comb.set_active(0) -# self.county_comb.popup() -# cell = Gtk.CellRendererText() -# self.county_comb.pack_start(cell, True) -# self.county_comb.add_attribute(cell, 'text', 0) - - -# def on_province_combobox_changed(self, widget): -# tree_iter = self.province_comb.get_active_iter() -# if tree_iter != None: -# model = self.province_comb.get_model() -# province = model[tree_iter][0] -# db_list = self.db.search_city_table(province) -# self.city_store.clear() -# for line in db_list: -# self.city_store.append([line[0]]) -# self.city_comb.set_active(0) - -# def on_city_combobox_changed(self, widget): -# p_tree_iter = self.province_comb.get_active_iter() -# c_tree_iter = self.city_comb.get_active_iter() -# if p_tree_iter != None and c_tree_iter != None: -# model_p = self.province_comb.get_model() -# province = model_p[p_tree_iter][0] -# model_c = self.city_comb.get_model() -# city = model_c[c_tree_iter][0] -# db_list = self.db.search_counties(province, city) -# self.county_store.clear() -# for line in db_list: -# self.county_store.append([line[0]]) -# self.county_comb.set_active(0) - -# # 'OK' clicked - save settings -# def ok(self, widget, data=None): -# province_tree_iter = self.province_comb.get_active_iter() -# city_tree_iter = self.city_comb.get_active_iter() -# county_tree_iter = self.county_comb.get_active_iter() -# if province_tree_iter != None and city_tree_iter != None and county_tree_iter != None: -# model_p = self.province_comb.get_model() -# province = model_p[province_tree_iter][0] -# model_city = self.city_comb.get_model() -# city = model_city[city_tree_iter][0] -# model_county = self.county_comb.get_model() -# county = model_county[county_tree_iter][0] -# if province is not None and city is not None and county is not None: -# selected_id = self.db.search_id(province, city, county) -# selected_id = selected_id[0][0] -# if selected_id in iw.places.keys(): -# dialog = Gtk.MessageDialog(None, Gtk.DialogFlags.DESTROY_WITH_PARENT,Gtk.MessageType.ERROR, Gtk.ButtonsType.CLOSE,"%s" % ("城市重复")) -# dialog.format_secondary_text("您选择的城市已经存在,请重新选择或退出!") -# dialog.run() -# dialog.destroy() -# else: -# # 将新增城市添加到配置页面的城市列表中 -# iw.prefswindow.builder.get_object('citieslist').append([county]) -# # 将新增城市id和名字写入对应的dict中,然后写入配置 -# iw.places[selected_id] = county -# iw.settings.set_value("places", str(iw.places)) -# # 将新增城市的id告诉配置界面程序 -# iw.prefswindow.pre_cur_id = selected_id -# iw.city_id = selected_id -# iw.settings.set_value("city_id", str(iw.city_id)) -# iw.menu_normal() -# iw.update_observe_data() -# self.destroy() -# else: -# dialog = Gtk.MessageDialog(None, Gtk.DialogFlags.DESTROY_WITH_PARENT,Gtk.MessageType.ERROR, Gtk.ButtonsType.CLOSE,"%s" % ("选择城市")) -# dialog.format_secondary_text("请根据省市县三级选择您需要的城市!") -# dialog.run() -# dialog.destroy() - -# # 'Cancel' click - forget all changes -# def cancel(self, widget, data=None): -# self.destroy() - - -# ensure that single instance of applet is running for each user -class SingleInstance(object): - - #Initialize, specifying a path to store pids - def __init__(self,pidPath): - - self.pidPath = pidPath - if os.path.exists(pidPath): - log.debug("SingleInstance: pid file %s exists" % pidPath) - # Make sure it is not a "stale" pidFile - pid = open(pidPath, 'r').read().strip() - # Check list of running pids, if not running it is stale so overwrite - - pidRunning = commands.getoutput('ls -1 /proc | grep ^%s$' % pid) - log.debug("SingleInstance: pid running %s" % pidRunning) - self.lasterror = True if pidRunning else False - else: - self.lasterror = False - - if not self.lasterror: - log.debug("SingleInstance: writing new pid %s" % str(os.getpid())) - # Create a temp file, copy it to pidPath and remove temporary file - (fp, temp_path) = tempfile.mkstemp() - try: - os.fdopen(fp, "w+b").write(str(os.getpid())) - shutil.copy(temp_path, pidPath) - os.unlink(temp_path) - except Exception as e: - log.error("SingleInstance: exception while renaming '%s' to '%s':\n %s" % (temp_path, pidPath, str(e))) - - def is_already_running(self): - return self.lasterror - - def __del__(self): - if not self.lasterror: - log.debug("SingleInstance: deleting %s" % self.pidPath) - os.unlink(self.pidPath) - -def main(): - #Gtk.timeout_add(500, testkobe) - Gtk.main() - #exit(0) - #Gtk.mainloop() - return 0 - -def handler(signum, frame): - Notify.uninit() - Gtk.main_quit() - sys.exit() - -class Watcher: - def __init__(self): - self.child = os.fork() - if self.child == 0: - return - else: - self.watch() - def watch(self): - try: - os.wait() - except KeyboardInterrupt: - self.kill() - sys.exit() - def kill(self): - try: - os.kill(self.child, signal.SIGKILL) - except OSError: pass - -def load_css_sheet_sytle(): - screen = Gdk.Screen().get_default() - css_provider = Gtk.CssProvider() - css_provider.load_from_path("./icons/weather.css") - context = Gtk.StyleContext() - context.add_provider_for_screen(screen, css_provider, Gtk.STYLE_PROVIDER_PRIORITY_USER) - -if __name__ == "__main__": - #signal.signal(signal.SIGINT, handler) - #from signal import signal, SIGTERM - #signal.signal(signal.SIGTERM, lambda signum, stack_frame: exit(1)) - #signal.signal(signal.SIGTERM, handler) - #signal.signal(signal.SIGINT, lambda : Gtk.main_quit) - #if sys.version > '3': - # print('python3') - #else: - # print('python2') - global log - cachedir = os.environ.get('XDG_CACHE_HOME','').strip() - if not cachedir: - cachedir = os.path.expanduser("~/.cache") - log_filename = os.path.join(cachedir, "indicator-china-weather.log") - log = logging.getLogger('IndicatorChinaWeather') - log.propagate = False - log.setLevel(logging.DEBUG) - log_handler = logging.handlers.RotatingFileHandler(log_filename, maxBytes=1024*1024, backupCount=5) - log_formatter = logging.Formatter("[%(asctime)s - %(levelname)s - %(message)s") - log_handler.setFormatter(log_formatter) - log.addHandler(log_handler) - - log.info("--Started UbuntuKylin Weather App from %s --" % os.path.abspath(os.path.curdir)) - - # Single instance stuff for weather indicator - myapp = SingleInstance("/tmp/indicator-china-weather-%d.pid" % os.getuid()) - # check is another instance of same program running - if myapp.is_already_running(): - log.info("Another instance of this program is already running") - sys.exit("Another instance of this program is already running") - #Watcher() - load_css_sheet_sytle() - GObject.threads_init() - Gdk.threads_init() - Gdk.threads_enter() - Gtk.init(None) - iw = IndicatorWeather() - #iw.setDaemon(True) - signal.signal(signal.SIGTERM, handler) - signal.signal(signal.SIGINT, handler) - main() - #Watcher() - Gdk.threads_leave() diff -Nru indicator-china-weather-2.2.8/man/indicator-china-weather.1 indicator-china-weather-3.0.2~201904291430/man/indicator-china-weather.1 --- indicator-china-weather-2.2.8/man/indicator-china-weather.1 2018-03-19 06:04:16.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/man/indicator-china-weather.1 2019-04-24 03:09:16.000000000 +0000 @@ -1,8 +1,8 @@ .\" Hey, EMACS: -*- nroff -*- -.TH INDICATOR-CHINA_WEATHER 1 "23 Mar 2017" +.TH INDICATOR-CHINA_WEATHER 1 "04 Sep 2018" .\" Please adjust this date whenever revising the manpage. .SH NAME -indicator-china-weather \- Weather Applet +indicator-china-weather \- Kylin Weather .SH SYNOPSIS .B indicator-china-weather .SH DESCRIPTION diff -Nru indicator-china-weather-2.2.8/README.md indicator-china-weather-3.0.2~201904291430/README.md --- indicator-china-weather-2.2.8/README.md 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/README.md 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,40 @@ +# indicator-china-weather + +The weather data are from the heweather API s6 version. + + +### RGBA + +http://www.yuangongju.com/color + + +### v1.0 test url + +http://service.ubuntukylin.com:8001/weather/api/1.0/observe/101250101/ + +http://service.ubuntukylin.com:8001/weather/api/1.0/heweather_forecast/101250101/ + +http://service.ubuntukylin.com:8001/weather/pingnetwork/ + +http://service.ubuntukylin.com:8001/weather/pinginformation/ + + +### v3.0 test url + +http://service.ubuntukylin.com:8001/weather/api/2.0/heweather_observe_s6/101250101 + +http://service.ubuntukylin.com:8001/weather/api/2.0/heweather_forecast_s6/101250101 + + +### Internationalization + +lupdate indicator-china-weather.pro + +linguist translation/indicator-china-weather_zh_CN.ts + +lrelease indicator-china-weather.pro + + +### Lintian + +lintian -i -EvIL +pedantic --verbose ../indicator-china-weather_3.0.0_amd64.changes Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/about_normal.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/about_normal.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/add_hover_btn.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/add_hover_btn.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/add_normal_btn.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/add_normal_btn.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/add.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/add.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/add_pressed_btn.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/add_pressed_btn.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/air_index.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/air_index.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/aqi.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/aqi.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/background/weather-clear-night.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/background/weather-clear-night.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/background/weather-clear.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/background/weather-clear.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/background/weather-few-clouds.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/background/weather-few-clouds.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/background/weather-fog.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/background/weather-fog.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/background/weather-overcast.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/background/weather-overcast.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/background/weather-rain.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/background/weather-rain.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/background/weather-sandstorm.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/background/weather-sandstorm.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/background/weather-snow.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/background/weather-snow.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/cash_wash_index.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/cash_wash_index.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/checkbox.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/checkbox.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/city_background.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/city_background.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/close_hover_btn.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/close_hover_btn.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/close_normal_btn.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/close_normal_btn.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/close_pressed_btn.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/close_pressed_btn.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/clothe_index.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/clothe_index.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/comf_index.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/comf_index.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/current_sd.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/current_sd.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/current_wind.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/current_wind.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/delete_hover_pressed_btn.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/delete_hover_pressed_btn.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/delete_hover_press.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/delete_hover_press.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/delete_normal_btn.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/delete_normal_btn.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/delete_normal.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/delete_normal.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/flu_index.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/flu_index.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/indicator-china-weather_min.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/indicator-china-weather_min.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/indicator-china-weather.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/indicator-china-weather.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/life_index_d.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/life_index_d.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/life_index_n.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/life_index_n.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/link.gif and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/link.gif differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/location_bg_hover.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/location_bg_hover.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/location.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/location.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/min_bg.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/min_bg.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/min_hover_btn.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/min_hover_btn.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/min_normal_btn.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/min_normal_btn.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/min_pressed_btn.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/min_pressed_btn.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/network_warn.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/network_warn.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/ok_disabled_btn.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/ok_disabled_btn.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/ok_hover_btn.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/ok_hover_btn.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/ok_normal_btn.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/ok_normal_btn.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/ok_pressed_btn.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/ok_pressed_btn.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/prefs.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/prefs.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/pressure.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/pressure.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/quit_normal.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/quit_normal.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/sd.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/sd.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/search.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/search.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/set_city.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/set_city.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/sport_index.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/sport_index.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/subtract_hover_btn.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/subtract_hover_btn.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/subtract_normal_btn.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/subtract_normal_btn.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/subtract_pressed_btn.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/subtract_pressed_btn.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/temp.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/temp.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/trav_index.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/trav_index.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/ultraviolet_rays.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/ultraviolet_rays.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/unlink.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/unlink.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/update_warn.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/update_warn.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/visibility.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/visibility.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/100.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/100.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/101.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/101.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/102.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/102.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/103.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/103.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/104.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/104.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/200.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/200.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/201.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/201.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/202.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/202.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/203.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/203.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/204.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/204.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/205.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/205.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/206.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/206.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/207.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/207.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/208.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/208.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/209.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/209.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/210.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/210.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/211.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/211.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/212.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/212.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/213.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/213.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/300.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/300.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/301.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/301.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/302.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/302.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/303.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/303.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/304.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/304.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/305.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/305.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/306.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/306.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/307.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/307.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/308.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/308.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/309.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/309.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/310.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/310.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/311.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/311.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/312.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/312.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/313.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/313.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/400.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/400.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/401.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/401.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/402.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/402.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/403.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/403.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/404.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/404.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/405.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/405.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/406.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/406.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/407.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/407.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/500.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/500.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/501.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/501.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/502.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/502.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/503.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/503.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/504.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/504.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/507.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/507.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/508.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/508.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/900.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/900.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/901.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/901.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/darkgrey/999.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/darkgrey/999.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/100.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/100.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/101.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/101.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/102.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/102.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/103.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/103.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/104.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/104.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/200.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/200.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/201.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/201.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/202.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/202.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/203.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/203.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/204.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/204.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/205.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/205.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/206.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/206.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/207.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/207.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/208.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/208.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/209.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/209.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/210.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/210.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/211.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/211.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/212.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/212.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/213.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/213.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/300.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/300.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/301.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/301.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/302.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/302.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/303.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/303.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/304.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/304.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/305.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/305.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/306.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/306.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/307.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/307.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/308.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/308.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/309.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/309.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/310.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/310.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/311.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/311.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/312.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/312.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/313.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/313.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/400.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/400.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/401.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/401.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/402.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/402.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/403.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/403.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/404.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/404.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/405.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/405.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/406.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/406.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/407.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/407.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/500.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/500.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/501.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/501.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/502.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/502.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/503.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/503.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/504.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/504.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/507.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/507.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/508.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/508.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/900.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/900.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/901.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/901.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/lightgrey/999.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/lightgrey/999.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/100.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/100.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/101.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/101.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/102.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/102.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/103.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/103.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/104.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/104.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/200.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/200.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/201.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/201.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/202.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/202.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/203.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/203.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/204.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/204.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/205.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/205.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/206.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/206.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/207.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/207.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/208.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/208.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/209.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/209.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/210.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/210.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/211.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/211.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/212.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/212.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/213.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/213.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/300.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/300.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/301.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/301.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/302.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/302.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/303.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/303.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/304.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/304.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/305.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/305.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/306.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/306.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/307.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/307.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/308.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/308.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/309.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/309.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/310.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/310.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/311.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/311.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/312.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/312.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/313.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/313.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/400.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/400.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/401.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/401.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/402.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/402.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/403.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/403.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/404.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/404.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/405.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/405.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/406.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/406.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/407.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/407.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/500.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/500.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/501.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/501.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/502.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/502.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/503.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/503.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/504.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/504.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/507.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/507.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/508.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/508.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/900.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/900.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/901.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/901.png differ Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/res/weather_icons/white/999.png and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/res/weather_icons/white/999.png differ diff -Nru indicator-china-weather-2.2.8/res.qrc indicator-china-weather-3.0.2~201904291430/res.qrc --- indicator-china-weather-2.2.8/res.qrc 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/res.qrc 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,225 @@ + + + res/close_hover_btn.png + res/close_normal_btn.png + res/close_pressed_btn.png + res/indicator-china-weather_min.png + res/min_hover_btn.png + res/min_pressed_btn.png + res/min_normal_btn.png + res/background/weather-clear-night.png + res/background/weather-clear.png + res/background/weather-few-clouds.png + res/background/weather-fog.png + res/background/weather-overcast.png + res/background/weather-rain.png + res/background/weather-sandstorm.png + res/background/weather-snow.png + res/indicator-china-weather.png + res/about_normal.png + res/quit_normal.png + res/location.png + res/set_city.png + res/current_sd.png + res/current_wind.png + res/aqi.png + res/temp.png + res/weather_icons/lightgrey/100.png + res/life_index_d.png + res/life_index_n.png + res/clothe_index.png + res/search.png + res/delete_hover_pressed_btn.png + res/delete_normal_btn.png + res/add.png + res/add_hover_btn.png + res/add_normal_btn.png + res/add_pressed_btn.png + res/subtract_hover_btn.png + res/subtract_normal_btn.png + res/subtract_pressed_btn.png + res/cash_wash_index.png + res/checkbox.png + res/city_background.png + res/link.gif + res/location_bg_hover.png + res/min_bg.png + res/network_warn.png + res/ok_disabled_btn.png + res/ok_hover_btn.png + res/ok_normal_btn.png + res/ok_pressed_btn.png + res/pressure.png + res/sd.png + res/ultraviolet_rays.png + res/unlink.png + res/update_warn.png + res/visibility.png + res/delete_hover_press.png + res/delete_normal.png + res/weather_icons/darkgrey/100.png + res/weather_icons/darkgrey/101.png + res/weather_icons/darkgrey/102.png + res/weather_icons/darkgrey/103.png + res/weather_icons/darkgrey/104.png + res/weather_icons/darkgrey/200.png + res/weather_icons/darkgrey/201.png + res/weather_icons/darkgrey/202.png + res/weather_icons/darkgrey/203.png + res/weather_icons/darkgrey/204.png + res/weather_icons/darkgrey/205.png + res/weather_icons/darkgrey/206.png + res/weather_icons/darkgrey/207.png + res/weather_icons/darkgrey/208.png + res/weather_icons/darkgrey/209.png + res/weather_icons/darkgrey/210.png + res/weather_icons/darkgrey/211.png + res/weather_icons/darkgrey/212.png + res/weather_icons/darkgrey/213.png + res/weather_icons/darkgrey/300.png + res/weather_icons/darkgrey/301.png + res/weather_icons/darkgrey/302.png + res/weather_icons/darkgrey/303.png + res/weather_icons/darkgrey/304.png + res/weather_icons/darkgrey/305.png + res/weather_icons/darkgrey/306.png + res/weather_icons/darkgrey/307.png + res/weather_icons/darkgrey/308.png + res/weather_icons/darkgrey/309.png + res/weather_icons/darkgrey/310.png + res/weather_icons/darkgrey/311.png + res/weather_icons/darkgrey/312.png + res/weather_icons/darkgrey/313.png + res/weather_icons/darkgrey/400.png + res/weather_icons/darkgrey/401.png + res/weather_icons/darkgrey/402.png + res/weather_icons/darkgrey/403.png + res/weather_icons/darkgrey/404.png + res/weather_icons/darkgrey/405.png + res/weather_icons/darkgrey/406.png + res/weather_icons/darkgrey/407.png + res/weather_icons/darkgrey/500.png + res/weather_icons/darkgrey/501.png + res/weather_icons/darkgrey/502.png + res/weather_icons/darkgrey/503.png + res/weather_icons/darkgrey/504.png + res/weather_icons/darkgrey/507.png + res/weather_icons/darkgrey/508.png + res/weather_icons/darkgrey/900.png + res/weather_icons/darkgrey/901.png + res/weather_icons/darkgrey/999.png + res/weather_icons/lightgrey/101.png + res/weather_icons/lightgrey/102.png + res/weather_icons/lightgrey/103.png + res/weather_icons/lightgrey/104.png + res/weather_icons/lightgrey/200.png + res/weather_icons/lightgrey/201.png + res/weather_icons/lightgrey/202.png + res/weather_icons/lightgrey/203.png + res/weather_icons/lightgrey/204.png + res/weather_icons/lightgrey/205.png + res/weather_icons/lightgrey/206.png + res/weather_icons/lightgrey/207.png + res/weather_icons/lightgrey/208.png + res/weather_icons/lightgrey/209.png + res/weather_icons/lightgrey/210.png + res/weather_icons/lightgrey/211.png + res/weather_icons/lightgrey/212.png + res/weather_icons/lightgrey/213.png + res/weather_icons/lightgrey/300.png + res/weather_icons/lightgrey/301.png + res/weather_icons/lightgrey/302.png + res/weather_icons/lightgrey/303.png + res/weather_icons/lightgrey/304.png + res/weather_icons/lightgrey/305.png + res/weather_icons/lightgrey/306.png + res/weather_icons/lightgrey/307.png + res/weather_icons/lightgrey/308.png + res/weather_icons/lightgrey/309.png + res/weather_icons/lightgrey/310.png + res/weather_icons/lightgrey/311.png + res/weather_icons/lightgrey/312.png + res/weather_icons/lightgrey/313.png + res/weather_icons/lightgrey/400.png + res/weather_icons/lightgrey/401.png + res/weather_icons/lightgrey/402.png + res/weather_icons/lightgrey/403.png + res/weather_icons/lightgrey/404.png + res/weather_icons/lightgrey/405.png + res/weather_icons/lightgrey/406.png + res/weather_icons/lightgrey/407.png + res/weather_icons/lightgrey/500.png + res/weather_icons/lightgrey/501.png + res/weather_icons/lightgrey/502.png + res/weather_icons/lightgrey/503.png + res/weather_icons/lightgrey/504.png + res/weather_icons/lightgrey/507.png + res/weather_icons/lightgrey/508.png + res/weather_icons/lightgrey/900.png + res/weather_icons/lightgrey/901.png + res/weather_icons/lightgrey/999.png + res/weather_icons/white/100.png + res/weather_icons/white/101.png + res/weather_icons/white/102.png + res/weather_icons/white/103.png + res/weather_icons/white/104.png + res/weather_icons/white/200.png + res/weather_icons/white/201.png + res/weather_icons/white/202.png + res/weather_icons/white/203.png + res/weather_icons/white/204.png + res/weather_icons/white/205.png + res/weather_icons/white/206.png + res/weather_icons/white/207.png + res/weather_icons/white/208.png + res/weather_icons/white/209.png + res/weather_icons/white/210.png + res/weather_icons/white/211.png + res/weather_icons/white/212.png + res/weather_icons/white/213.png + res/weather_icons/white/300.png + res/weather_icons/white/301.png + res/weather_icons/white/302.png + res/weather_icons/white/303.png + res/weather_icons/white/304.png + res/weather_icons/white/305.png + res/weather_icons/white/306.png + res/weather_icons/white/307.png + res/weather_icons/white/308.png + res/weather_icons/white/309.png + res/weather_icons/white/310.png + res/weather_icons/white/311.png + res/weather_icons/white/312.png + res/weather_icons/white/313.png + res/weather_icons/white/400.png + res/weather_icons/white/401.png + res/weather_icons/white/402.png + res/weather_icons/white/403.png + res/weather_icons/white/404.png + res/weather_icons/white/405.png + res/weather_icons/white/406.png + res/weather_icons/white/407.png + res/weather_icons/white/500.png + res/weather_icons/white/501.png + res/weather_icons/white/502.png + res/weather_icons/white/503.png + res/weather_icons/white/504.png + res/weather_icons/white/507.png + res/weather_icons/white/508.png + res/weather_icons/white/900.png + res/weather_icons/white/901.png + res/weather_icons/white/999.png + res/prefs.png + res/air_index.png + res/comf_index.png + res/flu_index.png + res/sport_index.png + res/trav_index.png + + + data/china-city-list.csv + + + translation/indicator-china-weather_zh_CN.qm + + diff -Nru indicator-china-weather-2.2.8/src/aboutdialog.cpp indicator-china-weather-3.0.2~201904291430/src/aboutdialog.cpp --- indicator-china-weather-2.2.8/src/aboutdialog.cpp 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/aboutdialog.cpp 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,197 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "aboutdialog.h" + +#include +#include +#include +#include +#include +#include + +AboutDialog::AboutDialog(QWidget *parent) + : QDialog(parent) + , mousePressed(false) + , m_pixmap(QPixmap(":/res/indicator-china-weather.png")) + , m_websiteLinkString("%2") +{ + this->setStyleSheet("QDialog{border:1px solid #000000;border-radius:2px;background:rgba(255, 255, 255, 0.7);}QDialog:hover{background: rgba(255, 255, 255, 1.0);}"); + this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint); + this->setWindowTitle(tr("Kylin Weather - About")); + this->setWindowIcon(QIcon(":/res/indicator-china-weather.png")); + this->setFixedWidth(456); + + //边框阴影效果 +// QGraphicsDropShadowEffect *shadow_effect = new QGraphicsDropShadowEffect(this); +// shadow_effect->setBlurRadius(5); +// shadow_effect->setColor(QColor(0, 0, 0, 127)); +// shadow_effect->setOffset(2, 4); +// this->setGraphicsEffect(shadow_effect); + + QWidget *topWidget = new QWidget; + topWidget->setStyleSheet("QWidget{border:none; background-color:#1374e8;}"); + topWidget->setContentsMargins(1,1,1,0); + QHBoxLayout *toplayout = new QHBoxLayout(topWidget); + toplayout->setContentsMargins(5, 0, 0, 0); + toplayout->setSpacing(0); + QLabel *label = new QLabel(); + label->setStyleSheet("QLabel{background-color:transparent;font-size:16px;color:#000000;}"); + label->setStyleSheet("QLabel{background:transparent;border:none;}"); + label->setText(tr("Kylin Weather - About")); + + QPushButton *closeBtn = new QPushButton(); + closeBtn->setFocusPolicy(Qt::NoFocus); + closeBtn->setFixedSize(32,32); + closeBtn->setStyleSheet("QPushButton{background-image:url(':/res/close_normal_btn.png');border:0px;}QPushButton:hover{background:url(':/res/close_hover_btn.png');}QPushButton:pressed{background:url(':/res/close_pressed_btn.png');}"); + connect(closeBtn, &QPushButton::clicked, this, [=] { + this->close(); + }); + toplayout->addWidget(label, 0, Qt::AlignVCenter | Qt::AlignLeft); + toplayout->addStretch(); + toplayout->addWidget(closeBtn, 0, Qt::AlignTop | Qt::AlignRight); + + m_iconLabel = new QLabel(); + m_iconLabel->setContentsMargins(0, 0, 0, 0); + m_iconLabel->setPixmap(m_pixmap); + m_iconLabel->setFixedSize(m_pixmap.size()); + + m_nameLabel = new QLabel(); + m_nameLabel->setStyleSheet("QLabel{border:none;background-color:transparent;color:#808080;font-size:16px;}"); + m_nameLabel->setText(qApp->applicationName()); + + m_versionLabel = new QLabel(); + m_versionLabel->setStyleSheet("QLabel{border:none;background-color:transparent;color:#00609a;font-size:12px;}"); + m_versionLabel->setText(qApp->applicationVersion()); + + m_appWebsiteLabel = new QLabel(); + m_appWebsiteLabel->setStyleSheet("QLabel{border:none;background-color:transparent;font-size:12px;}");//color:#808080; + m_appWebsiteLabel->setContextMenuPolicy(Qt::NoContextMenu); + m_appWebsiteLabel->setOpenExternalLinks(false); + m_appWebsiteLabel->setText(QString(m_websiteLinkString).arg("https://github.com/ukui/indicator-china-weather").arg("https://github.com/ukui/indicator-china-weather")); + + m_companyLabel = new QLabel(); + m_companyLabel->setStyleSheet("QLabel{border:none;background-color:transparent;color:#808080;font-size:12px;}"); + m_companyLabel->setContextMenuPolicy(Qt::NoContextMenu); + m_companyLabel->setOpenExternalLinks(false); + m_companyLabel->setText(QString(m_websiteLinkString).arg("https://www.ubuntukylin.com").arg("www.ubuntukylin.com")); + + m_descriptionLabel = new QLabel(); + m_descriptionLabel->setStyleSheet("QLabel{border:none;background-color:transparent;color:#808080;font-size:12px;}"); + m_descriptionLabel->setAlignment(Qt::AlignHCenter); + m_descriptionLabel->setWordWrap(true); + m_descriptionLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); + m_descriptionLabel->setText(tr("Real-time and three-day weather forecast information is obtained from Ubuntu Kylin weather server, which supports multi-city switching and automatic data updating.") + "\n"); + + m_copyrightLabel = new QLabel(); + m_copyrightLabel->setStyleSheet("QLabel{border:none;background-color:transparent;color:#00609a;font-size:12px;}"); + m_copyrightLabel->setText("Copyright © 2013-2019 Ubuntu Kylin Team, lixiang@kylinos.cn"); + + QVBoxLayout *mainLayout = new QVBoxLayout(this); + mainLayout->setContentsMargins(1, 1, 1, 20); + mainLayout->setSpacing(10); + mainLayout->addWidget(topWidget, 0, Qt::AlignTop); + mainLayout->addWidget(m_iconLabel, 0, Qt::AlignHCenter); + mainLayout->addWidget(m_nameLabel, 0, Qt::AlignHCenter); + mainLayout->addWidget(m_versionLabel, 0, Qt::AlignHCenter); + mainLayout->addWidget(m_appWebsiteLabel, 0, Qt::AlignHCenter); + mainLayout->addWidget(m_companyLabel, 0, Qt::AlignHCenter); + mainLayout->addWidget(m_descriptionLabel, 0, Qt::AlignHCenter); + mainLayout->addWidget(m_copyrightLabel, 0, Qt::AlignHCenter); + + connect(m_appWebsiteLabel, &QLabel::linkActivated, this, &AboutDialog::onLinkActivated); + connect(m_companyLabel, &QLabel::linkActivated, this, &AboutDialog::onLinkActivated); +} + +AboutDialog::~AboutDialog() +{ + +} + +void AboutDialog::onLinkActivated(const QString &link) +{ + QDesktopServices::openUrl(QUrl(link)); +} + +void AboutDialog::showEvent(QShowEvent *event) +{ + QDialog::showEvent(event); + + this->adjustSize(); +} + +void AboutDialog::keyPressEvent(QKeyEvent *event) +{ + if (event->key() == Qt::Key_Escape) { + this->close(); + event->accept(); + } + + QDialog::keyPressEvent(event); +} + +QRect AboutDialog::getParentGeometry() const +{ + if (this->parentWidget()) { + return this->parentWidget()->window()->geometry(); + } else { + QPoint pos = QCursor::pos(); + + for (QScreen *screen : qApp->screens()) { + if (screen->geometry().contains(pos)) { + return screen->geometry(); + } + } + } + + return qApp->primaryScreen()->geometry(); +} + +void AboutDialog::moveToCenter() +{ + QRect qr = geometry(); + qr.moveCenter(this->getParentGeometry().center()); + move(qr.topLeft()); +} + +void AboutDialog::mousePressEvent(QMouseEvent *event) +{ + if (event->button() == Qt::LeftButton) { + this->dragPosition = event->globalPos() - frameGeometry().topLeft(); + this->mousePressed = true; + } + + QDialog::mousePressEvent(event); +} + +void AboutDialog::mouseReleaseEvent(QMouseEvent *event) +{ + this->mousePressed = false; + + QDialog::mouseReleaseEvent(event); +} + +void AboutDialog::mouseMoveEvent(QMouseEvent *event) +{ + if (this->mousePressed) { + move(event->globalPos() - this->dragPosition); + } + + QDialog::mouseMoveEvent(event); +} diff -Nru indicator-china-weather-2.2.8/src/aboutdialog.h indicator-china-weather-3.0.2~201904291430/src/aboutdialog.h --- indicator-china-weather-2.2.8/src/aboutdialog.h 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/aboutdialog.h 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef ABOUTDIALOG_H +#define ABOUTDIALOG_H + +#include +#include +#include +#include +#include + +class AboutDialog : public QDialog +{ + Q_OBJECT + +public: + AboutDialog(QWidget *parent = 0); + ~AboutDialog(); + + QRect getParentGeometry() const; + void moveToCenter(); + +public slots: + void onLinkActivated(const QString &link); + +protected: + void showEvent(QShowEvent *event) Q_DECL_OVERRIDE; + void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE; + void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + +private: + QPoint dragPosition; + bool mousePressed; + + QPixmap m_pixmap; + QString m_websiteLinkString; + + QLabel *m_iconLabel = nullptr; + QLabel *m_nameLabel = nullptr; + QLabel *m_versionLabel = nullptr; + QLabel *m_descriptionLabel = nullptr; + QLabel *m_appWebsiteLabel = nullptr; + QLabel *m_companyLabel = nullptr; + QLabel *m_copyrightLabel = nullptr; +}; + +#endif // ABOUTDIALOG_H diff -Nru indicator-china-weather-2.2.8/src/activebutton.cpp indicator-china-weather-3.0.2~201904291430/src/activebutton.cpp --- indicator-china-weather-2.2.8/src/activebutton.cpp 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/activebutton.cpp 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "activebutton.h" + +#include + +ActiveButton::ActiveButton(const QString &text, QWidget *parent) : + QFrame(parent) +{ + this->setFixedHeight(28); + + m_layout = new QVBoxLayout(this); + m_layout->setContentsMargins(0, 0, 0, 0); + m_layout->setSpacing(5); + + m_btn = new QPushButton(this); + m_btn->setFixedHeight(24); + m_btn->setFocusPolicy(Qt::NoFocus); + m_btn->setStyleSheet("QPushButton{border:none;text-align:center;font-size:14px;color:#ffffff;background:transparent;}"); + m_btn->setText(text); + QFont font = m_btn->font(); + const QFontMetrics fm(font); + m_btn->setFixedWidth(fm.width(m_btn->text()) + 10); + + m_label = new QLabel(this); + m_label->setFixedSize(m_btn->width(), 2); + m_label->setStyleSheet("QLabel{border:none;background-color:#ffffff;}"); + m_label->setVisible(false); + + m_layout->addWidget(m_btn, 0, Qt::AlignCenter); + m_layout->addStretch(); + m_layout->addWidget(m_label, 0, Qt::AlignBottom); + +// adjustSize(); + + connect(m_btn, &QPushButton::clicked, this, &ActiveButton::btnClicked); +} + +void ActiveButton::setActive(bool active) +{ + this->m_isActive = active; + if (this->m_isActive) { + m_label->setVisible(true); + } + else { + m_label->setVisible(false); + } +} diff -Nru indicator-china-weather-2.2.8/src/activebutton.h indicator-china-weather-3.0.2~201904291430/src/activebutton.h --- indicator-china-weather-2.2.8/src/activebutton.h 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/activebutton.h 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef ACTIVEBUTTON_H +#define ACTIVEBUTTON_H + +#include +#include +#include +#include + +class ActiveButton : public QFrame +{ + Q_OBJECT + +public: + explicit ActiveButton(const QString &text, QWidget *parent = 0); + + void setActive(bool active); + +signals: + void btnClicked(); + +private: + QPushButton *m_btn = nullptr; + QLabel *m_label = nullptr; + QVBoxLayout *m_layout = nullptr; + bool m_isActive = false; +}; + +#endif // ACTIVEBUTTON_H diff -Nru indicator-china-weather-2.2.8/src/airwidget.cpp indicator-china-weather-3.0.2~201904291430/src/airwidget.cpp --- indicator-china-weather-2.2.8/src/airwidget.cpp 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/airwidget.cpp 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,163 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "airwidget.h" + +#include +#include + +AirWidget::AirWidget(QWidget *parent) + : QFrame(parent) + , m_layout(new QVBoxLayout(this)) + , m_opacityEffect(new QGraphicsOpacityEffect(this)) + , m_animation(new QPropertyAnimation(this, "pos")) + , m_timer(new QTimer(this)) +{ + this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint); + this->setContentsMargins(10, 2, 10, 2); +// this->setStyleSheet("QFrame{border:none;background-color:rgba(0,0,0,0.9);color:rgb(255,255,255);}"); + +// this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + //this->setStyleSheet("QFrame{border:1px solid #e0e0e0;border-radius:2px;background-color:rgba(255, 255, 255, 0.8);}"); + this->setFixedSize(160, 150); + m_layout->setSpacing(1); + m_layout->setMargin(0); + + m_timer->setSingleShot(true); + m_timer->setInterval(1000*5); + connect(m_timer, &QTimer::timeout, this, &AirWidget::animationHide, Qt::QueuedConnection); + + m_opacityEffect->setOpacity(1.0); + this->setGraphicsEffect(m_opacityEffect); + m_animation->setEasingCurve(QEasingCurve::InOutCubic); + m_animation->setDuration(500); + + m_aqiLabel = new QLabel; + m_qltyLabel = new QLabel; + m_mainLabel = new QLabel; + m_pm25Label = new QLabel; + m_pm10Label = new QLabel; + m_no2Label = new QLabel; + m_so2Label = new QLabel; + m_coLabel = new QLabel; + m_o3Label = new QLabel; + +// m_aqiLabel->setStyleSheet("QLabel{border-radius:3px;background-color:rgba(0,0,0,0.2);color:#808080;font-size:12px;}"); +// m_qltyLabel->setStyleSheet("QLabel{border-radius:3px;background-color:rgba(0,0,0,0.2);color:#808080;font-size:12px;}"); +// m_mainLabel->setStyleSheet("QLabel{border-radius:3px;background-color:rgba(0,0,0,0.2);color:#808080;font-size:12px;}"); +// m_pm25Label->setStyleSheet("QLabel{border-radius:3px;background-color:rgba(0,0,0,0.2);color:#808080;font-size:12px;}"); +// m_pm10Label->setStyleSheet("QLabel{border-radius:3px;background-color:rgba(0,0,0,0.2);color:#808080;font-size:12px;}"); +// m_no2Label->setStyleSheet("QLabel{border-radius:3px;background-color:rgba(0,0,0,0.2);color:#808080;font-size:12px;}"); +// m_so2Label->setStyleSheet("QLabel{border-radius:3px;background-color:rgba(0,0,0,0.2);color:#808080;font-size:12px;}"); +// m_coLabel->setStyleSheet("QLabel{border-radius:3px;background-color:rgba(0,0,0,0.2);color:#808080;font-size:12px;}"); +// m_o3Label->setStyleSheet("QLabel{border-radius:3px;background-color:rgba(0,0,0,0.2);color:#808080;font-size:12px;}"); + + m_aqiLabel->setStyleSheet("QLabel{border:none;background-color:transparent;color:#ffffff;font-size:12px;}"); + m_qltyLabel->setStyleSheet("QLabel{border:none;background-color:transparent;color:#ffffff;font-size:12px;}"); + m_mainLabel->setStyleSheet("QLabel{border:none;background-color:transparent;color:#ffffff;font-size:12px;}"); + m_pm25Label->setStyleSheet("QLabel{border:none;background-color:transparent;color:#ffffff;font-size:12px;}"); + m_pm10Label->setStyleSheet("QLabel{border:none;background-color:transparent;color:#ffffff;font-size:12px;}"); + m_no2Label->setStyleSheet("QLabel{border:none;background-color:transparent;color:#ffffff;font-size:12px;}"); + m_so2Label->setStyleSheet("QLabel{border:none;background-color:transparent;color:#ffffff;font-size:12px;}"); + m_coLabel->setStyleSheet("QLabel{border:none;background-color:transparent;color:#ffffff;font-size:12px;}"); + m_o3Label->setStyleSheet("QLabel{border:none;background-color:transparent;color:#ffffff;font-size:12px;}"); + + m_layout->addWidget(m_aqiLabel, 0, Qt::AlignTop | Qt::AlignLeft); + m_layout->addWidget(m_qltyLabel, 0, Qt::AlignLeft); + m_layout->addWidget(m_mainLabel, 0, Qt::AlignLeft); + m_layout->addWidget(m_pm25Label, 0, Qt::AlignLeft); + m_layout->addWidget(m_pm10Label, 0, Qt::AlignLeft); + m_layout->addWidget(m_no2Label, 0, Qt::AlignLeft); + m_layout->addWidget(m_so2Label, 0, Qt::AlignLeft); + m_layout->addWidget(m_coLabel, 0, Qt::AlignLeft); + m_layout->addWidget(m_o3Label, 0, Qt::AlignLeft); +} + +AirWidget::~AirWidget() +{ + m_animation->deleteLater(); + + if (m_timer) { + disconnect(m_timer, SIGNAL(timeout()), this, SLOT(animationHide())); + if(m_timer->isActive()) { + m_timer->stop(); + } + delete m_timer; + m_timer = nullptr; + } + + QLayoutItem *child; + while ((child = m_layout->takeAt(0)) != 0) { + if (child->widget()) + child->widget()->deleteLater(); + delete child; + } +} + +void AirWidget::animationShow(const QString &styleSheet) +{ + if (m_animation->state() == QPropertyAnimation::Running) + return; + + this->setStyleSheet(styleSheet); + + QWidget::show(); + + m_animation->setStartValue(QPoint(335, 0));//QPoint(0, 0) + m_animation->setEndValue(QPoint(100, 0)); + m_animation->start(); + + m_timer->start(); +} + +void AirWidget::animationHide() +{ + if (m_animation->state() == QPropertyAnimation::Running) + return; + + m_timer->stop(); + + m_animation->setStartValue(QPoint(100, 0)); + m_animation->setEndValue(QPoint(335, 0));//QPoint(0, 0) + m_animation->start(); + QTimer::singleShot(m_animation->duration(), [=] { + setAttribute(Qt::WA_TransparentForMouseEvents, false); + QWidget::hide(); + }); +} + +void AirWidget::resetData(const Air &data) +{ + m_aqiLabel->setText(QString(tr("aqi:%1")).arg(data.aqi));//空气质量指数 + m_qltyLabel->setText(QString(tr("qlty:%1")).arg(data.qlty));//空气质量 + m_mainLabel->setText(QString(tr("main:%1")).arg(data.main));//主要污染物 + m_pm25Label->setText(QString(tr("pm25:%1")).arg(data.pm25)); + m_pm10Label->setText(QString(tr("pm10:%1")).arg(data.pm10)); + m_no2Label->setText(QString(tr("no2:%1")).arg(data.no2));//二氧化氮 + m_so2Label->setText(QString(tr("so2:%1")).arg(data.so2));//二氧化硫 + m_coLabel->setText(QString(tr("co:%1")).arg(data.co));//一氧化碳 + m_o3Label->setText(QString(tr("o3:%1")).arg(data.o3));//臭氧 +} + +void AirWidget::mousePressEvent(QMouseEvent *event) +{ + QFrame::mousePressEvent(event); + + this->animationHide(); +} diff -Nru indicator-china-weather-2.2.8/src/airwidget.h indicator-china-weather-3.0.2~201904291430/src/airwidget.h --- indicator-china-weather-2.2.8/src/airwidget.h 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/airwidget.h 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef AIRWIDGET_H +#define AIRWIDGET_H + +#include +#include +#include +#include +#include + +#include "data.h" + +class AirWidget : public QFrame +{ + Q_OBJECT + +public: + explicit AirWidget(QWidget *parent = 0); + ~AirWidget(); + + void resetData(const Air &data); + +public slots: + void animationShow(const QString &styleSheet); + void animationHide(); + +protected: + void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + +private: + QGraphicsOpacityEffect *m_opacityEffect = nullptr; + QPropertyAnimation *m_animation = nullptr; + + QLabel *m_aqiLabel = nullptr; + QLabel *m_qltyLabel = nullptr; + QLabel *m_mainLabel = nullptr; + QLabel *m_pm25Label = nullptr; + QLabel *m_pm10Label = nullptr; + QLabel *m_no2Label = nullptr; + QLabel *m_so2Label = nullptr; + QLabel *m_coLabel = nullptr; + QLabel *m_o3Label = nullptr; + + QTimer *m_timer = nullptr; + QVBoxLayout *m_layout = nullptr; +}; + +#endif // AIRWIDGET_H diff -Nru indicator-china-weather-2.2.8/src/base.py indicator-china-weather-3.0.2~201904291430/src/base.py --- indicator-china-weather-2.2.8/src/base.py 2018-03-19 06:04:16.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/base.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,425 +0,0 @@ -#! /usr/bin/python -# -*- coding: utf-8 -*- - -### BEGIN LICENSE -# Copyright (C) 2013 ~ 2017 National University of Defense Technology(NUDT) & Kylin Ltd -# -# Author: Kobe Lee -# Maintainer: Ubuntu Kylin -# -# This program is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 3, as published -# by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranties of -# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR -# PURPOSE. See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -### END LICENSE - -import os -import httplib -# import gtk -from gi.repository import Gtk, Gdk -import platform -import time - -HOME = os.path.expandvars('$HOME') - -VERSION = '2.2.6' - -province_list = [ - '北京', - '上海', - '天津', - '重庆', - '黑龙江', - '吉林', - '辽宁', - '内蒙古', - '河北', - '山西', - '陕西', - '山东', - '新疆', - '西藏', - '青海', - '甘肃', - '宁夏', - '河南', - '江苏', - '湖北', - '浙江', - '安徽', - '福建', - '江西', - '湖南', - '贵州', - '四川', - '广东', - '云南', - '广西', - '海南', - '香港', - '澳门', - '台湾' -] - -weather_encode_table = { - '00':'晴', - '01':'多云', - '02':'阴', - '03':'阵雨', - '04':'雷阵雨', - '05':'雷阵雨伴有冰雹', - '06':'雨夹雪', - '07':'小雨', - '08':'中雨', - '09':'大雨', - '10':'暴雨', - '11':'大暴雨', - '12':'特大暴雨', - '13':'阵雪', - '14':'小雪', - '15':'中雪', - '16':'大雪', - '17':'暴雪', - '18':'雾', - '19':'冻雨', - '20':'沙尘暴', - '21':'小到中雨', - '22':'中到大雨', - '23':'大到暴雨', - '24':'暴雨到大暴雨', - '25':'大暴雨到特大暴雨', - '26':'小到中雪', - '27':'中到大雪', - '28':'大到暴雪', - '29':'浮尘', - '30':'扬沙', - '31':'强沙尘暴', - '53':'霾', - '99':'无' - } -wind_direction_encode_table = { - '0':'无持续风向', - '1':'东北风', - '2':'东风', - '3':'东南风', - '4':'南风', - '5':'西南风', - '6':'西风', - '7':'西北风', - '8':'北风', - '9':'旋转风' - } - -wind_power_encode_table = { - '0':'微风', - '1':'3-4 级', - '2':'4-5 级', - '3':'5-6 级', - '4':'6-7 级', - '5':'7-8 级', - '6':'8-9 级', - '7':'9-10 级', - '8':'10-11 级', - '9':'11-12 级' -} - -weather_icons={ - 'd0.gif':'weather-clear', - 'd1.gif':'weather-few-clouds', - 'd2.gif':'weather-overcast', - 'd3.gif':'weather-showers-scattered', - 'd4.gif':'weather-storm', - 'd5.gif':'weather-storm', - 'd6.gif':'weather-snow', - 'd7.gif':'weather-showers-scattered', - 'd8.gif':'weather-showers-scattered', - 'd9.gif':'weather-showers', - 'd10.gif':'weather-showers', - 'd11.gif':'weather-showers', - 'd12.gif':'weather-severe-alert', - 'd13.gif':'weather-snow', - 'd14.gif':'weather-snow', - 'd15.gif':'weather-snow', - 'd16.gif':'weather-snow', - 'd17.gif':'weather-snow', - 'd18.gif':'weather-fog', - 'd19.gif':'weather-snow', - 'd20.gif':'weather-fog', - 'd21.gif':'weather-showers-scattered', - 'd22.gif':'weather-showers-scattered', - 'd23.gif':'weather-showers', - 'd24.gif':'weather-showers', - 'd25.gif':'weather-showers', - 'd26.gif':'weather-snow', - 'd27.gif':'weather-snow', - 'd28.gif':'weather-snow', - 'd29.gif':'weather-fog', - 'd30.gif':'weather-fog', - 'd31.gif':'weather-fog', - 'd53.gif':'weather-fog', - 'n0.gif':'weather-clear-night', - 'n1.gif':'weather-few-clouds-night', - 'n2.gif':'weather-overcast', - 'n3.gif':'weather-showers-scattered', - 'n4.gif':'weather-storm', - 'n5.gif':'weather-storm', - 'n6.gif':'weather-snow', - 'n7.gif':'weather-showers-scattered', - 'n8.gif':'weather-showers-scattered', - 'n9.gif':'weather-showers', - 'n10.gif':'weather-showers', - 'n11.gif':'weather-showers', - 'n12.gif':'weather-severe-alert', - 'n13.gif':'weather-snow', - 'n14.gif':'weather-snow', - 'n15.gif':'weather-snow', - 'n16.gif':'weather-snow', - 'n17.gif':'weather-snow', - 'n18.gif':'weather-fog', - 'n19.gif':'weather-snow', - 'n20.gif':'weather-fog', - 'n21.gif':'weather-showers-scattered', - 'n22.gif':'weather-showers-scattered', - 'n23.gif':'weather-showers', - 'n24.gif':'weather-showers', - 'n25.gif':'weather-showers', - 'n26.gif':'weather-snow', - 'n27.gif':'weather-snow', - 'n28.gif':'weather-snow', - 'n29.gif':'weather-fog', - 'n30.gif':'weather-fog', - 'n31.gif':'weather-fog', - 'n53.gif':'weather-fog' - } - -# class ObserveStat(object): -# def __init__(self,id,city,ptime,time,WD,WS,SD,weather,img1,img2,temp,temp1,temp2): -# self.id = id -# self.city = city -# self.ptime = ptime -# self.time = time -# self.WD = WD -# self.WS = WS -# self.SD = SD -# self.weather = weather -# self.img1 = img1 -# self.img2 = img2 -# self.temp = temp -# self.temp1 = temp1 -# self.temp2 = temp2 - -def get_parent_path(folderpath, level=1): - parent_path = os.path.realpath(folderpath) - while(level > 0): - parent_path = os.path.dirname(parent_path) - level -= 1 - return parent_path - -def get_http_time(): - try: - conn = httplib.HTTPConnection("www.beijing-time.org") - conn.request("GET", "/time.asp") - response = conn.getresponse() - if response.status == 200: - result = response.read() - data = result.split("\r\n") - # print data#['t0=new Date().getTime();', 'nyear=2014;', 'nmonth=5;', 'nday=7;', 'nwday=3;', 'nhrs=13;', 'nmin=32;', 'nsec=2;'] - year = data[1][len("nyear")+1 : len(data[1])-1] - month = data[2][len("nmonth")+1 : len(data[2])-1] - day = data[3][len("nday")+1 : len(data[3])-1] - # hrs = data[5][len("nhrs")+1 : len(data[5])-1] - # bjtime = "%s-%s-%s %s hour" % (year, month, day, hrs) - bjtime = "%s年%s月%s日" % (year, month, day) - return bjtime - except: - return "0000年00月00日" - - -def searchNic(): - nicPath = "/sys/class/net" - flagUp = False - if not os.path.exists(nicPath): - #print("%s doesn't exists." % str(nicPath)) - return False - for list in os.listdir(nicPath): - file_path = os.path.join(nicPath, list) + "/operstate" - if os.path.exists(file_path) and os.path.isfile(file_path): - fp = open(file_path, 'r') - all_text = fp.read() - if "up" in all_text: - flagUp = True - fp.close() - if flagUp: - return True - else: - return False - -class project_path_not_found(Exception): - """Raised when we can't find the project directory.""" - -def get_data_file(*path_segments): - """Get the full path to a data file. - - Returns the path to a file underneath the data directory (as defined by - `get_data_path`). Equivalent to os.path.join(get_data_path(), - *path_segments). - """ - return os.path.join(get_data_path(), *path_segments) - - -def get_data_path(): - """Retrieve indicator-china-weather data path - - This path is by default /../data/ in trunk - and /usr/share/indicator-china-weather in an installed version but this path - is specified at installation time. - """ - - # Get pathname absolute or relative. - path = os.path.join( - os.path.dirname(__file__), "../") - # print os.path.join(os.path.abspath(os.path.curdir)) - - abs_data_path = os.path.abspath(path) - if not os.path.exists(abs_data_path): - raise project_path_not_found - return abs_data_path - -def get_builder(builder_file_name): - """Return a fully-instantiated gtk.Builder instance from specified ui - file - - :param builder_file_name: The name of the builder file, without extension. - Assumed to be in the 'ui' directory under the data path. - """ - # Look for the ui file that describes the user interface. - ui_filename = get_data_file('ui', '%s.ui' % (builder_file_name)) - if not os.path.exists(ui_filename): - ui_filename = None - builder = Gtk.Builder() - builder.add_from_file(ui_filename) - return builder - -def get_local_date(): - # local_date = time.strftime("%Y年%m月%d日", time.localtime(time.time())) - cur_date = time.localtime(time.time()) - year = time.strftime("%Y",cur_date) - month = time.strftime("%m",cur_date) - if month[0:1] == '0': - month = month[1:2] - day = time.strftime("%d",cur_date) - if day[0:1] == '0': - day = day[1:2] - local_date = "%s年%s月%s日" % (year, month, day) - return local_date - -# def get_local_format_time(): -# ''' -# year-month-day hour:minute:second -# 2014-05-07 13:51:30 -# ''' -# local_date = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())) -# return local_date - -# def get_local_normal_time(): -# ''' -# year month day hour minute -# 201405071351 -# ''' -# local_date = time.strftime('%Y%m%d%H%M', time.localtime(time.time())) -# return local_date - - -def get_parent_path(folderpath, level=1): - parent_path = os.path.realpath(folderpath) - while(level > 0): - parent_path = os.path.dirname(parent_path) - level -= 1 - return parent_path - - -def get_distro_info(): - ufpath = '/etc/ubuntukylin-release' - if(os.path.exists(ufpath) and os.path.isfile(ufpath)): - uf = open(ufpath) - lines = uf.readlines() - rtn = [] - for line in lines: - kv = line.split('=') - if (kv[0] == 'DISTRIB_ID'): - v = kv[1] - rtn.append(v[:-1]) - if (kv[0] == 'DISTRIB_RELEASE'): - v = kv[1] - rtn.append(v[:-1]) - uf.close() - return rtn - else: - dist = platform.dist() - distname = dist[0] - distversion = dist[1] - return [distname, distversion] - -# def get_machine_id(): -# fpath = '/var/lib/dbus/machine-id' -# if(os.path.exists(fpath) and os.path.isfile(fpath)): -# f = open(fpath, 'r') -# id = f.read() -# f.close() -# id = id.replace('\n','') -# if(id == ''): -# return 'unknown' -# else: -# return id -# else: -# return 'unknown' - -# # indicator-china-weather version -# def get_weather_version(): -# return VERSION - -def get_last_time(): - time_text = None - usrPath = os.path.join(HOME, '.config/ubuntukylin/indicator-china-weather/pingback.time') - if os.path.exists(usrPath): - fp = open(usrPath) - try: - time_text = fp.read( ).replace('\n', '') - finally: - fp.close() - return time_text - -def set_last_time(time_text): - abs_path = os.path.join(HOME, '.config/ubuntukylin/indicator-china-weather') - if not os.path.isdir(abs_path): - os.makedirs(abs_path) - usrPath = os.path.join(abs_path, 'pingback.time') - fp = open(usrPath, 'w') - fp.write(time_text) - fp.close() - -def handle_drag(window, event): - if event.button == 1: - #if event.type == gtk.gdk._2BUTTON_PRESS:#an event is double click - if int(event.type) in (5, 6):#GDK_2BUTTON_PRESS GDK_3BUTTON_PRESS - pass - else: - window.begin_move_drag(event.button, event.x_root, event.y_root, event.time) - return False - -def handle_move(widget, event): - if event.x <= 0: - event.x=0 - widget.move(event.x, event.y) - return True - -def add_drag_support(window): - window.add_events(Gdk.EventMask.BUTTON_PRESS_MASK) - window.connect("button-press-event", handle_drag) diff -Nru indicator-china-weather-2.2.8/src/cityitemwidget.cpp indicator-china-weather-3.0.2~201904291430/src/cityitemwidget.cpp --- indicator-china-weather-2.2.8/src/cityitemwidget.cpp 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/cityitemwidget.cpp 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,184 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "cityitemwidget.h" + +#include +#include +#include +#include + +CityItemWidget::CityItemWidget(CitySettingData info, QWidget *parent) : QWidget(parent) +{ + this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + this->setFixedSize(469, 46); + + this->m_data = info; + this->m_id = info.id; + +// item = new QListWidgetItem(); +// item->setSizeHint(QSize(this->width(), 36)); + + m_layout = new QHBoxLayout(this); + m_layout->setContentsMargins(10, 0, 5, 0); + m_layout->setSpacing(5); + + m_iconLabel = new QLabel(this); + m_iconLabel->setFixedSize(24, 24); + m_iconLabel->setStyleSheet("QLabel{border:none;background-color:transparent;}"); +// m_iconLabel->setScaledContents(true);//自动缩放,显示图像大小自动调整为Qlabel大小 + m_cityLabel = new QLabel(this); + m_cityLabel->setStyleSheet("QLabel{border:none;background-color:transparent;color:#808080;font-size:14px;}"); + m_temperatureLabel = new QLabel(this); + m_temperatureLabel->setStyleSheet("QLabel{border:none;background-color:transparent;color:#808080;font-size:14px;}"); + m_defaultBtn = new QPushButton(this); + m_defaultBtn->setFocusPolicy(Qt::NoFocus); + m_defaultBtn->setStyleSheet("QPushButton{border:none;text-align:center;background:transparent;background-color:transparent;color:#0a9ff5;font-size:14px;}"); + m_defaultBtn->setText(tr("Set as default")); + m_defaultBtn->setCursor(QCursor(Qt::PointingHandCursor)); + m_defaultBtn->setVisible(false); + QFont font = m_defaultBtn->font(); + const QFontMetrics fm(font); + m_defaultBtn->setFixedWidth(fm.width(m_defaultBtn->text()) + 10); + + m_deleteBtn = new QPushButton(this); + m_deleteBtn->setFocusPolicy(Qt::NoFocus); + m_deleteBtn->setFixedSize(16, 15); + m_deleteBtn->setStyleSheet("QPushButton{background-image:url(':/res/delete_normal_btn.png');border:0px;}QPushButton:hover{background:url(':/res/delete_hover_pressed_btn.png');}QPushButton:pressed{background:url(':/res/delete_hover_pressed_btn.png');}"); + m_deleteBtn->setCursor(QCursor(Qt::PointingHandCursor)); + + m_layout->addWidget(m_iconLabel); + m_layout->addWidget(m_cityLabel); + m_layout->addStretch(); + m_layout->addWidget(m_defaultBtn); + m_layout->addSpacing(20); + m_layout->addWidget(m_temperatureLabel); + m_layout->addWidget(m_deleteBtn); + m_layout->addSpacing(15); + + connect(m_defaultBtn, &QPushButton::clicked, this, [=] { + emit this->requestRefreshDefaultCity(this->getCityId()); + }); + connect(m_deleteBtn, &QPushButton::clicked, this, [=] { + emit this->requestDeleteCity(this->getCityId()); + }); + + QPixmap pixmap = QPixmap(info.icon); + pixmap = pixmap.scaled(24, 24, Qt::KeepAspectRatio, Qt::SmoothTransformation); + m_iconLabel->setPixmap(pixmap); + if (info.active) { + m_cityLabel->setText(QString(tr("%1 [Default]")).arg(info.name)); + } + else { + m_cityLabel->setText(info.name); + } + + m_temperatureLabel->setText(info.temperature); + + //test data + /*QPixmap pixmap = QPixmap(":/res/weather_icons/lightgrey/100.png"); + pixmap = pixmap.scaled(24, 24, Qt::KeepAspectRatio, Qt::SmoothTransformation); + m_iconLabel->setPixmap(pixmap); + m_cityLabel->setText("长沙"); + m_temperatureLabel->setText("33");*/ +} + +//QListWidgetItem *CityItemWidget::getCityItem() +//{ +// return item; +//} + +void CityItemWidget::setItemAction(bool active) +{ + if (active) { + m_data.active = true; + m_cityLabel->setText(QString(tr("%1 [Default]")).arg(m_data.name)); + } + else { + m_data.active = false; + m_cityLabel->setText(m_data.name); + } +} + +void CityItemWidget::setItemWeather(const QString &temp, const QString &iconPath) +{ + m_data.icon = iconPath; + m_data.temperature = temp; + m_temperatureLabel->setText(m_data.temperature); + QPixmap pixmap = QPixmap(m_data.icon); + pixmap = pixmap.scaled(24, 24, Qt::KeepAspectRatio, Qt::SmoothTransformation); + m_iconLabel->setPixmap(pixmap); +} + +void CityItemWidget::setItemHovered() +{ + m_mouseHover = true; + update(); +} + +void CityItemWidget::unsetItemHovered() +{ + m_mouseHover = false; + update(); +} + +QString CityItemWidget::getCityId() +{ + return this->m_id; +} + +void CityItemWidget::enterEvent(QEvent *event) +{ +// emit this->enter(); + QWidget::enterEvent(event); + + this->m_mouseHover = true; + update(); +} + +void CityItemWidget::leaveEvent(QEvent *event) +{ + QWidget::leaveEvent(event); + + this->m_mouseHover = false; + update(); +} + +void CityItemWidget::paintEvent(QPaintEvent *event) +{ + QPainter painter(this); + painter.setRenderHint(QPainter::Antialiasing, true); + + if (m_mouseHover) { + QPainterPath path; + path.addRect(QRectF(this->rect().x(), this->rect().y(), this->rect().width(), this->rect().height())); + painter.setOpacity(1.0); + painter.fillPath(path, QColor("#f5fbff")); + + if (!m_data.active) { + m_defaultBtn->setVisible(true); + } + else { + m_defaultBtn->setVisible(false); + } + } + else { + m_defaultBtn->setVisible(false); + } +} diff -Nru indicator-china-weather-2.2.8/src/cityitemwidget.h indicator-china-weather-3.0.2~201904291430/src/cityitemwidget.h --- indicator-china-weather-2.2.8/src/cityitemwidget.h 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/cityitemwidget.h 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef CITYITEMWIDGET_H +#define CITYITEMWIDGET_H + +#include +#include +#include +#include + +#include "data.h" + +class CityItemWidget : public QWidget +{ + Q_OBJECT + +public: + CityItemWidget(CitySettingData info, QWidget *parent=0); + +// QListWidgetItem* getCityItem(); + + QString getCityId(); + + void setItemHovered(); + void unsetItemHovered(); + + void setItemAction(bool active); + void setItemWeather(const QString &temp, const QString &iconPath); + +signals: + void requestRefreshDefaultCity(const QString &id); + void requestDeleteCity(const QString &id); + void enter(); + +protected: + void enterEvent(QEvent *event) Q_DECL_OVERRIDE; + void leaveEvent(QEvent *event) Q_DECL_OVERRIDE; + void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; + +private: + bool m_mouseHover = false; +// QListWidgetItem *item = nullptr; + + QString m_id; + CitySettingData m_data; + + QLabel *m_iconLabel = nullptr; + QLabel *m_cityLabel = nullptr; + QLabel *m_temperatureLabel = nullptr; + QPushButton *m_defaultBtn = nullptr; + QPushButton *m_deleteBtn = nullptr; + QHBoxLayout *m_layout = nullptr; +}; + +#endif // CITYITEMWIDGET_H diff -Nru indicator-china-weather-2.2.8/src/citylistwidget.cpp indicator-china-weather-3.0.2~201904291430/src/citylistwidget.cpp --- indicator-china-weather-2.2.8/src/citylistwidget.cpp 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/citylistwidget.cpp 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,137 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +#include "citylistwidget.h" +#include "cityitemwidget.h" +#include "data.h" + +#include +#include +#include +#include +#include + +CityListWidget::CityListWidget(QWidget *parent) : + QWidget(parent) + , m_layout(new QVBoxLayout) + , m_timer(new QTimer(this)) +{ + m_layout->setContentsMargins(0, 0, 0, 0); + m_layout->setSpacing(1); + this->setLayout(m_layout); + + m_timer->setSingleShot(true); + m_timer->setInterval(15); + connect(m_timer, &QTimer::timeout, this, &CityListWidget::updateCityListHeight, Qt::QueuedConnection); +} + +CityListWidget::~CityListWidget() +{ + if (m_timer) { + disconnect(m_timer, SIGNAL(timeout()), this, SLOT(updateCityListHeight())); + if(m_timer->isActive()) { + m_timer->stop(); + } + delete m_timer; + m_timer = nullptr; + } + + const int count = m_layout->count(); + for (int i = 0; i != count; ++i) { + QLayoutItem *item = m_layout->takeAt(0); + QWidget *w = item->widget(); + w->removeEventFilter(this); + w->setParent(nullptr); + delete item; + } +} + +void CityListWidget::appendItem(CityItemWidget *item) +{ + const int curIndex = m_layout->count(); + m_layout->insertWidget(curIndex, item); + item->installEventFilter(this); + + m_timer->start(); +} + +void CityListWidget::removeItem(CityItemWidget *item) +{ + m_layout->removeWidget(item); + item->removeEventFilter(this); + + m_timer->start(); +} + +int CityListWidget::itemCount() const +{ + return m_layout->count(); +} + +void CityListWidget::clearUI() +{ + const int count = m_layout->count(); + for (int i = 0; i != count; ++i) { + QLayoutItem *item = m_layout->takeAt(0); + QWidget *w = item->widget(); + w->removeEventFilter(this); + w->setParent(nullptr); + delete item; + } + + m_timer->start(); +} + +CityItemWidget *CityListWidget::getItem(int index) +{ + if(index < 0) { + return NULL; + } + + if(index < itemCount()) { + return qobject_cast(m_layout->itemAt(index)->widget()); + } + + return NULL; +} + +void CityListWidget::updateCityListHeight() +{ + this->setFixedHeight(m_layout->sizeHint().height()); +} + +void CityListWidget::resetData() +{ + +} + +bool CityListWidget::eventFilter(QObject *obj, QEvent *event) +{ + switch (event->type()) + { + case QEvent::Resize: + m_timer->start(); + break; + default: + break; + } + + return false; +} diff -Nru indicator-china-weather-2.2.8/src/citylistwidget.h indicator-china-weather-3.0.2~201904291430/src/citylistwidget.h --- indicator-china-weather-2.2.8/src/citylistwidget.h 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/citylistwidget.h 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef CITYLISTWIDGET_H +#define CITYLISTWIDGET_H + +#include "cityitemwidget.h" + +class CityListWidget : public QWidget +{ + Q_OBJECT + +public: + explicit CityListWidget(QWidget *parent = 0); + ~CityListWidget(); + + CityItemWidget* getItem(int index); + + void appendItem(CityItemWidget *item); + void removeItem(CityItemWidget *item); + + int itemCount() const; + void clearUI(); + + void resetData(); + + +public slots: + void updateCityListHeight(); + +private: + bool eventFilter(QObject *obj, QEvent *event) Q_DECL_OVERRIDE; + +private: + QVBoxLayout *m_layout = nullptr; + QTimer *m_timer = nullptr; +}; + +#endif // CITYLISTWIDGET_H diff -Nru indicator-china-weather-2.2.8/src/citylistwidget-org.cpp indicator-china-weather-3.0.2~201904291430/src/citylistwidget-org.cpp --- indicator-china-weather-2.2.8/src/citylistwidget-org.cpp 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/citylistwidget-org.cpp 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,168 @@ +/* + * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +#include "citylistwidget.h" +#include "cityitemwidget.h" +#include "data.h" + +#include +#include +#include +#include + +CityListWidget::CityListWidget(QWidget *parent) : QListWidget(parent) +{ + this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + this->setFixedWidth(parent->width() - 2); + this->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + + m_dataList.clear(); + + connect(this, &CityListWidget::itemDoubleClicked, this, [=] (QListWidgetItem *item) { + CityItemWidget *fileItem = static_cast(itemWidget(item)); + qDebug() << fileItem->getCityId(); + }); + + this->loadCityItems(); + +} + +CityListWidget::~CityListWidget() +{ + this->clearUI(); +} + +void CityListWidget::resetData() +{ + +} + +void CityListWidget::clearUI() +{ + for(int i = 0; i < this->count(); i++) { + QListWidgetItem *listItem = item(i); + CityItemWidget *item = static_cast(itemWidget(listItem)); + if (item) { + item->deleteLater(); + } + } + this->clear(); +} + +void CityListWidget::removeItemById(const QString &id) +{ + QList items = findChildren(); + for (CityItemWidget *item : items) { + if (item->getCityId() == id) { + this->removeItemWidget(item->getCityItem()); + item->deleteLater(); + break; + } + } +} + +void CityListWidget::onRefreshUI() +{ + this->clearUI(); + this->loadCityItems(); +} + +void CityListWidget::loadCityItems() +{ + //test data; + CitySettingData info; + info.active = true; + info.id = "101010100"; + info.name = "北京"; + info.temperature = "33"; + info.icon = ":/res/weather_icons/lightgrey/100.png"; + loadItem(info); + + CitySettingData info1; + info1.active = false; + info1.id = "101020100"; + info1.name = "上海"; + info1.temperature = "34"; + info1.icon = ":/res/weather_icons/lightgrey/100.png"; + loadItem(info1); + + CitySettingData info2; + info2.active = false; + info2.id = "101250101"; + info2.name = "长沙"; + info2.temperature = "35"; + info2.icon = ":/res/weather_icons/lightgrey/100.png"; + loadItem(info2); + + m_dataList.append(info); + m_dataList.append(info1); + m_dataList.append(info2); + + this->verticalScrollBar()->setValue(0); +} + +void CityListWidget::loadItem(const CitySettingData &info) +{ + if (m_dataList.count() > 10) { + qDebug() << "Max len is 10"; + return; + } + + for (CitySettingData line : m_dataList) { + if (info.id == line.id) { + return; + } + } + CityItemWidget *item = new CityItemWidget(info); + connect(item, SIGNAL(enter()), this, SLOT(onMouseEnter())); + connect(item, &CityItemWidget::requestDeleteCity, this, [=] (const QString id) { + if (this->m_dataList.count() == 1) { + qDebug() << "At least there must be a city!!!"; + return; + } + for (CitySettingData line : m_dataList) { + if (line.id == id) { + //delete this city + this->removeItemById(id); + + // If the deleted city is the default city + if (line.active) { + // Reset default city and Access the city's weather + //TODO + } + } + } + }); + this->addItem(item->getCityItem()); + setItemWidget(item->getCityItem(), item); +} + +void CityListWidget::onMouseEnter() +{ + for(int i = 0; i < this->count(); i++) { + QListWidgetItem *listItem = item(i); + CityItemWidget *item = static_cast(itemWidget(listItem)); + if (item->getCityId() == ((CityItemWidget*) sender())->getCityId()) { + item->setItemHovered(); + } else { + item->unsetItemHovered(); + } + } +} diff -Nru indicator-china-weather-2.2.8/src/citylistwidget-org.h indicator-china-weather-3.0.2~201904291430/src/citylistwidget-org.h --- indicator-china-weather-2.2.8/src/citylistwidget-org.h 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/citylistwidget-org.h 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef CITYLISTWIDGET_H +#define CITYLISTWIDGET_H + +#include "cityitemwidget.h" + +#include + +class CitySettingData; + +class CityListWidget : public QListWidget +{ + Q_OBJECT + +public: + CityListWidget(QWidget *parent=0); + ~CityListWidget(); + + void resetData(); + + void loadCityItems(); + + void clearUI(); + void loadItem(const CitySettingData &info); + void removeItemById(const QString &id); + +public slots: + void onMouseEnter(); + void onRefreshUI(); + +private: + QList m_dataList; +}; + +#endif // CITYLISTWIDGET_H diff -Nru indicator-china-weather-2.2.8/src/city.txt indicator-china-weather-3.0.2~201904291430/src/city.txt --- indicator-china-weather-2.2.8/src/city.txt 2018-03-19 06:04:16.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/city.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,370 +0,0 @@ -北京,北京 -上海,上海 -天津,天津 -重庆,重庆 -黑龙江,哈尔滨 -黑龙江,齐齐哈尔 -黑龙江,牡丹江 -黑龙江,佳木斯 -黑龙江,绥化 -黑龙江,黑河 -黑龙江,大兴安岭 -黑龙江,伊春 -黑龙江,大庆 -黑龙江,七台河, -黑龙江,鸡西 -黑龙江,鹤岗 -黑龙江,双鸭山 -吉林,长春 -吉林,吉林 -吉林,延边 -吉林,四平 -吉林,通化 -吉林,白城 -吉林,辽源 -吉林,松原 -吉林,白山 -辽宁,沈阳 -辽宁,大连 -辽宁,鞍山 -辽宁,抚顺 -辽宁,本溪 -辽宁,丹东 -辽宁,锦州 -辽宁,营口 -辽宁,阜新 -辽宁,辽阳 -辽宁,铁岭 -辽宁,朝阳 -辽宁,盘锦 -辽宁,葫芦岛 -内蒙古,呼和浩特 -内蒙古,包头 -内蒙古,乌海 -内蒙古,乌兰察布 -内蒙古,通辽 -内蒙古,赤峰 -内蒙古,鄂尔多斯 -内蒙古,巴彦淖尔 -内蒙古,锡林郭勒 -内蒙古,呼伦贝尔 -内蒙古,兴安盟 -内蒙古,阿拉善盟 -河北,石家庄 -河北,保定 -河北,张家口 -河北,承德 -河北,唐山 -河北,廊坊 -河北,沧州 -河北,衡水 -河北,邢台 -河北,邯郸 -河北,秦皇岛 -山西,太原 -山西,大同 -山西,阳泉 -山西,晋中 -山西,长治 -山西,晋城 -山西,临汾 -山西,运城 -山西,朔州 -山西,忻州 -山西,吕梁 -陕西,西安 -陕西,咸阳 -陕西,延安 -陕西,榆林 -陕西,渭南 -陕西,商洛 -陕西,安康 -陕西,汉中 -陕西,宝鸡 -陕西,铜川 -陕西,杨凌 -山东,济南 -山东,青岛 -山东,淄博 -山东,德州 -山东,烟台 -山东,潍坊 -山东,济宁 -山东,泰安 -山东,临沂 -山东,菏泽 -山东,滨州 -山东,东营 -山东,威海 -山东,枣庄 -山东,日照 -山东,莱芜 -山东,聊城 -新疆,乌鲁木齐 -新疆,克拉玛依 -新疆,石河子 -新疆,昌吉 -新疆,吐鲁番 -新疆,巴音郭楞 -新疆,阿拉尔 -新疆,喀什 -新疆,伊犁 -新疆,塔城 -新疆,哈密 -新疆,和田 -新疆,阿勒泰 -新疆,克州 -新疆,博尔塔拉 -西藏,拉萨 -西藏,日喀则 -西藏,山南 -西藏,林芝 -西藏,昌都 -西藏,那曲 -西藏,阿里 -青海,西宁 -青海,海东 -青海,黄南 -青海,海南 -青海,果洛 -青海,玉树 -青海,海西 -青海,海北 -青海,格尔木 -甘肃,兰州 -甘肃,定西 -甘肃,平凉 -甘肃,庆阳 -甘肃,武威 -甘肃,金昌 -甘肃,张掖 -甘肃,酒泉 -甘肃,天水 -甘肃,陇南 -甘肃,临夏 -甘肃,甘南 -甘肃,白银 -甘肃,嘉峪关 -宁夏,银川 -宁夏,石嘴山 -宁夏,吴忠 -宁夏,固原 -宁夏,中卫 -河南,郑州 -河南,安阳 -河南,新乡 -河南,许昌 -河南,平顶山 -河南,信阳 -河南,南阳 -河南,开封 -河南,洛阳 -河南,商丘 -河南,焦作 -河南,鹤壁 -河南,濮阳 -河南,周口 -河南,漯河 -河南,驻马店 -河南,三门峡 -河南,济源 -江苏,南京 -江苏,无锡 -江苏,镇江 -江苏,苏州 -江苏,南通 -江苏,扬州 -江苏,盐城 -江苏,徐州 -江苏,淮安 -江苏,连云港 -江苏,常州 -江苏,泰州 -江苏,宿迁 -湖北,武汉 -湖北,襄阳 -湖北,鄂州 -湖北,孝感 -湖北,黄冈 -湖北,黄石 -湖北,咸宁 -湖北,荆州 -湖北,宜昌 -湖北,恩施 -湖北,十堰 -湖北,神农架 -湖北,随州 -湖北,荆门 -湖北,天门 -湖北,仙桃 -湖北,潜江 -浙江,杭州 -浙江,湖州 -浙江,嘉兴 -浙江,宁波 -浙江,绍兴 -浙江,台州 -浙江,温州 -浙江,丽水 -浙江,金华 -浙江,衢州 -浙江,舟山 -安徽,合肥 -安徽,蚌埠 -安徽,芜湖 -安徽,淮南 -安徽,马鞍山 -安徽,安庆 -安徽,宿州 -安徽,阜阳 -安徽,亳州 -安徽,黄山 -安徽,滁州 -安徽,淮北 -安徽,铜陵 -安徽,宣城 -安徽,六安 -安徽,巢湖 -安徽,池州 -福建,福州 -福建,厦门 -福建,宁德 -福建,莆田 -福建,泉州 -福建,漳州 -福建,龙岩 -福建,三明 -福建,南平 -福建,钓鱼岛 -江西,南昌 -江西,九江 -江西,上饶 -江西,抚州 -江西,宜春 -江西,吉安 -江西,赣州 -江西,景德镇 -江西,萍乡 -江西,新余 -江西,鹰潭 -湖南,长沙 -湖南,湘潭 -湖南,株洲 -湖南,衡阳 -湖南,郴州 -湖南,常德 -湖南,益阳 -湖南,娄底 -湖南,邵阳 -湖南,岳阳 -湖南,张家界 -湖南,怀化 -湖南,永州 -湖南,湘西 -贵州,贵阳 -贵州,遵义 -贵州,安顺 -贵州,黔南 -贵州,黔东南 -贵州,铜仁 -贵州,毕节 -贵州,六盘水 -贵州,黔西南 -四川,成都 -四川,攀枝花 -四川,自贡 -四川,绵阳 -四川,南充 -四川,达州 -四川,遂宁 -四川,广安 -四川,巴中 -四川,泸州 -四川,宜宾 -四川,内江 -四川,资阳 -四川,乐山 -四川,眉山 -四川,凉山 -四川,雅安 -四川,甘孜 -四川,阿坝 -四川,德阳 -四川,广元 -广东,广州 -广东,韶关 -广东,惠州 -广东,梅州 -广东,汕头 -广东,深圳 -广东,珠海 -广东,佛山 -广东,肇庆 -广东,湛江 -广东,江门 -广东,河源 -广东,清远 -广东,云浮 -广东,潮州 -广东,东莞 -广东,中山 -广东,阳江 -广东,揭阳 -广东,茂名 -广东,汕尾 -云南,昆明 -云南,大理 -云南,红河 -云南,曲靖 -云南,保山 -云南,文山 -云南,玉溪 -云南,楚雄 -云南,普洱 -云南,昭通 -云南,临沧 -云南,怒江 -云南,迪庆 -云南,丽江 -云南,德宏 -云南,西双版纳 -广西,南宁 -广西,崇左 -广西,柳州 -广西,来宾 -广西,桂林 -广西,梧州 -广西,贺州 -广西,贵港 -广西,玉林 -广西,百色 -广西,钦州 -广西,河池 -广西,北海 -广西,防城港 -海南,海口 -海南,三亚 -海南,东方 -海南,临高 -海南,澄迈 -海南,儋州 -海南,昌江 -海南,白沙 -海南,琼中 -海南,定安 -海南,屯昌 -海南,琼海 -海南,文昌 -海南,保亭 -海南,万宁 -海南,陵水 -海南,西沙 -海南,南沙 -海南,乐东 -海南,五指山 -海南,中沙 -香港,香港 -澳门,澳门 -台湾,台北 -台湾,高雄 -台湾,台中 diff -Nru indicator-china-weather-2.2.8/src/citywidget.cpp indicator-china-weather-3.0.2~201904291430/src/citywidget.cpp --- indicator-china-weather-2.2.8/src/citywidget.cpp 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/citywidget.cpp 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,333 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "citywidget.h" +#include "citylistwidget.h" +#include "cityitemwidget.h" + +#include +#include +#include +#include + +#include "preferences.h" +#include "global.h" +using namespace Global; + +CityWidget::CityWidget(QWidget *parent) + : QWidget(parent) + , m_cityListWidget(new CityListWidget) + , m_addBtn(new QPushButton(this)) + , m_timer(new QTimer(this)) +{ + this->setAttribute(Qt::WA_TranslucentBackground); + this->setStyleSheet("QWidget{border:none; background-color:#ffffff;}"); + + m_scrollArea = new QScrollArea; + m_scrollArea->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + m_scrollArea->setWidgetResizable(true); + m_scrollArea->setFrameStyle(QFrame::NoFrame); + m_scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + m_scrollArea->verticalScrollBar()->setStyleSheet("QScrollBar:vertical{margin:0px 0px 0px 0px;background-color:rgb(255,255,255,100);border:0px;width:10px;}" \ + "QScrollBar::sub-line:vertical{subcontrol-origin:margin;border:1px solid red;height:13px;}" \ + "QScrollBar::up-arrow:vertical{subcontrol-origin:margin;background-color:blue;height:13px;}" \ + "QScrollBar::sub-page:vertical{background-color:#EEEDF0;}" \ + "QScrollBar::handle:vertical{background-color:#D1D0D2;width:10px;}" \ + "QScrollBar::handle:vertical:hover{background-color:#14ACF5;width:10px;}" \ + "QScrollBar::handle:vertical:pressed{background-color:#0B95D7;width:10px;}" \ + "QScrollBar::add-page:vertical{background-color:#EEEDF0;}" \ + "QScrollBar::down-arrow:vertical{background-color:yellow;}" \ + "QScrollBar::add-line:vertical{subcontrol-origin:margin;border:1px solid green;height:18px;}"); + + m_addBtn->setFocusPolicy(Qt::NoFocus); + m_addBtn->setCursor(QCursor(Qt::PointingHandCursor)); + m_addBtn->setStyleSheet("QPushButton{padding-left:10px;font-size:12px;color:#808080;border:none;background:transparent;text-align:left;}QPushButton:hover{background-color:#f5fbff;}");//margin-left:18px;border:1px solid rgba(0, 0, 0, 0.08); + m_addBtn->setFixedWidth(this->width()); + m_addBtn->setText(tr("Add City")); + m_addBtn->setIconSize(QSize(24, 24)); + m_addBtn->setIcon(QIcon(":/res/add.png")); + + m_layout = new QVBoxLayout; + m_layout->addWidget(m_scrollArea/*, 1, Qt::AlignCenter*/); + m_layout->setContentsMargins(0, 0, 0, 0); + m_layout->setSpacing(0); + this->setLayout(m_layout); + + m_widget = new QWidget; + //m_widget->setStyleSheet("QWidget{background-color: #0d8700;}");//test widget's area with background color + m_widget->setFixedWidth(m_scrollArea->width()); + //m_widget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + m_scrollArea->setWidget(m_widget); + QVBoxLayout *v_layout = new QVBoxLayout(m_widget); + v_layout->setContentsMargins(0,0,0,0); + v_layout->setSpacing(10); + v_layout->addWidget(m_cityListWidget); + v_layout->addWidget(m_addBtn); + v_layout->addStretch(); + + connect(m_addBtn, &QPushButton::clicked, this, &CityWidget::requestAddCity); + + m_dataList.clear(); + this->loadCityItems(); + + m_timer->setSingleShot(false); + m_timer->setInterval(30); + connect(m_timer, &QTimer::timeout, this, &CityWidget::refreshListWeatherStatus, Qt::QueuedConnection); +} + +CityWidget::~CityWidget() +{ + if (m_timer) { + disconnect(m_timer, SIGNAL(timeout()), this, SLOT(refreshListWeatherStatus())); + if(m_timer->isActive()) { + m_timer->stop(); + } + delete m_timer; + m_timer = nullptr; + } + + QList items = findChildren(); + for (CityItemWidget *item : items) { + m_cityListWidget->removeItem(item); + item->deleteLater(); + } + + QLayoutItem *child; + while ((child = m_layout->takeAt(0)) != 0) { + if (child->widget()) + child->widget()->deleteLater(); + delete child; + } + + if (m_addBtn) { + delete m_addBtn; + m_addBtn = nullptr; + } + if (m_cityListWidget) { + delete m_cityListWidget; + m_cityListWidget = nullptr; + } + if (m_widget) { + delete m_widget; + m_widget = nullptr; + } + if (m_scrollArea) { + delete m_scrollArea; + m_scrollArea = nullptr; + } +} + + +bool CityWidget::event(QEvent *event) +{ + if (event->type() == QEvent::LayoutRequest) { + m_widget->setFixedHeight(m_layout->sizeHint().height()); + } + + return QWidget::event(event); +} + +void CityWidget::loadCityItems() +{ + //test data; + /*CitySettingData info; + info.active = true; + info.id = "101010100"; + info.name = "北京"; + info.temperature = "33"; + info.icon = ":/res/weather_icons/lightgrey/100.png"; + CitySettingData info1; + info1.active = false; + info1.id = "101020100"; + info1.name = "上海"; + info1.temperature = "34"; + info1.icon = ":/res/weather_icons/lightgrey/100.png"; + CitySettingData info2; + info2.active = false; + info2.id = "101250101"; + info2.name = "长沙"; + info2.temperature = "35"; + info2.icon = ":/res/weather_icons/lightgrey/100.png"; + + addCityItem(info); + addCityItem(info1); + addCityItem(info2);*/ + + for (int i = 0; i < m_preferences->m_cities.size(); ++i) { + CitySettingData info; + info.active = (m_preferences->m_currentCityId == m_preferences->m_cities.at(i).id) ? true : false; + info.id = m_preferences->m_cities.at(i).id; + info.name = m_preferences->m_cities.at(i).name; + info.temperature = (m_preferences->m_currentCityId == m_preferences->m_cities.at(i).id) ? m_preferences->weather.tmp + "°C" : ""; + + + if (m_preferences->weather.cond_code.isEmpty()) { + info.icon = ":/res/weather_icons/darkgrey/999.png"; + } + else { + info.icon = (m_preferences->m_currentCityId == m_preferences->m_cities.at(i).id) ? QString(":/res/weather_icons/darkgrey/%1.png").arg(m_preferences->weather.cond_code) : ":/res/weather_icons/darkgrey/999.png"; + + } + addCityItem(info); + } +} + +void CityWidget::addCityItem(const CitySettingData &info) +{ +// if (m_dataList.count() > 10) { + if (m_preferences->isCitiesCountOverMax()) { + emit responseCityError(QString(tr("Only 10 cities can be added at most!")));//最多只能添加10个城市 + return; + } + + for (CitySettingData line : m_dataList) { + if (info.id == line.id) { + emit responseCityError(QString(tr("The city already exists!")));//该城市已存在 + return; + } + } + + m_dataList.append(info); + +// City city; +// city.id = info.id; +// city.name = info.name; +// m_preferences->addCityInfoToPref(city); + + + CityItemWidget *item = new CityItemWidget(info); + m_cityListWidget->appendItem(item); +// connect(item, SIGNAL(enter()), this, SLOT(onMouseEnter())); + connect(item, &CityItemWidget::requestDeleteCity, this, [=] (const QString id) { +// if (this->m_dataList.count() == 1) { + if (m_preferences->citiesCount() == 1) { + qDebug() << "At least there must be a city!!!"; + emit responseCityError(QString(tr("At least one city needs to be preserved!")));//至少需要保留一个城市 + return; + } + + for (CitySettingData line : m_dataList) { + if (line.id == id) { + //delete this city + int pos = m_dataList.indexOf(line); + if (pos != -1) { + m_dataList.removeAt(pos); + } + this->removeCityItemById(id); + + if (line.active) { + m_preferences->setDefaultCity(); + + } + + this->refreshCityList(m_preferences->m_currentCityId); + m_preferences->removeCityInfoFromPref(id, line.active);//remove and update m_cityList, m_cities, m_currentCity and m_currentCityId + + emit this->requestRefreshCityMenu(line.active); + } + } + }); + + connect(item, &CityItemWidget::requestRefreshDefaultCity, this, [=] (const QString id) { + QList cityItems = findChildren(); + for (CityItemWidget *cityItem : cityItems) { + if (cityItem->getCityId() == id) { + cityItem->setItemAction(true); + + QList::iterator iter = m_dataList.begin(); + for (; iter != m_dataList.end(); iter++) { + if (iter->id == id) + iter->setActive(true); + else + iter->setActive(false); + } + + emit this->requestRefreshWeatherById(id); + } + else { + cityItem->setItemAction(false); + } + m_timer->start(); + } + }); + m_timer->start(); +} + +void CityWidget::removeCityItemById(const QString &id) +{ + QList items = findChildren(); + for (CityItemWidget *item : items) { + if (item->getCityId() == id) { + m_cityListWidget->removeItem(item); + item->deleteLater(); + break; + } + } + m_timer->start(); +} + +void CityWidget::refreshListWeatherStatus() +{ + QList items = findChildren(); + for (CityItemWidget *item : items) { + if (item->getCityId() == m_preferences->m_currentCityId) { + QString icon; + QString temp; + if (m_preferences->weather.cond_code.isEmpty()) { + temp = ""; + } + else { + temp = m_preferences->weather.tmp + "°C"; + } + if (m_preferences->weather.cond_code.isEmpty()) { + icon = ":/res/weather_icons/darkgrey/999.png"; + } + else { + icon = QString(":/res/weather_icons/darkgrey/%1.png").arg(m_preferences->weather.cond_code); + } + item->setItemWeather(temp, icon); + } else { + item->setItemWeather("", ":/res/weather_icons/darkgrey/999.png"); + } + } +} + +void CityWidget::refreshCityList(const QString &id) +{ + QList cityItems = findChildren(); + for (CityItemWidget *cityItem : cityItems) { + if (cityItem->getCityId() == id) + cityItem->setItemAction(true); + else + cityItem->setItemAction(false); + } + m_timer->start(); +} + +/*void CityWidget::onMouseEnter() +{ + QList items = findChildren(); + for (CityItemWidget *item : items) { + if (item->getCityId() == ((CityItemWidget*) sender())->getCityId()) { + item->setItemHovered(); + } else { + item->unsetItemHovered(); + } + } +}*/ diff -Nru indicator-china-weather-2.2.8/src/citywidget.h indicator-china-weather-3.0.2~201904291430/src/citywidget.h --- indicator-china-weather-2.2.8/src/citywidget.h 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/citywidget.h 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef CITYWIDGET_H +#define CITYWIDGET_H + +#include +#include +#include + +class CityListWidget; +class CitySettingData; +class QPushButton; + +class CityWidget : public QWidget +{ + Q_OBJECT + +public: + explicit CityWidget(QWidget *parent = 0); + ~CityWidget(); + + void loadCityItems(); + void refreshCityList(const QString &id); + +public slots: + void addCityItem(const CitySettingData &info); + void removeCityItemById(const QString &id); +// void onMouseEnter(); + void refreshListWeatherStatus(); + +signals: + void requestAddCity(); + void requestRefreshCityMenu(bool removedDefault); + //void requestSetDefaultCity(); + void requestRefreshWeatherById(const QString &id); + void responseCityError(const QString &info); + +private: + bool event(QEvent *event); + +private: + CityListWidget *m_cityListWidget = nullptr; + QPushButton *m_addBtn = nullptr; + QVBoxLayout *m_layout = nullptr; + QList m_dataList; + QScrollArea *m_scrollArea = nullptr; + QWidget *m_widget = nullptr; + QTimer *m_timer = nullptr; +}; + +#endif // CITYWIDGET_H diff -Nru indicator-china-weather-2.2.8/src/com.kylin.weather.xml indicator-china-weather-3.0.2~201904291430/src/com.kylin.weather.xml --- indicator-china-weather-2.2.8/src/com.kylin.weather.xml 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/com.kylin.weather.xml 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,8 @@ + + + + + + + diff -Nru indicator-china-weather-2.2.8/src/contentwidget.cpp indicator-china-weather-3.0.2~201904291430/src/contentwidget.cpp --- indicator-china-weather-2.2.8/src/contentwidget.cpp 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/contentwidget.cpp 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,100 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "contentwidget.h" +#include "nowweatherwidget.h" +#include "forecastweatherwidget.h" +#include "networkerrorwidget.h" +//#include "indexweatherwidget.h" + +#include + +ContentWidget::ContentWidget(QWidget *parent) : + QFrame(parent) +{ + m_layout = new QVBoxLayout(this); + m_layout->setContentsMargins(0, 0, 0, 0); + m_layout->setSpacing(0); +// m_layout->setSpacing(1); + + m_nowWidget = new NowWeatherWidget(this);//this->setFixedSize(355, 180); + m_forecastWidget = new ForecastWeatherWidget(this);//this->setFixedSize(355, 340); + m_networkErrorWidget = new NetworkErrorWidget(this); + m_networkErrorWidget->setVisible(false); + + connect(m_networkErrorWidget, &NetworkErrorWidget::requestRetryAccessWeather, this, [=] { + m_networkErrorWidget->setVisible(false); + m_nowWidget->setVisible(true); + m_forecastWidget->setVisible(true); + emit requestRetryWeather(); + }); + + m_layout->addWidget(m_nowWidget, 0, Qt::AlignTop); + m_layout->addWidget(m_forecastWidget); + m_layout->addWidget(m_networkErrorWidget); +} + +ContentWidget::~ContentWidget() +{ + QLayoutItem *child; + while ((child = m_layout->takeAt(0)) != 0) { + if (child->widget()) + child->widget()->deleteLater(); + delete child; + } +} + +void ContentWidget::showServerNotifyInfo(const QString &info) +{ + if (!info.isEmpty()) + m_nowWidget->displayTip(info); +} + +void ContentWidget::refreshObserveUI(const ObserveWeather &data) +{ + m_nowWidget->refreshData(data); +} + +void ContentWidget::refreshForecastUI(const ForecastWeather &data, int index) +{ + m_forecastWidget->refreshForecastData(data, index); +} + +void ContentWidget::refreshLifestyleUI(const LifeStyle &data) +{ + m_forecastWidget->refreshLifestyleData(data); +} + +void ContentWidget::setNetworkErrorPages() +{ + m_nowWidget->setVisible(false); + m_forecastWidget->setVisible(false); + m_networkErrorWidget->setVisible(true); + //m_networkErrorWidget->setErrorInfo(""); +} + +void ContentWidget::setDayStyleSheets() +{ + m_forecastWidget->setDayStyleSheets(); +} + +void ContentWidget::setNightStyleSheets() +{ + m_forecastWidget->setNightStyleSheets(); +} diff -Nru indicator-china-weather-2.2.8/src/contentwidget.h indicator-china-weather-3.0.2~201904291430/src/contentwidget.h --- indicator-china-weather-2.2.8/src/contentwidget.h 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/contentwidget.h 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef CONTENTWIDGET_H +#define CONTENTWIDGET_H + +#include + +#include "data.h" + +class QVBoxLayout; +class NowWeatherWidget; +class ForecastWeatherWidget; +class NetworkErrorWidget; +//class IndexWeatherWidget; + +class ContentWidget : public QFrame +{ + Q_OBJECT + +public: + explicit ContentWidget(QWidget *parent = 0); + ~ContentWidget(); + + void setNetworkErrorPages(); + + void refreshObserveUI(const ObserveWeather &data); + void refreshForecastUI(const ForecastWeather &data, int index); + void refreshLifestyleUI(const LifeStyle &data); + + void setDayStyleSheets(); + void setNightStyleSheets(); + + void showServerNotifyInfo(const QString &info); + +signals: + void requestRetryWeather(); + +private: + QVBoxLayout *m_layout = nullptr; + + NowWeatherWidget *m_nowWidget = nullptr; + ForecastWeatherWidget *m_forecastWidget = nullptr; + NetworkErrorWidget *m_networkErrorWidget = nullptr; +// IndexWeatherWidget *m_indexWidget = nullptr; +}; + +#endif // CONTENTWIDGET_H diff -Nru indicator-china-weather-2.2.8/src/database.py indicator-china-weather-3.0.2~201904291430/src/database.py --- indicator-china-weather-2.2.8/src/database.py 2018-03-19 06:04:16.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/database.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,166 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- - -### BEGIN LICENSE -# Copyright (C) 2013 ~ 2017 National University of Defense Technology(NUDT) & Kylin Ltd -# Author: Kobe Lee -# -# This program is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 3, as published -# by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranties of -# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR -# PURPOSE. See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -### END LICENSE - -import sqlite3 -import os -import sys -reload(sys) -sys.setdefaultencoding("utf-8") -from xdg import BaseDirectory as xdg - -CREATE_AREA = "create table area (id varchar(32) primary key, province varchar(64), \ - city varchar(64), county varchar(64), pinyin varchar(64))" -INSERT_AREA = "insert into area (id, province, city, county, pinyin) \ - values('%s', '%s', '%s', '%s', '%s')" -QUERY_AREA = "select * from area where id='%s'" -# QUERY_CITY = "select city from area where province='%s'" -QUERY_COUNTY = "select county from area where province='%s' and city='%s'" -QUERY_ID = "select id from area where province='%s' and city='%s' and county='%s'" -RESET_AREA = "delete from area" -UPDATE_AREA = "update area set pinyin='%s' where id='%s'" - - - -CREATE_CITY = "create table city (province varchar(64), cityname varchar(64))" -INSERT_CITY = "insert into city (province, cityname) \ - values('%s', '%s')" -QUERY_CITY_LIST = "select cityname from city where province='%s'" - - -WEATHER_CACHE_DIR = os.path.join(xdg.xdg_cache_home, "indicator-china-weather") -CHN_CITY_LIST_FILE = os.path.join(os.path.abspath(os.path.curdir), "locations.txt") -CITY_LIST_FILE = os.path.join(os.path.abspath(os.path.curdir), "city.txt") - -DB_PATH = os.path.join(os.path.abspath(os.path.curdir), "weather-app.db") - -# print WEATHER_CACHE_DIR#/home/trusty/.cache/indicator-china-weather -# print CHN_CITY_LIST_FILE#/home/trusty/indicator-china-weather/src/src/locations.txt -class Database: - - def __init__(self): - destFile = os.path.join('/usr/share/indicator-china-weather/src',"weather-app.db") - if not os.path.exists(destFile): - #print("error with db file") - return - #工程调用 - self.connect = sqlite3.connect(destFile, check_same_thread=False) - # 本地运行创建数据库 - # self.connect = sqlite3.connect(DB_PATH, check_same_thread=False) - self.cursor = self.connect.cursor() - - def __del__(self): - self.cursor.close() - self.connect.close() - - # create table - def create_area_table(self): - self.cursor.execute(CREATE_AREA) - - # reset table - def reset_area_table(self): - self.cursor.execute(RESET_AREA) - self.connect.commit() - - def search_record(self, id): - self.cursor.execute(QUERY_AREA % (id)) - res = self.cursor.fetchall() - if len(res) == 0: - return [] - else: - return res - - # def search_all_province(self): - # self.cursor.execute(QUERY_PROVINCE) - # res = self.cursor.fetchall() - # if len(res) == 0: - # return [] - # else: - # return res - - # def search_cities(self, province): - # self.cursor.execute(QUERY_CITY % (province)) - # res = self.cursor.fetchall() - # if len(res) == 0: - # return [] - # else: - # return res - - def search_counties(self, province, city): - self.cursor.execute(QUERY_COUNTY % (province, city)) - res = self.cursor.fetchall() - if len(res) == 0: - return [] - else: - return res - - def search_id(self, province, city, county): - self.cursor.execute(QUERY_ID % (province, city, county)) - res = self.cursor.fetchall() - if len(res) == 0: - return [] - else: - return res - - # insert data - def insert_area_data(self): - file = open(CHN_CITY_LIST_FILE, 'r') - for line in file.readlines(): - if line not in (False, None, '') and ',' in line and ':' in line: - line_list = line.strip('\n').split(':') - city_list = line_list[0].split(',') - self.cursor.execute(INSERT_AREA % (line_list[1],city_list[0],city_list[1],city_list[2],line_list[2])) - self.connect.commit() - file.close() - - - - - # create table - def create_city_table(self): - self.cursor.execute(CREATE_CITY) - - # insert data - def insert_city_data(self): - file = open(CITY_LIST_FILE, 'r') - for line in file.readlines(): - if line not in (False, None, '') and ',' in line: - line_list = line.strip('\n').split(',') - self.cursor.execute(INSERT_CITY % (line_list[0],line_list[1])) - self.connect.commit() - file.close() - - def search_city_table(self, province): - self.cursor.execute(QUERY_CITY_LIST % (province)) - res = self.cursor.fetchall() - if len(res) == 0: - return [] - else: - return res - -if __name__ == "__main__": - db = Database() - # db.create_area_table() - #db.insert_area_data() - - # db.create_city_table() - # db.insert_city_data() - - - diff -Nru indicator-china-weather-2.2.8/src/data.h indicator-china-weather-3.0.2~201904291430/src/data.h --- indicator-china-weather-2.2.8/src/data.h 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/data.h 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,156 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef DATA_H +#define DATA_H + +#include + + +struct City +{ + QString id; + QString name; +}; + + +struct Air +{ + QString id; + QString aqi; + QString qlty; + QString main; + QString pm25; + QString pm10; + QString no2; + QString so2; + QString co; + QString o3; +}; + +struct ObserveWeather +{ + QString id; + QString city; + QString updatetime; + QString air;//空气质量 + QString cloud;//云量 + QString cond_code;//实况天气状况代码 100 + QString cond_txt;//实况天气状况描述 晴 + QString fl;//体感温度,默认单位:摄氏度 23 + QString hum;//相对湿度 40 + QString pcpn;//降水量(毫米 mm) 0 + QString pres;//大气压强(百帕 hPa) 1020 + QString tmp;//温度,默认单位:摄氏度℃ 21 + QString vis;//能见度,默认单位:公里 km 10 + QString wind_deg;//风向360角度 305 + QString wind_dir;//风向 西北 + QString wind_sc;//风力 3 (0:静风 1:1级风) + QString wind_spd;//风速,公里/小时 km/h 15 +}; + +struct ForecastWeather +{ + QString cond_code_d;//白天天气状况代码 100 + QString cond_code_n;//晚间天气状况代码 100 + QString cond_txt_d;//白天天气状况描述 晴 + QString cond_txt_n;//晚间天气状况描述 晴 + QString forcast_date;//预报日期 2013-12-30 + QString hum;//相对湿度 37 + QString mr_ms;//月升时间 04:47 月落时间 14:59 + QString pcpn;//降水量 0 + QString pop;//降水概率 0 + QString pres;//大气压强 1018 + QString sr_ss;//日出时间 07:36 日落时间 16:58 + QString tmp_max;//最高温度 4 + QString tmp_min;//最低温度 -5 + QString uv_index;//紫外线强度指数 3 + QString vis;//能见度,单位:公里 10 + QString wind_deg;//风向360角度 310 + QString wind_dir;//风向 西北风 + QString wind_sc;//风力 1-2 (级风) + QString wind_spd;//风速,公里/小时 14 +}; + +struct LifeStyle { + QString air_brf; + QString air_txt; + QString comf_brf; + QString comf_txt; + QString cw_brf; + QString cw_txt; + QString drsg_brf; + QString drsg_txt; + QString flu_brf; + QString flu_txt; + QString sport_brf; + QString sport_txt; + QString trav_brf; + QString trav_txt; + QString uv_brf; + QString uv_txt; +}; + +struct LocationData { + QString id; + QString city_en; + QString city; + QString country_en; + QString country; + QString province_en; + QString province; + QString admin_district_en; + QString admin_district; +}; + +class CitySettingData +{ +public: + bool active; + + QString id; + QString name; + QString temperature; + QString icon; + +public: + void setActive(bool b) { active = b; } +}; + +inline bool operator ==(const City &data, const City &other) { + return data.id == other.id; +} + +inline bool operator ==(const CitySettingData &data, const CitySettingData &other) { + return data.id == other.id; +} + +inline bool operator ==(const LocationData &data, const LocationData &that) +{ + return data.id == that.id || (data.admin_district == that.admin_district && data.city == that.city); +} + +Q_DECLARE_METATYPE(City) +Q_DECLARE_METATYPE(ObserveWeather) +Q_DECLARE_METATYPE(ForecastWeather) +Q_DECLARE_METATYPE(LifeStyle) +Q_DECLARE_METATYPE(LocationData) +Q_DECLARE_METATYPE(CitySettingData) + +#endif // DATA_H diff -Nru indicator-china-weather-2.2.8/src/dbusadaptor.cpp indicator-china-weather-3.0.2~201904291430/src/dbusadaptor.cpp --- indicator-china-weather-2.2.8/src/dbusadaptor.cpp 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/dbusadaptor.cpp 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,45 @@ +/* + * This file was generated by qdbusxml2cpp version 0.8 + * Command line was: qdbusxml2cpp com.kylin.weather.xml -a dbusadaptor -c DbusAdaptor -l MainWindow + * + * qdbusxml2cpp is Copyright (C) 2015 The Qt Company Ltd. + * + * This is an auto-generated file. + * Do not edit! All changes made to it will be lost. + */ + +#include "dbusadaptor.h" +#include +#include +#include +#include +#include +#include +#include + +/* + * Implementation of adaptor class DbusAdaptor + */ + +DbusAdaptor::DbusAdaptor(MainWindow *parent) + : QDBusAbstractAdaptor(parent) +{ + // constructor + setAutoRelaySignals(true); +} + +DbusAdaptor::~DbusAdaptor() +{ + // destructor +} + +void DbusAdaptor::showMainWindow() +{ + // handle method call com.kylin.weather.showMainWindow + //edited the code manually by lixiang + //parent()->showMainWindow(); + parent()->showNormal(); +// parent()->raise(); +// parent()->show(); +} + diff -Nru indicator-china-weather-2.2.8/src/dbusadaptor.h indicator-china-weather-3.0.2~201904291430/src/dbusadaptor.h --- indicator-china-weather-2.2.8/src/dbusadaptor.h 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/dbusadaptor.h 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,54 @@ +/* + * This file was generated by qdbusxml2cpp version 0.8 + * Command line was: qdbusxml2cpp com.kylin.weather.xml -a dbusadaptor -c DbusAdaptor -l MainWindow + * + * qdbusxml2cpp is Copyright (C) 2015 The Qt Company Ltd. + * + * This is an auto-generated file. + * This file may have been hand-edited. Look for HAND-EDIT comments + * before re-generating it. + */ + +#ifndef DBUSADAPTOR_H +#define DBUSADAPTOR_H + +#include +#include +QT_BEGIN_NAMESPACE +class QByteArray; +template class QList; +template class QMap; +class QString; +class QStringList; +class QVariant; +QT_END_NAMESPACE + +/* + * Adaptor class for interface com.kylin.weather + */ + +#include "mainwindow.h"//added the code manually by lixiang + +class DbusAdaptor: public QDBusAbstractAdaptor +{ + Q_OBJECT + Q_CLASSINFO("D-Bus Interface", "com.kylin.weather") + Q_CLASSINFO("D-Bus Introspection", "" +" \n" +" \n" +" \n" + "") +public: + DbusAdaptor(MainWindow *parent); + virtual ~DbusAdaptor(); + + inline MainWindow *parent() const + { return static_cast(QObject::parent()); } + +public: // PROPERTIES +public Q_SLOTS: // METHODS + void showMainWindow(); +Q_SIGNALS: // SIGNALS +}; + +#endif diff -Nru indicator-china-weather-2.2.8/src/forecastitemwidget.cpp indicator-china-weather-3.0.2~201904291430/src/forecastitemwidget.cpp --- indicator-china-weather-2.2.8/src/forecastitemwidget.cpp 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/forecastitemwidget.cpp 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,133 @@ +#include "forecastitemwidget.h" +#include "tooltip.h" + +#include +#include +#include +#include +#include + +ForecastItemWidget::ForecastItemWidget(QWidget *parent) : + QWidget(parent) +{ + this->setFixedSize(100, 140);//140:initForecastWidget's height - 2*space = 160- 10*2 + this->setStyleSheet("QWidget{border-radius: 0px;color:rgb(250,250,250);background-color:rgba(0,0,0,0.2)}"); +// setAttribute(Qt::WA_TransparentForMouseEvents); + + m_weekLabel = new QLabel(this); + m_dateLabel = new QLabel(this); + m_weatherLabel = new QLabel(this); + m_iconLabel = new QLabel(this); + m_tempLabel = new QLabel(this); + m_iconLabel->setFixedSize(48, 48); + m_iconLabel->setStyleSheet("QLabel{border:none;background-color:transparent;}"); + + m_layout = new QVBoxLayout(this); + m_layout->setContentsMargins(0, 0, 0, 0); + m_layout->setSpacing(5); + m_layout->addWidget(m_weekLabel, 0, Qt::AlignTop | Qt::AlignHCenter); + m_layout->addWidget(m_dateLabel, 0, Qt::AlignHCenter); + m_layout->addWidget(m_weatherLabel, 0, Qt::AlignHCenter); + m_layout->addWidget(m_iconLabel, 0, Qt::AlignHCenter); + m_layout->addWidget(m_tempLabel, 0, Qt::AlignBottom | Qt::AlignHCenter); + + m_toolTip = new ToolTip(); + + this->setDefaultData(); +} + +void ForecastItemWidget::resetForecastData(const ForecastWeather &data, int index) +{ + if (index == 0) { + m_weekLabel->setText(tr("Today")); + } + else { + if (data.forcast_date.isEmpty()) { + m_weekLabel->setText("--"); + } + else { + QDateTime dt = QDateTime::fromString(data.forcast_date,"yyyy-MM-dd"); + // QDateTime dt; + // dt.setTime_t(str.toInt()); + QDate m_date = dt.date();//qDebug() << QDate::currentDate().toString("ddd"); + m_weekLabel->setText(m_date.toString("ddd")); + } + } + + m_dateLabel->setText(data.forcast_date); + m_weatherLabel->setText(data.cond_txt_d); + + //darkgrey or lightgrey + QPixmap pixmap; + if (m_isDayOrNight) { + pixmap = QPixmap(QString(":/res/weather_icons/darkgrey/%1.png").arg(data.cond_code_d)); + } + else { + pixmap = QPixmap(QString(":/res/weather_icons/lightgrey/%1.png").arg(data.cond_code_d)); + } + pixmap = pixmap.scaled(48, 48, Qt::KeepAspectRatio, Qt::SmoothTransformation); + m_iconLabel->setPixmap(pixmap); + m_tempLabel->setText(QString("%1°C~%2°C").arg(data.tmp_min).arg(data.tmp_max)); + + m_toolTip->resetData(data, m_weekLabel->text()); +} + +void ForecastItemWidget::setDayStyleSheets() +{ + m_isDayOrNight = true; + + m_weekLabel->setStyleSheet("QLabel{border:none;background-color:transparent;color:#808080;font-size:12px;}"); + m_dateLabel->setStyleSheet("QLabel{border:none;background-color:transparent;color:#808080;font-size:12px;}"); + m_weatherLabel->setStyleSheet("QLabel{border:none;background-color:transparent;color:#808080;font-size:12px;}"); + m_tempLabel->setStyleSheet("QLabel{border:none;background-color:transparent;color:#808080;font-size:12px;}"); +} + +void ForecastItemWidget::setNightStyleSheets() +{ + m_isDayOrNight = false; + + m_weekLabel->setStyleSheet("QLabel{border:none;background-color:transparent;color:#d9d9d9;font-size:12px;}"); + m_dateLabel->setStyleSheet("QLabel{border:none;background-color:transparent;color:#d9d9d9;font-size:12px;}"); + m_weatherLabel->setStyleSheet("QLabel{border:none;background-color:transparent;color:#d9d9d9;font-size:12px;}"); + m_tempLabel->setStyleSheet("QLabel{border:none;background-color:transparent;color:#d9d9d9;font-size:12px;}"); +} + +void ForecastItemWidget::setTextData() +{ +// m_weekLabel->setText("星期五"); +} + +void ForecastItemWidget::setDefaultData() +{ + m_weekLabel->setText("-"); + m_dateLabel->setText("-"); + m_weatherLabel->setText("-"); + QPixmap pixmap = QPixmap(":/res/weather_icons/darkgrey/999.png"); + pixmap = pixmap.scaled(48, 48, Qt::KeepAspectRatio, Qt::SmoothTransformation); + m_iconLabel->setPixmap(pixmap); + m_tempLabel->setText("-°C"); +} + +void ForecastItemWidget::setLabelText(const QString &name, const QString &desc) +{ +// QFont ft; +// QFontMetrics fm(ft); +// QString elided_text = fm.elidedText(name, Qt::ElideRight, 260); +// name_label->setText(elided_text); +// elided_text = fm.elidedText(desc, Qt::ElideRight, 260); +// description_label->setText(elided_text); +// if(elided_text.endsWith("…")) +// description_label->setToolTip(desc); +} + +bool ForecastItemWidget::event(QEvent *event) +{ + if (event->type() == QEvent::ToolTip) { + m_toolTip->popupTip(QCursor::pos()); + } + else if (event->type() == QEvent::Leave) { + m_toolTip->hide(); + } + + return QWidget::event(event); +} diff -Nru indicator-china-weather-2.2.8/src/forecastitemwidget.h indicator-china-weather-3.0.2~201904291430/src/forecastitemwidget.h --- indicator-china-weather-2.2.8/src/forecastitemwidget.h 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/forecastitemwidget.h 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef FORECASTITEMWIDGET_H +#define FORECASTITEMWIDGET_H + +#include +#include +#include +#include +#include + +#include "data.h" + +class ToolTip; + +class ForecastItemWidget : public QWidget +{ + Q_OBJECT +public: + explicit ForecastItemWidget(QWidget *parent = 0); + + void setLabelText(const QString &name, const QString &desc); + void resetForecastData(const ForecastWeather &data, int index); + void setDefaultData(); + void setTextData(); + + void setDayStyleSheets(); + void setNightStyleSheets(); + +protected: + bool event(QEvent *event); + +private: + QLabel *m_weekLabel = nullptr; + QLabel *m_dateLabel = nullptr; + QLabel *m_weatherLabel = nullptr; + QLabel *m_iconLabel = nullptr; + QLabel *m_tempLabel = nullptr; + QVBoxLayout *m_layout = nullptr; + ToolTip *m_toolTip = nullptr; + bool m_isDayOrNight; +}; + +#endif // FORECASTITEMWIDGET_H diff -Nru indicator-china-weather-2.2.8/src/forecastweatherwidget.cpp indicator-china-weather-3.0.2~201904291430/src/forecastweatherwidget.cpp --- indicator-china-weather-2.2.8/src/forecastweatherwidget.cpp 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/forecastweatherwidget.cpp 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,365 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "forecastweatherwidget.h" +#include "forecastitemwidget.h" +#include "indexitemwidget.h" +#include "separator.h" +#include "texttip.h" +#include "tipmodule.h" + +#include +#include + +namespace { + +const QStringList LIFESTYLE = {"comf", "drsg", "flu", "sport", "trav", "uv", "cw", "air"}; +//const QStringList LIFESTYLE = {QString(QObject::tr("comf")), QString(QObject::tr("drsg")), QString(QObject::tr("flu")), QString(QObject::tr("sport")), QString(QObject::tr("trav")), QString(QObject::tr("uv")), QString(QObject::tr("cw")), QString(QObject::tr("air"))}; +const QStringList LIFESTYLEICON = {":/res/comf_index.png", ":/res/clothe_index.png", ":/res/flu_index.png", ":/res/sport_index.png", ":/res/trav_index.png", ":/res/ultraviolet_rays.png", ":/res/cash_wash_index.png", ":/res/air_index.png"}; + +} + +ForecastWeatherWidget::ForecastWeatherWidget(QFrame *parent) : + QFrame(parent) + , m_tipModule(new TipModule) +{ + this->setFixedSize(355, 340); +// this->setStyleSheet("QLabel{border-radius: 0px; color:rgb(250, 250, 250); background-color:rgba(0,0,0,0.2)}"); + + m_lifeIndexList = LIFESTYLE; + m_lifeIndexIconList = LIFESTYLEICON; + + m_lifeItems.clear(); + m_tips.clear(); + + this->initWidgets(); +} + +ForecastWeatherWidget::~ForecastWeatherWidget() +{ + for(int i=0; itakeAt(0)) { + item->widget()->deleteLater(); + delete item; + } + QLayoutItem *child; + while ((child = m_layout->takeAt(0)) != 0) { + if (child->widget()) + child->widget()->deleteLater(); + delete child; + } +} + +void ForecastWeatherWidget::initWidgets() +{ + m_layout = new QVBoxLayout(this); + m_layout->setContentsMargins(0, 0, 0, 0); + m_layout->setSpacing(0); + this->setLayout(m_layout); + + this->initForecastWidget(); + this->initIndexTitleWidget(); + this->initIndexWidget(); + m_layout->addStretch(); +} + +void ForecastWeatherWidget::initForecastWidget() +{ + QWidget *w = new QWidget; + w->setFixedSize(this->width(), 160); + //test background + /*w->setAutoFillBackground(true); + QPalette palette; + palette.setBrush(QPalette::Window, QBrush(Qt::gray)); + w->setPalette(palette); + //w->setStyleSheet("QLabel{border-radius: 0px; color:rgb(250, 250, 250); background-color:rgba(0,0,0,0.2);}"); + */ + w->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);//w->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); + m_forecastlayout = new QHBoxLayout(w); + m_forecastlayout->setContentsMargins(0, 10, 0, 10); + m_forecastlayout->setSpacing(20); + + m_layout->addWidget(w, 0, Qt::AlignTop); + + m_firstDay = new ForecastItemWidget(this); + m_secondDay = new ForecastItemWidget(this); + m_thirdDay = new ForecastItemWidget(this); +// m_thirdDay->setTextData(); + + m_leftVSeparator = new VSeparator; + m_rightVSeparator = new VSeparator; + + m_forecastlayout->addWidget(m_firstDay, 0, Qt::AlignVCenter); + m_forecastlayout->addWidget(m_leftVSeparator/*new VSeparator*/); + m_forecastlayout->addWidget(m_secondDay, 0, Qt::AlignVCenter); + m_forecastlayout->addWidget(m_rightVSeparator/*new VSeparator*/); + m_forecastlayout->addWidget(m_thirdDay, 0, Qt::AlignVCenter); +} + +void ForecastWeatherWidget::initIndexTitleWidget() +{ + QWidget *w = new QWidget; + w->setFixedSize(this->width(), 34); + + //test background + /*w->setAutoFillBackground(true); + QPalette palette; + palette.setBrush(QPalette::Window, QBrush(Qt::red)); + w->setPalette(palette); + //w->setStyleSheet("QLabel{border-radius: 0px; color:rgb(250, 250, 250); background-color:rgba(0,0,0,0.2);}"); + */ + w->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);//w->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); + m_indexTitlelayout = new QVBoxLayout(w); + m_indexTitlelayout->setContentsMargins(0, 0, 0, 0); + m_indexTitlelayout->setSpacing(5); + +// m_layout->addSpacing(5); + m_layout->addWidget(w, 0, Qt::AlignLeft); + + QLabel *iconLabel = new QLabel; + lifeTextLabel = new QLabel; + iconLabel->setFixedSize(20 ,20); + iconLabel->setStyleSheet("QLabel{border:none;background-color:transparent;}"); + iconLabel->setPixmap(QPixmap(":/res/life_index_d.png")); + lifeTextLabel->setStyleSheet("QLabel{border:none;background-color:transparent;color:#808080;font-size:12px;}"); + lifeTextLabel->setText(tr("Life index")); + + QHBoxLayout *h_layout = new QHBoxLayout; + h_layout->setContentsMargins(10, 0, 0, 0); + h_layout->setSpacing(5); + h_layout->addWidget(iconLabel, 0, Qt::AlignLeft); + h_layout->addWidget(lifeTextLabel, 0, Qt::AlignVCenter | Qt::AlignLeft); + h_layout->addStretch(); + + m_topHseperator = new HSeparator; + m_bottomHseperator = new HSeparator; + m_indexTitlelayout->addWidget(m_topHseperator/*new HSeparator*/); + m_indexTitlelayout->addStretch(); + m_indexTitlelayout->addLayout(h_layout); +// m_indexTitlelayout->addWidget(iconLabel, 0, Qt::AlignLeft); +// m_indexTitlelayout->addWidget(lifeTextLabel, 0, Qt::AlignVCenter | Qt::AlignLeft); + m_indexTitlelayout->addStretch(); + m_indexTitlelayout->addWidget(m_bottomHseperator/*new HSeparator*/); +} + +void ForecastWeatherWidget::initIndexWidget() +{ + QWidget *w = new QWidget; + w->setFixedSize(this->width(), 146); + //test background + /*w->setAutoFillBackground(true); + QPalette palette; + palette.setBrush(QPalette::Window, QBrush(Qt::blue)); + w->setPalette(palette); + //w->setStyleSheet("QLabel{border-radius: 0px; color:rgb(250, 250, 250); background-color:rgba(0,0,0,0.2);}"); + */ + w->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);//w->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); + m_indexlayout = new QVBoxLayout(w); + m_indexlayout->setContentsMargins(5, 5, 5, 5); + m_indexlayout->setSpacing(3); + m_layout->addWidget(w, 0, Qt::AlignHCenter); + + m_indexGridLayout = new QGridLayout; + m_indexGridLayout->setSpacing(1); + m_indexGridLayout->setMargin(0); + m_indexlayout->addLayout(m_indexGridLayout); + m_indexlayout->setSpacing(1); + + this->refershLifeIndexGridLayout(); + + showLifeStyleIndex(QString()); +} + +void ForecastWeatherWidget::refershLifeIndexGridLayout() +{ + while (QLayoutItem *item = m_indexGridLayout->takeAt(0)) { + item->widget()->deleteLater(); + delete item; + } + + for(int i=0; iaddWidget(item, index / 3, index % 3); + TextTip *tip = this->setTipWidget(item, ""); + m_tips.append(tip); + m_lifeItems.append(item); + } +} + +void ForecastWeatherWidget::refreshForecastData(const ForecastWeather &data, int index) +{ + if (index == 0) { + m_firstDay->resetForecastData(data, index); + } + else if (index == 1) { + m_secondDay->resetForecastData(data, index); + } + if (index == 2) { + m_thirdDay->resetForecastData(data, index); + } +} + +void ForecastWeatherWidget::refreshLifestyleData(const LifeStyle &data) +{ + int n = 0; + if (m_lifeItems.count() == 8 && m_tips.count() == 8) { + //舒适度指数 + m_lifeItems[n]->refreshLifeStyle(data.comf_brf, data.comf_txt); + m_tips[n++]->resetTipText(data.comf_txt); + + //穿衣指数 + m_lifeItems[n]->refreshLifeStyle(data.drsg_brf, data.drsg_txt); + m_tips[n++]->resetTipText(data.drsg_txt); + + //感冒指数 + m_lifeItems[n]->refreshLifeStyle(data.flu_brf, data.flu_txt); + m_tips[n++]->resetTipText(data.flu_txt); + + //运动指数 + m_lifeItems[n]->refreshLifeStyle(data.sport_brf, data.sport_txt); + m_tips[n++]->resetTipText(data.sport_txt); + + //旅游指数 + m_lifeItems[n]->refreshLifeStyle(data.trav_brf, data.trav_txt); + m_tips[n++]->resetTipText(data.trav_txt); + + //紫外线指数 + m_lifeItems[n]->refreshLifeStyle(data.uv_brf, data.uv_txt); + m_tips[n++]->resetTipText(data.uv_txt); + + //洗车指数 + m_lifeItems[n]->refreshLifeStyle(data.cw_brf, data.cw_txt); + m_tips[n++]->resetTipText(data.cw_txt); + + //空气污染扩散条件指数 + m_lifeItems[n]->refreshLifeStyle(data.air_brf, data.air_txt); + m_tips[n++]->resetTipText(data.air_txt); + } +} + +TextTip *ForecastWeatherWidget::setTipWidget(QWidget *w, const QString &txt) +{ + TextTip *tip = new TextTip(txt, this); + w->setProperty("TextTipWidget", QVariant::fromValue(tip)); + w->installEventFilter(m_tipModule); + + return tip; +} + +void ForecastWeatherWidget::showLifeStyleIndex(const QString &name) +{ + //comf_brf 舒适度指数 + //drsg_brf 穿衣指数 + //flu_brf 感冒指数 + //sport_brf 运动指数 + //trav_brf 旅游指数 + //uv_brf 紫外线指数 + //cw_brf 洗车指数 + //air_brf 空气污染扩散条件指数 + + /*static const char *index_strings[] = { + QT_TR_NOOP("comf index"), + QT_TR_NOOP("drsg index"), + QT_TR_NOOP("flu index"), + QT_TR_NOOP("sport index"), + QT_TR_NOOP("trav index"), + QT_TR_NOOP("uv index"), + QT_TR_NOOP("cw index"), + QT_TR_NOOP("air index") + }; + + if (!name.isEmpty()) { + const int idx = LIFESTYLE.indexOf(name); + qDebug() << tr(index_strings[idx]); + }*/ +} + +void ForecastWeatherWidget::setDayStyleSheets() +{ + lifeTextLabel->setStyleSheet("QLabel{border:none;background-color:transparent;color:#808080;font-size:12px;}"); + + m_leftVSeparator->setStyleSheet("QFrame{background-color: rgba(238, 238, 238, 1.0);}"); + m_rightVSeparator->setStyleSheet("QFrame{background-color: rgba(238, 238, 238, 1.0);}"); + m_topHseperator->setStyleSheet("QFrame{background-color: rgba(238, 238, 238, 0.5);margin-left:5px;margin-right:5px;}"); + m_bottomHseperator->setStyleSheet("QFrame{background-color: rgba(238, 238, 238, 0.5);margin-left:5px;margin-right:5px;}"); + + m_firstDay->setDayStyleSheets(); + m_secondDay->setDayStyleSheets(); + m_thirdDay->setDayStyleSheets(); + + for(int i=0; isetDayStyleSheets(); + } +} + +void ForecastWeatherWidget::setNightStyleSheets() +{ + lifeTextLabel->setStyleSheet("QLabel{border:none;background-color:transparent;color:#d9d9d9;font-size:12px;}"); + + m_leftVSeparator->setStyleSheet("QFrame{background-color: rgba(238, 238, 238, 0.5);}"); + m_rightVSeparator->setStyleSheet("QFrame{background-color: rgba(238, 238, 238, 0.5);}"); + m_topHseperator->setStyleSheet("QFrame{background-color: rgba(238, 238, 238, 0.2);margin-left:5px;margin-right:5px;}"); + m_bottomHseperator->setStyleSheet("QFrame{background-color: rgba(238, 238, 238, 0.2);margin-left:5px;margin-right:5px;}"); + + m_firstDay->setNightStyleSheets(); + m_secondDay->setNightStyleSheets(); + m_thirdDay->setNightStyleSheets(); + + for(int i=0; isetNightStyleSheets(); + } +} + +void ForecastWeatherWidget::leaveEvent(QEvent *e) +{ + QWidget::leaveEvent(e); + + showLifeStyleIndex(QString()); +} diff -Nru indicator-china-weather-2.2.8/src/forecastweatherwidget.h indicator-china-weather-3.0.2~201904291430/src/forecastweatherwidget.h --- indicator-china-weather-2.2.8/src/forecastweatherwidget.h 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/forecastweatherwidget.h 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,86 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef FORECAST_WEATHER_WIDGET_H +#define FORECAST_WEATHER_WIDGET_H + +#include +#include +#include +#include + +#include "data.h" + +class ForecastItemWidget; +class IndexItemWidget; +class HSeparator; +class VSeparator; +class TextTip; +class TipModule; + +class ForecastWeatherWidget : public QFrame +{ + Q_OBJECT + +public: + explicit ForecastWeatherWidget(QFrame *parent = 0); + ~ForecastWeatherWidget(); + + void initForecastWidget(); + void initIndexTitleWidget(); + void initIndexWidget(); + void initWidgets(); + void refershLifeIndexGridLayout(); + + void refreshForecastData(const ForecastWeather &data, int index); + void refreshLifestyleData(const LifeStyle &data); + + void setDayStyleSheets(); + void setNightStyleSheets(); + + TextTip *setTipWidget(QWidget *w, const QString &txt); + +public slots: + void showLifeStyleIndex(const QString &name); + +protected: + void leaveEvent(QEvent *e); + +private: + QVBoxLayout *m_layout = nullptr; + QHBoxLayout *m_forecastlayout = nullptr; + QVBoxLayout *m_indexTitlelayout = nullptr; + QVBoxLayout *m_indexlayout = nullptr; + QGridLayout *m_indexGridLayout = nullptr; + QStringList m_lifeIndexList; + QStringList m_lifeIndexIconList; + QLabel *lifeTextLabel = nullptr; + ForecastItemWidget *m_firstDay = nullptr; + ForecastItemWidget *m_secondDay = nullptr; + ForecastItemWidget *m_thirdDay = nullptr; + VSeparator *m_leftVSeparator = nullptr; + VSeparator *m_rightVSeparator = nullptr; + HSeparator *m_topHseperator = nullptr; + HSeparator *m_bottomHseperator = nullptr; + QList m_lifeItems; + QList m_tips; + TipModule *m_tipModule = nullptr; +}; + +#endif // FORECAST_WEATHER_WIDGET_H diff -Nru indicator-china-weather-2.2.8/src/global.cpp indicator-china-weather-3.0.2~201904291430/src/global.cpp --- indicator-china-weather-2.2.8/src/global.cpp 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/global.cpp 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "global.h" +#include "preferences.h" + +#include +#include +#include +#include +#include + +QSettings *Global::m_settings = 0; +Preferences *Global::m_preferences = 0; + +using namespace Global; + +void Global::global_init() +{ + QString filename = QDir::homePath() + "/.config/kylin-weather/kylin-weather.ini"; + m_settings = new QSettings(filename, QSettings::IniFormat); + m_settings->setIniCodec("UTF-8"); + + m_preferences = new Preferences; +} + +void Global::global_end() +{ + delete m_preferences; + m_preferences = 0; + + delete m_settings; + m_settings = 0; +} diff -Nru indicator-china-weather-2.2.8/src/global.h indicator-china-weather-3.0.2~201904291430/src/global.h --- indicator-china-weather-2.2.8/src/global.h 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/global.h 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef GLOBAL_H +#define GLOBAL_H + +#include + +class QSettings; +class Preferences; + +namespace Global { + + extern QSettings *m_settings; + extern Preferences *m_preferences; + + void global_init(); + void global_end(); +} + +#endif // GLOBAL_H diff -Nru indicator-china-weather-2.2.8/src/indexitemwidget.cpp indicator-china-weather-3.0.2~201904291430/src/indexitemwidget.cpp --- indicator-china-weather-2.2.8/src/indexitemwidget.cpp 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/indexitemwidget.cpp 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,135 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "indexitemwidget.h" + +#include +#include +#include + +IndexItemWidget::IndexItemWidget(const QString &name, const QString &iconPath, QWidget *parent) + : QWidget(parent) + , m_mouseHover(false) + , m_iconPath(iconPath) + , m_brf("-") + , m_txt("-") + , m_titleColor(QColor("#cfcfcf")) + , m_txtColor(QColor("#808080")) +{ + this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + + if (name == "comf") { + m_indexName = QString(tr("comf")); + } + else if (name == "drsg") { + m_indexName = QString(tr("drsg")); + } + else if (name == "flu") { + m_indexName = QString(tr("flu")); + } + else if (name == "sport") { + m_indexName = QString(tr("sport")); + } + else if (name == "trav") { + m_indexName = QString(tr("trav")); + } + else if (name == "uv") { + m_indexName = QString(tr("uv")); + } + else if (name == "cw") { + m_indexName = QString(tr("cw")); + } + else if (name == "air") { + m_indexName = QString(tr("air")); + } + else { + m_indexName = name; + } +} + +void IndexItemWidget::refreshLifeStyle(const QString &brf, const QString &txt) +{ + this->m_brf = brf; + this->m_txt = txt; + update(); +} + +void IndexItemWidget::setDayStyleSheets() +{ + m_titleColor = QColor("#cfcfcf"); + m_txtColor = QColor("#808080"); + update(); +} + +void IndexItemWidget::setNightStyleSheets() +{ + m_titleColor = QColor("#808080"); + m_txtColor = QColor("#cdcdcd"); + update(); +} + +void IndexItemWidget::enterEvent(QEvent *event) +{ + QWidget::enterEvent(event); + + this->m_mouseHover = true; + emit this->requestShowMsg(m_indexName); + update(); +} + +void IndexItemWidget::leaveEvent(QEvent *event) +{ + QWidget::leaveEvent(event); + + this->m_mouseHover = false; + update(); +} + +void IndexItemWidget::paintEvent(QPaintEvent *e) +{ + QWidget::paintEvent(e); + + QPainter painter(this); + painter.fillRect(rect(), QColor(0, 0, 0, m_mouseHover ? 20 : 0)); + + const qreal ratio = qApp->devicePixelRatio(); + + painter.setRenderHint(QPainter::Antialiasing, true); + QPixmap icon = QPixmap(this->m_iconPath); + QRect iconRect(20, 2, icon.width()/ratio, icon.height()/ratio); + painter.drawPixmap(iconRect, icon); + + painter.setRenderHint(QPainter::Antialiasing, false); + + QFont font = painter.font(); + font.setPixelSize(12);//font.setPointSize(14); + QFontMetrics fm(font); + QPen pen(Qt::white); + painter.setPen(pen); + painter.setFont(font); + + QRect valueRect(iconRect.right() + 5, iconRect.y(), fm.width(this->m_brf), 20); + painter.setPen(QPen(m_txtColor)); + painter.drawText(valueRect, Qt::AlignVCenter | Qt::AlignLeft, this->m_brf); + + font.setPixelSize(10);//font.setPointSize(12); + QRect titleRect(valueRect.x(), valueRect.bottom(), this->width() - icon.width()/ratio - 5*2, 20); + painter.setPen(QPen(m_titleColor)); + painter.drawText(titleRect, Qt::AlignVCenter | Qt::AlignLeft, this->m_indexName); +} diff -Nru indicator-china-weather-2.2.8/src/indexitemwidget.h indicator-china-weather-3.0.2~201904291430/src/indexitemwidget.h --- indicator-china-weather-2.2.8/src/indexitemwidget.h 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/indexitemwidget.h 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef INDEXITEMWIDGET_H +#define INDEXITEMWIDGET_H + +#include + +class IndexItemWidget : public QWidget +{ + Q_OBJECT + +public: + explicit IndexItemWidget(const QString &name, const QString &iconPath, QWidget *parent = 0); + + void refreshLifeStyle(const QString &brf, const QString &txt); + + void setDayStyleSheets(); + void setNightStyleSheets(); + +signals: + void requestShowMsg(const QString &name) const; + +protected: + void enterEvent(QEvent *event) Q_DECL_OVERRIDE; + void leaveEvent(QEvent *event) Q_DECL_OVERRIDE; + void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; + +private: + bool m_mouseHover; + QString m_indexName; + QString m_iconPath; + QString m_brf; + QString m_txt; + QColor m_txtColor; + QColor m_titleColor; +}; + +#endif // INDEXITEMWIDGET_H diff -Nru indicator-china-weather-2.2.8/src/indexweatherwidget.cpp indicator-china-weather-3.0.2~201904291430/src/indexweatherwidget.cpp --- indicator-china-weather-2.2.8/src/indexweatherwidget.cpp 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/indexweatherwidget.cpp 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "indexweatherwidget.h" + +#include +#include +#include + +IndexWeatherWidget::IndexWeatherWidget(QFrame *parent) : + QFrame(parent) +{ + +} + +IndexWeatherWidget::~IndexWeatherWidget() +{ +} diff -Nru indicator-china-weather-2.2.8/src/indexweatherwidget.h indicator-china-weather-3.0.2~201904291430/src/indexweatherwidget.h --- indicator-china-weather-2.2.8/src/indexweatherwidget.h 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/indexweatherwidget.h 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2013 ~ 2018 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef INDEX_WEATHER_WIDGET_H +#define INDEX_WEATHER_WIDGET_H + +#include + +class IndexWeatherWidget : public QFrame +{ + Q_OBJECT + +public: + explicit IndexWeatherWidget(QFrame *parent = 0); + ~IndexWeatherWidget(); + +}; + +#endif // INDEX_WEATHER_WIDGET_H diff -Nru indicator-china-weather-2.2.8/src/__init__.py indicator-china-weather-3.0.2~201904291430/src/__init__.py --- indicator-china-weather-2.2.8/src/__init__.py 2018-03-19 06:04:16.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/__init__.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -#!/usr/bin/python -__author__ = 'Kobe Lee' diff -Nru indicator-china-weather-2.2.8/src/locations.txt indicator-china-weather-3.0.2~201904291430/src/locations.txt --- indicator-china-weather-2.2.8/src/locations.txt 2018-03-19 06:04:16.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/locations.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,2566 +0,0 @@ -北京,北京,北京:101010100:beijing -北京,北京,海淀:101010200:haidian -北京,北京,朝阳:101010300:chaoyang -北京,北京,顺义:101010400:shunyi -北京,北京,怀柔:101010500:huairou -北京,北京,通州:101010600:tongzhou -北京,北京,昌平:101010700:changping -北京,北京,延庆:101010800:yanqing -北京,北京,丰台:101010900:fengtai -北京,北京,石景山:101011000:shijingshan -北京,北京,大兴:101011100:daxing -北京,北京,房山:101011200:fangshan -北京,北京,密云:101011300:miyun -北京,北京,门头沟:101011400:mentougou -北京,北京,平谷:101011500:pinggu -上海,上海,上海:101020100:shanghai -上海,上海,闵行:101020200:minhang -上海,上海,宝山:101020300:baoshan -上海,上海,嘉定:101020500:jiading -上海,上海,浦东南汇:101020600:nanhui -上海,上海,金山:101020700:jinshan -上海,上海,青浦:101020800:qingpu -上海,上海,松江:101020900:songjiang -上海,上海,奉贤:101021000:fengxian -上海,上海,崇明:101021100:chongming -上海,上海,徐家汇:101021200:xujiahui -上海,上海,浦东:101021300:pudong -天津,天津,天津:101030100:tianjin -天津,天津,武清:101030200:wuqing -天津,天津,宝坻:101030300:baodi -天津,天津,东丽:101030400:dongli -天津,天津,西青:101030500:xiqing -天津,天津,北辰:101030600:beichen -天津,天津,宁河:101030700:ninghe -天津,天津,汉沽:101030800:hangu:han'gu -天津,天津,静海:101030900:jinghai -天津,天津,津南:101031000:jinnan -天津,天津,塘沽:101031100:tanggu -天津,天津,大港:101031200:dagang -天津,天津,蓟县:101031400:jixian -重庆,重庆,重庆:101040100:chongqing -重庆,重庆,永川:101040200:yongchuan -重庆,重庆,合川:101040300:hechuan -重庆,重庆,南川:101040400:nanchuan -重庆,重庆,江津:101040500:jiangjin -重庆,重庆,万盛:101040600:wansheng -重庆,重庆,渝北:101040700:yubei -重庆,重庆,北碚:101040800:beibei -重庆,重庆,巴南:101040900:banan:ba'nan -重庆,重庆,长寿:101041000:changshou -重庆,重庆,黔江:101041100:qianjiang -重庆,重庆,万州:101041300:wanzhou -重庆,重庆,涪陵:101041400:fuling -重庆,重庆,开县:101041500:kaixian -重庆,重庆,城口:101041600:chengkou -重庆,重庆,云阳:101041700:yunyang -重庆,重庆,巫溪:101041800:wuxi -重庆,重庆,奉节:101041900:fengjie -重庆,重庆,巫山:101042000:wushan -重庆,重庆,潼南:101042100:tongnan -重庆,重庆,垫江:101042200:dianjiang -重庆,重庆,梁平:101042300:liangping -重庆,重庆,忠县:101042400:zhongxian -重庆,重庆,石柱:101042500:shizhu -重庆,重庆,大足:101042600:dazu -重庆,重庆,荣昌:101042700:rongchang -重庆,重庆,铜梁:101042800:tongliang -重庆,重庆,璧山:101042900:bishan -重庆,重庆,丰都:101043000:fengdu -重庆,重庆,武隆:101043100:wulong -重庆,重庆,彭水:101043200:pengshui -重庆,重庆,綦江:101043300:qijiang -重庆,重庆,酉阳:101043400:youyang -重庆,重庆,秀山:101043600:xiushan -黑龙江,哈尔滨,哈尔滨:101050101:haerbin:ha'erbin -黑龙江,哈尔滨,双城:101050102:shuangcheng -黑龙江,哈尔滨,呼兰:101050103:hulan -黑龙江,哈尔滨,阿城:101050104:acheng -黑龙江,哈尔滨,宾县:101050105:binxian -黑龙江,哈尔滨,依兰:101050106:yilan -黑龙江,哈尔滨,巴彦:101050107:bayan -黑龙江,哈尔滨,通河:101050108:tonghe -黑龙江,哈尔滨,方正:101050109:fangzheng -黑龙江,哈尔滨,延寿:101050110:yanshou -黑龙江,哈尔滨,尚志:101050111:shangzhi -黑龙江,哈尔滨,五常:101050112:wuchang -黑龙江,哈尔滨,木兰:101050113:mulan -黑龙江,齐齐哈尔,齐齐哈尔:101050201:qiqihaer -黑龙江,齐齐哈尔,讷河:101050202:nehe -黑龙江,齐齐哈尔,龙江:101050203:longjiang -黑龙江,齐齐哈尔,甘南:101050204:gannan -黑龙江,齐齐哈尔,富裕:101050205:fuyu -黑龙江,齐齐哈尔,依安:101050206:yian -黑龙江,齐齐哈尔,拜泉:101050207:baiquan -黑龙江,齐齐哈尔,克山:101050208:keshan -黑龙江,齐齐哈尔,克东:101050209:kedong -黑龙江,齐齐哈尔,泰来:101050210:tailai -黑龙江,牡丹江,牡丹江:101050301:mudanjiang -黑龙江,牡丹江,海林:101050302:hailin -黑龙江,牡丹江,穆棱:101050303:muling -黑龙江,牡丹江,林口:101050304:linkou -黑龙江,牡丹江,绥芬河:101050305:suifenhe -黑龙江,牡丹江,宁安:101050306:ningan:ning'an -黑龙江,牡丹江,东宁:101050307:dongning -黑龙江,佳木斯,佳木斯:101050401:jiamusi -黑龙江,佳木斯,汤原:101050402:tangyuan -黑龙江,佳木斯,抚远:101050403:fuyuan -黑龙江,佳木斯,桦川:101050404:huachuan -黑龙江,佳木斯,桦南:101050405:huanan -黑龙江,佳木斯,同江:101050406:tongjiang -黑龙江,佳木斯,富锦:101050407:fujin -黑龙江,绥化,绥化:101050501:suihua -黑龙江,绥化,肇东:101050502:zhaodong -黑龙江,绥化,安达:101050503:anda -黑龙江,绥化,海伦:101050504:hailun -黑龙江,绥化,明水:101050505:mingshui -黑龙江,绥化,望奎:101050506:wangkui -黑龙江,绥化,兰西:101050507:lanxi -黑龙江,绥化,青冈:101050508:qinggang -黑龙江,绥化,庆安:101050509:qingan -黑龙江,绥化,绥棱:101050510:suiling -黑龙江,黑河,黑河:101050601:heihe -黑龙江,黑河,嫩江:101050602:nenjiang -黑龙江,黑河,孙吴:101050603:sunwu -黑龙江,黑河,逊克:101050604:xunke -黑龙江,黑河,五大连池:101050605:wudalianchi -黑龙江,黑河,北安:101050606:beian -黑龙江,大兴安岭,大兴安岭:101050701:daxinganling -黑龙江,大兴安岭,塔河:101050702:tahe -黑龙江,大兴安岭,漠河:101050703:mohe -黑龙江,大兴安岭,呼玛:101050704:huma -黑龙江,大兴安岭,呼中:101050705:huzhong -黑龙江,大兴安岭,新林:101050706:xinlin -黑龙江,大兴安岭,加格达奇:101050708:jiagedaqi -黑龙江,伊春,伊春:101050801:yichun -黑龙江,伊春,乌伊岭:101050802:wuyiling -黑龙江,伊春,五营:101050803:wuying -黑龙江,伊春,铁力:101050804:tieli -黑龙江,伊春,嘉荫:101050805:jiayin -黑龙江,大庆,大庆:101050901:daqing -黑龙江,大庆,林甸:101050902:lindian -黑龙江,大庆,肇州:101050903:zhaozhou -黑龙江,大庆,肇源:101050904:zhaoyuan -黑龙江,大庆,杜尔伯特:101050905:duerbote:du'erbote -黑龙江,七台河,七台河:101051002:qitaihe -黑龙江,七台河,勃利:101051003:boli -黑龙江,鸡西,鸡西:101051101:jixi -黑龙江,鸡西,虎林:101051102:hulin -黑龙江,鸡西,密山:101051103:mishan -黑龙江,鸡西,鸡东:101051104:jidong -黑龙江,鹤岗,鹤岗:101051201:hegang -黑龙江,鹤岗,绥滨:101051202:suibin -黑龙江,鹤岗,萝北:101051203:luobei -黑龙江,双鸭山,双鸭山:101051301:shuangyashan -黑龙江,双鸭山,集贤:101051302:jixian -黑龙江,双鸭山,宝清:101051303:baoqing -黑龙江,双鸭山,饶河:101051304:raohe -黑龙江,双鸭山,友谊:101051305:youyi -吉林,长春,长春:101060101:changchun -吉林,长春,农安:101060102:nongan -吉林,长春,德惠:101060103:dehui -吉林,长春,九台:101060104:jiutai -吉林,长春,榆树:101060105:yushu -吉林,长春,双阳:101060106:shuangyang -吉林,吉林,吉林:101060201:jilin -吉林,吉林,舒兰:101060202:shulan -吉林,吉林,永吉:101060203:yongji -吉林,吉林,蛟河:101060204:jiaohe -吉林,吉林,磐石:101060205:panshi -吉林,吉林,桦甸:101060206:huadian -吉林,延边,延吉:101060301:yanji -吉林,延边,敦化:101060302:dunhua -吉林,延边,安图:101060303:antu -吉林,延边,汪清:101060304:wangqing -吉林,延边,和龙:101060305:helong -吉林,延边,龙井:101060307:longjing -吉林,延边,珲春:101060308:hunchun -吉林,延边,图们:101060309:tumen -吉林,四平,四平:101060401:siping -吉林,四平,双辽:101060402:shuangliao -吉林,四平,梨树:101060403:lishu -吉林,四平,公主岭:101060404:gongzhuling -吉林,四平,伊通:101060405:yitong -吉林,通化,通化:101060501:tonghua -吉林,通化,梅河口:101060502:meihekou -吉林,通化,柳河:101060503:liuhe -吉林,通化,辉南:101060504:huinan -吉林,通化,集安:101060505:jian -吉林,通化,通化县:101060506:tonghuaxian -吉林,白城,白城:101060601:baicheng -吉林,白城,洮南:101060602:taonan -吉林,白城,大安:101060603:daan -吉林,白城,镇赉:101060604:zhenlai -吉林,白城,通榆:101060605:tongyu -吉林,辽源,辽源:101060701:liaoyuan -吉林,辽源,东丰:101060702:dongfeng -吉林,辽源,东辽:101060703:dongliao -吉林,松原,松原:101060801:songyuan -吉林,松原,乾安:101060802:qianan -吉林,松原,前郭:101060803:qianguo -吉林,松原,长岭:101060804:changling -吉林,松原,扶余:101060805:fuyu -吉林,白山,白山:101060901:baishan -吉林,白山,靖宇:101060902:jingyu -吉林,白山,临江:101060903:linjiang -吉林,白山,东岗:101060904:donggang -吉林,白山,长白:101060905:changbai -吉林,白山,抚松:101060906:fusong -吉林,白山,江源:101060907:jiangyuan -辽宁,沈阳,沈阳:101070101:shenyang -辽宁,沈阳,辽中:101070103:liaozhong -辽宁,沈阳,康平:101070104:kangping -辽宁,沈阳,法库:101070105:faku -辽宁,沈阳,新民:101070106:xinming -辽宁,大连,大连:101070201:dalian -辽宁,大连,瓦房店:101070202:wafangdian -辽宁,大连,金州:101070203:jinzhou -辽宁,大连,普兰店:101070204:pulandian -辽宁,大连,旅顺:101070205:lvshun -辽宁,大连,长海:101070206:changhai -辽宁,大连,庄河:101070207:zhuanghe -辽宁,鞍山,鞍山:101070301:anshan -辽宁,鞍山,台安:101070302:taian -辽宁,鞍山,岫岩:101070303:xiuyan -辽宁,鞍山,海城:101070304:haicheng -辽宁,抚顺,抚顺:101070401:fushun -辽宁,抚顺,新宾:101070402:xinbin -辽宁,抚顺,清原:101070403:qingyuan -辽宁,抚顺,章党:101070404:zhangdang -辽宁,本溪,本溪:101070501:benxi -辽宁,本溪,本溪县:101070502:benxixian -辽宁,本溪,桓仁:101070504:huanren -辽宁,丹东,丹东:101070601:dandong -辽宁,丹东,凤城:101070602:fengcheng -辽宁,丹东,宽甸:101070603:kuandian -辽宁,丹东,东港:101070604:donggang -辽宁,锦州,锦州:101070701:jinzhou -辽宁,锦州,凌海:101070702:linghai -辽宁,锦州,义县:101070704:yixian -辽宁,锦州,黑山:101070705:heishan -辽宁,锦州,北镇:101070706:beizhen -辽宁,营口,营口:101070801:yingkou -辽宁,营口,大石桥:101070802:dashiqiao -辽宁,营口,盖州:101070803:gaizhou -辽宁,阜新,阜新:101070901:fuxin -辽宁,阜新,彰武:101070902:zhangwu -辽宁,辽阳,辽阳:101071001:liaoyang -辽宁,辽阳,辽阳县:101071002:liaoyangxian -辽宁,辽阳,灯塔:101071003:dengta -辽宁,辽阳,弓长岭:101071004:gongchangling -辽宁,铁岭,铁岭:101071101:tieling -辽宁,铁岭,开原:101071102:kaiyuan -辽宁,铁岭,昌图:101071103:changtu -辽宁,铁岭,西丰:101071104:xifeng -辽宁,铁岭,调兵山:101071105:tiefa -辽宁,朝阳,朝阳:101071201:chaoyang -辽宁,朝阳,凌源:101071203:lingyuan -辽宁,朝阳,喀左:101071204:kazuo -辽宁,朝阳,北票:101071205:beipiao -辽宁,朝阳,建平县:101071207:jianpingxian -辽宁,盘锦,盘锦:101071301:panjin -辽宁,盘锦,大洼:101071302:dawa -辽宁,盘锦,盘山:101071303:panshan -辽宁,葫芦岛,葫芦岛:101071401:huludao -辽宁,葫芦岛,建昌:101071402:jianchang -辽宁,葫芦岛,绥中:101071403:suizhong -辽宁,葫芦岛,兴城:101071404:xingcheng -内蒙古,呼和浩特,呼和浩特:101080101:huhehaote -内蒙古,呼和浩特,土左旗:101080102:tuzuoqi -内蒙古,呼和浩特,托县:101080103:tuoxian -内蒙古,呼和浩特,和林:101080104:helin -内蒙古,呼和浩特,清水河:101080105:qingshuihe -内蒙古,呼和浩特,呼市郊区:101080106:hushijiaoqu -内蒙古,呼和浩特,武川:101080107:wuchuan -内蒙古,包头,包头:101080201:baotou -内蒙古,包头,白云鄂博:101080202:baiyunebo -内蒙古,包头,满都拉:101080203:mandula -内蒙古,包头,土右旗:101080204:tuyouqi -内蒙古,包头,固阳:101080205:guyang -内蒙古,包头,达茂旗:101080206:damaoqi -内蒙古,包头,希拉穆仁:101080207:xilamuren -内蒙古,乌海,乌海:101080301:wuhai -内蒙古,乌兰察布,集宁:101080401:jining -内蒙古,乌兰察布,卓资:101080402:zhuozi -内蒙古,乌兰察布,化德:101080403:huade -内蒙古,乌兰察布,商都:101080404:shangdu -内蒙古,乌兰察布,兴和:101080406:xinghe -内蒙古,乌兰察布,凉城:101080407:liangcheng -内蒙古,乌兰察布,察右前旗:101080408:chayouqianqi -内蒙古,乌兰察布,察右中旗:101080409:chayouzhongqi -内蒙古,乌兰察布,察右后旗:101080410:chayouhouqi -内蒙古,乌兰察布,四子王旗:101080411:siziwangqi -内蒙古,乌兰察布,丰镇:101080412:fengzhen -内蒙古,通辽,通辽:101080501:tongliao -内蒙古,通辽,舍伯吐:101080502:shebotu -内蒙古,通辽,科左中旗:101080503:kezuozhongqi -内蒙古,通辽,科左后旗:101080504:kezuohouqi -内蒙古,通辽,青龙山:101080505:qinglongshan -内蒙古,通辽,开鲁:101080506:kailu -内蒙古,通辽,库伦:101080507:kulun -内蒙古,通辽,奈曼:101080508:naiman -内蒙古,通辽,扎鲁特:101080509:zhalute -内蒙古,通辽,巴雅尔吐胡硕:101080511:bayaertuhushuo -内蒙古,通辽,霍林郭勒:101081108:huolinguole -内蒙古,赤峰,赤峰:101080601:chifeng -内蒙古,赤峰,阿鲁旗:101080603:aluqi -内蒙古,赤峰,浩尔吐:101080604:haoertu -内蒙古,赤峰,巴林左旗:101080605:balinzuoqi -内蒙古,赤峰,巴林右旗:101080606:balinyouqi -内蒙古,赤峰,林西:101080607:linxi -内蒙古,赤峰,克什克腾:101080608:keshiketeng -内蒙古,赤峰,翁牛特:101080609:wengniute -内蒙古,赤峰,岗子:101080610:gangzi -内蒙古,赤峰,喀喇沁:101080611:kalaqin -内蒙古,赤峰,八里罕:101080612:balihan -内蒙古,赤峰,宁城:101080613:ningcheng -内蒙古,赤峰,敖汉:101080614:aohan -内蒙古,赤峰,宝国吐:101080615:baoguotu -内蒙古,鄂尔多斯,鄂尔多斯:101080701:eerduosi -内蒙古,鄂尔多斯,达拉特:101080703:dalate -内蒙古,鄂尔多斯,准格尔:101080704:zhungeer -内蒙古,鄂尔多斯,鄂前旗:101080705:eqianqi -内蒙古,鄂尔多斯,河南:101080706:henan -内蒙古,鄂尔多斯,伊克乌素:101080707:yikewusu -内蒙古,鄂尔多斯,鄂托克:101080708:etuoke -内蒙古,鄂尔多斯,杭锦旗:101080709:hangjinqi -内蒙古,鄂尔多斯,乌审旗:101080710:wushenqi -内蒙古,鄂尔多斯,伊金霍洛:101080711:yijinhuoluo -内蒙古,鄂尔多斯,乌审召:101080712:wushenzhao -内蒙古,鄂尔多斯,东胜:101080713:dongsheng -内蒙古,巴彦淖尔,临河:101080801:linhe -内蒙古,巴彦淖尔,五原:101080802:wuyuan -内蒙古,巴彦淖尔,磴口:101080803:dengkou -内蒙古,巴彦淖尔,乌前旗:101080804:wuqianqi -内蒙古,巴彦淖尔,大佘太:101080805:dashetai -内蒙古,巴彦淖尔,乌中旗:101080806:wuzhongqi -内蒙古,巴彦淖尔,乌后旗:101080807:wuhouqi -内蒙古,巴彦淖尔,海力素:101080808:hailisu -内蒙古,巴彦淖尔,那仁宝力格:101080809:narenbaolige -内蒙古,巴彦淖尔,杭锦后旗:101080810:hangjinhouqi -内蒙古,锡林郭勒,锡林浩特:101080901:xilinhaote -内蒙古,锡林郭勒,二连浩特:101080903:erlianhaote -内蒙古,锡林郭勒,阿巴嘎:101080904:abaga -内蒙古,锡林郭勒,苏左旗:101080906:suzuoqi -内蒙古,锡林郭勒,苏右旗:101080907:suyouqi -内蒙古,锡林郭勒,朱日和:101080908:zhurihe -内蒙古,锡林郭勒,东乌旗:101080909:dongwuqi -内蒙古,锡林郭勒,西乌旗:101080910:xiwuqi -内蒙古,锡林郭勒,太仆寺:101080911:taibusiqi -内蒙古,锡林郭勒,镶黄旗:101080912:xianghuang -内蒙古,锡林郭勒,正镶白旗:101080913:zhengxiangbaiqi -内蒙古,锡林郭勒,正蓝旗:101080914:zhenglanqi -内蒙古,锡林郭勒,多伦:101080915:duolun -内蒙古,锡林郭勒,博克图:101080916:boketu -内蒙古,锡林郭勒,乌拉盖:101080917:wulagai -内蒙古,呼伦贝尔,海拉尔:101081001:hailaer -内蒙古,呼伦贝尔,小二沟:101081002:xiaoergou -内蒙古,呼伦贝尔,阿荣旗:101081003:arongqi -内蒙古,呼伦贝尔,莫力达瓦:101081004:molidawa -内蒙古,呼伦贝尔,鄂伦春旗:101081005:elunchunqi -内蒙古,呼伦贝尔,鄂温克旗:101081006:ewenkeqi -内蒙古,呼伦贝尔,陈旗:101081007:chenqi -内蒙古,呼伦贝尔,新左旗:101081008:xinzuoqi -内蒙古,呼伦贝尔,新右旗:101081009:xinyouqi -内蒙古,呼伦贝尔,满洲里:101081010:manzhouli -内蒙古,呼伦贝尔,牙克石:101081011:yakeshi -内蒙古,呼伦贝尔,扎兰屯:101081012:zhalantun -内蒙古,呼伦贝尔,额尔古纳:101081014:eerguna -内蒙古,呼伦贝尔,根河:101081015:genhe -内蒙古,呼伦贝尔,图里河:101081016:tulihe -内蒙古,兴安盟,高力板:101080510:gaoliban -内蒙古,兴安盟,乌兰浩特:101081101:wulanhaote -内蒙古,兴安盟,阿尔山:101081102:aershan -内蒙古,兴安盟,科右中旗:101081103:keyouzhongqi -内蒙古,兴安盟,胡尔勒:101081104:huerle -内蒙古,兴安盟,扎赉特:101081105:zhanlaite -内蒙古,兴安盟,索伦:101081106:suolun -内蒙古,兴安盟,突泉:101081107:tuquan -内蒙古,兴安盟,科右前旗:101081109:keyouqianqi -内蒙古,阿拉善盟,阿左旗:101081201:azuoqi -内蒙古,阿拉善盟,阿右旗:101081202:ayouqi -内蒙古,阿拉善盟,额济纳:101081203:ejina -内蒙古,阿拉善盟,拐子湖:101081204:guanzihu -内蒙古,阿拉善盟,吉兰太:101081205:jilantai -内蒙古,阿拉善盟,锡林高勒:101081206:xilingaole -内蒙古,阿拉善盟,头道湖:101081207:toudaohu -内蒙古,阿拉善盟,中泉子:101081208:zhongquanzi -内蒙古,阿拉善盟,诺尔公:101081209:nuoergong -内蒙古,阿拉善盟,雅布赖:101081210:yabulai -内蒙古,阿拉善盟,乌斯泰:101081211:wusitai -内蒙古,阿拉善盟,孪井滩:101081212:luanjingtan -河北,石家庄,石家庄:101090101:shijiazhuang -河北,石家庄,井陉:101090102:jingxing -河北,石家庄,正定:101090103:zhengding -河北,石家庄,栾城:101090104:luancheng -河北,石家庄,行唐:101090105:xingtang -河北,石家庄,灵寿:101090106:lingshou -河北,石家庄,高邑:101090107:gaoyi -河北,石家庄,深泽:101090108:shenze -河北,石家庄,赞皇:101090109:zanhuang -河北,石家庄,无极:101090110:wuji -河北,石家庄,平山:101090111:pingshan -河北,石家庄,元氏:101090112:yuanshi -河北,石家庄,赵县:101090113:zhaoxian -河北,石家庄,辛集:101090114:xinji -河北,石家庄,藁城:101090115:gaocheng -河北,石家庄,晋州:101090116:jinzhou -河北,石家庄,新乐:101090117:xinle -河北,石家庄,鹿泉:101090118:luquan -河北,保定,保定:101090201:baoding -河北,保定,满城:101090202:mancheng -河北,保定,阜平:101090203:fuping -河北,保定,徐水:101090204:xushui -河北,保定,唐县:101090205:tangxian -河北,保定,高阳:101090206:gaoyang -河北,保定,容城:101090207:rongcheng -河北,保定,涞源:101090209:laiyuan -河北,保定,望都:101090210:wangdu -河北,保定,安新:101090211:anxin -河北,保定,易县:101090212:yixian -河北,保定,曲阳:101090214:quyang -河北,保定,蠡县:101090215:lixian -河北,保定,顺平:101090216:shunping -河北,保定,雄县:101090217:xiongxian -河北,保定,涿州:101090218:zhuozhou -河北,保定,定州:101090219:dingzhou -河北,保定,安国:101090220:anguo -河北,保定,高碑店:101090221:gaobeidian -河北,保定,涞水:101090222:laishui -河北,保定,定兴:101090223:dingxing -河北,保定,清苑:101090224:qingyuan -河北,保定,博野:101090225:boye -河北,张家口,张家口:101090301:zhangjiakou -河北,张家口,宣化:101090302:xuanhua -河北,张家口,张北:101090303:zhangbei -河北,张家口,康保:101090304:kangbao -河北,张家口,沽源:101090305:guyuan -河北,张家口,尚义:101090306:shangyi -河北,张家口,蔚县:101090307:yuxian -河北,张家口,阳原:101090308:yangyuan -河北,张家口,怀安:101090309:huaian -河北,张家口,万全:101090310:wanquan -河北,张家口,怀来:101090311:huailai -河北,张家口,涿鹿:101090312:zhuolu -河北,张家口,赤城:101090313:chicheng -河北,张家口,崇礼:101090314:chongli -河北,承德,承德:101090402:chengde -河北,承德,承德县:101090403:chengdexian -河北,承德,兴隆:101090404:xinglong -河北,承德,平泉:101090405:pingquan -河北,承德,滦平:101090406:luanping -河北,承德,隆化:101090407:longhua -河北,承德,丰宁:101090408:fengning -河北,承德,宽城:101090409:kuancheng -河北,承德,围场:101090410:weichang -河北,唐山,唐山:101090501:tangshan -河北,唐山,丰南:101090502:fengnan -河北,唐山,丰润:101090503:fengrun -河北,唐山,滦县:101090504:luanxian -河北,唐山,滦南:101090505:luannan -河北,唐山,乐亭:101090506:leting -河北,唐山,迁西:101090507:qianxi -河北,唐山,玉田:101090508:yutian -河北,唐山,唐海:101090509:tanghai -河北,唐山,遵化:101090510:zunhua -河北,唐山,迁安:101090511:qianan -河北,唐山,曹妃甸:101090512:caofeidian -河北,廊坊,廊坊:101090601:langfang -河北,廊坊,固安:101090602:guan -河北,廊坊,永清:101090603:yongqing -河北,廊坊,香河:101090604:xianghe -河北,廊坊,大城:101090605:dacheng -河北,廊坊,文安:101090606:wenan -河北,廊坊,大厂:101090607:dachang -河北,廊坊,霸州:101090608:bazhou -河北,廊坊,三河:101090609:sanhe -河北,沧州,沧州:101090701:cangzhou -河北,沧州,青县:101090702:qingxian -河北,沧州,东光:101090703:dongguang -河北,沧州,海兴:101090704:haixing -河北,沧州,盐山:101090705:yanshan -河北,沧州,肃宁:101090706:suning -河北,沧州,南皮:101090707:nanpi -河北,沧州,吴桥:101090708:wuqiao -河北,沧州,献县:101090709:xianxian -河北,沧州,孟村:101090710:mengcun -河北,沧州,泊头:101090711:botou -河北,沧州,任丘:101090712:renqiu -河北,沧州,黄骅:101090713:huanghua -河北,沧州,河间:101090714:hejian -河北,沧州,沧县:101090716:cangxian -河北,衡水,衡水:101090801:hengshui -河北,衡水,枣强:101090802:zaoqiang -河北,衡水,武邑:101090803:wuyi -河北,衡水,武强:101090804:wuqiang -河北,衡水,饶阳:101090805:raoyang -河北,衡水,安平:101090806:anping -河北,衡水,故城:101090807:gucheng -河北,衡水,景县:101090808:jingxian -河北,衡水,阜城:101090809:fucheng -河北,衡水,冀州:101090810:jizhou -河北,衡水,深州:101090811:shenzhou -河北,邢台,邢台:101090901:xingtai -河北,邢台,临城:101090902:lincheng -河北,邢台,内丘:101090904:neiqiu -河北,邢台,柏乡:101090905:baixiang -河北,邢台,隆尧:101090906:longyao -河北,邢台,南和:101090907:nanhe -河北,邢台,宁晋:101090908:ningjin -河北,邢台,巨鹿:101090909:julu -河北,邢台,新河:101090910:xinhe -河北,邢台,广宗:101090911:guangzong -河北,邢台,平乡:101090912:pingxiang -河北,邢台,威县:101090913:weixian -河北,邢台,清河:101090914:qinghe -河北,邢台,临西:101090915:linxi -河北,邢台,南宫:101090916:nangong -河北,邢台,沙河:101090917:shahe -河北,邢台,任县:101090918:renxian -河北,邯郸,邯郸:101091001:handan -河北,邯郸,峰峰:101091002:fengfeng -河北,邯郸,临漳:101091003:linzhang -河北,邯郸,成安:101091004:chengan -河北,邯郸,大名:101091005:daming -河北,邯郸,涉县:101091006:shexian -河北,邯郸,磁县:101091007:cixian -河北,邯郸,肥乡:101091008:feixiang -河北,邯郸,永年:101091009:yongnian -河北,邯郸,邱县:101091010:qiuxian -河北,邯郸,鸡泽:101091011:jize -河北,邯郸,广平:101091012:guangping -河北,邯郸,馆陶:101091013:guantao -河北,邯郸,魏县:101091014:weixian -河北,邯郸,曲周:101091015:quzhou -河北,邯郸,武安:101091016:wuan -河北,秦皇岛,秦皇岛:101091101:qinhuangdao -河北,秦皇岛,青龙:101091102:qinglong -河北,秦皇岛,昌黎:101091103:changli -河北,秦皇岛,抚宁:101091104:funing -河北,秦皇岛,卢龙:101091105:lulong -河北,秦皇岛,北戴河:101091106:beidaihe -山西,太原,太原:101100101:taiyuan -山西,太原,清徐:101100102:qingxu -山西,太原,阳曲:101100103:yangqu -山西,太原,娄烦:101100104:loufan -山西,太原,古交:101100105:gujiao -山西,太原,尖草坪区:101100106:jiancaopingqu -山西,太原,小店区:101100107:xiaodianqu -山西,大同,大同:101100201:datong -山西,大同,阳高:101100202:yanggao -山西,大同,大同县:101100203:datongxian -山西,大同,天镇:101100204:tianzhen -山西,大同,广灵:101100205:guangling -山西,大同,灵丘:101100206:lingqiu -山西,大同,浑源:101100207:hunyuan -山西,大同,左云:101100208:zuoyun -山西,阳泉,阳泉:101100301:yangquan -山西,阳泉,盂县:101100302:yuxian -山西,阳泉,平定:101100303:pingding -山西,晋中,晋中:101100401:jinzhong -山西,晋中,榆次:101100402:yuci -山西,晋中,榆社:101100403:yushe -山西,晋中,左权:101100404:zuoquan -山西,晋中,和顺:101100405:heshun -山西,晋中,昔阳:101100406:xiyang -山西,晋中,寿阳:101100407:shouyang -山西,晋中,太谷:101100408:taigu -山西,晋中,祁县:101100409:qixian -山西,晋中,平遥:101100410:pingyao -山西,晋中,灵石:101100411:lingshi -山西,晋中,介休:101100412:jiexiu -山西,长治,长治:101100501:changzhi -山西,长治,黎城:101100502:licheng -山西,长治,屯留:101100503:tunliu -山西,长治,潞城:101100504:lucheng -山西,长治,襄垣:101100505:xiangyuan -山西,长治,平顺:101100506:pingshun -山西,长治,武乡:101100507:wuxiang -山西,长治,沁县:101100508:qinxian -山西,长治,长子:101100509:zhangzi -山西,长治,沁源:101100510:qinyuan -山西,长治,壶关:101100511:huguan -山西,晋城,晋城:101100601:jincheng -山西,晋城,沁水:101100602:qinshui -山西,晋城,阳城:101100603:yangcheng -山西,晋城,陵川:101100604:lingchuan -山西,晋城,高平:101100605:gaoping -山西,晋城,泽州:101100606:zezhou -山西,临汾,临汾:101100701:linfen -山西,临汾,曲沃:101100702:quwo -山西,临汾,永和:101100703:yonghe -山西,临汾,隰县:101100704:xixian -山西,临汾,大宁:101100705:daning -山西,临汾,吉县:101100706:jixian -山西,临汾,襄汾:101100707:xiangfen -山西,临汾,蒲县:101100708:puxian -山西,临汾,汾西:101100709:fenxi -山西,临汾,洪洞:101100710:hongtong -山西,临汾,霍州:101100711:huozhou -山西,临汾,乡宁:101100712:xiangning -山西,临汾,翼城:101100713:yicheng -山西,临汾,侯马:101100714:houma -山西,临汾,浮山:101100715:fushan -山西,临汾,安泽:101100716:anze -山西,临汾,古县:101100717:guxian -山西,运城,运城:101100801:yuncheng -山西,运城,临猗:101100802:linyi -山西,运城,稷山:101100803:jishan -山西,运城,万荣:101100804:wanrong -山西,运城,河津:101100805:hejin -山西,运城,新绛:101100806:xinjiang -山西,运城,绛县:101100807:jiangxian -山西,运城,闻喜:101100808:wenxi -山西,运城,垣曲:101100809:yuanqu -山西,运城,永济:101100810:yongji -山西,运城,芮城:101100811:ruicheng -山西,运城,夏县:101100812:xiaxian -山西,运城,平陆:101100813:pinglu -山西,朔州,朔州:101100901:shuozhou -山西,朔州,平鲁:101100902:pinglu -山西,朔州,山阴:101100903:shanyin -山西,朔州,右玉:101100904:youyu -山西,朔州,应县:101100905:yingxian -山西,朔州,怀仁:101100906:huairen -山西,忻州,忻州:101101001:xinzhou -山西,忻州,定襄:101101002:dingxiang -山西,忻州,五台县:101101003:wutaixian -山西,忻州,河曲:101101004:hequ -山西,忻州,偏关:101101005:pianguan -山西,忻州,神池:101101006:shenchi -山西,忻州,宁武:101101007:ningwu -山西,忻州,代县:101101008:daixian -山西,忻州,繁峙:101101009:fanshi -山西,忻州,五台山:101101010:wutaishan -山西,忻州,保德:101101011:bode -山西,忻州,静乐:101101012:jingle -山西,忻州,岢岚:101101013:kelan -山西,忻州,五寨:101101014:wuzhai -山西,忻州,原平:101101015:yuanping -山西,吕梁,吕梁:101101100:lvliang -山西,吕梁,离石:101101101:lishi -山西,吕梁,临县:101101102:linxian -山西,吕梁,兴县:101101103:xingxian -山西,吕梁,岚县:101101104:lanxian -山西,吕梁,柳林:101101105:liulin -山西,吕梁,石楼:101101106:shilou -山西,吕梁,方山:101101107:fangshan -山西,吕梁,交口:101101108:jiaokou -山西,吕梁,中阳:101101109:zhongyang -山西,吕梁,孝义:101101110:xiaoyi -山西,吕梁,汾阳:101101111:fenyang -山西,吕梁,文水:101101112:wenshui -山西,吕梁,交城:101101113:jiaocheng -陕西,西安,西安:101110101:xian:xi'an -陕西,西安,长安:101110102:changan -陕西,西安,临潼:101110103:lintong -陕西,西安,蓝田:101110104:lantian -陕西,西安,周至:101110105:zhouzhi -陕西,西安,户县:101110106:huxian -陕西,西安,高陵:101110107:gaoling -陕西,咸阳,咸阳:101110200:xianyang -陕西,咸阳,三原:101110201:sanyuan -陕西,咸阳,礼泉:101110202:liquan -陕西,咸阳,永寿:101110203:yongshou -陕西,咸阳,淳化:101110204:chunhua -陕西,咸阳,泾阳:101110205:jingyang -陕西,咸阳,武功:101110206:wugong -陕西,咸阳,乾县:101110207:qianxian -陕西,咸阳,彬县:101110208:binxian -陕西,咸阳,长武:101110209:changwu -陕西,咸阳,旬邑:101110210:xunyi -陕西,咸阳,兴平:101110211:xingping -陕西,延安,延安:101110300:yanan -陕西,延安,延长:101110301:yanchang -陕西,延安,延川:101110302:yanchuan -陕西,延安,子长:101110303:zichang -陕西,延安,宜川:101110304:yichuan -陕西,延安,富县:101110305:fuxian -陕西,延安,志丹:101110306:zhidan -陕西,延安,安塞:101110307:ansai -陕西,延安,甘泉:101110308:ganquan -陕西,延安,洛川:101110309:luochuan -陕西,延安,黄陵:101110310:huangling -陕西,延安,黄龙:101110311:huanglong -陕西,延安,吴起:101110312:wuqi -陕西,榆林,榆林:101110401:yulin -陕西,榆林,府谷:101110402:fugu -陕西,榆林,神木:101110403:shenmu -陕西,榆林,佳县:101110404:jiaxian -陕西,榆林,定边:101110405:dingbian -陕西,榆林,靖边:101110406:jingbian -陕西,榆林,横山:101110407:hengshan -陕西,榆林,米脂:101110408:mizhi -陕西,榆林,子洲:101110409:zizhou -陕西,榆林,绥德:101110410:suide -陕西,榆林,吴堡:101110411:wubu -陕西,榆林,清涧:101110412:jingjian -陕西,榆林,榆阳:101110413:yuyang -陕西,渭南,渭南:101110501:weinan -陕西,渭南,华县:101110502:huaxian -陕西,渭南,潼关:101110503:tongguan -陕西,渭南,大荔:101110504:dali -陕西,渭南,白水:101110505:baishui -陕西,渭南,富平:101110506:fuping -陕西,渭南,蒲城:101110507:pucheng -陕西,渭南,澄城:101110508:chengcheng -陕西,渭南,合阳:101110509:heyang -陕西,渭南,韩城:101110510:hancheng -陕西,渭南,华阴:101110511:huayin -陕西,商洛,商洛:101110601:shangluo -陕西,商洛,洛南:101110602:luonan -陕西,商洛,柞水:101110603:zhashui -陕西,商洛,商州:101110604:shangxian -陕西,商洛,镇安:101110605:zhenan -陕西,商洛,丹凤:101110606:danfeng -陕西,商洛,商南:101110607:shangnan -陕西,商洛,山阳:101110608:shanyang -陕西,安康,安康:101110701:ankang -陕西,安康,紫阳:101110702:ziyang -陕西,安康,石泉:101110703:shiquan -陕西,安康,汉阴:101110704:hanyin -陕西,安康,旬阳:101110705:xunyang -陕西,安康,岚皋:101110706:langao -陕西,安康,平利:101110707:pingli -陕西,安康,白河:101110708:baihe -陕西,安康,镇坪:101110709:zhenping -陕西,安康,宁陕:101110710:ningshan -陕西,汉中,汉中:101110801:hanzhong -陕西,汉中,略阳:101110802:lueyang -陕西,汉中,勉县:101110803:mianxian -陕西,汉中,留坝:101110804:liuba -陕西,汉中,洋县:101110805:yangxian -陕西,汉中,城固:101110806:chenggu -陕西,汉中,西乡:101110807:xixiang -陕西,汉中,佛坪:101110808:fuoping -陕西,汉中,宁强:101110809:ningqiang -陕西,汉中,南郑:101110810:nanzheng -陕西,汉中,镇巴:101110811:zhenba -陕西,宝鸡,宝鸡:101110901:baoji -陕西,宝鸡,千阳:101110903:qianyang -陕西,宝鸡,麟游:101110904:linyou -陕西,宝鸡,岐山:101110905:qishan -陕西,宝鸡,凤翔:101110906:fengxiang -陕西,宝鸡,扶风:101110907:fufeng -陕西,宝鸡,眉县:101110908:meixian -陕西,宝鸡,太白:101110909:taibai -陕西,宝鸡,凤县:101110910:fengxian -陕西,宝鸡,陇县:101110911:longxian -陕西,宝鸡,陈仓:101110912:chencang -陕西,铜川,铜川:101111001:tongchuan -陕西,铜川,耀县:101111002:yaoxian -陕西,铜川,宜君:101111003:yijun -陕西,铜川,耀州:101111004:yaozhou -陕西,杨凌,杨凌:101111101:yangling -山东,济南,济南:101120101:jinan -山东,济南,长清:101120102:changqing -山东,济南,商河:101120103:shanghe -山东,济南,章丘:101120104:zhangqiu -山东,济南,平阴:101120105:pingyin -山东,济南,济阳:101120106:jiyang -山东,青岛,青岛:101120201:qingdao -山东,青岛,崂山:101120202:laoshan -山东,青岛,即墨:101120204:jimo -山东,青岛,胶州:101120205:jiaozhou -山东,青岛,胶南:101120206:jiaonan -山东,青岛,莱西:101120207:laixi -山东,青岛,平度:101120208:pingdu -山东,淄博,淄博:101120301:zibo -山东,淄博,淄川:101120302:zichuan -山东,淄博,博山:101120303:boshan -山东,淄博,高青:101120304:gaoqing -山东,淄博,周村:101120305:zhoucun -山东,淄博,沂源:101120306:yiyuan -山东,淄博,桓台:101120307:huantai -山东,淄博,临淄:101120308:linzi -山东,德州,德州:101120401:dezhou -山东,德州,武城:101120402:wucheng -山东,德州,临邑:101120403:linyi -山东,德州,陵县:101120404:lingxian -山东,德州,齐河:101120405:qihe -山东,德州,乐陵:101120406:leling -山东,德州,庆云:101120407:qingyun -山东,德州,平原:101120408:pingyuan -山东,德州,宁津:101120409:ningjin -山东,德州,夏津:101120410:xiajin -山东,德州,禹城:101120411:yucheng -山东,烟台,烟台:101120501:yantai -山东,烟台,莱州:101120502:laizhou -山东,烟台,长岛:101120503:changdao -山东,烟台,蓬莱:101120504:penglai -山东,烟台,龙口:101120505:longkou -山东,烟台,招远:101120506:zhaoyuan -山东,烟台,栖霞:101120507:qixia -山东,烟台,福山:101120508:fushan -山东,烟台,牟平:101120509:moup -山东,烟台,莱阳:101120510:laiyang -山东,烟台,海阳:101120511:haiyang -山东,潍坊,潍坊:101120601:weifang -山东,潍坊,青州:101120602:qingzhou -山东,潍坊,寿光:101120603:shouguang -山东,潍坊,临朐:101120604:linqu -山东,潍坊,昌乐:101120605:changle -山东,潍坊,昌邑:101120606:changyi -山东,潍坊,安丘:101120607:anqiu -山东,潍坊,高密:101120608:gaomi -山东,潍坊,诸城:101120609:zhucheng -山东,济宁,济宁:101120701:jining -山东,济宁,嘉祥:101120702:jiaxiang -山东,济宁,微山:101120703:weishan -山东,济宁,鱼台:101120704:yutai -山东,济宁,兖州:101120705:yanzhou -山东,济宁,金乡:101120706:jinxiang -山东,济宁,汶上:101120707:wenshang -山东,济宁,泗水:101120708:sishui -山东,济宁,梁山:101120709:liangshan -山东,济宁,曲阜:101120710:qufu -山东,济宁,邹城:101120711:zoucheng -山东,泰安,泰安:101120801:taian -山东,泰安,新泰:101120802:xintai -山东,泰安,肥城:101120804:feicheng -山东,泰安,东平:101120805:dongping -山东,泰安,宁阳:101120806:ningyang -山东,临沂,临沂:101120901:linyi -山东,临沂,莒南:101120902:junan -山东,临沂,沂南:101120903:yinan -山东,临沂,苍山:101120904:cangshan -山东,临沂,临沭:101120905:linshu -山东,临沂,郯城:101120906:tancheng -山东,临沂,蒙阴:101120907:mengyin -山东,临沂,平邑:101120908:pingyi -山东,临沂,费县:101120909:feixian -山东,临沂,沂水:101120910:yishui -山东,菏泽,菏泽:101121001:heze -山东,菏泽,鄄城:101121002:juancheng -山东,菏泽,郓城:101121003:yuncheng -山东,菏泽,东明:101121004:dongming -山东,菏泽,定陶:101121005:dingtao -山东,菏泽,巨野:101121006:juye -山东,菏泽,曹县:101121007:caoxian -山东,菏泽,成武:101121008:chengwu -山东,菏泽,单县:101121009:shanxian -山东,滨州,滨州:101121101:binzhou -山东,滨州,博兴:101121102:boxing -山东,滨州,无棣:101121103:wudi -山东,滨州,阳信:101121104:yangxin -山东,滨州,惠民:101121105:huimin -山东,滨州,沾化:101121106:zhanhua -山东,滨州,邹平:101121107:zouping -山东,东营,东营:101121201:dongying -山东,东营,河口:101121202:hekou -山东,东营,垦利:101121203:kenli -山东,东营,利津:101121204:lijin -山东,东营,广饶:101121205:guangrao -山东,威海,威海:101121301:weihai -山东,威海,文登:101121302:wendeng -山东,威海,荣成:101121303:rongcheng -山东,威海,乳山:101121304:rushan -山东,威海,成山头:101121305:chengshantou -山东,威海,石岛:101121306:shidao -山东,枣庄,枣庄:101121401:zaozhuang -山东,枣庄,薛城:101121402:xuecheng -山东,枣庄,峄城:101121403:yicheng -山东,枣庄,台儿庄:101121404:taierzhuang -山东,枣庄,滕州:101121405:tengzhou -山东,日照,日照:101121501:rizhao -山东,日照,五莲:101121502:wulian -山东,日照,莒县:101121503:juxian -山东,莱芜,莱芜:101121601:laiwu -山东,聊城,聊城:101121701:liaocheng -山东,聊城,冠县:101121702:guanxian -山东,聊城,阳谷:101121703:yanggu -山东,聊城,高唐:101121704:gaotang -山东,聊城,茌平:101121705:chiping -山东,聊城,东阿:101121706:donge -山东,聊城,临清:101121707:linqing -山东,聊城,莘县:101121709:shenxian -新疆,乌鲁木齐,乌鲁木齐:101130101:wulumuqi -新疆,乌鲁木齐,小渠子:101130103:xiaoquzi -新疆,乌鲁木齐,达坂城:101130105:dabancheng -新疆,乌鲁木齐,乌鲁木齐牧试站:101130108:wulumuqimushizhan -新疆,乌鲁木齐,天池:101130109:tianchi -新疆,乌鲁木齐,白杨沟:101130110:baiyanggou -新疆,克拉玛依,克拉玛依:101130201:kelamayi -新疆,克拉玛依,乌尔禾:101130202:wuerhe -新疆,克拉玛依,白碱滩:101130203:baijiantan -新疆,石河子,石河子:101130301:shihezi -新疆,石河子,炮台:101130302:paotai -新疆,石河子,莫索湾:101130303:mosuowan -新疆,昌吉,昌吉:101130401:changji -新疆,昌吉,呼图壁:101130402:hutubi -新疆,昌吉,米泉:101130403:miquan -新疆,昌吉,阜康:101130404:fukang -新疆,昌吉,吉木萨尔:101130405:jimusaer -新疆,昌吉,奇台:101130406:qitai -新疆,昌吉,玛纳斯:101130407:manasi -新疆,昌吉,木垒:101130408:mulei -新疆,昌吉,蔡家湖:101130409:caijiahu -新疆,吐鲁番,吐鲁番:101130501:tulufan -新疆,吐鲁番,托克逊:101130502:tuokexun -新疆,吐鲁番,鄯善:101130504:shanshan -新疆,巴音郭楞,库尔勒:101130601:kuerle -新疆,巴音郭楞,轮台:101130602:luntai -新疆,巴音郭楞,尉犁:101130603:weili -新疆,巴音郭楞,若羌:101130604:ruoqiang -新疆,巴音郭楞,且末:101130605:qiemo -新疆,巴音郭楞,和静:101130606:hejing -新疆,巴音郭楞,焉耆:101130607:yanqi -新疆,巴音郭楞,和硕:101130608:shuo -新疆,巴音郭楞,巴音布鲁克:101130610:bayinbuluke -新疆,巴音郭楞,铁干里克:101130611:tieganlike -新疆,巴音郭楞,博湖:101130612:bohu -新疆,巴音郭楞,塔中:101130613:tazhong -新疆,巴音郭楞,巴仑台:101130614:baluntai -新疆,阿拉尔,阿拉尔:101130701:alaer -新疆,阿克苏,阿克苏:101130801:akesu -新疆,阿克苏,乌什:101130802:wushi -新疆,阿克苏,温宿:101130803:wensu -新疆,阿克苏,拜城:101130804:baicheng -新疆,阿克苏,新和:101130805:xinhe -新疆,阿克苏,沙雅:101130806:shaya -新疆,阿克苏,库车:101130807:kuche -新疆,阿克苏,柯坪:101130808:keping -新疆,阿克苏,阿瓦提:101130809:awati -新疆,喀什,喀什:101130901:kashi -新疆,喀什,英吉沙:101130902:yingjisha -新疆,喀什,塔什库尔干:101130903:tashikuergan -新疆,喀什,麦盖提:101130904:maigaiti -新疆,喀什,莎车:101130905:shache -新疆,喀什,叶城:101130906:yecheng -新疆,喀什,泽普:101130907:zepu -新疆,喀什,巴楚:101130908:bachu -新疆,喀什,岳普湖:101130909:yuepuhu -新疆,喀什,伽师:101130910:jiashi -新疆,喀什,疏附:101130911:shufu -新疆,喀什,疏勒:101130912:shule -新疆,伊犁,伊宁:101131001:yining -新疆,伊犁,察布查尔:101131002:chabuchaer -新疆,伊犁,尼勒克:101131003:nileke -新疆,伊犁,伊宁县:101131004:yiningxian -新疆,伊犁,巩留:101131005:gongliu -新疆,伊犁,新源:101131006:xinyuan -新疆,伊犁,昭苏:101131007:zhaosu -新疆,伊犁,特克斯:101131008:tekesi -新疆,伊犁,霍城:101131009:huocheng -新疆,伊犁,霍尔果斯:101131010:huoerguosi -新疆,伊犁,奎屯:101131011:kuitunshi -新疆,塔城,塔城:101131101:tacheng -新疆,塔城,裕民:101131102:yumin -新疆,塔城,额敏:101131103:emin -新疆,塔城,和布克赛尔:101131104:hebukesaier -新疆,塔城,托里:101131105:tuoli -新疆,塔城,乌苏:101131106:wusu -新疆,塔城,沙湾:101131107:shawan -新疆,哈密,哈密:101131201:hami -新疆,哈密,巴里坤:101131203:balikun -新疆,哈密,伊吾:101131204:yiwu -新疆,和田,和田:101131301:hetian -新疆,和田,皮山:101131302:pishan -新疆,和田,策勒:101131303:cele -新疆,和田,墨玉:101131304:moyu -新疆,和田,洛浦:101131305:luopu -新疆,和田,民丰:101131306:minfeng -新疆,和田,于田:101131307:yutian -新疆,阿勒泰,阿勒泰:101131401:aletai -新疆,阿勒泰,哈巴河:101131402:habahe -新疆,阿勒泰,吉木乃:101131405:jimunai -新疆,阿勒泰,布尔津:101131406:buerjin -新疆,阿勒泰,福海:101131407:fuhai -新疆,阿勒泰,富蕴:101131408:fuyun -新疆,阿勒泰,青河:101131409:qinghe -新疆,克州,阿图什:101131501:atushi -新疆,克州,乌恰:101131502:wuqia -新疆,克州,阿克陶:101131503:aketao -新疆,克州,阿合奇:101131504:aheqi -新疆,博尔塔拉,博乐:101131601:bole -新疆,博尔塔拉,温泉:101131602:wenquan -新疆,博尔塔拉,精河:101131603:jinghe -新疆,博尔塔拉,阿拉山口:101131606:alashankou -西藏,拉萨,拉萨:101140101:lasa -西藏,拉萨,当雄:101140102:dangxiong -西藏,拉萨,尼木:101140103:nimu -西藏,拉萨,林周:101140104:linzhou -西藏,拉萨,堆龙德庆:101140105:duilongdeqing -西藏,拉萨,曲水:101140106:qushui -西藏,拉萨,达孜:101140107:dazi -西藏,拉萨,墨竹工卡:101140108:mozhugongka -西藏,日喀则,日喀则:101140201:rikaze -西藏,日喀则,拉孜:101140202:lazi -西藏,日喀则,南木林:101140203:nanmulin -西藏,日喀则,聂拉木:101140204:nielamu -西藏,日喀则,定日:101140205:anri -西藏,日喀则,江孜:101140206:jiangzi -西藏,日喀则,帕里:101140207:pali -西藏,日喀则,仲巴:101140208:zhongba -西藏,日喀则,萨嘎:101140209:saga -西藏,日喀则,吉隆:101140210:jilong -西藏,日喀则,昂仁:101140211:angren -西藏,日喀则,定结:101140212:dingjie -西藏,日喀则,萨迦:101140213:sajia -西藏,日喀则,谢通门:101140214:xietongmen -西藏,日喀则,岗巴:101140216:gangba -西藏,日喀则,白朗:101140217:bailang -西藏,日喀则,亚东:101140218:yadong -西藏,日喀则,康马:101140219:kangma -西藏,日喀则,仁布:101140220:renbu -西藏,山南,山南:101140301:shannan -西藏,山南,贡嘎:101140302:gongga -西藏,山南,扎囊:101140303:zhanan -西藏,山南,加查:101140304:jiacha -西藏,山南,浪卡子:101140305:langkazi -西藏,山南,错那:101140306:cuona -西藏,山南,隆子:101140307:longzi -西藏,山南,泽当:101140308:zedang -西藏,山南,乃东:101140309:naidong -西藏,山南,桑日:101140310:sangri -西藏,山南,洛扎:101140311:luozha -西藏,山南,措美:101140312:cuomei -西藏,山南,琼结:101140313:qiongjie -西藏,山南,曲松:101140314:qusong -西藏,林芝,林芝:101140401:linzhi -西藏,林芝,波密:101140402:bomi -西藏,林芝,米林:101140403:milin -西藏,林芝,察隅:101140404:chayu -西藏,林芝,工布江达:101140405:gongbujiangda -西藏,林芝,朗县:101140406:langxian -西藏,林芝,墨脱:101140407:motuo -西藏,昌都,昌都:101140501:changdu -西藏,昌都,丁青:101140502:dingqing -西藏,昌都,边坝:101140503:bianba -西藏,昌都,洛隆:101140504:luolong -西藏,昌都,左贡:101140505:zuogong -西藏,昌都,芒康:101140506:mangkang -西藏,昌都,类乌齐:101140507:leiwuqi -西藏,昌都,八宿:101140508:basu -西藏,昌都,江达:101140509:jiangda -西藏,昌都,察雅:101140510:chaya -西藏,昌都,贡觉:101140511:gongjue -西藏,那曲,那曲:101140601:naqu -西藏,那曲,尼玛:101140602:nima -西藏,那曲,嘉黎:101140603:jiali -西藏,那曲,班戈:101140604:bange -西藏,那曲,安多:101140605:anduo -西藏,那曲,索县:101140606:suoxian -西藏,那曲,聂荣:101140607:nierong -西藏,那曲,巴青:101140608:baqing -西藏,那曲,比如:101140609:biru -西藏,那曲,双湖:101140610:shuanghu -西藏,阿里,阿里:101140701:ali -西藏,阿里,改则:101140702:gaize -西藏,阿里,申扎:101140703:shenzha -西藏,阿里,狮泉河:101140704:shiquanhe -西藏,阿里,普兰:101140705:pulan -西藏,阿里,札达:101140706:zhada -西藏,阿里,噶尔:101140707:gaer -西藏,阿里,日土:101140708:ritu -西藏,阿里,革吉:101140709:geji -西藏,阿里,措勤:101140710:cuoqin -青海,西宁,西宁:101150101:xining -青海,西宁,大通:101150102:datong -青海,西宁,湟源:101150103:huangyuan -青海,西宁,湟中:101150104:huangzhong -青海,海东,海东:101150201:haidong -青海,海东,乐都:101150202:ledu -青海,海东,民和:101150203:minhe -青海,海东,互助:101150204:huzhu -青海,海东,化隆:101150205:hualong -青海,海东,循化:101150206:xunhua -青海,海东,冷湖:101150207:lenghu -青海,海东,平安:101150208:pingan -青海,黄南,黄南:101150301:huangnan -青海,黄南,尖扎:101150302:jianzha -青海,黄南,泽库:101150303:zeku -青海,黄南,河南:101150304:henan -青海,黄南,同仁:101150305:tongren -青海,海南,海南:101150401:hainan -青海,海南,贵德:101150404:guide -青海,海南,兴海:101150406:xinghai -青海,海南,贵南:101150407:guinan -青海,海南,同德:101150408:tongde -青海,海南,共和:101150409:gonghe -青海,果洛,果洛:101150501:guoluo -青海,果洛,班玛:101150502:banma -青海,果洛,甘德:101150503:gande -青海,果洛,达日:101150504:dari -青海,果洛,久治:101150505:jiuzhi -青海,果洛,玛多:101150506:madu -青海,果洛,多县:101150507:duoxian -青海,果洛,玛沁:101150508:maqin -青海,玉树,玉树:101150601:yushu -青海,玉树,称多:101150602:chenduo -青海,玉树,治多:101150603:zhiduo -青海,玉树,杂多:101150604:zaduo -青海,玉树,囊谦:101150605:nangqian -青海,玉树,曲麻莱:101150606:qumacai -青海,海西,海西:101150701:haixi -青海,海西,天峻:101150708:tianjun -青海,海西,乌兰:101150709:wulan -青海,海西,茫崖:101150712:mangai -青海,海西,大柴旦:101150713:dachaidan -青海,海西,德令哈:101150716:delingha -青海,海北,海北:101150801:haibei -青海,海北,门源:101150802:menyuan -青海,海北,祁连:101150803:qilian -青海,海北,海晏:101150804:haiman -青海,海北,刚察:101150806:gangcha -青海,格尔木,格尔木:101150901:geermu -青海,格尔木,都兰:101150902:dulan -甘肃,兰州,兰州:101160101:lanzhou -甘肃,兰州,皋兰:101160102:gaolan -甘肃,兰州,永登:101160103:yongdeng -甘肃,兰州,榆中:101160104:yuzhong -甘肃,定西,定西:101160201:dingxi -甘肃,定西,通渭:101160202:tongwei -甘肃,定西,陇西:101160203:longxi -甘肃,定西,渭源:101160204:weiyuan -甘肃,定西,临洮:101160205:lintao -甘肃,定西,漳县:101160206:zhangxian -甘肃,定西,岷县:101160207:minxian -甘肃,定西,安定:101160208:anding -甘肃,平凉,平凉:101160301:pingliang -甘肃,平凉,泾川:101160302:jingchuan -甘肃,平凉,灵台:101160303:lingtai -甘肃,平凉,崇信:101160304:chongxin -甘肃,平凉,华亭:101160305:huating -甘肃,平凉,庄浪:101160306:zhuanglang -甘肃,平凉,静宁:101160307:jingning -甘肃,平凉,崆峒:101160308:kongtong -甘肃,庆阳,西峰:101160401:qingyang -甘肃,庆阳,环县:101160403:huanxian -甘肃,庆阳,华池:101160404:huachi -甘肃,庆阳,合水:101160405:heshui -甘肃,庆阳,正宁:101160406:zhengning -甘肃,庆阳,宁县:101160407:ningxian -甘肃,庆阳,镇原:101160408:zhenyuan -甘肃,庆阳,庆城:101160409:qingcheng -甘肃,武威,武威:101160501:wuwei -甘肃,武威,民勤:101160502:minqin -甘肃,武威,古浪:101160503:gulang -甘肃,武威,天祝:101160505:tianzhu -甘肃,金昌,金昌:101160601:jinchang -甘肃,金昌,永昌:101160602:yongchang -甘肃,张掖,张掖:101160701:zhangye -甘肃,张掖,肃南:101160702:sunan -甘肃,张掖,民乐:101160703:minle -甘肃,张掖,临泽:101160704:linze -甘肃,张掖,高台:101160705:gaotai -甘肃,张掖,山丹:101160706:shandan -甘肃,酒泉,酒泉:101160801:jiuquan -甘肃,酒泉,金塔:101160803:jinta -甘肃,酒泉,阿克塞:101160804:akesai -甘肃,酒泉,瓜州:101160805:guazhou -甘肃,酒泉,肃北:101160806:subei -甘肃,酒泉,玉门:101160807:yumen -甘肃,酒泉,敦煌:101160808:dunhuang -甘肃,天水,天水:101160901:tianshui -甘肃,天水,清水:101160903:qingshui -甘肃,天水,秦安:101160904:qinan -甘肃,天水,甘谷:101160905:gangu -甘肃,天水,武山:101160906:wushan -甘肃,天水,张家川:101160907:zhangjiachuan -甘肃,天水,麦积:101160908:maiji -甘肃,陇南,武都:101161001:wudu -甘肃,陇南,成县:101161002:chengxian -甘肃,陇南,文县:101161003:wenxian -甘肃,陇南,宕昌:101161004:dangchang -甘肃,陇南,康县:101161005:kangxian -甘肃,陇南,西和:101161006:xihe -甘肃,陇南,礼县:101161007:lixian -甘肃,陇南,徽县:101161008:huixian -甘肃,陇南,两当:101161009:liangdang -甘肃,临夏,临夏:101161101:linxia -甘肃,临夏,康乐:101161102:kangle -甘肃,临夏,永靖:101161103:yongjing -甘肃,临夏,广河:101161104:guanghe -甘肃,临夏,和政:101161105:hezheng -甘肃,临夏,东乡:101161106:dongxiang -甘肃,临夏,积石山:101161107:jishishan -甘肃,甘南,合作:101161201:hezuo -甘肃,甘南,临潭:101161202:lintan -甘肃,甘南,卓尼:101161203:zhuoni -甘肃,甘南,舟曲:101161204:zhouqu -甘肃,甘南,迭部:101161205:diebu -甘肃,甘南,玛曲:101161206:maqu -甘肃,甘南,碌曲:101161207:luqu -甘肃,甘南,夏河:101161208:xiahe -甘肃,白银,白银:101161301:baiyin -甘肃,白银,靖远:101161302:jingyuan -甘肃,白银,会宁:101161303:huining -甘肃,白银,平川:101161304:pingchuan -甘肃,白银,景泰:101161305:jingtai -甘肃,嘉峪关,嘉峪关:101161401:jiayuguan -宁夏,银川,银川:101170101:yinchuan -宁夏,银川,永宁:101170102:yongning -宁夏,银川,灵武:101170103:lingwu -宁夏,银川,贺兰:101170104:helan -宁夏,石嘴山,石嘴山:101170201:shizuishan -宁夏,石嘴山,惠农:101170202:huinong -宁夏,石嘴山,平罗:101170203:pingluo -宁夏,石嘴山,陶乐:101170204:taole -宁夏,吴忠,吴忠:101170301:wuzhong -宁夏,吴忠,同心:101170302:tongxin -宁夏,吴忠,盐池:101170303:yanchi -宁夏,吴忠,青铜峡:101170306:qingtongxia -宁夏,固原,固原:101170401:guyuan -宁夏,固原,西吉:101170402:xiji -宁夏,固原,隆德:101170403:longde -宁夏,固原,泾源:101170404:jinyuan -宁夏,固原,彭阳:101170406:pengyang -宁夏,中卫,中卫:101170501:zhongwei -宁夏,中卫,中宁:101170502:zhongning -宁夏,中卫,海原:101170504:haiyuan -河南,郑州,郑州:101180101:zhengzhou -河南,郑州,巩义:101180102:gongyi -河南,郑州,荥阳:101180103:xingyang -河南,郑州,登封:101180104:dengfeng -河南,郑州,新密:101180105:xinmi -河南,郑州,新郑:101180106:xinzheng -河南,郑州,中牟:101180107:zhongmou -河南,郑州,上街:101180108:shangjie -河南,安阳,安阳:101180201:anyang -河南,安阳,汤阴:101180202:tangyin -河南,安阳,滑县:101180203:huaxian -河南,安阳,内黄:101180204:neihuang -河南,安阳,林州:101180205:linzhou -河南,新乡,新乡:101180301:xinxiang -河南,新乡,获嘉:101180302:huojia -河南,新乡,原阳:101180303:yuanyang -河南,新乡,辉县:101180304:huixian -河南,新乡,卫辉:101180305:weihui -河南,新乡,延津:101180306:yanjin -河南,新乡,封丘:101180307:fengqiu -河南,新乡,长垣:101180308:changyuan -河南,许昌,许昌:101180401:xuchang -河南,许昌,鄢陵:101180402:yanling -河南,许昌,襄城:101180403:xiangcheng -河南,许昌,长葛:101180404:changge -河南,许昌,禹州:101180405:yuzhou -河南,平顶山,平顶山:101180501:pingdingshan -河南,平顶山,郏县:101180502:jiaxian -河南,平顶山,宝丰:101180503:baofeng -河南,平顶山,汝州:101180504:ruzhou -河南,平顶山,叶县:101180505:yexian -河南,平顶山,舞钢:101180506:wugang -河南,平顶山,鲁山:101180507:lushan -河南,平顶山,石龙:101180508:shilong -河南,信阳,信阳:101180601:xinyang -河南,信阳,息县:101180602:xixian -河南,信阳,罗山:101180603:luoshan -河南,信阳,光山:101180604:guangshan -河南,信阳,新县:101180605:xinxian -河南,信阳,淮滨:101180606:huaibin -河南,信阳,潢川:101180607:huangchuan -河南,信阳,固始:101180608:gushi -河南,信阳,商城:101180609:shangcheng -河南,南阳,南阳:101180701:nanyang -河南,南阳,南召:101180702:nanzhao -河南,南阳,方城:101180703:fangcheng -河南,南阳,社旗:101180704:sheqi -河南,南阳,西峡:101180705:xixia -河南,南阳,内乡:101180706:neixiang -河南,南阳,镇平:101180707:zhenping -河南,南阳,淅川:101180708:xichuan -河南,南阳,新野:101180709:xinye -河南,南阳,唐河:101180710:tanghe -河南,南阳,邓州:101180711:dengzhou -河南,南阳,桐柏:101180712:tongbai -河南,开封,开封:101180801:kaifeng -河南,开封,杞县:101180802:qixian -河南,开封,尉氏:101180803:weishi -河南,开封,通许:101180804:tongxu -河南,开封,兰考:101180805:lankao -河南,洛阳,洛阳:101180901:luoyang -河南,洛阳,新安:101180902:xinan -河南,洛阳,孟津:101180903:mengjin -河南,洛阳,宜阳:101180904:yiyang -河南,洛阳,洛宁:101180905:luoning -河南,洛阳,伊川:101180906:yichuan -河南,洛阳,嵩县:101180907:songxian -河南,洛阳,偃师:101180908:yanshi -河南,洛阳,栾川:101180909:luanchuan -河南,洛阳,汝阳:101180910:ruyang -河南,洛阳,吉利:101180911:jili -河南,商丘,商丘:101181001:shangqiu -河南,商丘,睢县:101181003:suixian -河南,商丘,民权:101181004:minquan -河南,商丘,虞城:101181005:yucheng -河南,商丘,柘城:101181006:zhecheng -河南,商丘,宁陵:101181007:ningling -河南,商丘,夏邑:101181008:xiayi -河南,商丘,永城:101181009:yongcheng -河南,焦作,焦作:101181101:jiaozuo -河南,焦作,修武:101181102:xiuwu -河南,焦作,武陟:101181103:wuzhi -河南,焦作,沁阳:101181104:qinyang -河南,焦作,博爱:101181106:boai -河南,焦作,温县:101181107:wenxian -河南,焦作,孟州:101181108:mengzhou -河南,鹤壁,鹤壁:101181201:hebi -河南,鹤壁,浚县:101181202:xunxian -河南,鹤壁,淇县:101181203:qixian -河南,濮阳,濮阳:101181301:puyang -河南,濮阳,台前:101181302:taiqian -河南,濮阳,南乐:101181303:nanle -河南,濮阳,清丰:101181304:qingfeng -河南,濮阳,范县:101181305:fanxian -河南,周口,周口:101181401:zhoukou -河南,周口,扶沟:101181402:fugou -河南,周口,太康:101181403:taikang -河南,周口,淮阳:101181404:huaiyang -河南,周口,西华:101181405:xihua -河南,周口,商水:101181406:shangshui -河南,周口,项城:101181407:xiangcheng -河南,周口,郸城:101181408:dancheng -河南,周口,鹿邑:101181409:luyi -河南,周口,沈丘:101181410:shenqiu -河南,漯河,漯河:101181501:luohe -河南,漯河,临颍:101181502:linying -河南,漯河,舞阳:101181503:wuyang -河南,驻马店,驻马店:101181601:zhumadian -河南,驻马店,西平:101181602:xiping -河南,驻马店,遂平:101181603:suiping -河南,驻马店,上蔡:101181604:shangcai -河南,驻马店,汝南:101181605:runan -河南,驻马店,泌阳:101181606:biyang -河南,驻马店,平舆:101181607:pingyu -河南,驻马店,新蔡:101181608:xincai -河南,驻马店,确山:101181609:queshan -河南,驻马店,正阳:101181610:zhengyang -河南,三门峡,三门峡:101181701:sanmenxia -河南,三门峡,灵宝:101181702:lingbao -河南,三门峡,渑池:101181703:mianchi -河南,三门峡,卢氏:101181704:lushi -河南,三门峡,义马:101181705:yima -河南,三门峡,陕县:101181706:shanxian -河南,济源,济源:101181801:jiyuan -江苏,南京,南京:101190101:nanjing -江苏,南京,溧水:101190102:lishui -江苏,南京,高淳:101190103:gaochun -江苏,南京,江宁:101190104:jiangning -江苏,南京,六合:101190105:luhe -江苏,南京,江浦:101190106:jiangpu -江苏,南京,浦口:101190107:pukou -江苏,无锡,无锡:101190201:wuxi -江苏,无锡,江阴:101190202:jiangyin -江苏,无锡,宜兴:101190203:yixing -江苏,无锡,锡山:101190204:xishan -江苏,镇江,镇江:101190301:zhenjiang -江苏,镇江,丹阳:101190302:danyang -江苏,镇江,扬中:101190303:yangzhong -江苏,镇江,句容:101190304:jurong -江苏,镇江,丹徒:101190305:dantu -江苏,苏州,苏州:101190401:suzhou -江苏,苏州,常熟:101190402:changshu -江苏,苏州,张家港:101190403:zhangjiagang -江苏,苏州,昆山:101190404:kunshan -江苏,苏州,吴中:101190405:wuzhong -江苏,苏州,吴江:101190407:wujiang -江苏,苏州,太仓:101190408:taicang -江苏,南通,南通:101190501:nantong -江苏,南通,海安:101190502:haian -江苏,南通,如皋:101190503:rugao -江苏,南通,如东:101190504:rudong -江苏,南通,启东:101190507:qidong -江苏,南通,海门:101190508:haimen -江苏,南通,通州:101190509:tongzhou -江苏,扬州,扬州:101190601:yangzhou -江苏,扬州,宝应:101190602:baoying -江苏,扬州,仪征:101190603:yizheng -江苏,扬州,高邮:101190604:gaoyou -江苏,扬州,江都:101190605:jiangdu -江苏,扬州,邗江:101190606:hanjiang -江苏,盐城,盐城:101190701:yancheng -江苏,盐城,响水:101190702:xiangshui -江苏,盐城,滨海:101190703:binhai -江苏,盐城,阜宁:101190704:funing -江苏,盐城,射阳:101190705:sheyang -江苏,盐城,建湖:101190706:jianhu -江苏,盐城,东台:101190707:dongtai -江苏,盐城,大丰:101190708:dafeng -江苏,盐城,盐都:101190709:yandu -江苏,徐州,徐州:101190801:xuzhou -江苏,徐州,铜山:101190802:tongshan -江苏,徐州,丰县:101190803:fengxian -江苏,徐州,沛县:101190804:peixian -江苏,徐州,邳州:101190805:pizhou -江苏,徐州,睢宁:101190806:suining -江苏,徐州,新沂:101190807:xinyi -江苏,淮安,淮安:101190901:huaian -江苏,淮安,金湖:101190902:jinhu -江苏,淮安,盱眙:101190903:xuyi -江苏,淮安,洪泽:101190904:hongze -江苏,淮安,涟水:101190905:lianshui -江苏,淮安,淮阴区:101190906:huaiyinqu -江苏,淮安,淮安区:101190908:huaianqu -江苏,连云港,连云港:101191001:lianyungang -江苏,连云港,东海:101191002:donghai -江苏,连云港,赣榆:101191003:ganyu -江苏,连云港,灌云:101191004:guanyun -江苏,连云港,灌南:101191005:guannan -江苏,常州,常州:101191101:changzhou -江苏,常州,溧阳:101191102:liyang -江苏,常州,金坛:101191103:jintan -江苏,常州,武进:101191104:wujin -江苏,泰州,泰州:101191201:taizhou -江苏,泰州,兴化:101191202:xinghua -江苏,泰州,泰兴:101191203:taixing -江苏,泰州,姜堰:101191204:jiangyan -江苏,泰州,靖江:101191205:jingjiang -江苏,宿迁,宿迁:101191301:suqian -江苏,宿迁,沭阳:101191302:shuyang -江苏,宿迁,泗阳:101191303:siyang -江苏,宿迁,泗洪:101191304:sihong -江苏,宿迁,宿豫:101191305:suyu -湖北,武汉,武汉:101200101:wuhan -湖北,武汉,蔡甸:101200102:caidian -湖北,武汉,黄陂:101200103:huangpi -湖北,武汉,新洲:101200104:xinzhou -湖北,武汉,江夏:101200105:jiangxia -湖北,武汉,东西湖:101200106:dongxihu -湖北,襄阳,襄阳:101200201:xiangyang -湖北,襄阳,襄州:101200202:xiangzhou -湖北,襄阳,保康:101200203:baokang -湖北,襄阳,南漳:101200204:nanzhang -湖北,襄阳,宜城:101200205:yicheng -湖北,襄阳,老河口:101200206:laohekou -湖北,襄阳,谷城:101200207:gucheng -湖北,襄阳,枣阳:101200208:zaoyang -湖北,鄂州,鄂州:101200301:ezhou -湖北,鄂州,梁子湖:101200302:liangzihu -湖北,孝感,孝感:101200401:xiaogan -湖北,孝感,安陆:101200402:anlu -湖北,孝感,云梦:101200403:yunmeng -湖北,孝感,大悟:101200404:dawu -湖北,孝感,应城:101200405:yingcheng -湖北,孝感,汉川:101200406:hanchuan -湖北,孝感,孝昌:101200407:xiaochang -湖北,黄冈,黄冈:101200501:huanggang -湖北,黄冈,红安:101200502:hongan -湖北,黄冈,麻城:101200503:macheng -湖北,黄冈,罗田:101200504:luotian -湖北,黄冈,英山:101200505:yingshan -湖北,黄冈,浠水:101200506:xishui -湖北,黄冈,蕲春:101200507:qichun -湖北,黄冈,黄梅:101200508:huangmei -湖北,黄冈,武穴:101200509:wuxue -湖北,黄冈,团风:101200510:tuanfeng -湖北,黄石,黄石:101200601:huangshi -湖北,黄石,大冶:101200602:daye -湖北,黄石,阳新:101200603:yangxin -湖北,黄石,铁山:101200604:tieshan -湖北,黄石,下陆:101200605:xialu -湖北,黄石,西塞山:101200606:xisaishan -湖北,咸宁,咸宁:101200701:xianning -湖北,咸宁,赤壁:101200702:chibi -湖北,咸宁,嘉鱼:101200703:jiayu -湖北,咸宁,崇阳:101200704:chongyang -湖北,咸宁,通城:101200705:tongcheng -湖北,咸宁,通山:101200706:tongshan -湖北,荆州,荆州:101200801:jingzhou -湖北,荆州,江陵:101200802:jiangling -湖北,荆州,公安:101200803:gongan -湖北,荆州,石首:101200804:shishou -湖北,荆州,监利:101200805:jianli -湖北,荆州,洪湖:101200806:honghu -湖北,荆州,松滋:101200807:songzi -湖北,荆州,沙市:101201406:shashi -湖北,宜昌,宜昌:101200901:yichang -湖北,宜昌,远安:101200902:yuanan -湖北,宜昌,秭归:101200903:zigui -湖北,宜昌,兴山:101200904:xingshan -湖北,宜昌,五峰:101200906:wufeng -湖北,宜昌,当阳:101200907:dangyang -湖北,宜昌,长阳:101200908:changyang -湖北,宜昌,宜都:101200909:yidu -湖北,宜昌,枝江:101200910:zhijiang -湖北,宜昌,三峡:101200911:sanxia -湖北,宜昌,夷陵:101200912:yiling -湖北,恩施,恩施:101201001:enshi -湖北,恩施,利川:101201002:lichuan -湖北,恩施,建始:101201003:jianshi -湖北,恩施,咸丰:101201004:xianfeng -湖北,恩施,宣恩:101201005:xuanen -湖北,恩施,鹤峰:101201006:hefeng -湖北,恩施,来凤:101201007:laifeng -湖北,恩施,巴东:101201008:badong -湖北,十堰,十堰:101201101:shiyan -湖北,十堰,竹溪:101201102:zhuxi -湖北,十堰,郧西:101201103:yunxi -湖北,十堰,郧县:101201104:yunxian -湖北,十堰,竹山:101201105:zhushan -湖北,十堰,房县:101201106:fangxian -湖北,十堰,丹江口:101201107:danjiangkou -湖北,十堰,茅箭:101201108:maojian -湖北,十堰,张湾:101201109:zhangwan -湖北,神农架,神农架:101201201:shennongjia -湖北,随州,随州:101201301:suizhou -湖北,随州,广水:101201302:guangshui -湖北,荆门,荆门:101201401:jingmen -湖北,荆门,钟祥:101201402:zhongxiang -湖北,荆门,京山:101201403:jingshan -湖北,荆门,掇刀:101201404:duodao -湖北,荆门,沙洋:101201405:shayang -湖北,天门,天门:101201501:tianmen -湖北,仙桃,仙桃:101201601:xiantao -湖北,潜江,潜江:101201701:qianjiang -浙江,杭州,杭州:101210101:hangzhou -浙江,杭州,萧山:101210102:xiaoshan -浙江,杭州,桐庐:101210103:tonglu -浙江,杭州,淳安:101210104:chunan -浙江,杭州,建德:101210105:jiande -浙江,杭州,余杭:101210106:yuhang -浙江,杭州,临安:101210107:linan -浙江,杭州,富阳:101210108:fuyang -浙江,湖州,湖州:101210201:huzhou -浙江,湖州,长兴:101210202:changxing -浙江,湖州,安吉:101210203:anji -浙江,湖州,德清:101210204:deqing -浙江,嘉兴,嘉兴:101210301:jiaxing -浙江,嘉兴,嘉善:101210302:jiashan -浙江,嘉兴,海宁:101210303:haining -浙江,嘉兴,桐乡:101210304:tongxiang -浙江,嘉兴,平湖:101210305:pinghu -浙江,嘉兴,海盐:101210306:haiyan -浙江,宁波,宁波:101210401:ningbo -浙江,宁波,慈溪:101210403:cixi -浙江,宁波,余姚:101210404:yuyao -浙江,宁波,奉化:101210405:fenghua -浙江,宁波,象山:101210406:xiangshan -浙江,宁波,宁海:101210408:ninghai -浙江,宁波,北仑:101210410:beilun -浙江,宁波,鄞州:101210411:yinzhou -浙江,宁波,镇海:101210412:zhenhai -浙江,绍兴,绍兴:101210501:shaoxing -浙江,绍兴,诸暨:101210502:zhuji -浙江,绍兴,上虞:101210503:shangyu -浙江,绍兴,新昌:101210504:xinchang -浙江,绍兴,嵊州:101210505:shengzhou -浙江,台州,台州:101210601:taizhou -浙江,台州,玉环:101210603:yuhuan -浙江,台州,三门:101210604:sanmen -浙江,台州,天台:101210605:tiantai -浙江,台州,仙居:101210606:xianju -浙江,台州,温岭:101210607:wenling -浙江,台州,洪家:101210609:hongjia -浙江,台州,临海:101210610:linhai -浙江,台州,椒江:101210611:jiaojiang -浙江,台州,黄岩:101210612:huangyan -浙江,台州,路桥:101210613:luqiao -浙江,温州,温州:101210701:wenzhou -浙江,温州,泰顺:101210702:taishun -浙江,温州,文成:101210703:wencheng -浙江,温州,平阳:101210704:pingyang -浙江,温州,瑞安:101210705:ruian -浙江,温州,洞头:101210706:dongtou -浙江,温州,乐清:101210707:yueqing -浙江,温州,永嘉:101210708:yongjia -浙江,温州,苍南:101210709:cangnan -浙江,丽水,丽水:101210801:lishui -浙江,丽水,遂昌:101210802:suichang -浙江,丽水,龙泉:101210803:longquan -浙江,丽水,缙云:101210804:jinyun -浙江,丽水,青田:101210805:qingtian -浙江,丽水,云和:101210806:yunhe -浙江,丽水,庆元:101210807:qingyuan -浙江,丽水,松阳:101210808:songyang -浙江,丽水,景宁:101210809:jingning -浙江,金华,金华:101210901:jinhua -浙江,金华,浦江:101210902:pujiang -浙江,金华,兰溪:101210903:lanxi -浙江,金华,义乌:101210904:yiwu -浙江,金华,东阳:101210905:dongyang -浙江,金华,武义:101210906:wuyi -浙江,金华,永康:101210907:yongkang -浙江,金华,磐安:101210908:panan -浙江,衢州,衢州:101211001:quzhou -浙江,衢州,常山:101211002:changshan -浙江,衢州,开化:101211003:kaihua -浙江,衢州,龙游:101211004:longyou -浙江,衢州,江山:101211005:jiangshan -浙江,衢州,衢江:101211006:qujiang -浙江,舟山,舟山:101211101:zhoushan -浙江,舟山,嵊泗:101211102:shengsi -浙江,舟山,岱山:101211104:daishan -浙江,舟山,普陀:101211105:putuo -浙江,舟山,定海:101211106:dinghai -安徽,合肥,合肥:101220101:hefei -安徽,合肥,长丰:101220102:changfeng -安徽,合肥,肥东:101220103:feidong -安徽,合肥,肥西:101220104:feixi -安徽,蚌埠,蚌埠:101220201:bengbu -安徽,蚌埠,怀远:101220202:huaiyuan -安徽,蚌埠,固镇:101220203:guzhen -安徽,蚌埠,五河:101220204:wuhe -安徽,芜湖,芜湖:101220301:wuhu -安徽,芜湖,繁昌:101220302:fanyang -安徽,芜湖,芜湖县:101220303:wuhuxian -安徽,芜湖,南陵:101220304:nanling -安徽,淮南,淮南:101220401:huainan -安徽,淮南,凤台:101220402:fengtai -安徽,淮南,潘集:101220403:panji -安徽,马鞍山,马鞍山:101220501:maanshan -安徽,马鞍山,当涂:101220502:dangtu -安徽,安庆,安庆:101220601:anqing -安徽,安庆,枞阳:101220602:zongyang -安徽,安庆,太湖:101220603:taihu -安徽,安庆,潜山:101220604:qianshan -安徽,安庆,怀宁:101220605:huaining -安徽,安庆,宿松:101220606:susong -安徽,安庆,望江:101220607:wangjiang -安徽,安庆,岳西:101220608:yuexi -安徽,安庆,桐城:101220609:tongcheng -安徽,宿州,宿州:101220701:suzhou -安徽,宿州,砀山:101220702:dangshan -安徽,宿州,灵璧:101220703:lingbi -安徽,宿州,泗县:101220704:sixian -安徽,宿州,萧县:101220705:xiaoxian -安徽,阜阳,阜阳:101220801:fuyang -安徽,阜阳,阜南:101220802:funan -安徽,阜阳,颍上:101220803:yingshang -安徽,阜阳,临泉:101220804:linquan -安徽,阜阳,界首:101220805:jieshou -安徽,阜阳,太和:101220806:taihe -安徽,亳州,亳州:101220901:bozhou -安徽,亳州,涡阳:101220902:guoyang -安徽,亳州,利辛:101220903:lixin -安徽,亳州,蒙城:101220904:mengcheng -安徽,黄山,黄山市:101221001:huangshan -安徽,黄山,黄山区:101221002:huangshanqu -安徽,黄山,屯溪:101221003:tunxi -安徽,黄山,祁门:101221004:qimen -安徽,黄山,黟县:101221005:yixian -安徽,黄山,歙县:101221006:shexian -安徽,黄山,休宁:101221007:xiuning -安徽,黄山,黄山风景区:101221008:huangshanfengjingqu -安徽,滁州,滁州:101221101:chuzhou -安徽,滁州,凤阳:101221102:fengyang -安徽,滁州,明光:101221103:mingguang -安徽,滁州,定远:101221104:dingyuan -安徽,滁州,全椒:101221105:quanjiao -安徽,滁州,来安:101221106:laian -安徽,滁州,天长:101221107:tianchang -安徽,淮北,淮北:101221201:huaibei -安徽,淮北,濉溪:101221202:suixi -安徽,铜陵,铜陵:101221301:tongling -安徽,宣城,宣城:101221401:xuancheng -安徽,宣城,泾县:101221402:jingxian -安徽,宣城,旌德:101221403:jingde -安徽,宣城,宁国:101221404:ningguo -安徽,宣城,绩溪:101221405:jixi -安徽,宣城,广德:101221406:guangde -安徽,宣城,郎溪:101221407:langxi -安徽,六安,六安:101221501:luan -安徽,六安,霍邱:101221502:huoqiu -安徽,六安,寿县:101221503:shouxian -安徽,六安,金寨:101221505:jinzhai -安徽,六安,霍山:101221506:huoshan -安徽,六安,舒城:101221507:shucheng -安徽,巢湖,巢湖:101221601:chaohu -安徽,巢湖,庐江:101221602:lujiang -安徽,巢湖,无为:101221603:wuwei -安徽,巢湖,含山:101221604:hanshan -安徽,巢湖,和县:101221605:hexian -安徽,池州,池州:101221701:chizhou -安徽,池州,东至:101221702:dongzhi -安徽,池州,青阳:101221703:qingyang -安徽,池州,九华山:101221704:jiuhuashan -安徽,池州,石台:101221705:shitai -福建,福州,福州:101230101:fuzhou -福建,福州,闽清:101230102:minqing -福建,福州,闽侯:101230103:minhou -福建,福州,罗源:101230104:luoyuan -福建,福州,连江:101230105:lianjiang -福建,福州,永泰:101230107:yongtai -福建,福州,平潭:101230108:pingtan -福建,福州,长乐:101230110:changle -福建,福州,福清:101230111:fuqing -福建,厦门,厦门:101230201:xiamen -福建,厦门,同安:101230202:tongan -福建,宁德,宁德:101230301:ningde -福建,宁德,古田:101230302:gutian -福建,宁德,霞浦:101230303:xiapu -福建,宁德,寿宁:101230304:shouning -福建,宁德,周宁:101230305:zhouning -福建,宁德,福安:101230306:fuan -福建,宁德,柘荣:101230307:zherong -福建,宁德,福鼎:101230308:fuding -福建,宁德,屏南:101230309:pingnan -福建,莆田,莆田:101230401:putian -福建,莆田,仙游:101230402:xianyou -福建,莆田,秀屿港:101230403:xiuyugang -福建,莆田,涵江:101230404:hanjiang -福建,莆田,秀屿:101230405:xiuyu -福建,莆田,荔城:101230406:licheng -福建,莆田,城厢:101230407:chengxiang -福建,泉州,泉州:101230501:quanzhou -福建,泉州,安溪:101230502:anxi -福建,泉州,永春:101230504:yongchun -福建,泉州,德化:101230505:dehua -福建,泉州,南安:101230506:nanan -福建,泉州,崇武:101230507:chongwu -福建,泉州,惠安:101230508:huian -福建,泉州,晋江:101230509:jinjiang -福建,泉州,石狮:101230510:shishi -福建,漳州,漳州:101230601:zhangzhou -福建,漳州,长泰:101230602:changtai -福建,漳州,南靖:101230603:nanjing -福建,漳州,平和:101230604:pinghe -福建,漳州,龙海:101230605:longhai -福建,漳州,漳浦:101230606:zhangpu -福建,漳州,诏安:101230607:zhaoan -福建,漳州,东山:101230608:dongshan -福建,漳州,云霄:101230609:yunxiao -福建,漳州,华安:101230610:huaan -福建,龙岩,龙岩:101230701:longyan -福建,龙岩,长汀:101230702:changting -福建,龙岩,连城:101230703:liancheng -福建,龙岩,武平:101230704:wuping -福建,龙岩,上杭:101230705:shanghang -福建,龙岩,永定:101230706:yongding -福建,龙岩,漳平:101230707:zhangping -福建,三明,三明:101230801:sanming -福建,三明,宁化:101230802:ninghua -福建,三明,清流:101230803:qingliu -福建,三明,泰宁:101230804:taining -福建,三明,将乐:101230805:jiangle -福建,三明,建宁:101230806:jianning -福建,三明,明溪:101230807:mingxi -福建,三明,沙县:101230808:shaxian -福建,三明,尤溪:101230809:youxi -福建,三明,永安:101230810:yongan -福建,三明,大田:101230811:datian -福建,南平,南平:101230901:nanping -福建,南平,顺昌:101230902:shunchang -福建,南平,光泽:101230903:guangze -福建,南平,邵武:101230904:shaowu -福建,南平,武夷山:101230905:wuyishan -福建,南平,浦城:101230906:pucheng -福建,南平,建阳:101230907:jianyang -福建,南平,松溪:101230908:songxi -福建,南平,政和:101230909:zhenghe -福建,南平,建瓯:101230910:jianou -福建,钓鱼岛,钓鱼岛:101231001:diaoyudao -江西,南昌,南昌:101240101:nanchang -江西,南昌,新建:101240102:xinjian -江西,南昌,南昌县:101240103:nanchangxian -江西,南昌,安义:101240104:anyi -江西,南昌,进贤:101240105:jinxian -江西,九江,九江:101240201:jiujiang -江西,九江,瑞昌:101240202:ruichang -江西,九江,庐山:101240203:lushan -江西,九江,武宁:101240204:wuning -江西,九江,德安:101240205:dean -江西,九江,永修:101240206:yongxiu -江西,九江,湖口:101240207:hukou -江西,九江,彭泽:101240208:pengze -江西,九江,星子:101240209:xingzi -江西,九江,都昌:101240210:duchang -江西,九江,修水:101240212:xiushui -江西,上饶,上饶:101240301:shangrao -江西,上饶,鄱阳:101240302:poyang -江西,上饶,婺源:101240303:wuyuan -江西,上饶,余干:101240305:yugan -江西,上饶,万年:101240306:wannian -江西,上饶,德兴:101240307:dexing -江西,上饶,上饶县:101240308:shangraoxian -江西,上饶,弋阳:101240309:yiyang -江西,上饶,横峰:101240310:hengfeng -江西,上饶,铅山:101240311:yanshan -江西,上饶,玉山:101240312:yushan -江西,上饶,广丰:101240313:guangfeng -江西,抚州,抚州:101240401:fuzhou -江西,抚州,广昌:101240402:guangchang -江西,抚州,乐安:101240403:anle -江西,抚州,崇仁:101240404:chongren -江西,抚州,金溪:101240405:jinxi -江西,抚州,资溪:101240406:zixi -江西,抚州,宜黄:101240407:yihuang -江西,抚州,南城:101240408:nancheng -江西,抚州,南丰:101240409:nanfeng -江西,抚州,黎川:101240410:lichuan -江西,抚州,东乡:101240411:dongxiang -江西,宜春,宜春:101240501:yichun -江西,宜春,铜鼓:101240502:tonggu -江西,宜春,宜丰:101240503:yifeng -江西,宜春,万载:101240504:wanzai -江西,宜春,上高:101240505:shanggao -江西,宜春,靖安:101240506:jingan -江西,宜春,奉新:101240507:fengxin -江西,宜春,高安:101240508:gaoan -江西,宜春,樟树:101240509:zhangshu -江西,宜春,丰城:101240510:fengcheng -江西,吉安,吉安:101240601:jian -江西,吉安,吉安县:101240602:jianxian -江西,吉安,吉水:101240603:jishui -江西,吉安,新干:101240604:xingan -江西,吉安,峡江:101240605:xiajiang -江西,吉安,永丰:101240606:yongfeng -江西,吉安,永新:101240607:yongxin -江西,吉安,井冈山:101240608:jinggangshan -江西,吉安,万安:101240609:wanan -江西,吉安,遂川:101240610:suichuan -江西,吉安,泰和:101240611:taihe -江西,吉安,安福:101240612:anfu -江西,吉安,宁冈:101240613:ninggang -江西,赣州,赣州:101240701:ganzhou -江西,赣州,崇义:101240702:chongyi -江西,赣州,上犹:101240703:shangyou -江西,赣州,南康:101240704:nankang -江西,赣州,大余:101240705:dayu -江西,赣州,信丰:101240706:xinfeng -江西,赣州,宁都:101240707:ningdu -江西,赣州,石城:101240708:shicheng -江西,赣州,瑞金:101240709:ruijin -江西,赣州,于都:101240710:yudu -江西,赣州,会昌:101240711:huichang -江西,赣州,安远:101240712:anyuan -江西,赣州,全南:101240713:quannan -江西,赣州,龙南:101240714:longnan -江西,赣州,定南:101240715:dingnan -江西,赣州,寻乌:101240716:xunwu -江西,赣州,兴国:101240717:xingguo -江西,赣州,赣县:101240718:ganxian -江西,景德镇,景德镇:101240801:jingdezhen -江西,景德镇,乐平:101240802:leping -江西,景德镇,浮梁:101240803:fuliang -江西,萍乡,萍乡:101240901:pingxiang -江西,萍乡,莲花:101240902:lianhua -江西,萍乡,上栗:101240903:shangli -江西,萍乡,安源:101240904:anyuan -江西,萍乡,芦溪:101240905:luxi -江西,萍乡,湘东:101240906:xiangdong -江西,新余,新余:101241001:xinyu -江西,新余,分宜:101241002:fenyi -江西,鹰潭,鹰潭:101241101:yingtan -江西,鹰潭,余江:101241102:yujiang -江西,鹰潭,贵溪:101241103:guixi -湖南,长沙,长沙:101250101:changsha -湖南,长沙,宁乡:101250102:ningxiang -湖南,长沙,浏阳:101250103:liuyang -湖南,长沙,马坡岭:101250104:mapoling -湖南,长沙,望城:101250105:wangcheng -湖南,湘潭,湘潭:101250201:xiangtan -湖南,湘潭,韶山:101250202:shaoshan -湖南,湘潭,湘乡:101250203:xiangxiang -湖南,株洲,株洲:101250301:zhuzhou -湖南,株洲,攸县:101250302:youxian -湖南,株洲,醴陵:101250303:liling -湖南,株洲,茶陵:101250305:chaling -湖南,株洲,炎陵:101250306:yanling -湖南,衡阳,衡阳:101250401:hengyang -湖南,衡阳,衡山:101250402:hengshan -湖南,衡阳,衡东:101250403:hengdong -湖南,衡阳,祁东:101250404:qidong -湖南,衡阳,衡阳县:101250405:hengyangxian -湖南,衡阳,常宁:101250406:changning -湖南,衡阳,衡南:101250407:hengnan -湖南,衡阳,耒阳:101250408:leiyang -湖南,衡阳,南岳:101250409:nanyue -湖南,郴州,郴州:101250501:chenzhou -湖南,郴州,桂阳:101250502:guiyang -湖南,郴州,嘉禾:101250503:jiahe -湖南,郴州,宜章:101250504:yizhang -湖南,郴州,临武:101250505:linwu -湖南,郴州,资兴:101250507:zixing -湖南,郴州,汝城:101250508:rucheng -湖南,郴州,安仁:101250509:anren -湖南,郴州,永兴:101250510:yongxing -湖南,郴州,桂东:101250511:guidong -湖南,郴州,苏仙:101250512:suxian -湖南,常德,常德:101250601:changde -湖南,常德,安乡:101250602:anxiang -湖南,常德,桃源:101250603:taoyuan -湖南,常德,汉寿:101250604:hanshou -湖南,常德,澧县:101250605:lixian -湖南,常德,临澧:101250606:linli -湖南,常德,石门:101250607:shimen -湖南,常德,津市:101250608:jinshi -湖南,益阳,益阳:101250700:yiyang -湖南,益阳,赫山区:101250701:heshanqu -湖南,益阳,南县:101250702:nanxian -湖南,益阳,桃江:101250703:taojiang -湖南,益阳,安化:101250704:anhua -湖南,益阳,沅江:101250705:yuanjiang -湖南,娄底,娄底:101250801:loudi -湖南,娄底,双峰:101250802:shuangfeng -湖南,娄底,冷水江:101250803:lengshuijiang -湖南,娄底,新化:101250805:xinhua -湖南,娄底,涟源:101250806:lianyuan -湖南,邵阳,邵阳:101250901:shaoyang -湖南,邵阳,隆回:101250902:longhui -湖南,邵阳,洞口:101250903:dongkou -湖南,邵阳,新邵:101250904:xinshao -湖南,邵阳,邵东:101250905:shaodong -湖南,邵阳,绥宁:101250906:suining -湖南,邵阳,新宁:101250907:xinning -湖南,邵阳,武冈:101250908:wugang -湖南,邵阳,城步:101250909:chengbu -湖南,邵阳,邵阳县:101250910:shaoyangxian -湖南,岳阳,岳阳:101251001:yueyang -湖南,岳阳,华容:101251002:huarong -湖南,岳阳,湘阴:101251003:xiangyin -湖南,岳阳,汨罗:101251004:miluo -湖南,岳阳,平江:101251005:pingjiang -湖南,岳阳,临湘:101251006:linxiang -湖南,张家界,张家界:101251101:zhangjiajie -湖南,张家界,桑植:101251102:sangzhi -湖南,张家界,慈利:101251103:cili -湖南,张家界,武陵源:101251104:wulingyuan -湖南,怀化,怀化:101251201:huaihua -湖南,怀化,沅陵:101251203:yuanling -湖南,怀化,辰溪:101251204:chenxi -湖南,怀化,靖州:101251205:jingzhou -湖南,怀化,会同:101251206:huitong -湖南,怀化,通道:101251207:tongdao -湖南,怀化,麻阳:101251208:mayang -湖南,怀化,新晃:101251209:xinhuang -湖南,怀化,芷江:101251210:zhijiang -湖南,怀化,溆浦:101251211:xupu -湖南,怀化,中方:101251212:zhongfang -湖南,怀化,洪江:101251213:hongjiang -湖南,永州,永州:101251401:yongzhou -湖南,永州,祁阳:101251402:qiyang -湖南,永州,东安:101251403:dongan -湖南,永州,双牌:101251404:shuangpai -湖南,永州,道县:101251405:daoxian -湖南,永州,宁远:101251406:ningyuan -湖南,永州,江永:101251407:jiangyong -湖南,永州,蓝山:101251408:lanshan -湖南,永州,新田:101251409:xintian -湖南,永州,江华:101251410:jianghua -湖南,永州,冷水滩:101251411:lengshuitan -湖南,湘西,吉首:101251501:jishou -湖南,湘西,保靖:101251502:baojing -湖南,湘西,永顺:101251503:yongshun -湖南,湘西,古丈:101251504:guzhang -湖南,湘西,凤凰:101251505:fenghuang -湖南,湘西,泸溪:101251506:luxi -湖南,湘西,龙山:101251507:longshan -湖南,湘西,花垣:101251508:huayuan -贵州,贵阳,贵阳:101260101:guiyang -贵州,贵阳,白云:101260102:baiyun -贵州,贵阳,花溪:101260103:huaxi -贵州,贵阳,乌当:101260104:wudang -贵州,贵阳,息烽:101260105:xifeng -贵州,贵阳,开阳:101260106:kaiyang -贵州,贵阳,修文:101260107:xiuwen -贵州,贵阳,清镇:101260108:qingzhen -贵州,贵阳,小河:101260109:xiaohe -贵州,贵阳,云岩:101260110:yunyan -贵州,贵阳,南明:101260111:nanming -贵州,遵义,遵义:101260201:zunyi -贵州,遵义,遵义县:101260202:zunyixian -贵州,遵义,仁怀:101260203:renhuai -贵州,遵义,绥阳:101260204:suiyang -贵州,遵义,湄潭:101260205:meitan -贵州,遵义,凤冈:101260206:fenggang -贵州,遵义,桐梓:101260207:tongzi -贵州,遵义,赤水:101260208:chishui -贵州,遵义,习水:101260209:xishui -贵州,遵义,道真:101260210:daozhen -贵州,遵义,正安:101260211:zhengan -贵州,遵义,务川:101260212:wuchuan -贵州,遵义,余庆:101260213:yuqing -贵州,遵义,汇川:101260214:huichuan -贵州,遵义,红花岗:101260215:honghuagang -贵州,安顺,安顺:101260301:anshun -贵州,安顺,普定:101260302:puding -贵州,安顺,镇宁:101260303:zhenning -贵州,安顺,平坝:101260304:pingba -贵州,安顺,紫云:101260305:ziyun -贵州,安顺,关岭:101260306:guanling -贵州,黔南,都匀:101260401:duyun -贵州,黔南,贵定:101260402:guiding -贵州,黔南,瓮安:101260403:wengan -贵州,黔南,长顺:101260404:changshun -贵州,黔南,福泉:101260405:fuquan -贵州,黔南,惠水:101260406:huishui -贵州,黔南,龙里:101260407:longli -贵州,黔南,罗甸:101260408:luodian -贵州,黔南,平塘:101260409:pingtang -贵州,黔南,独山:101260410:dushan -贵州,黔南,三都:101260411:sandu -贵州,黔南,荔波:101260412:libo -贵州,黔东南,凯里:101260501:kaili -贵州,黔东南,岑巩:101260502:cengong -贵州,黔东南,施秉:101260503:shibing -贵州,黔东南,镇远:101260504:zhenyuan -贵州,黔东南,黄平:101260505:huangping -贵州,黔东南,麻江:101260507:majiang -贵州,黔东南,丹寨:101260508:danzhai -贵州,黔东南,三穗:101260509:sansui -贵州,黔东南,台江:101260510:taijiang -贵州,黔东南,剑河:101260511:jianhe -贵州,黔东南,雷山:101260512:leishan -贵州,黔东南,黎平:101260513:liping -贵州,黔东南,天柱:101260514:tianzhu -贵州,黔东南,锦屏:101260515:jinping -贵州,黔东南,榕江:101260516:rongjiang -贵州,黔东南,从江:101260517:congjiang -贵州,铜仁,铜仁:101260601:tongren -贵州,铜仁,江口:101260602:jiangkou -贵州,铜仁,玉屏:101260603:yuping -贵州,铜仁,万山:101260604:wanshan -贵州,铜仁,思南:101260605:sinan -贵州,铜仁,印江:101260607:yinjiang -贵州,铜仁,石阡:101260608:shiqian -贵州,铜仁,沿河:101260609:yanhe -贵州,铜仁,德江:101260610:dejiang -贵州,铜仁,松桃:101260611:songtao -贵州,毕节,毕节:101260701:bijie -贵州,毕节,赫章:101260702:hezhang -贵州,毕节,金沙:101260703:jinsha -贵州,毕节,威宁:101260704:weining -贵州,毕节,大方:101260705:dafang -贵州,毕节,纳雍:101260706:nayong -贵州,毕节,织金:101260707:zhijin -贵州,毕节,黔西:101260708:qianxi -贵州,六盘水,水城:101260801:shuicheng -贵州,六盘水,六枝:101260802:liuzhi -贵州,六盘水,盘县:101260804:panxian -贵州,黔西南,兴义:101260901:xingyi -贵州,黔西南,晴隆:101260902:qinglong -贵州,黔西南,兴仁:101260903:xingren -贵州,黔西南,贞丰:101260904:zhenfeng -贵州,黔西南,望谟:101260905:wangmo -贵州,黔西南,安龙:101260907:anlong -贵州,黔西南,册亨:101260908:ceheng -贵州,黔西南,普安:101260909:puan -四川,成都,成都:101270101:chengdu -四川,成都,龙泉驿:101270102:longquanyi -四川,成都,新都:101270103:xindu -四川,成都,温江:101270104:wenjiang -四川,成都,金堂:101270105:jintang -四川,成都,双流:101270106:shuangliu -四川,成都,郫县:101270107:pixian -四川,成都,大邑:101270108:dayi -四川,成都,蒲江:101270109:pujiang -四川,成都,新津:101270110:xinjin -四川,成都,都江堰:101270111:dujiangyan -四川,成都,彭州:101270112:pengzhou -四川,成都,邛崃:101270113:qionglai -四川,成都,崇州:101270114:chongzhou -四川,攀枝花,攀枝花:101270201:panzhihua -四川,攀枝花,仁和:101270202:renhe -四川,攀枝花,米易:101270203:miyi -四川,攀枝花,盐边:101270204:yanbian -四川,自贡,自贡:101270301:zigong -四川,自贡,富顺:101270302:fushun -四川,自贡,荣县:101270303:rongxian -四川,绵阳,绵阳:101270401:mianyang -四川,绵阳,三台:101270402:santai -四川,绵阳,盐亭:101270403:yanting -四川,绵阳,安县:101270404:anxian -四川,绵阳,梓潼:101270405:zitong -四川,绵阳,北川:101270406:beichuan -四川,绵阳,平武:101270407:pingwu -四川,绵阳,江油:101270408:jiangyou -四川,南充,南充:101270501:nanchong -四川,南充,南部:101270502:nanbu -四川,南充,营山:101270503:yingshan -四川,南充,蓬安:101270504:pengan -四川,南充,仪陇:101270505:yilong -四川,南充,西充:101270506:xichong -四川,南充,阆中:101270507:langzhong -四川,达州,达州:101270601:dazhou -四川,达州,宣汉:101270602:xuanhan -四川,达州,开江:101270603:kaijiang -四川,达州,大竹:101270604:dazhu -四川,达州,渠县:101270605:quxian -四川,达州,万源:101270606:wanyuan -四川,达州,通川:101270607:tongchuan -四川,达州,达县:101270608:daxian -四川,遂宁,遂宁:101270701:suining -四川,遂宁,蓬溪:101270702:pengxi -四川,遂宁,射洪:101270703:shehong -四川,广安,广安:101270801:guangan -四川,广安,岳池:101270802:yuechi -四川,广安,武胜:101270803:wusheng -四川,广安,邻水:101270804:linshui -四川,广安,华蓥:101270805:huaying -四川,巴中,巴中:101270901:bazhong -四川,巴中,通江:101270902:tongjiang -四川,巴中,南江:101270903:nanjiang -四川,巴中,平昌:101270904:pingchang -四川,泸州,泸州:101271001:luzhou -四川,泸州,泸县:101271003:luxian -四川,泸州,合江:101271004:hejiang -四川,泸州,叙永:101271005:xuyong -四川,泸州,古蔺:101271006:gulin -四川,泸州,纳溪:101271007:naxi -四川,宜宾,宜宾:101271101:yibin -四川,宜宾,宜宾县:101271103:yibinxian -四川,宜宾,南溪:101271104:nanxi -四川,宜宾,江安:101271105:jiangan -四川,宜宾,长宁:101271106:changning -四川,宜宾,高县:101271107:gaoxian -四川,宜宾,珙县:101271108:gongxian -四川,宜宾,筠连:101271109:junlian -四川,宜宾,兴文:101271110:xingwen -四川,宜宾,屏山:101271111:pingshan -四川,内江,内江:101271201:neijiang -四川,内江,东兴:101271202:dongxing -四川,内江,威远:101271203:weiyuan -四川,内江,资中:101271204:zizhong -四川,内江,隆昌:101271205:longchang -四川,资阳,资阳:101271301:ziyang -四川,资阳,安岳:101271302:anyue -四川,资阳,乐至:101271303:lezhi -四川,资阳,简阳:101271304:jianyang -四川,乐山,乐山:101271401:leshan -四川,乐山,犍为:101271402:qianwei -四川,乐山,井研:101271403:jingyan -四川,乐山,夹江:101271404:jiajiang -四川,乐山,沐川:101271405:muchuan -四川,乐山,峨边:101271406:ebian -四川,乐山,马边:101271407:mabian -四川,乐山,峨眉:101271408:emei -四川,乐山,峨眉山:101271409:emeishan -四川,眉山,眉山:101271501:meishan -四川,眉山,仁寿:101271502:renshou -四川,眉山,彭山:101271503:pengshan -四川,眉山,洪雅:101271504:hongya -四川,眉山,丹棱:101271505:danleng -四川,眉山,青神:101271506:qingshen -四川,凉山,凉山:101271601:liangshan -四川,凉山,木里:101271603:muli -四川,凉山,盐源:101271604:yanyuan -四川,凉山,德昌:101271605:dechang -四川,凉山,会理:101271606:huili -四川,凉山,会东:101271607:huidong -四川,凉山,宁南:101271608:ningnan -四川,凉山,普格:101271609:puge -四川,凉山,西昌:101271610:xichang -四川,凉山,金阳:101271611:jinyang -四川,凉山,昭觉:101271612:zhaojue -四川,凉山,喜德:101271613:xide -四川,凉山,冕宁:101271614:mianning -四川,凉山,越西:101271615:yuexi -四川,凉山,甘洛:101271616:ganluo -四川,凉山,雷波:101271617:leibo -四川,凉山,美姑:101271618:meigu -四川,凉山,布拖:101271619:butuo -四川,雅安,雅安:101271701:yaan:ya'an -四川,雅安,名山:101271702:mingshan -四川,雅安,荥经:101271703:yingjing -四川,雅安,汉源:101271704:hanyuan -四川,雅安,石棉:101271705:shimian -四川,雅安,天全:101271706:tianquan -四川,雅安,芦山:101271707:lushan -四川,雅安,宝兴:101271708:baoxing -四川,甘孜,甘孜:101271801:ganzi -四川,甘孜,康定:101271802:kangding -四川,甘孜,泸定:101271803:luding -四川,甘孜,丹巴:101271804:danba -四川,甘孜,九龙:101271805:jiulong -四川,甘孜,雅江:101271806:yajiang -四川,甘孜,道孚:101271807:daofu -四川,甘孜,炉霍:101271808:luhuo -四川,甘孜,新龙:101271809:xinlong -四川,甘孜,德格:101271810:dege -四川,甘孜,白玉:101271811:baiyu -四川,甘孜,石渠:101271812:shiqu -四川,甘孜,色达:101271813:seda -四川,甘孜,理塘:101271814:litang -四川,甘孜,巴塘:101271815:batang -四川,甘孜,乡城:101271816:xiangcheng -四川,甘孜,稻城:101271817:daocheng -四川,甘孜,得荣:101271818:derong -四川,阿坝,阿坝:101271901:aba -四川,阿坝,汶川:101271902:wenchuan -四川,阿坝,理县:101271903:lixian -四川,阿坝,茂县:101271904:maoxian -四川,阿坝,松潘:101271905:songfan -四川,阿坝,九寨沟:101271906:jiuzhaigou -四川,阿坝,金川:101271907:jinchuan -四川,阿坝,小金:101271908:xiaojin -四川,阿坝,黑水:101271909:heishui -四川,阿坝,马尔康:101271910:maerkang -四川,阿坝,壤塘:101271911:rangtang -四川,阿坝,若尔盖:101271912:nuoergai -四川,阿坝,红原:101271913:hongyuan -四川,德阳,德阳:101272001:deyang -四川,德阳,中江:101272002:zhongjiang -四川,德阳,广汉:101272003:guanghan -四川,德阳,什邡:101272004:shifang -四川,德阳,绵竹:101272005:mianzhu -四川,德阳,罗江:101272006:luojiang -四川,广元,广元:101272101:guangyuan -四川,广元,旺苍:101272102:wangcang -四川,广元,青川:101272103:qingchuan -四川,广元,剑阁:101272104:jiange -四川,广元,苍溪:101272105:cangxi -广东,广州,广州:101280101:guangzhou -广东,广州,番禺:101280102:panyu -广东,广州,从化:101280103:conghua -广东,广州,增城:101280104:zengcheng -广东,广州,花都:101280105:huadu -广东,韶关,韶关:101280201:shaoguan -广东,韶关,乳源:101280202:ruyuan -广东,韶关,始兴:101280203:shixing -广东,韶关,翁源:101280204:wengyuan -广东,韶关,乐昌:101280205:lechang -广东,韶关,仁化:101280206:renhua -广东,韶关,南雄:101280207:nanxiong -广东,韶关,新丰:101280208:xinfeng -广东,韶关,曲江:101280209:qujiang -广东,韶关,浈江:101280210:zhenjiang -广东,韶关,武江:101280211:wujiang -广东,惠州,惠州:101280301:huizhou -广东,惠州,博罗:101280302:boluo -广东,惠州,惠阳:101280303:huiyang -广东,惠州,惠东:101280304:huidong -广东,惠州,龙门:101280305:longmen -广东,梅州,梅州:101280401:meizhou -广东,梅州,兴宁:101280402:xingning -广东,梅州,蕉岭:101280403:jiaoling -广东,梅州,大埔:101280404:dabu -广东,梅州,丰顺:101280406:fengshun -广东,梅州,平远:101280407:pingyuan -广东,梅州,五华:101280408:wuhua -广东,梅州,梅县:101280409:meixian -广东,汕头,汕头:101280501:shantou -广东,汕头,潮阳:101280502:chaoyang -广东,汕头,澄海:101280503:chenghai -广东,汕头,南澳:101280504:nanao -广东,深圳,深圳:101280601:shenzhen -广东,珠海,珠海:101280701:zhuhai -广东,珠海,斗门:101280702:doumen -广东,珠海,金湾:101280703:jinwan -广东,佛山,佛山:101280800:foshan -广东,佛山,顺德:101280801:shunde -广东,佛山,三水:101280802:sanshui -广东,佛山,南海:101280803:nanhai -广东,佛山,高明:101280804:gaoming -广东,肇庆,肇庆:101280901:zhaoqing -广东,肇庆,广宁:101280902:guangning -广东,肇庆,四会:101280903:sihui -广东,肇庆,德庆:101280905:deqing -广东,肇庆,怀集:101280906:huaiji -广东,肇庆,封开:101280907:fengkai -广东,肇庆,高要:101280908:gaoyao -广东,湛江,湛江:101281001:zhanjiang -广东,湛江,吴川:101281002:wuchuan -广东,湛江,雷州:101281003:leizhou -广东,湛江,徐闻:101281004:xuwen -广东,湛江,廉江:101281005:lianjiang -广东,湛江,赤坎:101281006:chikan -广东,湛江,遂溪:101281007:suixi -广东,湛江,坡头:101281008:potou -广东,湛江,霞山:101281009:xiashan -广东,湛江,麻章:101281010:mazhang -广东,江门,江门:101281101:jiangmen -广东,江门,开平:101281103:kaiping -广东,江门,新会:101281104:xinhui -广东,江门,恩平:101281105:enping -广东,江门,台山:101281106:taishan -广东,江门,蓬江:101281107:pengjiang -广东,江门,鹤山:101281108:heshan -广东,江门,江海:101281109:jianghai -广东,河源,河源:101281201:heyuan -广东,河源,紫金:101281202:zijin -广东,河源,连平:101281203:lianping -广东,河源,和平:101281204:heping -广东,河源,龙川:101281205:longchuan -广东,河源,东源:101281206:dongyuan -广东,清远,清远:101281301:qingyuan -广东,清远,连南:101281302:liannan -广东,清远,连州:101281303:lianzhou -广东,清远,连山:101281304:lianshan -广东,清远,阳山:101281305:yangshan -广东,清远,佛冈:101281306:fogang -广东,清远,英德:101281307:yingde -广东,清远,清新:101281308:qingxin -广东,云浮,云浮:101281401:yunfu -广东,云浮,罗定:101281402:luoding -广东,云浮,新兴:101281403:xinxing -广东,云浮,郁南:101281404:yunan -广东,云浮,云安:101281406:yunan -广东,潮州,潮州:101281501:chaozhou -广东,潮州,饶平:101281502:raoping -广东,潮州,潮安:101281503:chaoan -广东,东莞,东莞:101281601:dongguan -广东,中山,中山:101281701:zhongshan -广东,阳江,阳江:101281801:yangjiang -广东,阳江,阳春:101281802:yangchun -广东,阳江,阳东:101281803:yangdong -广东,阳江,阳西:101281804:yangxi -广东,揭阳,揭阳:101281901:jieyang -广东,揭阳,揭西:101281902:jiexi -广东,揭阳,普宁:101281903:puning -广东,揭阳,惠来:101281904:huilai -广东,揭阳,揭东:101281905:jiedong -广东,茂名,茂名:101282001:maoming -广东,茂名,高州:101282002:gaozhou -广东,茂名,化州:101282003:huazhou -广东,茂名,电白:101282004:dianbai -广东,茂名,信宜:101282005:xinyi -广东,茂名,茂港:101282006:maogang -广东,汕尾,汕尾:101282101:shanwei -广东,汕尾,海丰:101282102:haifeng -广东,汕尾,陆丰:101282103:lufeng -广东,汕尾,陆河:101282104:luhe -云南,昆明,昆明:101290101:kunming -云南,昆明,东川:101290103:dongchuan -云南,昆明,寻甸:101290104:xundian -云南,昆明,晋宁:101290105:jinning -云南,昆明,宜良:101290106:yiliang -云南,昆明,石林:101290107:shilin -云南,昆明,呈贡:101290108:chenggong -云南,昆明,富民:101290109:fumin -云南,昆明,嵩明:101290110:songming -云南,昆明,禄劝:101290111:luquan -云南,昆明,安宁:101290112:anning -云南,昆明,太华山:101290113:taihuashan -云南,大理,大理:101290201:dali -云南,大理,云龙:101290202:yunlong -云南,大理,漾濞:101290203:yangbi -云南,大理,永平:101290204:yongping -云南,大理,宾川:101290205:binchuan -云南,大理,弥渡:101290206:midu -云南,大理,祥云:101290207:xiangyun -云南,大理,巍山:101290208:weishan -云南,大理,剑川:101290209:jianchuan -云南,大理,洱源:101290210:eryuan -云南,大理,鹤庆:101290211:heqing -云南,大理,南涧:101290212:nanjian -云南,红河,红河:101290301:honghe -云南,红河,石屏:101290302:shiping -云南,红河,建水:101290303:jianshui -云南,红河,弥勒:101290304:mile -云南,红河,元阳:101290305:yuanyang -云南,红河,绿春:101290306:lvchun -云南,红河,开远:101290307:kaiyuan -云南,红河,个旧:101290308:gejiu -云南,红河,蒙自:101290309:mengzi -云南,红河,屏边:101290310:pingbian -云南,红河,泸西:101290311:luxi -云南,红河,金平:101290312:jinping -云南,红河,河口:101290313:hekou -云南,曲靖,曲靖:101290401:qujing -云南,曲靖,沾益:101290402:zhanyi -云南,曲靖,陆良:101290403:luliang -云南,曲靖,富源:101290404:fuyuan -云南,曲靖,马龙:101290405:malong -云南,曲靖,师宗:101290406:shizong -云南,曲靖,罗平:101290407:luoping -云南,曲靖,会泽:101290408:huize -云南,曲靖,宣威:101290409:xuanwei -云南,保山,保山:101290501:baoshan -云南,保山,龙陵:101290503:longling -云南,保山,施甸:101290504:sidian -云南,保山,昌宁:101290505:changning -云南,保山,腾冲:101290506:tengchong -云南,文山,文山:101290601:wenshan -云南,文山,西畴:101290602:xichou -云南,文山,马关:101290603:maguan -云南,文山,麻栗坡:101290604:malipo -云南,文山,砚山:101290605:yanshan -云南,文山,丘北:101290606:qiubei -云南,文山,广南:101290607:guangnan -云南,文山,富宁:101290608:funing -云南,玉溪,玉溪:101290701:yuxi -云南,玉溪,澄江:101290702:chengjiang -云南,玉溪,江川:101290703:jiangchuan -云南,玉溪,通海:101290704:tonghai -云南,玉溪,华宁:101290705:huaning -云南,玉溪,新平:101290706:xinping -云南,玉溪,易门:101290707:yimen -云南,玉溪,峨山:101290708:eshan -云南,玉溪,元江:101290709:yuanjiang -云南,楚雄,楚雄:101290801:chuxiong -云南,楚雄,大姚:101290802:dayao -云南,楚雄,元谋:101290803:yuanmou -云南,楚雄,姚安:101290804:yaoan -云南,楚雄,牟定:101290805:mouding -云南,楚雄,南华:101290806:nanhua -云南,楚雄,武定:101290807:wuding -云南,楚雄,禄丰:101290808:lufeng -云南,楚雄,双柏:101290809:shuangbai -云南,楚雄,永仁:101290810:yongren -云南,普洱,普洱:101290901:puer -云南,普洱,景谷:101290902:jinggu -云南,普洱,景东:101290903:jingdong -云南,普洱,澜沧:101290904:lancang -云南,普洱,墨江:101290906:mojiang -云南,普洱,江城:101290907:jiangcheng -云南,普洱,孟连:101290908:menglian -云南,普洱,西盟:101290909:ximeng -云南,普洱,镇沅:101290911:zhenyuan -云南,普洱,宁洱:101290912:ninger -云南,昭通,昭通:101291001:zhaotong -云南,昭通,鲁甸:101291002:ludian -云南,昭通,彝良:101291003:yiliang -云南,昭通,镇雄:101291004:zhenxiong -云南,昭通,威信:101291005:weixin -云南,昭通,巧家:101291006:qiaojia -云南,昭通,绥江:101291007:suijiang -云南,昭通,永善:101291008:yongshan -云南,昭通,盐津:101291009:yanjin -云南,昭通,大关:101291010:daguan -云南,昭通,水富:101291011:shuifu -云南,临沧,临沧:101291101:lincang -云南,临沧,沧源:101291102:cangyuan -云南,临沧,耿马:101291103:gengma -云南,临沧,双江:101291104:shuangjiang -云南,临沧,凤庆:101291105:fengqing -云南,临沧,永德:101291106:yongde -云南,临沧,云县:101291107:yunxian -云南,临沧,镇康:101291108:zhenkang -云南,怒江,怒江:101291201:nujiang -云南,怒江,福贡:101291203:fugong -云南,怒江,兰坪:101291204:lanping -云南,怒江,泸水:101291205:lushui -云南,怒江,六库:101291206:liuku -云南,怒江,贡山:101291207:gongshan -云南,迪庆,香格里拉:101291301:xianggelila -云南,迪庆,德钦:101291302:deqin -云南,迪庆,维西:101291303:weixi -云南,迪庆,中甸:101291304:zhongdian -云南,丽江,丽江:101291401:lijiang -云南,丽江,永胜:101291402:yongsheng -云南,丽江,华坪:101291403:huaping -云南,丽江,宁蒗:101291404:ninglang -云南,德宏,德宏:101291501:dehong -云南,德宏,陇川:101291503:longchuan -云南,德宏,盈江:101291504:yingjiang -云南,德宏,瑞丽:101291506:ruili -云南,德宏,梁河:101291507:lianghe -云南,德宏,潞西:101291508:luxi -云南,西双版纳,景洪:101291601:jinghong -云南,西双版纳,勐海:101291603:menghai -云南,西双版纳,勐腊:101291605:mengla -广西,南宁,南宁:101300101:nanning -广西,南宁,邕宁:101300103:yongning -广西,南宁,横县:101300104:hengxian -广西,南宁,隆安:101300105:longan -广西,南宁,马山:101300106:mashan -广西,南宁,上林:101300107:shanglin -广西,南宁,武鸣:101300108:wuming -广西,南宁,宾阳:101300109:binyang -广西,崇左,崇左:101300201:chongzuo -广西,崇左,天等:101300202:tiandeng -广西,崇左,龙州:101300203:longzhou -广西,崇左,凭祥:101300204:pingxiang -广西,崇左,大新:101300205:daxin -广西,崇左,扶绥:101300206:fusui -广西,崇左,宁明:101300207:ningming -广西,柳州,柳州:101300301:liuzhou -广西,柳州,柳城:101300302:liucheng -广西,柳州,鹿寨:101300304:luzhai -广西,柳州,柳江:101300305:liujiang -广西,柳州,融安:101300306:rongan -广西,柳州,融水:101300307:rongshui -广西,柳州,三江:101300308:sanjiang -广西,来宾,来宾:101300401:laibin -广西,来宾,忻城:101300402:xicheng -广西,来宾,金秀:101300403:jinxiu -广西,来宾,象州:101300404:xiangzhou -广西,来宾,武宣:101300405:wuxuan -广西,来宾,合山:101300406:heshan -广西,桂林,桂林:101300501:guilin -广西,桂林,龙胜:101300503:longsheng -广西,桂林,永福:101300504:yongfu -广西,桂林,临桂:101300505:lingui -广西,桂林,兴安:101300506:xingan -广西,桂林,灵川:101300507:lingchuan -广西,桂林,全州:101300508:quanzhou -广西,桂林,灌阳:101300509:guanyang -广西,桂林,阳朔:101300510:yangshuo -广西,桂林,恭城:101300511:gongcheng -广西,桂林,平乐:101300512:pingle -广西,桂林,荔浦:101300513:lipu -广西,桂林,资源:101300514:ziyuan -广西,梧州,梧州:101300601:wuzhou -广西,梧州,藤县:101300602:tengxian -广西,梧州,苍梧:101300604:cangwu -广西,梧州,蒙山:101300605:mengshan -广西,梧州,岑溪:101300606:cenxi -广西,贺州,贺州:101300701:hezhou -广西,贺州,昭平:101300702:zhaoping -广西,贺州,富川:101300703:fuchuan -广西,贺州,钟山:101300704:zhongshan -广西,贵港,贵港:101300801:guigang -广西,贵港,桂平:101300802:guiping -广西,贵港,平南:101300803:pingnan -广西,玉林,玉林:101300901:yulin -广西,玉林,博白:101300902:bobai -广西,玉林,北流:101300903:beiliu -广西,玉林,容县:101300904:rongxian -广西,玉林,陆川:101300905:luchuan -广西,玉林,兴业:101300906:xingye -广西,百色,百色:101301001:baise -广西,百色,那坡:101301002:napo -广西,百色,田阳:101301003:tianyang -广西,百色,德保:101301004:debao -广西,百色,靖西:101301005:jingxi -广西,百色,田东:101301006:tiandong -广西,百色,平果:101301007:pingguo -广西,百色,隆林:101301008:longlin -广西,百色,西林:101301009:xilin -广西,百色,乐业:101301010:leye -广西,百色,凌云:101301011:lingyun -广西,百色,田林:101301012:tianlin -广西,钦州,钦州:101301101:qinzhou -广西,钦州,浦北:101301102:pubei -广西,钦州,灵山:101301103:lingshan -广西,河池,河池:101301201:hechi -广西,河池,天峨:101301202:tiane -广西,河池,东兰:101301203:donglan -广西,河池,巴马:101301204:bama -广西,河池,环江:101301205:huanjiang -广西,河池,罗城:101301206:luocheng -广西,河池,宜州:101301207:yizhou -广西,河池,凤山:101301208:fengshan -广西,河池,南丹:101301209:nandan -广西,河池,都安:101301210:andu -广西,河池,大化:101301211:dahua -广西,北海,北海:101301301:beihai -广西,北海,合浦:101301302:hepu -广西,北海,涠洲岛:101301303:weizhoudao -广西,防城港,防城港:101301401:fangchenggang -广西,防城港,上思:101301402:shangsi -广西,防城港,东兴:101301403:dongxing -广西,防城港,防城:101301405:fangcheng -海南,海口,海口:101310101:haikou -海南,三亚,三亚:101310201:sanya -海南,东方,东方:101310202:dongfang -海南,临高,临高:101310203:lingao -海南,澄迈,澄迈:101310204:chengmai -海南,儋州,儋州:101310205:danzhou -海南,昌江,昌江:101310206:changjiang -海南,白沙,白沙:101310207:baisha -海南,琼中,琼中:101310208:qiongzhong -海南,定安,定安:101310209:dingan -海南,屯昌,屯昌:101310210:tunchang -海南,琼海,琼海:101310211:qionghai -海南,文昌,文昌:101310212:wenchang -海南,保亭,保亭:101310214:baoting -海南,万宁,万宁:101310215:wanning -海南,陵水,陵水:101310216:lingshui -海南,西沙,西沙:101310217:xisha -海南,南沙,南沙:101310220:nansha -海南,乐东,乐东:101310221:ledong -海南,五指山,五指山:101310222:wuzhishan -海南,中沙,中沙:101310224:zhongsha -香港,香港,香港:101320101:hongkong:xianggang -香港,香港,九龙:101320102:jiulong -香港,香港,新界:101320103:xinjie -澳门,澳门,澳门:101330101:macao:aomen -澳门,澳门,氹仔岛:101330102:dangzidao -澳门,澳门,路环岛:101330103:luhuandao -台湾,台北,台北:101340101:taibeixian -台湾,台北,桃园:101340102:taoyuan -台湾,台北,新竹:101340103:xinzhu -台湾,台北,宜兰:101340104:yilan -台湾,高雄,高雄:101340201:gaoxiong -台湾,高雄,嘉义:101340202:jiayi -台湾,高雄,台南:101340203:tainan -台湾,高雄,台东:101340204:taidong -台湾,高雄,屏东:101340205:pingdong -台湾,台中,台中:101340401:taizhong -台湾,台中,苗栗:101340402:miaoli -台湾,台中,彰化:101340403:zhanghua -台湾,台中,南投:101340404:nantou -台湾,台中,花莲:101340405:hualian -台湾,台中,云林:101340406:yunlin diff -Nru indicator-china-weather-2.2.8/src/locationworker.cpp indicator-china-weather-3.0.2~201904291430/src/locationworker.cpp --- indicator-china-weather-2.2.8/src/locationworker.cpp 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/locationworker.cpp 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,110 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "locationworker.h" + +#include +#include + +WorkerThread::WorkerThread(LocationWorker *parent) : + QThread(parent) +{ + +} + +void WorkerThread::run() +{ + LocationWorker *m_worker = qobject_cast(parent()); + if (!m_worker) + return; + + /*QFile file(":/data/data/china-city-list.csv"); + if (file.open(QFile::ReadOnly | QFile::Text)) { + QString content = file.readAll(); + QStringList resultList = content.split("\n"); + qDebug() << resultList.length(); + file.close(); + }*/ + + //CN101250101,changsha,长沙,CN,China,中国,hunan,湖南,changsha,长沙,28.19409,112.98228,"430101,430100,430000", + + QFile file(":/data/data/china-city-list.csv"); + if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { + QString line = file.readLine(); + line = line.replace("\n", ""); + while (!line.isEmpty()) { + QStringList resultList = line.split(","); + if (resultList.length() < 10) { + line = file.readLine(); + line = line.replace("\n", ""); + continue; + } + + QString id = resultList.at(0); + if (!id.startsWith("CN")) { + line = file.readLine(); + line = line.replace("\n", ""); + continue; + } + + LocationData data; + data.id = id.remove(0, 2);//remove "CN" + data.city_en = resultList.at(1); + data.city = resultList.at(2); + data.country_en = resultList.at(4); + data.country = resultList.at(5); + data.province_en = resultList.at(6); + data.province = resultList.at(7); + data.admin_district_en = resultList.at(8); + data.admin_district = resultList.at(9); + + m_worker->m_locatonList << data; + + line = file.readLine(); + line = line.replace("\n", ""); + } + file.close(); + } +} + +//-------------------------------------------------------------- +LocationWorker::LocationWorker(QObject *parent) + : QObject(parent), + m_workerThread(new WorkerThread(this)) +{ + m_workerThread->start(); +} + +LocationWorker::~LocationWorker() +{ + m_workerThread->deleteLater(); +} + +QList LocationWorker::exactMatchCity(const QString &inputText) const +{ + QList searchedList; + + for (const LocationData line : m_locatonList) { + if (line.id == inputText || line.city.contains(inputText) || line.city_en.contains(inputText) || line.province == inputText || line.province_en == inputText || line.admin_district.contains(inputText) || line.admin_district_en.contains(inputText)) { + searchedList.append(line); + } + } + + return searchedList; +} diff -Nru indicator-china-weather-2.2.8/src/locationworker.h indicator-china-weather-3.0.2~201904291430/src/locationworker.h --- indicator-china-weather-2.2.8/src/locationworker.h 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/locationworker.h 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef LOCATIONWORKER_H +#define LOCATIONWORKER_H + +#include +#include +#include + +#include "data.h" + +class LocationWorker; + +class WorkerThread : public QThread +{ + Q_OBJECT + +public: + explicit WorkerThread(LocationWorker *parent); + ~WorkerThread() {} + + void run() Q_DECL_OVERRIDE; +}; + +class LocationWorker : public QObject +{ + Q_OBJECT +public: + explicit LocationWorker(QObject *parent = 0); + ~LocationWorker(); + + QList exactMatchCity(const QString &inputText) const; + +private: + friend class WorkerThread; + QList m_locatonList; + WorkerThread *m_workerThread = nullptr; +}; + +#endif // LOCATIONWORKER_H diff -Nru indicator-china-weather-2.2.8/src/main.cpp indicator-china-weather-3.0.2~201904291430/src/main.cpp --- indicator-china-weather-2.2.8/src/main.cpp 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/main.cpp 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "mainwindow.h" +#include "dbusadaptor.h" + +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + a.setOrganizationName("kylin"); + a.setApplicationName("Kylin Weather (indication-china-weather)"); + a.setApplicationVersion("3.0.1"); + a.setQuitOnLastWindowClosed(false);//Avoid that after hiding mainwindow, close the sub window would cause the program exit + + QString locale = QLocale::system().name(); + QTranslator translator; + if(locale == "zh_CN") { + if(!translator.load("indicator-china-weather_" + locale + ".qm", + ":/qm/translation/")) + qDebug() << "Load translation file:"<< "indicator-china-weather_" + locale + ".qm" << " failed!"; + else + a.installTranslator(&translator); + } + +// QTranslator qtTranslator; +// qtTranslator.load("qt_" + locale, QLibraryInfo::location(QLibraryInfo::TranslationsPath)); +// a.installTranslator(&qtTranslator); + + MainWindow w; + DbusAdaptor adaptor(&w); + Q_UNUSED(adaptor); + auto connection = QDBusConnection::sessionBus(); + if (!connection.registerService("com.kylin.weather") || !connection.registerObject("/com/kylin/weather", &w/*, QDBusConnection::ExportAllSlots | QDBusConnection::ExportAllSignals*/)) { + //qCritical() << "QDbus register service failed reason:" << connection.lastError(); + QDBusInterface iface("com.kylin.weather", + "/com/kylin/weather", + "com.kylin.weather", + connection); + iface.call("showMainWindow"); + + return 0; + }//QDBusConnection::sessionBus().unregisterService("com.kylin.weather"); + //w.show(); + + return a.exec(); +} diff -Nru indicator-china-weather-2.2.8/src/mainwindow.cpp indicator-china-weather-3.0.2~201904291430/src/mainwindow.cpp --- indicator-china-weather-2.2.8/src/mainwindow.cpp 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/mainwindow.cpp 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,706 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "mainwindow.h" +#include "titlebar.h" +#include "contentwidget.h" +#include "settingdialog.h" +#include "aboutdialog.h" +#include "promptwidget.h" +#include "weatherworker.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "preferences.h" +#include "global.h" +using namespace Global; + +inline QString convertCodeToBackgroud(int code) +{ + if (code == 100 || code == 900) { + return ":/res/background/weather-clear.png"; + } + else if (code <= 103 && code >= 101) { + return ":/res/background/weather-few-clouds.png"; + } + else if (code == 104 || code == 901) { + return ":/res/background/weather-overcast.png"; + } + else if (code <= 204 && code >= 200) { + return ":/res/background/weather-clear.png"; + } + else if (code <= 213 && code >= 205) { + return ":/res/background/weather-overcast.png"; + } + else if (code <= 399 && code >= 300) { + return ":/res/background/weather-rain.png"; + } + else if (code <= 499 && code >= 400) { + return ":/res/background/weather-snow.png"; + } + else if (code <= 502 && code >= 500) { + return ":/res/background/weather-fog.png"; + } + else if (code <= 508 && code >= 503) { + return ":/res/background/weather-sandstorm.png"; + } + else if (code <= 515 && code >= 509) { + return ":/res/background/weather-fog.png"; + } + else { + return ":/res/background/weather-clear.png"; + } +} + +MainWindow::MainWindow(QWidget *parent) + : QMainWindow(parent) +// , m_mousePressed(false) + , m_centralWidget(new QWidget(this)) + , m_titleBar(new TitleBar(this)) + , m_contentWidget(new ContentWidget(this)) + , m_pingbackTimer(new QTimer(this)) + , m_tipTimer(new QTimer(this)) + , m_autoRefreshTimer(new QTimer(this)) + , m_actualizationTime(0) + , m_weatherWorker(new WeatherWorker(this)) +{ + this->setFixedSize(355, 552); + this->setWindowFlags(Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint | Qt::WindowStaysOnTopHint); +// this->setAttribute(Qt::WA_TranslucentBackground, true); + this->setFocusPolicy(Qt::ClickFocus);//Qt::StrongFocus + //this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowMinimizeButtonHint);//ubuntu 16.04 可能需要加上Qt::WindowMinimizeButtonHint,否则showMinimized无效 + this->setWindowTitle(tr("Kylin Weather")); + this->setWindowIcon(QIcon(":/res/indicator-china-weather.png")); + this->setStyleSheet("QMainWindow{color:white;background-image:url(':/res/background/weather-clear.png');background-repeat:no-repeat;}"); + + global_init(); + + m_updateTimeStr = QString(tr("Refresh time")); + + m_layout = new QVBoxLayout(m_centralWidget); + m_layout->setContentsMargins(0,0,0,0); + m_layout->setSpacing(0); + + m_layout->addWidget(m_titleBar);//height:32 + m_layout->addWidget(m_contentWidget);//height:520 + this->setCentralWidget(m_centralWidget); + + this->initMenuAndTray(); + m_titleBar->setCityName(m_preferences->m_currentCity); + + m_currentDesktop = qgetenv("XDG_CURRENT_DESKTOP"); + if (m_currentDesktop.isEmpty()) { + m_currentDesktop = qgetenv("XDG_SESSION_DESKTOP"); + } + /*if (m_currentDesktop.isEmpty()) + this->moveTopRight(); + else { + if (m_currentDesktop.toLower() == "ukui") { + this->moveBottomRight(); + } + else { + this->moveTopRight(); + } + }*/ + + if (m_preferences->weather.cond_code.contains(QChar('n'))) { + this->setStyleSheet("QMainWindow{color:white;background-image:url(':/res/background/weather-clear-night.png');background-repeat:no-repeat;}"); + m_contentWidget->setNightStyleSheets(); + m_titleBar->setNightStyleSheets(); + } + else { + QString styleSheetStr = QString("QMainWindow{color:white;background-image:url('%1');background-repeat:no-repeat;}").arg(convertCodeToBackgroud(m_preferences->weather.cond_code.toInt())); + this->setStyleSheet(styleSheetStr); + m_contentWidget->setDayStyleSheets(); + m_titleBar->setDayStyleSheets(); + } + + connect(m_titleBar, &TitleBar::requestShowSettingDialog, this, [=] { + this->showSettingDialog(); + }); + + m_hintWidget = new PromptWidget(this); + m_hintWidget->setIconAndText(":/res/network_warn.png", tr("Network not connected")); + m_hintWidget->move((this->width() - m_hintWidget->width())/2, (this->height() - m_hintWidget->height())/2); + m_hintWidget->setVisible(false); + + m_movieWidget = new PromptWidget(tr("Getting data"), this, ":/res/link.gif", true); + m_movieWidget->move((this->width() - m_hintWidget->width())/2, (this->height() - m_hintWidget->height())/2); + m_movieWidget->setVisible(false); + + this->createSettingDialog(); + + if (!m_weatherWorker->isNetWorkSettingsGood()) { + m_contentWidget->setNetworkErrorPages(); + m_autoRefreshTimer->stop(); + } + else { + m_weatherWorker->netWorkOnlineOrNot();//ping www.baidu.com +// m_weatherWorker->requestPostHostInfoToWeatherServer(); +// this->startGetWeather(); + } + + connect(m_contentWidget, &ContentWidget::requestRetryWeather, this, [=] { + m_weatherWorker->requestPostHostInfoToWeatherServer(); + this->startGetWeather(); + }); + + + connect(m_weatherWorker, &WeatherWorker::nofityNetworkStatus, this, [=] (const QString &status) { + if (status == "OK") { + m_weatherWorker->requestPostHostInfoToWeatherServer(); + this->startGetWeather(); + } + else { + m_hintWidget->setIconAndText(":/res/network_warn.png", status); + m_contentWidget->setNetworkErrorPages(); + } + }); + + connect(m_weatherWorker, &WeatherWorker::responseFailure, this, [=] (int code) { + m_autoRefreshTimer->stop(); + m_movieWidget->setVisible(false); + m_hintWidget->setVisible(true); + if (code == 0) { + m_hintWidget->setIconAndText(":/res/network_warn.png", tr("Incorrect access address")); + } + else { + m_hintWidget->setIconAndText(":/res/network_warn.png", QString(tr("Network error code:%1")).arg(QString::number(code))); + } + m_contentWidget->setNetworkErrorPages(); + }); + + connect(m_weatherWorker, &WeatherWorker::requestDiplayServerNotify, this, [=] (const QString ¬ifyInfo) { + if (!notifyInfo.isEmpty() && m_preferences->m_serverNotify) + m_contentWidget->showServerNotifyInfo(notifyInfo); + }); + + connect(m_weatherWorker, &WeatherWorker::observeDataRefreshed, this, [=] (const ObserveWeather &data) { + m_autoRefreshTimer->start(m_preferences->m_updateFrequency * 1000 * 60); + if (m_preferences->m_currentCity.isEmpty()) { + m_preferences->m_currentCity = data.city; + } + m_movieWidget->setVisible(false); + m_titleBar->setCityName(data.city); + m_contentWidget->refreshObserveUI(data); + this->refreshTrayMenuWeather(data); + QString condCodeStr = data.cond_code; + if (!condCodeStr.isEmpty()) { + if (condCodeStr.contains(QChar('n'))) { + this->setStyleSheet("QMainWindow{color:white;background-image:url(':/res/background/weather-clear-night.png');background-repeat:no-repeat;}"); + m_contentWidget->setNightStyleSheets(); + m_titleBar->setNightStyleSheets(); + } + else { + QString styleSheetStr = QString("QMainWindow{color:white;background-image:url('%1');background-repeat:no-repeat;}").arg(convertCodeToBackgroud(condCodeStr.toInt())); + this->setStyleSheet(styleSheetStr); + m_contentWidget->setDayStyleSheets(); + m_titleBar->setDayStyleSheets(); + } + } + }); + + connect(m_weatherWorker, &WeatherWorker::forecastDataRefreshed, this, [=] (const QList &datas, const LifeStyle &data) { + if (!m_autoRefreshTimer->isActive()) { + m_autoRefreshTimer->start(m_preferences->m_updateFrequency * 1000 * 60); + } + + m_movieWidget->setVisible(false); + + int len = datas.size(); + if (len > 3) { + len = 3; + } + for (int i = 0; i < len; ++i) { + m_contentWidget->refreshForecastUI(datas[i], i); + } + + m_contentWidget->refreshLifestyleUI(data); + }); + + m_tipTimer->setInterval(60*1000); + m_tipTimer->setSingleShot(false); + connect(m_tipTimer, &QTimer::timeout, this, static_cast(&MainWindow::updateTimeTip)); + + connect(m_autoRefreshTimer, &QTimer::timeout, this, [=] { + this->startGetWeather(); + }); + + + double value = m_preferences->m_opacity*0.01; + if (value < 0.6) { + value = 0.60; + m_preferences->m_opacity = 60; + } + this->setOpacity(value); + + this->setVisible(false); +} + +MainWindow::~MainWindow() +{ + if (m_tipTimer->isActive()) { + m_tipTimer->stop(); + delete m_tipTimer; + } + + global_end(); +} + +void MainWindow::updateTimeTip() +{ + QDateTime time = QDateTime::currentDateTime(); + int timeIntValue = time.toTime_t(); + int ut = int((round(timeIntValue - m_actualizationTime)/60)); + if (ut == 0 || m_actualizationTime == 0) { + m_updateTimeStr = QString(tr("Refresh time:Just updated")); + } + else { + if (ut < 2) { + m_updateTimeStr = QString(tr("Refresh time:%1 minute ago")).arg(QString::number(ut)); + } + else { + m_updateTimeStr = QString(tr("Refresh time:%1 minutes ago")).arg(QString::number(ut)); + } + } + + if (QDateTime::currentDateTime().toTime_t()-m_actualizationTime > m_preferences->m_updateFrequency*1000*60) { + m_actualizationTime = QDateTime::currentDateTime().toTime_t(); + } + + m_updateTimeAction->setText(m_updateTimeStr); + + m_weatherWorker->requestPingBackWeatherServer(); +} + +void MainWindow::setOpacity(double opacity) +{ + this->setWindowOpacity(opacity); +} + +void MainWindow::startGetWeather() +{ + m_tipTimer->stop(); + m_movieWidget->setVisible(true); + m_titleBar->setCityName(m_preferences->m_currentCity); + m_weatherWorker->refreshObserveWeatherData(m_preferences->m_currentCityId); + m_weatherWorker->refreshForecastWeatherData(m_preferences->m_currentCityId); +} + +void MainWindow::initMenuAndTray() +{ + m_mainMenu = new QMenu(this); + m_cityMenu = new QMenu(this); + m_cityMenu->menuAction()->setText(tr("City")); + m_cityActionGroup = new MenuActionGroup(this); + connect(m_cityActionGroup, &MenuActionGroup::activated, this, [=] (int index) { + QString cur_cityName = m_cityActionGroup->setCurrentCheckedIndex(index); + if (m_preferences->citiesCount() > 0 && m_preferences->citiesCount() >= index) { + m_cityMenu->menuAction()->setText(cur_cityName/*m_preferences->cityName(index)*/); + + m_preferences->setCurrentCityIdAndName(cur_cityName/*index*/); + + m_setttingDialog->refreshCityList(m_preferences->m_currentCity); + this->startGetWeather(); + } + }); + this->refreshCityActions(); + + m_mainMenu->addMenu(m_cityMenu); + //QAction *m_switchAciton = m_mainMenu->addAction(tr("Switch")); + m_mainMenu->addSeparator(); + + m_weatherAction = new QAction("N/A",this); + m_temperatureAction = new QAction("N/A",this); + m_sdAction = new QAction("N/A",this); + m_aqiAction = new QAction("N/A",this); + m_releaseTimeAction = new QAction(tr("Release time"),this); + m_updateTimeAction = new QAction(m_updateTimeStr,this); + m_mainMenu->addAction(m_weatherAction); + m_mainMenu->addAction(m_temperatureAction); + m_mainMenu->addAction(m_sdAction); + m_mainMenu->addAction(m_aqiAction); + m_mainMenu->addAction(m_releaseTimeAction); + m_mainMenu->addAction(m_updateTimeAction); + + QAction *m_forecastAction = m_mainMenu->addAction(tr("Weather Forecast")); + connect(m_forecastAction, &QAction::triggered, this, [=] { + if (!this->isVisible()) { + /*if (m_currentDesktop.isEmpty()) + this->moveTopRight(); + else { + if (m_currentDesktop.toLower() == "ukui") { + this->moveBottomRight(); + } + else { + this->moveTopRight(); + } + }*/ + this->movePosition(); + } + else { + this->setVisible(false); + } + }); + + m_mainMenu->addSeparator(); + QAction *m_settingAction = m_mainMenu->addAction(tr("Settings")); + m_settingAction->setIcon(QIcon(":/res/prefs.png")); + QAction *m_aboutAction = m_mainMenu->addAction(tr("Kylin Weather - About")); + m_aboutAction->setIcon(QIcon(":/res/about_normal.png")); + QAction *m_quitAction = m_mainMenu->addAction(tr("Exit")); + m_quitAction->setIcon(QIcon(":/res/quit_normal.png")); + + //for test change weather background + /*m_isDN = true; + connect(m_switchAciton, &QAction::triggered, this, [=] { + if (m_isDN) { + m_isDN = false; + QString currentBg = QString("QMainWindow{color:white;background-image:url('%1');background-repeat:no-repeat;}").arg(":/res/background/weather-clear-night.png"); + this->setStyleSheet(currentBg); + m_contentWidget->setNightStyleSheets(); + m_titleBar->setNightStyleSheets(); + } + else { + m_isDN = true; + QString currentBg = QString("QMainWindow{color:white;background-image:url('%1');background-repeat:no-repeat;}").arg(":/res/background/weather-clear.png"); + this->setStyleSheet(currentBg); + m_contentWidget->setDayStyleSheets(); + m_titleBar->setDayStyleSheets(); + } + });*/ + + connect(m_settingAction, &QAction::triggered, this, [=] { + this->showSettingDialog(); + }); + connect(m_aboutAction, &QAction::triggered, this, [=] { + AboutDialog dlg; + dlg.exec(); + }); + connect(m_quitAction, &QAction::triggered, qApp, &QApplication::quit); + + m_systemTray = new QSystemTrayIcon(this); + m_systemTray->setToolTip(QString(tr("Kylin Weather"))); + m_systemTray->setIcon(QIcon(":/res/indicator-china-weather.png")); + connect(m_systemTray,SIGNAL(activated(QSystemTrayIcon::ActivationReason)),this,SLOT(trayIconActivated(QSystemTrayIcon::ActivationReason))); + m_systemTray->show(); + m_systemTray->setContextMenu(m_mainMenu); + + QShortcut *m_quitShortCut = new QShortcut(QKeySequence("Ctrl+Q"), this); + connect(m_quitShortCut, SIGNAL(activated()), qApp, SLOT(quit())); +} + +void MainWindow::showSettingDialog() +{ + /*int w_x, w_y; + w_x = (width() - m_setttingDialog->width()) / 2 + mapToGlobal(QPoint(0, 0)).x(); + w_y = (window()->height() - m_setttingDialog->height()) / 2 + mapToGlobal(QPoint(0, 0)).y(); + + if (w_x + m_setttingDialog->width() > qApp->primaryScreen()->geometry().width()) { + w_x = qApp->primaryScreen()->geometry().width() - m_setttingDialog->width();//m_setttingDialog->move(qApp->primaryScreen()->geometry().width() - m_setttingDialog->width(), y); + } + if (w_y + m_setttingDialog->height() > qApp->primaryScreen()->availableGeometry().width()) { + w_y = qApp->primaryScreen()->availableGeometry().width() - m_setttingDialog->height(); + } + + m_setttingDialog->move(w_x, w_y); +// m_setttingDialog->move((width() - m_setttingDialog->width()) / 2 + mapToGlobal(QPoint(0, 0)).x(), +// (window()->height() - m_setttingDialog->height()) / 2 + mapToGlobal(QPoint(0, 0)).y()); + m_setttingDialog->show();*/ + m_setttingDialog->moveToCenter(); +} + +void MainWindow::createSettingDialog() +{ + QApplication::setOverrideCursor(Qt::WaitCursor); + m_setttingDialog = new SettingDialog; + m_setttingDialog->setModal(false); + connect(m_setttingDialog, SIGNAL(applied()), this, SLOT(applySettings())); + connect(m_setttingDialog, &SettingDialog::requestRefreshCityMenu, this, [this] (bool removedDefault) { + this->refreshCityActions(); + + if (removedDefault) {//刪除了默认城市后,重新设置了列表中第一个城市为默认城市后,从服务端获取该城市的天气 + this->startGetWeather(); + } + }); + connect(m_setttingDialog, &SettingDialog::requestRefreshWeatherById, this, [this] (const QString &id) { + m_preferences->resetCurrentCityNameById(id); + this->refreshCityActions(); + this->startGetWeather(); + }); + connect(m_setttingDialog, &SettingDialog::requestChangeOpacity, this, [this] (int opcatity) { + double value = opcatity*0.01; + if (value < 0.6) { + value = 0.60; + m_preferences->m_opacity = 60; + } + this->setOpacity(value); + }); + + /*connect(m_setttingDialog, &SettingDialog::requestSetDefaultCity, this, [=] { + m_preferences->setDefaultCity(); + m_setttingDialog->refreshCityList(m_preferences->m_currentCityId); + this->startGetWeather(); + });*/ + + QApplication::restoreOverrideCursor(); +} + +void MainWindow::refreshCityActions() +{ + // clear orig action list + m_cityActionGroup->clearAllActions(); + + // add new action list + int i = 0; + int currentIndex = 0; + foreach (QString city, m_preferences->getCitiesList()) { +// m_cityMenu->addAction(city); + if (city == m_preferences->m_currentCity) { + currentIndex = i; + } + + MenuActionGroupItem *cityAction = new MenuActionGroupItem(this, m_cityActionGroup, i); + cityAction->setActionText(city); + i++; + } + m_cityMenu->addActions(m_cityActionGroup->actions()); + m_cityMenu->menuAction()->setText(m_preferences->m_currentCity); + m_cityActionGroup->setCurrentCheckedIndex(currentIndex); +} + +void MainWindow::refreshTrayMenuWeather(const ObserveWeather &data) +{ + m_systemTray->setIcon(QIcon(QString(":/res/weather_icons/white/%1.png").arg(data.cond_code))); + m_weatherAction->setText(data.cond_txt); + m_temperatureAction->setText(QString(tr("Temperature:%1˚C")).arg(data.tmp)); + m_sdAction->setText(QString(tr("Relative humidity:%1")).arg(data.hum)); + if (data.air.isEmpty() || data.air.contains("Unknown")) { + m_aqiAction->setText(QString(tr("Air quality:%1")).arg(QString(tr("Unknown")))); + } + else { + m_aqiAction->setText(QString(tr("Air quality:%1")).arg(data.air)); + } + m_releaseTimeAction->setText(QString(tr("Release time:%1")).arg(data.updatetime)); + + m_actualizationTime = 0; + this->updateTimeTip(); + m_tipTimer->start(); +} + +void MainWindow::applySettings() +{ + +} + +void MainWindow::resetWeatherBackgroud(const QString &imgPath) +{ + QString weatherBg = imgPath; + if(!QFileInfo(weatherBg).exists()) + weatherBg = ":/res/background/weather-clear.png"; + QString currentBg = QString("QMainWindow{color:white;background-image:url('%1');background-repeat:no-repeat;}").arg(weatherBg); + this->setStyleSheet(currentBg); +} + +void MainWindow::trayIconActivated(QSystemTrayIcon::ActivationReason reason) +{ + switch(reason) { + /*case QSystemTrayIcon::DoubleClick: + { + QRect rect = m_systemTray->geometry(); + QMenu *currentMenu = m_systemTray->contextMenu(); + if (currentMenu->isHidden()) { + currentMenu->popup(QPoint(rect.x()+8, rect.y())); + } + } + break;*/ + case QSystemTrayIcon::Trigger: + case QSystemTrayIcon::MiddleClick: + if (this->isVisible()) { + this->setVisible(false); + } + else { + this->movePosition(); + } + break; + default: + break; + } +} + +void MainWindow::movePosition() +{ + QPoint pos = QCursor::pos(); + //qDebug() << "mapFromGlobal(pos)=" << mapFromGlobal(pos);//QPoint(1709,249) + QRect availableGeometry = qApp->primaryScreen()->availableGeometry(); +// qDebug() << "availableGeometry=" << availableGeometry;//QRect(65,24 1855x1056) QRect(0,0 1366x728) + QRect screenGeometry = qApp->primaryScreen()->geometry(); +// qDebug() << "screenGeometry=" << screenGeometry;//QRect(0,0 1920x1080) QRect(0,0 1366x768) + + if (screenGeometry.contains(pos)) { + if (pos.x() > screenGeometry.width()/2 && pos.y() > screenGeometry.height()/2) {//panel bottom or right +// this->move(availableGeometry.x() + availableGeometry.width() - this->width(), screenGeometry.height() - (screenGeometry.height() - availableGeometry.height()) - this->height()); + this->move(availableGeometry.x() + availableGeometry.width() - this->width(), availableGeometry.height() - this->height()); + } + else if (pos.x() > screenGeometry.width()/2 && pos.y() <= screenGeometry.height()/2) {//panel top + this->move(availableGeometry.x() + availableGeometry.width() - this->width(), availableGeometry.y()); + } + else if (pos.x() <= screenGeometry.width()/2 && pos.y() > screenGeometry.height()/2) {//panel left + this->move(availableGeometry.x(), availableGeometry.height() - this->height()); + } + this->showNormal(); + this->raise(); + this->activateWindow(); + } + /*for (QScreen *screen : qApp->screens()) { + if (screen->geometry().contains(pos)) { + } + }*/ +} + +void MainWindow::moveTopRight() +{ + /*QPoint pos = QCursor::pos(); + QRect primaryGeometry; + for (QScreen *screen : qApp->screens()) { + if (screen->geometry().contains(pos)) { + primaryGeometry = screen->geometry(); + } + } + + if (primaryGeometry.isEmpty()) { + primaryGeometry = qApp->primaryScreen()->geometry(); + } + + this->move(primaryGeometry.x() + primaryGeometry.width() - this->width(), primaryGeometry.y());*/ + + QRect primaryGeometry = qApp->primaryScreen()->availableGeometry(); + this->move(primaryGeometry.x() + primaryGeometry.width() - this->width(), primaryGeometry.y()); + this->showNormal();//this->show(); + this->raise(); + this->activateWindow(); +} + +void MainWindow::moveBottomRight() +{ + //QApplication::desktop()->availableGeometry();//桌面除去任务栏的区域 + //QApplication::desktop()->screenGeometry();//获取包括任务栏的区域 + /*QPoint pos = QCursor::pos(); + QRect primaryGeometry; + for (QScreen *screen : qApp->screens()) { +// if (screen->geometry().contains(pos)) { +// primaryGeometry = screen->geometry(); +// } + if (screen->geometry().contains(pos)) {//判断鼠标点击时,使用包括任务栏在内的整个屏幕区域 + primaryGeometry = screen->availableGeometry();//显示区域需要去掉任务栏的区域 + } + } + if (primaryGeometry.isEmpty()) { + primaryGeometry = qApp->primaryScreen()->availableGeometry();//primaryGeometry = qApp->primaryScreen()->geometry(); + }*/ + + + /*QRect primaryGeometry = qApp->primaryScreen()->geometry(); + const qreal ratio = qApp->devicePixelRatio(); + const QScreen *screen; + for (const auto *s : qApp->screens()) { + const QRect &g(s->geometry()); + const QRect rect(g.topLeft()/ratio, g.size()); + if (rect.contains(primaryGeometry.center())) { + screen = s; + break; + } + } + if (screen) { + const QRect screenRect = screen->geometry(); + primaryGeometry.moveTopLeft(screenRect.topLeft() + (primaryGeometry.topLeft() - screenRect.topLeft()) / screen->devicePixelRatio()); + }*/ + + QRect primaryGeometry = qApp->primaryScreen()->availableGeometry(); + this->move(primaryGeometry.x() + primaryGeometry.width() - this->width(), primaryGeometry.height() - this->height()); + this->showNormal();//this->show(); + this->raise(); + this->activateWindow(); +} + +/*void MainWindow::mousePressEvent(QMouseEvent *event) +{ + if (event->button() == Qt::LeftButton) { + this->m_dragPosition = event->globalPos() - frameGeometry().topLeft(); + this->m_mousePressed = true; + } + + if (m_hintWidget->isVisible()) + m_hintWidget->setVisible(false); + + QMainWindow::mousePressEvent(event); +} + +void MainWindow::mouseReleaseEvent(QMouseEvent *event) +{ + this->m_mousePressed = false; + + QMainWindow::mouseReleaseEvent(event); +} + +void MainWindow::mouseMoveEvent(QMouseEvent *event) +{ + if (this->m_mousePressed) { + move(event->globalPos() - this->m_dragPosition); + } + + QMainWindow::mouseMoveEvent(event); +} + +void MainWindow::showEvent(QShowEvent *event) +{ + QWidget::showEvent(event); + + //m_weatherWorker->refreshForecastWeatherData(m_preferences->m_currentCityId); +}*/ + +void MainWindow::keyPressEvent(QKeyEvent *event) +{ + if (event->key() == Qt::Key_Escape) { + if (this->isVisible()) { + this->setVisible(false); + } + event->accept(); + } + + QMainWindow::keyPressEvent(event); +} + +void MainWindow::focusOutEvent(QFocusEvent *event) +{ + if (event->reason() == Qt::ActiveWindowFocusReason) { + this->setVisible(false); + } + + return QMainWindow::focusOutEvent(event); +} diff -Nru indicator-china-weather-2.2.8/src/mainwindow.h indicator-china-weather-3.0.2~201904291430/src/mainwindow.h --- indicator-china-weather-2.2.8/src/mainwindow.h 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/mainwindow.h 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,108 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include +#include +#include + +#include "menuactiongroup.h" +#include "data.h" + +class TitleBar; +class ContentWidget; +class SettingDialog; +class PromptWidget; +class WeatherWorker; + +class MainWindow : public QMainWindow +{ + Q_OBJECT + friend class DbusAdaptor; +public: + MainWindow(QWidget *parent = 0); + ~MainWindow(); + + void initMenuAndTray(); + void resetWeatherBackgroud(const QString &imgPath); + void moveTopRight(); + void moveBottomRight(); + void movePosition(); + void createSettingDialog(); + void refreshCityActions(); + + void refreshTrayMenuWeather(const ObserveWeather &data); + void startGetWeather(); + + void setOpacity(double opacity); + +protected: +// void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; +// void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE; +// void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE; +// void showEvent(QShowEvent *event) Q_DECL_OVERRIDE; + void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE; + void focusOutEvent(QFocusEvent *event) Q_DECL_OVERRIDE; + +public slots: + void trayIconActivated(QSystemTrayIcon::ActivationReason reason); + void showSettingDialog(); + void applySettings(); + void updateTimeTip(); + +private: +// QPoint m_dragPosition; +// bool m_mousePressed; + + QVBoxLayout *m_layout = nullptr; + QWidget *m_centralWidget = nullptr; + TitleBar *m_titleBar = nullptr; + ContentWidget *m_contentWidget = nullptr; + + QMenu *m_mainMenu = nullptr; + QMenu *m_cityMenu = nullptr; + MenuActionGroup *m_cityActionGroup = nullptr; + QAction *m_weatherAction = nullptr; + QAction *m_temperatureAction = nullptr; + QAction *m_sdAction = nullptr; + QAction *m_aqiAction = nullptr; + QAction *m_releaseTimeAction = nullptr; + QAction *m_updateTimeAction = nullptr; + QSystemTrayIcon *m_systemTray = nullptr; + SettingDialog *m_setttingDialog = nullptr; + PromptWidget *m_hintWidget = nullptr; + PromptWidget *m_movieWidget = nullptr; + + WeatherWorker *m_weatherWorker = nullptr; + + QTimer *m_pingbackTimer = nullptr; + QTimer *m_tipTimer = nullptr; + int m_actualizationTime; + QString m_updateTimeStr; + + QTimer *m_autoRefreshTimer = nullptr; + QString m_currentDesktop; + + //test + //bool m_isDN; +}; + +#endif // MAINWINDOW_H diff -Nru indicator-china-weather-2.2.8/src/menuaction.cpp indicator-china-weather-3.0.2~201904291430/src/menuaction.cpp --- indicator-china-weather-2.2.8/src/menuaction.cpp 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/menuaction.cpp 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "menuaction.h" + +#include + +MenuAction::MenuAction(QObject * parent) + : QAction(parent) +{ + addActionToParent(); +} + +MenuAction::~MenuAction() +{ +} + +void MenuAction::addActionToParent() +{ + if (parent()) { + if (parent()->inherits("QWidget")) { + QWidget *w = static_cast (parent()); + w->addAction(this); + } + } +} + +void MenuAction::setActionIconAndText(const QIcon &icon, const QString &text) +{ + setIcon(icon); + setActionText(text); +} + +void MenuAction::setActionText(const QString &text) +{ + setText(text); +} diff -Nru indicator-china-weather-2.2.8/src/menuactiongroup.cpp indicator-china-weather-3.0.2~201904291430/src/menuactiongroup.cpp --- indicator-china-weather-2.2.8/src/menuactiongroup.cpp 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/menuactiongroup.cpp 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,97 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "menuactiongroup.h" + +#include +#include +#include + +MenuActionGroupItem::MenuActionGroupItem(QObject *parent, MenuActionGroup *group, int index) + : MenuAction(parent) +{ + this->setCheckable(true); + this->setData(QVariant(index)); + + if (group) { + group->addAction(this); + } +} + +MenuActionGroup::MenuActionGroup(QObject *parent) : QActionGroup(parent) +{ + setExclusive(true); + connect(this, &MenuActionGroup::triggered, this, [=] (QAction *action) { + int value = action->data().toInt(); + emit activated(value); + }); +} + +QString MenuActionGroup::setCurrentCheckedIndex(int index) +{ + QString text; + QList actionList = actions(); + for (int i=0; i < actionList.count(); i++) { + if ((!actionList[i]->isSeparator()) && (actionList[i]->data().toInt() == index)) { + actionList[i]->setChecked(true); + text = actionList[i]->text(); + break; + } + } + + return text; +} + +int MenuActionGroup::getCurrentCheckedIndex() +{ + QAction *action = checkedAction(); + if (action) { + return action->data().toInt(); + } + else { + return -1; + } +} + +void MenuActionGroup::uncheckAll() +{ + QList actionList = actions(); + for (int i=0; i < actionList.count(); i++) { + actionList[i]->setChecked(false); + } +} + +void MenuActionGroup::clearAllActions() +{ + while (actions().count() > 0) { + QAction *action = actions()[0]; + if (action) { + removeAction(action); + action->deleteLater(); + } + } +} + +void MenuActionGroup::setActionsEnabled(bool enable) +{ + QList actionList = actions(); + for (int i=0; i < actionList.count(); i++) { + actionList[i]->setEnabled(enable); + } +} diff -Nru indicator-china-weather-2.2.8/src/menuactiongroup.h indicator-china-weather-3.0.2~201904291430/src/menuactiongroup.h --- indicator-china-weather-2.2.8/src/menuactiongroup.h 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/menuactiongroup.h 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef MENUACTIONGROUP_H +#define MENUACTIONGROUP_H + +#include +#include + +#include "menuaction.h" + + +class QAction; +class MenuActionGroup; + +class MenuActionGroupItem : public MenuAction +{ + Q_OBJECT +public: + MenuActionGroupItem(QObject *parent, MenuActionGroup *group, int index); +}; + +class MenuActionGroup : public QActionGroup +{ + Q_OBJECT + +public: + MenuActionGroup (QObject *parent); + + QString setCurrentCheckedIndex(int index); + int getCurrentCheckedIndex(); + void uncheckAll(); + void clearAllActions(); + void setActionsEnabled(bool enable); + +signals: + void activated(int); +}; + +#endif // MENUACTIONGROUP_H diff -Nru indicator-china-weather-2.2.8/src/menuaction.h indicator-china-weather-3.0.2~201904291430/src/menuaction.h --- indicator-china-weather-2.2.8/src/menuaction.h 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/menuaction.h 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef MENUACTION_H +#define MENUACTION_H + +#include +#include + +class MenuAction : public QAction +{ +public: + MenuAction(QObject *parent); + ~MenuAction(); + + void setActionText(const QString &text); + void setActionIconAndText(const QIcon &icon, const QString &text); + +protected: + void addActionToParent(); +}; + +#endif // MENUACTION_H + diff -Nru indicator-china-weather-2.2.8/src/networkerrorwidget.cpp indicator-china-weather-3.0.2~201904291430/src/networkerrorwidget.cpp --- indicator-china-weather-2.2.8/src/networkerrorwidget.cpp 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/networkerrorwidget.cpp 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "networkerrorwidget.h" + +#include +#include +#include + +NetworkErrorWidget::NetworkErrorWidget(QFrame *parent) : + QFrame(parent) +{ + this->setFixedSize(355, 340); + + QPushButton *m_retryBtn = new QPushButton; + m_retryBtn->setStyleSheet("QPushButton{border:1px solid #e0e0e0;text-align:center;font-size:14px;color:#000000;background:transparent;}"); + m_retryBtn->setFixedSize(90, 25); + m_retryBtn->setFocusPolicy(Qt::NoFocus); + m_retryBtn->setText(tr("retry")); + /*QFont font = m_btn->font(); + const QFontMetrics fm(font); + m_retryBtn->setFixedWidth(fm.width(m_retryBtn->text()));*/ + + connect(m_retryBtn, &QPushButton::clicked, this, [=] { + emit this->requestRetryAccessWeather(); + }); + + QLabel *m_tipIcon = new QLabel; + m_tipIcon->setFixedSize(127 ,93); + m_tipIcon->setStyleSheet("QLabel{border:none;background-color:transparent;}"); + m_tipIcon->setPixmap(QPixmap(":/res/unlink.png")); + QLabel *m_tipLabel = new QLabel; + m_tipLabel->setFixedWidth(this->width()); + m_tipLabel->setWordWrap(true); + m_tipLabel->setAlignment(Qt::AlignCenter); + m_tipLabel->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred); + m_tipLabel->setStyleSheet("QLabel{border:none;background-color:transparent;color:#808080;font-size:12px;}"); + m_tipLabel->setText(tr("Current network exception, please check network settings"));//当前网络异常,请检查网络设置 + + m_layout = new QVBoxLayout(this); + m_layout->setContentsMargins(0, 0, 0, 0); + m_layout->setSpacing(20); + this->setLayout(m_layout); + + m_layout->addStretch(); + m_layout->addWidget(m_tipIcon, 0, Qt::AlignHCenter); + m_layout->addWidget(m_tipLabel, 0, Qt::AlignHCenter); + m_layout->addWidget(m_retryBtn, 0, Qt::AlignHCenter); + m_layout->addStretch(); +} + +NetworkErrorWidget::~NetworkErrorWidget() +{ + QLayoutItem *child; + while ((child = m_layout->takeAt(0)) != 0) { + if (child->widget()) + child->widget()->deleteLater(); + delete child; + } +} + +void NetworkErrorWidget::setErrorInfo(const QString &info) +{ + //m_tipLabel->setText(tr("Current network exception, please check network settings"));//当前网络异常,请检查网络设置 +} diff -Nru indicator-china-weather-2.2.8/src/networkerrorwidget.h indicator-china-weather-3.0.2~201904291430/src/networkerrorwidget.h --- indicator-china-weather-2.2.8/src/networkerrorwidget.h 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/networkerrorwidget.h 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef NETWORK_ERROR_WIDGET_H +#define NETWORK_ERROR_WIDGET_H + +#include +#include + +class QLabel; + +class NetworkErrorWidget : public QFrame +{ + Q_OBJECT + +public: + explicit NetworkErrorWidget(QFrame *parent = 0); + ~NetworkErrorWidget(); + + void setErrorInfo(const QString &info); + +signals: + void requestRetryAccessWeather(); + +private: + QVBoxLayout *m_layout = nullptr; + //QLabel *m_tipLabel = nullptr; +}; + +#endif // NETWORK_ERROR_WIDGET_H diff -Nru indicator-china-weather-2.2.8/src/nowweatherwidget.cpp indicator-china-weather-3.0.2~201904291430/src/nowweatherwidget.cpp --- indicator-china-weather-2.2.8/src/nowweatherwidget.cpp 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/nowweatherwidget.cpp 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,332 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "nowweatherwidget.h" +#include "translucentlabel.h" +#include "tipwidget.h" +#include "texttip.h" +#include "tipmodule.h" +#include "airwidget.h" + +#include +#include +#include + +#include "preferences.h" +#include "global.h" +using namespace Global; + +inline QString convertTemperatureToString(int temp) +{ + if (temp <= -40) { + return QString(QObject::tr("Extremely cold"));//极寒 + } + else if (temp > -40 && temp <= -35) { + return QString(QObject::tr("Cold and cold"));//奇寒 + } + else if (temp > -35 && temp <= -30) { + return QString(QObject::tr("Severe cold"));//酷寒 + } + else if (temp > -30 && temp <= -20) { + return QString(QObject::tr("Bitter cold"));//严寒 + } + else if (temp > -20 && temp <= -15) { + return QString(QObject::tr("Deep cold"));//深寒 + } + else if (temp > -15 && temp <= -10) { + return QString(QObject::tr("Very cold"));//大寒 + } + else if (temp > -10 && temp <= -5) { + return QString(QObject::tr("Lesser cold"));//小寒 + } + else if (temp > -5 && temp <= 0) { + return QString(QObject::tr("Mildly cold"));//轻寒 + } + else if (temp > 0 && temp <= 5) { + return QString(QObject::tr("Slightly cold"));//微寒 + } + else if (temp > 5 && temp <= 10) { + return QString(QObject::tr("Cold"));//凉 + } + else if (temp > 10 && temp <= 14) { + return QString(QObject::tr("Warm and cool"));//温凉 + } + else if (temp > 14 && temp <= 18) { + return QString(QObject::tr("Mild"));//温和 + } + else if (temp > 18 && temp <= 22) { + return QString(QObject::tr("Warm"));//温暖 + } + else if (temp > 22 && temp <= 25) { + return QString(QObject::tr("Hot"));//热 + } + else if (temp > 25 && temp <= 30) { + return QString(QObject::tr("Scorching hot"));//炎热 + } + else if (temp > 30 && temp <= 35) { + return QString(QObject::tr("Boiling hot"));//酷热 + } + else if (temp > 35 && temp <= 39) { + return QString(QObject::tr("Excessive heat"));//奇热 + } + else {//>=40 + return QString(QObject::tr("Extremely hot"));//极热 + } +} + +//it must be consistent with the function named convertCodeToBackgroud() which in MainWindow +inline QString convertCodeToStyleSheet(int code) +{ + if (code == 100 || code == 900) {//#ee613f + return "QFrame{border:none;background-color:rgba(238,97,63,85%);color:rgb(255,255,255);}"; + } + else if (code <= 103 && code >= 101) {//#0c69c3 + return "QFrame{border:none;background-color:rgba(12,105,195,85%);color:rgb(255,255,255);}"; + } + else if (code == 104 || code == 901) {//#404b5b + return "QFrame{border:none;background-color:rgba(64,75,91,85%);color:rgb(255,255,255);}"; + } + else if (code <= 204 && code >= 200) {//#ee613f + return "QFrame{border:none;background-color:rgba(238,97,63,85%);color:rgb(255,255,255);}"; + } + else if (code <= 213 && code >= 205) {//#404b5b + return "QFrame{border:none;background-color:rgba(64,75,91,85%);color:rgb(255,255,255);}"; + } + else if (code <= 399 && code >= 300) {//#5336bf + return "QFrame{border:none;background-color:rgba(83,54,191,85%);color:rgb(255,255,255);}"; + } + else if (code <= 499 && code >= 400) {//#4f88b3 + return "QFrame{border:none;background-color:rgba(79,136,179,85%);color:rgb(255,255,255);}"; + } + else if (code <= 502 && code >= 500) {//#312e33 + return "QFrame{border:none;background-color:rgba(49,46,51,85%);color:rgb(255,255,255);}"; + } + else if (code <= 508 && code >= 503) {//#98733f + return "QFrame{border:none;background-color:rgba(152,115,63,85%);color:rgb(255,255,255);}"; + } + else if (code <= 515 && code >= 509) {//#312e33 + return "QFrame{border:none;background-color:rgba(49,46,51,85%);color:rgb(255,255,255);}"; + } + else {//#ee613f + return "QFrame{border:none;background-color:rgba(238,97,63,85%);color:rgb(255,255,255);}"; + } +} + +NowWeatherWidget::NowWeatherWidget(QFrame *parent) : + QFrame(parent) + , m_tipTimer(new QTimer(this)) +// , m_tipModule(new TipModule) +// , m_tip(new TextTip(QString(), this)) +{ + this->setFixedSize(355, 180); + + //m_tip->setFixedSize(100, 32); +// this->setStyleSheet("QLabel{border-radius: 0px; color:rgb(250, 250, 250); background-color:rgba(0,0,0,0.2)}"); + + //test background color + /*this->setAutoFillBackground(true); + QPalette palette; + palette.setBrush(QPalette::Window, QBrush(Qt::gray)); + this->setPalette(palette);*/ + + m_tipWidget = new TipWidget(this); + m_tipWidget->setGeometry(10, 0, this->width(), 22); + m_tipWidget->setVisible(false); + + //----------------------------- + m_tempLabel = new QLabel(this); + m_tempLabel->setStyleSheet("QLabel{border:none;background-color:transparent;color:#ffffff; font-size:65px;}"); + m_tempLabel->setGeometry(10, 14, 100, 70); + m_tempLabel->setAlignment(Qt::AlignCenter); +// QFont font; +// font.setPointSize(65); +// const QFontMetrics fm(font); +// m_tempLabel->move(10, 0); +// qDebug() << fm.width(temp) << fm.height(); + + QLabel *tempUnit = new QLabel(this); + tempUnit->setAlignment(Qt::AlignLeft | Qt::AlignTop); + tempUnit->setGeometry(m_tempLabel->x() + m_tempLabel->width(), m_tempLabel->y(), 40, 28); + tempUnit->setStyleSheet("QLabel{border:none;background-color:transparent;color:#ffffff;font-size:20px;}"); + tempUnit->setText("°C"); + + m_weatherLabel = new QLabel(this); + m_weatherLabel->setStyleSheet("QLabel{border:none;background-color:transparent;color:#ffffff; font-size:20px;}"); + m_weatherLabel->setGeometry(tempUnit->x(), m_tempLabel->height() - 28/2, 130, 28); + m_weatherLabel->setAlignment(Qt::AlignLeft | Qt::AlignBottom); + + //----------------------------- + QLabel *sdIcon = new QLabel(this); + sdIcon->setGeometry(m_tempLabel->x(), m_tempLabel->y() + m_tempLabel->height() + 5, 20, 20); + sdIcon->setStyleSheet("QLabel{border:none;background-color:transparent;}"); + sdIcon->setPixmap(QPixmap(":/res/current_sd.png")); + + QLabel *m_humidityLabel = new QLabel(this); + m_humidityLabel->setStyleSheet("QLabel{border:none;background-color:transparent;color:#ffffff;font-size:12x;}"); + + m_humidityLabel->setAlignment(Qt::AlignTop | Qt::AlignLeft); + m_humidityLabel->setText(tr("Humidity")); + QFont font = m_humidityLabel->font(); + const QFontMetrics fm(font); + m_humidityLabel->setGeometry(sdIcon->x() + sdIcon->width(), sdIcon->y(), fm.width(m_humidityLabel->text()), 20); + + m_humidityValueLabel = new QLabel(this); + m_humidityValueLabel->setStyleSheet("QLabel{border:none;background-color:transparent;color:#ffffff;font-size:12x;}"); + m_humidityValueLabel->setGeometry(m_humidityLabel->x(), m_humidityLabel->y() + m_humidityLabel->height() + 5, 40, 20); + m_humidityValueLabel->setAlignment(Qt::AlignVCenter | Qt::AlignLeft); + + //----------------------------- + QLabel *windIcon = new QLabel(this); + windIcon->setGeometry(m_humidityLabel->x() + m_humidityLabel->width() + 15, m_humidityLabel->y(), 20, 20); + windIcon->setStyleSheet("QLabel{border:none;background-color:transparent;}"); + windIcon->setPixmap(QPixmap(":/res/current_wind.png")); + + m_windLabel = new QLabel(this); + m_windLabel->setStyleSheet("QLabel{border:none;background-color:transparent;color:#ffffff;font-size:12x;}"); + m_windLabel->setGeometry(windIcon->x() + windIcon->width(), windIcon->y(), 70, 20); + m_windLabel->setAlignment(Qt::AlignVCenter | Qt::AlignLeft); + + m_windPowerLabel = new QLabel(this); + m_windPowerLabel->setStyleSheet("QLabel{border:none;background-color:transparent;color:#ffffff;font-size:12x;}"); + m_windPowerLabel->setGeometry(m_windLabel->x(), m_humidityValueLabel->y(), 90, 20); + m_windPowerLabel->setAlignment(Qt::AlignBottom | Qt::AlignLeft); + + m_weatherIcon = new QLabel(this); + m_weatherIcon->setGeometry(this->width() - 64 - 20, m_tempLabel->y(), 64, 64); + m_weatherIcon->setStyleSheet("QLabel{border:none;background-color:transparent;}"); + //m_weatherIcon->setProperty("TextTipWidget", QVariant::fromValue(m_tip)); + //m_weatherIcon->installEventFilter(m_tipModule); + + m_ariWidget = new AirWidget(this); + m_ariWidget->raise(); + m_ariWidget->setVisible(false); + + m_aqiLabel = new TranslucentLabel(true, this); + m_aqiLabel->setLabelIcon(":/res/aqi.png"); + m_aqiLabel->move(m_weatherIcon->x() - 10, m_windLabel->y()); + connect(m_aqiLabel, &TranslucentLabel::clicked, this, [=] { + if (m_ariWidget->isVisible()) { + m_ariWidget->animationHide(); + } + else { + if (m_preferences->air.id != m_preferences->m_currentCityId) { + return; + } + if (m_preferences->air.aqi.contains("Unknown") && m_preferences->air.qlty.contains("Unknown")) { + return; + } + m_ariWidget->resetData(m_preferences->air); + if (m_preferences->weather.cond_code.contains(QChar('n'))) {//#063638 + m_ariWidget->animationShow("QFrame{border:none;background-color:rgba(6,54,56,85%);color:rgb(255,255,255);}"); + } + else { + m_ariWidget->animationShow(convertCodeToStyleSheet(m_preferences->weather.cond_code.toInt())); + } + } + }); + + m_temperatureLabel = new TranslucentLabel(false, this); + m_temperatureLabel->setLabelIcon(":/res/temp.png"); + m_temperatureLabel->move(m_aqiLabel->x(), m_aqiLabel->y() + m_aqiLabel->height() + 8); + +// QFont ft; +// QFontMetrics fm(ft); +// QString elided_text = fm.elidedText(name, Qt::ElideRight, 260); +// name_label->setText(elided_text); +// elided_text = fm.elidedText(desc, Qt::ElideRight, 260); +// description_label->setText(elided_text); +// if(elided_text.endsWith("…")) +// description_label->setToolTip(desc); + + // QFont &text_font = const_cast(font()); + // text_font.setWeight(QFont::Bold); + + + connect(m_tipTimer, &QTimer::timeout, this, [=] { + m_tipTimer->stop(); + m_tipWidget->setVisible(false); + }); + //this->displayTip(tr("Update failure")); +} + +NowWeatherWidget::~NowWeatherWidget() +{ + delete m_tipTimer; + //delete m_tipModule; + delete m_ariWidget; +} + +void NowWeatherWidget::displayTip(const QString &info) +{ + if (m_tipWidget->isVisible()) + m_tipWidget->setVisible(false); + if (m_tipTimer->isActive()) + m_tipTimer->stop(); + + m_tipWidget->setLabelIcon(":/res/update_warn.png"); + m_tipWidget->setLabelText(info); + m_tipWidget->setVisible(true); + m_tipTimer->start(8000); +} + +void NowWeatherWidget::setWeatherIcon(const QString &iconPath) +{ + QPixmap pixmap = QPixmap(iconPath); + pixmap = pixmap.scaled(64, 64, Qt::KeepAspectRatio, Qt::SmoothTransformation); + m_weatherIcon->setPixmap(pixmap); +} + +void NowWeatherWidget::refreshData(const ObserveWeather &data) +{ + //m_tip->resetTipText(data.cond_txt); + m_weatherLabel->setText(data.cond_txt); + + m_tempLabel->setText(data.tmp); + if (data.hum.isEmpty()) { + m_humidityValueLabel->setText("-"); + } + else { + m_humidityValueLabel->setText(data.hum + "%"); + } + m_windLabel->setText(data.wind_dir); + int wind_sc = data.wind_sc.toInt(); + if (wind_sc == 0) { + m_windPowerLabel->setText(tr("Static wind"));//静风 + } + else { + m_windPowerLabel->setText(tr("%1stage wind").arg(data.wind_sc));//级风 + } + this->setWeatherIcon(QString(":/res/weather_icons/white/%1.png").arg(data.cond_code)); + if (data.air.isEmpty() || data.air.contains("Unknown")) { + m_aqiLabel->setLabelText(QString(tr("Unknown"))); + } + else { + m_aqiLabel->setLabelText(data.air); + } + m_temperatureLabel->setLabelText(convertTemperatureToString(data.tmp.toInt())); +} + +void NowWeatherWidget::mousePressEvent(QMouseEvent *event) +{ + if (m_ariWidget->isVisible()) { + m_ariWidget->animationHide(); + } + + QFrame::mousePressEvent(event); +} diff -Nru indicator-china-weather-2.2.8/src/nowweatherwidget.h indicator-china-weather-3.0.2~201904291430/src/nowweatherwidget.h --- indicator-china-weather-2.2.8/src/nowweatherwidget.h 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/nowweatherwidget.h 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef NOW_WEATHER_WIDGET_H +#define NOW_WEATHER_WIDGET_H + +#include +#include + +#include "data.h" + +class QLabel; +class TranslucentLabel; +class TipWidget; +class TextTip; +class TipModule; +class AirWidget; + +class NowWeatherWidget : public QFrame +{ + Q_OBJECT + +public: + explicit NowWeatherWidget(QFrame *parent = 0); + ~NowWeatherWidget(); + + void setWeatherIcon(const QString &iconPath); + void displayTip(const QString &info); + void refreshData(const ObserveWeather &data); + +protected: + void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + +private: + QLabel *m_tempLabel = nullptr; + QLabel *m_weatherLabel = nullptr; + QLabel *m_humidityValueLabel = nullptr; + QLabel *m_windLabel = nullptr; + QLabel *m_windPowerLabel = nullptr; + QLabel *m_weatherIcon = nullptr; + TranslucentLabel *m_aqiLabel = nullptr; + TranslucentLabel *m_temperatureLabel = nullptr; + TipWidget *m_tipWidget = nullptr; + QTimer *m_tipTimer = nullptr; + //TextTip *m_tip = nullptr; + //TipModule *m_tipModule = nullptr; + AirWidget *m_ariWidget = nullptr; +}; + +#endif // NOW_WEATHER_WIDGET_H diff -Nru indicator-china-weather-2.2.8/src/piston.py indicator-china-weather-3.0.2~201904291430/src/piston.py --- indicator-china-weather-2.2.8/src/piston.py 2018-03-19 06:04:16.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/piston.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,104 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- - -### BEGIN LICENSE -# Copyright (C) 2013 ~ 2017 National University of Defense Technology(NUDT) & Kylin Ltd -# Author: Kobe Lee -# -# This program is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 3, as published -# by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranties of -# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR -# PURPOSE. See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -### END LICENSE - -"""This module provides the RatingsAndReviewsAPI class for talking to the -ratings and reviews API, plus a few helper classes. -""" - -from urllib import quote_plus -from piston_mini_client import ( - PistonAPI, - PistonResponseObject, - PistonSerializable, - returns, - returns_json, - returns_list_of, - ) -from piston_mini_client.validators import validate_pattern, validate -from piston_mini_client import APIError -import httplib2 - -# These are factored out as constants for if you need to work against a -# server that doesn't support both schemes (like http-only dev servers) -PUBLIC_API_SCHEME = 'http' -AUTHENTICATED_API_SCHEME = 'https' - -class WeatherPistonAPI(PistonAPI): - """A client for talking to the reviews and ratings API. - - If you pass no arguments into the constructor it will try to connect to - localhost:8000 so you probably want to at least pass in the - ``service_root`` constructor argument. - """ - default_service_observe = 'observe' - default_service_forecast3d = 'forecast3d' - default_service_forecast6d = 'forecast6d' - default_service_heweather_forecast = 'heweather_forecast'#20170627 - default_content_type = 'application/x-www-form-urlencoded' - - @validate_pattern('cityid', r'[0-9a-z+-.:/]+', required=False) - @returns_json - def get_cma_observe_weather(self, cityid): - url = '%s/%s/' % (self.default_service_observe, cityid) - return self._get(url, scheme=PUBLIC_API_SCHEME) - - @validate_pattern('cityid', r'[0-9a-z+-.:/]+', required=False) - @returns_json - def get_cma_forecast3d_weather(self, cityid): - url = '%s/%s/' % (self.default_service_forecast3d, cityid) - return self._get(url, scheme=PUBLIC_API_SCHEME) - - @validate_pattern('cityid', r'[0-9a-z+-.:/]+', required=False) - @returns_json - def get_cma_forecast6d_weather(self, cityid): - url = '%s/%s/' % (self.default_service_forecast6d, cityid) - return self._get(url, scheme=PUBLIC_API_SCHEME) - - @validate_pattern('cityid', r'[0-9a-z+-.:/]+', required=False) - @returns_json - def get_heweather_forecast_weather(self, cityid): - url = '%s/%s/' % (self.default_service_heweather_forecast, cityid) - return self._get(url, scheme=PUBLIC_API_SCHEME) - - -# MySever = ("http://192.168.30.156/weather/api/1.0/") -# -# if __name__ == '__main__': -# server = WeatherPistonAPI(service_root=MySever) -# -# -# try: -# res = server.get_cma_observe_weather('101010100') -# # piston_reviews = rnrclient.get_reviews(packagename="gimp",language='zh_CN') -# print "res=:",res,res['city'] -# except ValueError as e: -# print "failed to parse '%s'" % e -# #bug lp:709408 - don't print 404 errors as traceback when api request -# # returns 404 error -# except APIError as e: -# print "_get_reviews_threaded: no reviews able to be retrieved: %s" % e -# except httplib2.ServerNotFoundError: -# # switch to offline mode and try again -# server._offline_mode = True -# res = server.get_cma_observe_weather('101010100') -# except: -# print "get_reviews*****" - - diff -Nru indicator-china-weather-2.2.8/src/piston_remoter.py indicator-china-weather-3.0.2~201904291430/src/piston_remoter.py --- indicator-china-weather-2.2.8/src/piston_remoter.py 2018-03-19 06:04:16.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/piston_remoter.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,72 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- - -### BEGIN LICENSE -# Copyright (C) 2013 ~ 2017 National University of Defense Technology(NUDT) & Kylin Ltd -# Author: Kobe Lee -# -# This program is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 3, as published -# by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranties of -# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR -# PURPOSE. See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -### END LICENSE - -"""This module provides the RatingsAndReviewsAPI class for talking to the -ratings and reviews API, plus a few helper classes. -""" - -import sys -reload(sys) -sys.setdefaultencoding('utf8') -from urllib import quote_plus -from piston_mini_client import ( - PistonAPI, - PistonResponseObject, - PistonSerializable, - returns, - returns_json, - returns_list_of, - ) -from piston_mini_client.validators import validate_pattern, validate -from piston_mini_client import APIError -import httplib2 - -# These are factored out as constants for if you need to work against a -# server that doesn't support both schemes (like http-only dev servers) -PUBLIC_API_SCHEME = 'http' -AUTHENTICATED_API_SCHEME = 'https' - - -class PingbackmainRequest(PistonSerializable): - _atts = ('distro', 'version_os', 'version_weather', 'city') - - -class PingBackPistonAPI(PistonAPI): - """A client for talking to the reviews and ratings API. - - If you pass no arguments into the constructor it will try to connect to - localhost:8000 so you probably want to at least pass in the - ``service_root`` constructor argument. - """ - default_content_type = 'application/x-www-form-urlencoded' - - @returns_json - def submit_pingback_main(self, distro, version_os, version_weather, city): - postdata = PingbackmainRequest() - postdata.distro = distro - postdata.version_os = version_os - postdata.version_weather = version_weather - postdata.city = city - # return False - return self._post('pingbackmain/', data=postdata, scheme=PUBLIC_API_SCHEME, content_type='application/json') - - @returns_json - def access_server_pingback(self): - return self._get('pingnetwork/', scheme=PUBLIC_API_SCHEME) diff -Nru indicator-china-weather-2.2.8/src/preferences.cpp indicator-china-weather-3.0.2~201904291430/src/preferences.cpp --- indicator-china-weather-2.2.8/src/preferences.cpp 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/preferences.cpp 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,638 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "preferences.h" + +#include +#include + +#include "global.h" +using namespace Global; + +Preferences::Preferences() +{ + m_cityList.clear(); + //m_cityIdList.clear(); + m_cities.clear(); + m_maxCityItems = 10; + m_updateFrequency = 30; + m_opacity = 100; + m_serverNotify = true; + + load(); +} + +Preferences::~Preferences() +{ + save(); +} + +void Preferences::save() +{ + QSettings *set = m_settings; + + set->beginGroup("City"); + set->setValue("current_city_id", m_currentCityId); + set->setValue("current_city", m_currentCity); + //set->setValue("city_list2", this->getCitiesList()); + + set->remove("city_list"); + set->beginWriteArray("city_list"); + for (int i = 0; i < m_cities.size(); ++i) { + set->setArrayIndex(i); + set->setValue("id", m_cities.at(i).id); + set->setValue("name", m_cities.at(i).name); + //qDebug() << m_cities.at(i).id << m_cities.at(i).name; + } + set->endArray(); + set->setValue("update_frequency", m_updateFrequency); + set->setValue("opacity", m_opacity); + set->endGroup(); + + set->beginGroup("Weather"); + set->setValue("updatetime", weather.updatetime); + set->setValue("air", weather.air); + set->setValue("cloud", weather.cloud); + set->setValue("cond_code", weather.cond_code); + set->setValue("cond_txt", weather.cond_txt); + set->setValue("fl", weather.fl); + set->setValue("hum", weather.hum); + set->setValue("pcpn", weather.pcpn); + set->setValue("pres", weather.pres); + set->setValue("tmp", weather.tmp); + set->setValue("vis", weather.vis); + set->setValue("wind_deg", weather.wind_deg); + set->setValue("wind_dir", weather.wind_dir); + set->setValue("wind_sc", weather.wind_sc); + set->setValue("wind_spd", weather.wind_spd); + set->endGroup(); + + + set->beginGroup("Forecast"); + QStringList result; + result.append(forecast0.forcast_date); + result.append(forecast1.forcast_date); + result.append(forecast2.forcast_date); + set->setValue("forcast_date", result); + + result.clear(); + result.append(forecast0.cond_code_d); + result.append(forecast1.cond_code_d); + result.append(forecast2.cond_code_d); + set->setValue("cond_code_d", result); + + result.clear(); + result.append(forecast0.cond_txt_d); + result.append(forecast1.cond_txt_d); + result.append(forecast2.cond_txt_d); + set->setValue("cond_txt_d", result); + + result.clear(); + result.append(forecast0.cond_code_n); + result.append(forecast1.cond_code_n); + result.append(forecast2.cond_code_n); + set->setValue("cond_code_n", result); + + result.clear(); + result.append(forecast0.cond_txt_n); + result.append(forecast1.cond_txt_n); + result.append(forecast2.cond_txt_n); + set->setValue("cond_txt_n", result); + + result.clear(); + result.append(forecast0.hum); + result.append(forecast1.hum); + result.append(forecast2.hum); + set->setValue("hum", result); + + result.clear(); + result.append(forecast0.mr_ms); + result.append(forecast1.mr_ms); + result.append(forecast2.mr_ms); + set->setValue("mr_ms", result); + + result.clear(); + result.append(forecast0.pcpn); + result.append(forecast1.pcpn); + result.append(forecast2.pcpn); + set->setValue("pcpn", result); + + result.clear(); + result.append(forecast0.pop); + result.append(forecast1.pop); + result.append(forecast2.pop); + set->setValue("pop", result); + + result.clear(); + result.append(forecast0.pres); + result.append(forecast1.pres); + result.append(forecast2.pres); + set->setValue("pres", result); + + result.clear(); + result.append(forecast0.sr_ss); + result.append(forecast1.sr_ss); + result.append(forecast2.sr_ss); + set->setValue("sr_ss", result); + + result.clear(); + result.append(forecast0.tmp_max); + result.append(forecast1.tmp_max); + result.append(forecast2.tmp_max); + set->setValue("tmp_max", result); + + result.clear(); + result.append(forecast0.tmp_min); + result.append(forecast1.tmp_min); + result.append(forecast2.tmp_min); + set->setValue("tmp_min", result); + + result.clear(); + result.append(forecast0.uv_index); + result.append(forecast1.uv_index); + result.append(forecast2.uv_index); + set->setValue("uv_index", result); + + result.clear(); + result.append(forecast0.vis); + result.append(forecast1.vis); + result.append(forecast2.vis); + set->setValue("vis", result); + + result.clear(); + result.append(forecast0.wind_deg); + result.append(forecast1.wind_deg); + result.append(forecast2.wind_deg); + set->setValue("wind_deg", result); + + result.clear(); + result.append(forecast0.wind_dir); + result.append(forecast1.wind_dir); + result.append(forecast2.wind_dir); + set->setValue("wind_dir", result); + + result.clear(); + result.append(forecast0.wind_sc); + result.append(forecast1.wind_sc); + result.append(forecast2.wind_sc); + set->setValue("wind_sc", result); + + result.clear(); + result.append(forecast0.wind_spd); + result.append(forecast1.wind_spd); + result.append(forecast2.wind_spd); + set->setValue("wind_spd", result); + result.clear(); + set->endGroup(); + + + set->beginGroup("Lifestyle"); + set->setValue("air_brf", lifestyle.air_brf); + set->setValue("air_txt", lifestyle.air_txt); + set->setValue("comf_brf", lifestyle.comf_brf); + set->setValue("comf_txt", lifestyle.comf_txt); + set->setValue("cw_brf", lifestyle.cw_brf); + set->setValue("cw_txt", lifestyle.cw_txt); + set->setValue("drsg_brf", lifestyle.drsg_brf); + set->setValue("drsg_txt", lifestyle.drsg_txt); + set->setValue("flu_brf", lifestyle.flu_brf); + set->setValue("flu_txt", lifestyle.flu_txt); + set->setValue("sport_brf", lifestyle.sport_brf); + set->setValue("sport_txt", lifestyle.sport_txt); + set->setValue("trav_brf", lifestyle.trav_brf); + set->setValue("trav_txt", lifestyle.trav_txt); + set->setValue("uv_brf", lifestyle.uv_brf); + set->setValue("uv_txt", lifestyle.uv_txt); + set->endGroup(); + + set->sync(); +} + +void Preferences::load() +{ + QSettings *set = m_settings; + + set->beginGroup("City"); + m_currentCityId = set->value("current_city_id", m_currentCityId).toString(); + if (m_currentCityId.isEmpty()) { + m_currentCityId = "101250101"; + m_currentCity = "长沙"; + //this->addCityToStringList("长沙"); + + City city; + city.id = m_currentCityId; + city.name = m_currentCity; + + //this->addCityInfoToPref(city); + } + + m_currentCity = set->value("current_city", m_currentCity).toString(); + + //qDebug() << "init load:" << m_currentCityId << m_currentCity; + //this->loadCityesToStringList(set->value("city_list2", this->getCitiesList()).toStringList()); + + int cityCount = set->beginReadArray("city_list"); + if (cityCount == 0) { + set->setArrayIndex(0); + City city; + city.id = m_currentCityId; + city.name = m_currentCity; + m_cities.append(city); + + City city1; + city1.id = "101010100"; + city1.name = "北京"; + m_cities.append(city1); + + City city2; + city2.id = "101020100"; + city2.name = "上海"; + m_cities.append(city2); + } + else { + for (int i = 0; i < cityCount; ++i) { + set->setArrayIndex(i); + City city; + city.id = set->value("id").toString(); + city.name = set->value("name").toString(); + //qDebug() << "load:" <reloadCityList(); + set->endArray(); + + m_updateFrequency = set->value("update_frequency", m_updateFrequency).toInt(); + if (m_updateFrequency > 60 || m_updateFrequency < 15) { + m_updateFrequency = 30; + } + + m_opacity = set->value("opacity", m_opacity).toInt(); + if (m_opacity > 100 || m_opacity < 60) { + m_opacity = 100; + } + set->endGroup(); + + + set->beginGroup("Weather"); + weather.updatetime = set->value("updatetime", weather.updatetime).toString(); + weather.air = set->value("air", weather.air).toString(); + weather.cloud = set->value("cloud", weather.cloud).toString(); + weather.cond_code = set->value("cond_code", weather.cond_code).toString(); + weather.cond_txt = set->value("cond_txt", weather.cond_txt).toString(); + weather.fl = set->value("fl", weather.fl).toString(); + weather.hum = set->value("hum", weather.hum).toString(); + weather.pcpn = set->value("pcpn", weather.pcpn).toString(); + weather.pres = set->value("pres", weather.pres).toString(); + weather.tmp = set->value("tmp", weather.tmp).toString(); + weather.vis = set->value("vis", weather.vis).toString(); + weather.wind_deg = set->value("wind_deg", weather.wind_deg).toString(); + weather.wind_dir = set->value("wind_dir", weather.wind_dir).toString(); + weather.wind_sc = set->value("wind_sc", weather.wind_sc).toString(); + weather.wind_spd = set->value("wind_spd", weather.wind_spd).toString(); + set->endGroup(); + + + set->beginGroup("Forecast"); + QStringList resultlist = set->value("forcast_date").toStringList(); + if (resultlist.length() == 3) { + forecast0.forcast_date = resultlist.at(0); + forecast1.forcast_date = resultlist.at(1); + forecast2.forcast_date = resultlist.at(2); + } + + resultlist.clear(); + resultlist = set->value("cond_code_d").toStringList(); + if (resultlist.length() == 3) { + forecast0.cond_code_d = resultlist.at(0); + forecast1.cond_code_d = resultlist.at(1); + forecast2.cond_code_d = resultlist.at(2); + } + + resultlist.clear(); + resultlist = set->value("cond_txt_d").toStringList(); + if (resultlist.length() == 3) { + forecast0.cond_txt_d = resultlist.at(0); + forecast1.cond_txt_d = resultlist.at(1); + forecast2.cond_txt_d = resultlist.at(2); + } + + resultlist.clear(); + resultlist = set->value("cond_code_n").toStringList(); + if (resultlist.length() == 3) { + forecast0.cond_code_n = resultlist.at(0); + forecast1.cond_code_n = resultlist.at(1); + forecast2.cond_code_n = resultlist.at(2); + } + + resultlist.clear(); + resultlist = set->value("cond_txt_n").toStringList(); + if (resultlist.length() == 3) { + forecast0.cond_txt_n = resultlist.at(0); + forecast1.cond_txt_n = resultlist.at(1); + forecast2.cond_txt_n = resultlist.at(2); + } + + resultlist.clear(); + resultlist = set->value("hum").toStringList(); + if (resultlist.length() == 3) { + forecast0.hum = resultlist.at(0); + forecast1.hum = resultlist.at(1); + forecast2.hum = resultlist.at(2); + } + + resultlist.clear(); + resultlist = set->value("mr_ms").toStringList(); + if (resultlist.length() == 3) { + forecast0.mr_ms = resultlist.at(0); + forecast1.mr_ms = resultlist.at(1); + forecast2.mr_ms = resultlist.at(2); + } + + resultlist.clear(); + resultlist = set->value("pcpn").toStringList(); + if (resultlist.length() == 3) { + forecast0.pcpn = resultlist.at(0); + forecast1.pcpn = resultlist.at(1); + forecast2.pcpn = resultlist.at(2); + } + + resultlist.clear(); + resultlist = set->value("pop").toStringList(); + if (resultlist.length() == 3) { + forecast0.pop = resultlist.at(0); + forecast1.pop = resultlist.at(1); + forecast2.pop = resultlist.at(2); + } + + resultlist.clear(); + resultlist = set->value("pres").toStringList(); + if (resultlist.length() == 3) { + forecast0.pres = resultlist.at(0); + forecast1.pres = resultlist.at(1); + forecast2.pres = resultlist.at(2); + } + + resultlist.clear(); + resultlist = set->value("sr_ss").toStringList(); + if (resultlist.length() == 3) { + forecast0.sr_ss = resultlist.at(0); + forecast1.sr_ss = resultlist.at(1); + forecast2.sr_ss = resultlist.at(2); + } + + resultlist.clear(); + resultlist = set->value("tmp_max").toStringList(); + if (resultlist.length() == 3) { + forecast0.tmp_max = resultlist.at(0); + forecast1.tmp_max = resultlist.at(1); + forecast2.tmp_max = resultlist.at(2); + } + + resultlist.clear(); + resultlist = set->value("tmp_min").toStringList(); + if (resultlist.length() == 3) { + forecast0.tmp_min = resultlist.at(0); + forecast1.tmp_min = resultlist.at(1); + forecast2.tmp_min = resultlist.at(2); + } + + resultlist.clear(); + resultlist = set->value("uv_index").toStringList(); + if (resultlist.length() == 3) { + forecast0.uv_index = resultlist.at(0); + forecast1.uv_index = resultlist.at(1); + forecast2.uv_index = resultlist.at(2); + } + + resultlist.clear(); + resultlist = set->value("vis").toStringList(); + if (resultlist.length() == 3) { + forecast0.vis = resultlist.at(0); + forecast1.vis = resultlist.at(1); + forecast2.vis = resultlist.at(2); + } + + resultlist.clear(); + resultlist = set->value("wind_deg").toStringList(); + if (resultlist.length() == 3) { + forecast0.wind_deg = resultlist.at(0); + forecast1.wind_deg = resultlist.at(1); + forecast2.wind_deg = resultlist.at(2); + } + + resultlist.clear(); + resultlist = set->value("wind_dir").toStringList(); + if (resultlist.length() == 3) { + forecast0.wind_dir = resultlist.at(0); + forecast1.wind_dir = resultlist.at(1); + forecast2.wind_dir = resultlist.at(2); + } + + resultlist.clear(); + resultlist = set->value("wind_sc").toStringList(); + if (resultlist.length() == 3) { + forecast0.wind_sc = resultlist.at(0); + forecast1.wind_sc = resultlist.at(1); + forecast2.wind_sc = resultlist.at(2); + } + + resultlist.clear(); + resultlist = set->value("wind_spd").toStringList(); + if (resultlist.length() == 3) { + forecast0.wind_spd = resultlist.at(0); + forecast1.wind_spd = resultlist.at(1); + forecast2.wind_spd = resultlist.at(2); + } + resultlist.clear(); + set->endGroup(); + + + set->beginGroup("Lifestyle"); + lifestyle.air_brf = set->value("air_brf", lifestyle.air_brf).toString(); + lifestyle.air_txt = set->value("air_txt", lifestyle.air_txt).toString(); + lifestyle.comf_brf = set->value("comf_brf", lifestyle.comf_brf).toString(); + lifestyle.comf_txt = set->value("comf_txt", lifestyle.comf_txt).toString(); + lifestyle.cw_brf = set->value("cw_brf", lifestyle.cw_brf).toString(); + lifestyle.cw_txt = set->value("cw_txt", lifestyle.cw_txt).toString(); + lifestyle.drsg_brf = set->value("drsg_brf", lifestyle.drsg_brf).toString(); + lifestyle.drsg_txt = set->value("drsg_txt", lifestyle.drsg_txt).toString(); + lifestyle.flu_brf = set->value("flu_brf", lifestyle.flu_brf).toString(); + lifestyle.flu_txt = set->value("flu_txt", lifestyle.flu_txt).toString(); + lifestyle.sport_brf = set->value("sport_brf", lifestyle.sport_brf).toString(); + lifestyle.sport_txt = set->value("sport_txt", lifestyle.sport_txt).toString(); + lifestyle.trav_brf = set->value("trav_brf", lifestyle.trav_brf).toString(); + lifestyle.trav_txt = set->value("trav_txt", lifestyle.trav_txt).toString(); + lifestyle.uv_brf = set->value("uv_brf", lifestyle.uv_brf).toString(); + lifestyle.uv_txt = set->value("uv_txt", lifestyle.uv_txt).toString(); + set->endGroup(); +} + +//void Preferences::addCityToStringList(QString name) +//{ +// int pos = m_cityList.indexOf(name); +// if (pos != -1) +// m_cityList.removeAt(pos); +// m_cityList.prepend(name); + +// if (m_cityList.count() > m_maxCityItems) +// m_cityList.removeLast(); +//} + +//void Preferences::removeCityFromStringList(QString name) +//{ +// int pos = m_cityList.indexOf(name); +// if (pos != -1) +// m_cityList.removeAt(pos); +//} + +//QString Preferences::cityName(int index) +//{ +// QString name = m_cityList[index]; + +// return name; +//} + +//void Preferences::loadCityesToStringList(QStringList list) +//{ +// m_cityList.clear(); + +// int max = list.count(); +// if (m_maxCityItems < max) +// max = m_maxCityItems; + +// for (int n = 0; n < max; n++) { +// m_cityList.append(list[n]); +// } +//} + +void Preferences::reloadCityList() +{ + m_cityList.clear(); + for (int i = 0; i < m_cities.size(); ++i) { + m_cityList.append(m_cities.at(i).name); + } +} + +QStringList Preferences::getCitiesList() +{ + return m_cityList; +} + +int Preferences::citiesCount() +{ + return m_cityList.count(); +// return m_cities.count(); +} + +void Preferences::setCurrentCityIdAndName(const QString &cityName/*int index*/) +{ +// this->m_currentCityId = m_cities.at(index).id; +// this->m_currentCity = m_cities.at(index).name; + + this->m_currentCity = cityName; + for (int i = 0; i < m_cities.size(); ++i) { + if (m_cities.at(i).name == cityName) { + this->m_currentCityId = m_cities.at(i).id; + break; + } + } +} + +void Preferences::setDefaultCity() +{ + if (m_cities.size() > 0) { + this->m_currentCityId = m_cities.at(0).id; + this->m_currentCity = m_cities.at(0).name; + } +} + +void Preferences::addCityInfoToPref(City city) +{ + if (m_cities.size() == 0) { + m_cities.append(city); + } + else { + int pos = m_cities.indexOf(city); + if (pos != -1) { + m_cities.removeAt(pos); + } + m_cities.prepend(city); + if (m_cities.count() > m_maxCityItems) + m_cities.removeLast(); + } + + this->reloadCityList(); +} + +void Preferences::removeCityInfoFromPref(const QString &id, bool isActive) +{ + for (int i = 0; i < m_cities.size(); ++i) { + City city; + city.id = m_cities.at(i).id; + city.name = m_cities.at(i).name; + int pos = m_cities.indexOf(city); + if (pos != -1 && city.id == id) { + m_cities.removeAt(pos); + this->reloadCityList(); + break; + } + } + + if (isActive) { + this->setDefaultCity(); + } +} + +bool Preferences::isCityIdExist(const QString &id) +{ + bool b = false; + + for (int i = 0; i < m_cities.size(); ++i) { + if (id == m_cities.at(i).id) { + b = true; + break; + } + } + + return b; +} + +bool Preferences::isCitiesCountOverMax() +{ + bool b = false; + if (m_cities.count() >= 10) { + b = true; + return b; + } + + return b; +} + +void Preferences::resetCurrentCityNameById(const QString &id) +{ + this->m_currentCityId = id; + for (int i = 0; i < m_cities.size(); ++i) { + if (m_cities.at(i).id == id) { + this->m_currentCity = m_cities.at(i).name; + break; + } + } +} diff -Nru indicator-china-weather-2.2.8/src/preferences.h indicator-china-weather-3.0.2~201904291430/src/preferences.h --- indicator-china-weather-2.2.8/src/preferences.h 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/preferences.h 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,130 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef PREFERENCES_H +#define PREFERENCES_H + +#include +#include + +#include "data.h" + +class Preferences { +public: + Preferences(); + ~Preferences(); + + void save(); + void load(); + + //void addCityToStringList(QString name); + //void removeCityFromStringList(QString name); + //void loadCityesToStringList(QStringList list); + QStringList getCitiesList(); + //QString cityName(int index); + int citiesCount(); + void setCurrentCityIdAndName(const QString &cityName/*int index*/); + void resetCurrentCityNameById(const QString &id); + + void addCityInfoToPref(City city); + void removeCityInfoFromPref(const QString &id, bool isActive); + void reloadCityList(); + bool isCityIdExist(const QString &id); + bool isCitiesCountOverMax(); + void setDefaultCity(); + + QString m_currentCity; + QString m_currentCityId; + int m_updateFrequency; + int m_opacity; + bool m_serverNotify; + + /*struct Weather_settings { + QString id; + QString city; + QString updatetime; + QString air;//空气质量 + QString cloud;//云量 + QString cond_code;//实况天气状况代码 100 + QString cond_txt;//实况天气状况描述 晴 + QString fl;//体感温度,默认单位:摄氏度 23 + QString hum;//相对湿度 40 + QString pcpn;//降水量(毫米 mm) 0 + QString pres;//大气压强(百帕 hPa) 1020 + QString tmp;//温度,默认单位:摄氏度℃ 21 + QString vis;//能见度,默认单位:公里 km 10 + QString wind_deg;//风向360角度 305 + QString wind_dir;//风向 西北 + QString wind_sc;//风力 3 (0:静风 1:1级风) + QString wind_spd;//风速,公里/小时 km/h 15 + } weather;*/ + + /*struct Forecast_settings { + QString cond_code_d;//白天天气状况代码 100 + QString cond_code_n;//晚间天气状况代码 100 + QString cond_txt_d;//白天天气状况描述 晴 + QString cond_txt_n;//晚间天气状况描述 晴 + QString forcast_date;//预报日期 2013-12-30 + QString hum;//相对湿度 37 + QString mr_ms;//月升时间 04:47 月落时间 14:59 + QString pcpn;//降水量 0 + QString pop;//降水概率 0 + QString pres;//大气压强 1018 + QString sr_ss;//日出时间 07:36 日落时间 16:58 + QString tmp_max;//最高温度 4 + QString tmp_min;//最低温度 -5 + QString uv_index;//紫外线强度指数 3 + QString vis;//能见度,单位:公里 10 + QString wind_deg;//风向360角度 310 + QString wind_dir;//风向 西北风 + QString wind_sc;//风力 1-2 (级风) + QString wind_spd;//风速,公里/小时 14 + } forecast0, forecast1, forecast2;*/ + + /*struct LifeStyle_settings { + QString air_brf; + QString air_txt; + QString comf_brf; + QString comf_txt; + QString cw_brf; + QString cw_txt; + QString drsg_brf; + QString drsg_txt; + QString flu_brf; + QString flu_txt; + QString sport_brf; + QString sport_txt; + QString trav_brf; + QString trav_txt; + QString uv_brf; + QString uv_txt; + } lifestyle;*/ + + ObserveWeather weather; + ForecastWeather forecast0, forecast1, forecast2; + LifeStyle lifestyle; + Air air; + + int m_maxCityItems; + QStringList m_cityList; + //QStringList m_cityIdList; + QList m_cities; +}; + +#endif // PREFERENCES_H diff -Nru indicator-china-weather-2.2.8/src/promptwidget.cpp indicator-china-weather-3.0.2~201904291430/src/promptwidget.cpp --- indicator-china-weather-2.2.8/src/promptwidget.cpp 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/promptwidget.cpp 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,187 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "promptwidget.h" + +#include +#include +#include +#include +#include +#include +#include + +PromptWidget::PromptWidget(QWidget *parent) : QFrame(parent) + , m_iconLabel(new QLabel(this)) + , m_textLabel(new QLabel(this)) + , m_closeBtn(new QPushButton(this)) +{ + this->setStyleSheet("QFrame{background:rgba(0,0,0,0.85);} QFrame:hover{background:rgba(0, 0, 0, 0.6);}"); + this->setFixedSize(134, 99); + this->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + this->setContentsMargins(0, 0, 0, 0); + + QVBoxLayout *m_vlayout = new QVBoxLayout(this); + m_vlayout->setContentsMargins(10, 10, 10, 10); + m_vlayout->setSpacing(5); + + m_closeBtn->setFixedSize(12, 12); + m_closeBtn->setFocusPolicy(Qt::NoFocus); + m_closeBtn->setStyleSheet("QPushButton{background-image:url(':/res/delete_normal.png');border:0px;}QPushButton:hover{background:url(':/res/delete_hover_press.png');}QPushButton:pressed{background:url(':/res/delete_hover_press.png');}"); + m_closeBtn->setVisible(false); + + m_iconLabel->setFixedSize(45, 44); + m_iconLabel->setStyleSheet("QLabel{border:none;background-color:transparent;}"); + + m_textLabel->setStyleSheet("QLabel{border:none;background-color:transparent;color:#ffffff;font-size:14px;}"); + m_textLabel->setWordWrap(true); + m_textLabel->setAlignment(Qt::AlignCenter); + m_textLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); + + m_vlayout->addWidget(m_iconLabel, 0, Qt::AlignHCenter); + m_vlayout->addWidget(m_textLabel, 0, Qt::AlignHCenter); + + connect(m_closeBtn, &QPushButton::clicked, this, [=] { + this->setVisible(false); + }); +} + +PromptWidget::PromptWidget(const QString &text, QWidget *parent, const QString &movieSouce, bool movie) + : QFrame(parent) + , m_iconLabel(new QLabel(this)) + , m_textLabel(new QLabel(this)) + , m_closeBtn(new QPushButton(this)) + , m_isMovie(movie) +{ + this->setStyleSheet("QFrame{background:rgba(0,0,0,0.85);} QFrame:hover{background:rgba(0, 0, 0, 0.6);}"); + this->setFixedSize(134, 50); + this->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + this->setContentsMargins(0, 0, 0, 0); + + QHBoxLayout *m_hlayout = new QHBoxLayout(this); + m_hlayout->setContentsMargins(5, 10, 5, 10); + m_hlayout->setSpacing(5); + + m_closeBtn->setFixedSize(12, 12); + m_closeBtn->setFocusPolicy(Qt::NoFocus); + m_closeBtn->setStyleSheet("QPushButton{background-image:url(':/res/delete_normal.png');border:0px;}QPushButton:hover{background:url(':/res/delete_hover_press.png');}QPushButton:pressed{background:url(':/res/delete_hover_press.png');}"); + m_closeBtn->setVisible(false); + + m_iconLabel->setFixedSize(16, 16); + m_iconLabel->setStyleSheet("QLabel{border:none;background-color:transparent;}"); + + m_textLabel->setStyleSheet("QLabel{border:none;background-color:transparent;color:#ffffff;font-size:14px;}"); + m_textLabel->setText(text); + QFont font = m_textLabel->font(); + const QFontMetrics fm(font); + m_textLabel->setFixedWidth(fm.width(m_textLabel->text())); + + if (m_isMovie) { + m_movie = new QMovie(movieSouce); + m_iconLabel->setMovie(m_movie); + m_movie->start(); + } + + m_hlayout->addStretch(); + m_hlayout->addWidget(m_textLabel, 0, Qt::AlignVCenter | Qt::AlignRight); + m_hlayout->addWidget(m_iconLabel, 0, Qt::AlignVCenter | Qt::AlignLeft); + m_hlayout->addStretch(); + + connect(m_closeBtn, &QPushButton::clicked, this, [=] { + m_movie->stop(); + this->setVisible(false); + }); +} + +PromptWidget::~PromptWidget() +{ + if (m_movie) { + delete m_movie; + } +} + +void PromptWidget::setIconAndText(const QString &iconPath, const QString &text) +{ + const qreal ratio = qApp->devicePixelRatio(); + QIcon icon = QIcon(iconPath); + QPixmap pixmap = icon.pixmap(m_iconLabel->width()*ratio, m_iconLabel->height()*ratio); + pixmap = pixmap.scaled(m_iconLabel->width()*ratio, m_iconLabel->height()*ratio, Qt::KeepAspectRatioByExpanding, Qt::SmoothTransformation); + pixmap.setDevicePixelRatio(ratio); + m_iconLabel->setPixmap(pixmap); + + m_textLabel->setText(text); +} + +void PromptWidget::enterEvent(QEvent *event) +{ + QFrame::enterEvent(event); + + m_closeBtn->move(this->width() -12, 0); + m_closeBtn->setVisible(true); +} + +void PromptWidget::leaveEvent(QEvent *event) +{ + QFrame::enterEvent(event); + + m_closeBtn->setVisible(false); +} + +bool PromptWidget::event(QEvent *event) +{ + switch (event->type()) { + case QEvent::MouseButtonPress: + if (m_isMovie && m_movie) { + //m_movie->stop(); + } + else { + this->setVisible(false); + } + break; + /*case QEvent::Show: + if (m_isMovie && m_movie) { + m_movie->start(); + this->setVisible(true); + } + break;*/ + default: + break; + } + + return QFrame::event(event); +} + + +void PromptWidget::showEvent(QShowEvent *event) +{ + QFrame::showEvent(event); + + if (m_isMovie && m_movie) { + m_movie->start(); + } +} + +void PromptWidget::hideEvent(QHideEvent* event) +{ + QFrame::hideEvent(event); + + if (m_isMovie && m_movie) { + m_movie->stop(); + } +} diff -Nru indicator-china-weather-2.2.8/src/promptwidget.h indicator-china-weather-3.0.2~201904291430/src/promptwidget.h --- indicator-china-weather-2.2.8/src/promptwidget.h 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/promptwidget.h 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef PROMPTWIDGET_H_ +#define PROMPTWIDGET_H_ + +#include +#include + +class QLabel; +class QPushButton; + +class PromptWidget : public QFrame +{ + Q_OBJECT +public: + explicit PromptWidget(QWidget *parent = 0); + explicit PromptWidget(const QString &text, QWidget *parent = 0, const QString &movieSouce = "", bool movie = false); + ~PromptWidget(); + + void setIconAndText(const QString &iconPath, const QString &text); + +protected: + void enterEvent(QEvent *event) Q_DECL_OVERRIDE; + void leaveEvent(QEvent *event) Q_DECL_OVERRIDE; + bool event(QEvent *event); + void showEvent(QShowEvent *event) Q_DECL_OVERRIDE; + void hideEvent(QHideEvent* event) Q_DECL_OVERRIDE; + +private: + QLabel *m_iconLabel = nullptr; + QLabel *m_textLabel = nullptr; + QPushButton *m_closeBtn = nullptr; + QMovie *m_movie = nullptr; + bool m_isMovie = false; +}; + +#endif // PROMPTWIDGET_H_ diff -Nru indicator-china-weather-2.2.8/src/searchdelegate.cpp indicator-china-weather-3.0.2~201904291430/src/searchdelegate.cpp --- indicator-china-weather-2.2.8/src/searchdelegate.cpp 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/searchdelegate.cpp 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "searchdelegate.h" + +#include +#include + +SearchDelegate::SearchDelegate(QObject *parent) : + QStyledItemDelegate(parent) +{ + +} + +SearchDelegate::~SearchDelegate() +{ + +} + +void SearchDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const +{ + QString cityName = index.data(Qt::DisplayRole).toString(); + QRect rect(option.rect.adjusted(0, 0, 0, 0) ); + painter->fillRect(rect, QColor::fromRgbF(1, 1, 1, 0.15)); + + QFont font = painter->font(); + font.setPixelSize(12); + + QTextOption textOption; + textOption.setAlignment(Qt::AlignLeft | Qt::AlignVCenter); + painter->setPen(QColor("#808080")); + painter->setFont(font); + rect = rect.adjusted(15, 0, 15, 0); + painter->drawText(rect, cityName, textOption); +} + +QSize SearchDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const +{ +// Q_UNUSED(option) + +// QVariant value = index.data(Qt::SizeHintRole); +// if(value.isValid()) +// return qvariant_cast(value); + + QSize size = QStyledItemDelegate::sizeHint(option, index); + size.setHeight(32); + + return size; +} diff -Nru indicator-china-weather-2.2.8/src/searchdelegate.h indicator-china-weather-3.0.2~201904291430/src/searchdelegate.h --- indicator-china-weather-2.2.8/src/searchdelegate.h 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/searchdelegate.h 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include + +class SearchDelegate : public QStyledItemDelegate +{ + Q_OBJECT +public: + explicit SearchDelegate(QObject *parent = 0); + ~SearchDelegate(); + +private: + void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; + QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const; +}; diff -Nru indicator-china-weather-2.2.8/src/searchdialog.cpp indicator-china-weather-3.0.2~201904291430/src/searchdialog.cpp --- indicator-china-weather-2.2.8/src/searchdialog.cpp 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/searchdialog.cpp 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,145 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "searchdialog.h" +#include "searchtitlebar.h" +#include "searchmodel.h" +#include "searchview.h" +#include "searchdelegate.h" + +#include +#include +#include +#include +#include + +namespace { + +const int CONTENT_MARGIN = 0; + +} + +SearchDialog::SearchDialog(QWidget *parent): + QDialog(parent) +{ + this->setWindowFlags(Qt::FramelessWindowHint); + this->setStyleSheet("QDialog{border:1px solid #000000;border-radius:2px;background:rgba(255, 255, 255, 0.7);}QDialog:hover{background: rgba(255, 255, 255, 1.0);}"); + this->setFixedSize(479, 421); + this->setFocusPolicy(Qt::ClickFocus); + this->setWindowTitle(tr("Kylin Weather - Search")); + this->setWindowIcon(QIcon(":/res/indicator-china-weather.png")); + + m_titleBar = new SearchTitleBar; + m_titleBar->setFixedHeight(150); + m_displayWidget = new QWidget; +// m_displayWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); +// m_displayWidget->setContentsMargins(0, m_titleBar->height(), 0, 0); + + m_searchModel = new SearchModel; + m_searchView = new SearchView; + m_searchDelegate = new SearchDelegate; + m_searchView->setFixedWidth(this->width() - 2*CONTENT_MARGIN); + m_searchView->setItemDelegate(m_searchDelegate); + m_searchView->setModel(m_searchModel); + m_searchView->setVisible(false); + + m_noResultLabel = new QLabel; + m_noResultLabel->setStyleSheet("QLabel{border:none;background-color:transparent;color:#808080;font-size:12px;}"); + m_noResultLabel->setAlignment(Qt::AlignCenter); + m_noResultLabel->setText(tr("No Result")); + m_noResultLabel->setVisible(false); + QFont font = m_noResultLabel->font(); + const QFontMetrics fm(font); + m_noResultLabel->setFixedWidth(fm.width(m_noResultLabel->text())); + + QVBoxLayout *layout = new QVBoxLayout(this); + layout->setContentsMargins(1, 1, 1, 1); + layout->setSpacing(0); + layout->addWidget(m_titleBar); + layout->addWidget(m_displayWidget); + + QHBoxLayout *contentLayout = new QHBoxLayout(m_displayWidget); + contentLayout->setContentsMargins(CONTENT_MARGIN, 0, CONTENT_MARGIN, 0); + contentLayout->setSpacing(0); + contentLayout->addWidget(m_searchView, 1, Qt::AlignHCenter); + contentLayout->addWidget(m_noResultLabel, 1, Qt::AlignCenter); + + connect(m_searchView, &SearchView::clicked, this, [this](const QModelIndex &index) { + QVariant data = index.data(Qt::UserRole);//SearchModel::data Qt::UserRole + QString selectCityId = data.value(); + //qDebug() << "selectCityId=" << selectCityId; + for (const LocationData &line : m_searchModel->locationList()) {//it must exits. + if (line.id == selectCityId) { + emit this->requestAddCityToMenu(line); + break; + } + } + }); + + connect(m_titleBar, &SearchTitleBar::requestCloseDialog, this, [=] { + this->close(); + }); + + connect(m_titleBar, &SearchTitleBar::requestShowNoResultLabel, this, [=] { + m_noResultLabel->setVisible(true); + }); + connect(m_titleBar, &SearchTitleBar::requestResetViewAndModel, this, [=] { + m_searchView->setVisible(false); + m_noResultLabel->setVisible(false); + m_searchModel->setLocationData(QList()); + }); + + connect(m_titleBar, &SearchTitleBar::sendSearchResults, this, [=] (QList results) { + m_searchModel->setLocationData(results); + m_searchView->setVisible(true); + m_noResultLabel->setVisible(false); + }); +} + +SearchDialog::~SearchDialog() +{ + delete m_titleBar; + delete m_noResultLabel; + delete m_searchModel; + delete m_searchView; + delete m_searchDelegate; +} + +void SearchDialog::mousePressEvent(QMouseEvent *event) +{ + if (event->button() == Qt::LeftButton) { + m_mousePressed = true; + m_dragPosition = event->globalPos() - this->frameGeometry().topLeft(); + event->accept(); + } +} + +void SearchDialog::mouseReleaseEvent(QMouseEvent *) +{ + m_mousePressed = false; +} + +void SearchDialog::mouseMoveEvent(QMouseEvent *event) +{ + if(m_mousePressed) { + QPoint move_pos = event->globalPos(); + move(move_pos - m_dragPosition); + event->accept(); + } +} diff -Nru indicator-china-weather-2.2.8/src/searchdialog.h indicator-china-weather-3.0.2~201904291430/src/searchdialog.h --- indicator-china-weather-2.2.8/src/searchdialog.h 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/searchdialog.h 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef SEARCHDIALOG_H +#define SEARCHDIALOG_H + +#include +#include +#include + +#include "data.h" + +class SearchTitleBar; +class SearchView; +class SearchDelegate; +class SearchModel; + +class SearchDialog : public QDialog +{ + Q_OBJECT + +public: + explicit SearchDialog(QWidget *parent = 0); + ~SearchDialog(); + +signals: + void requestAddCityToMenu(const LocationData &data); + +protected: + void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + +private: + QPoint m_dragPosition; + bool m_mousePressed; + + SearchTitleBar *m_titleBar = nullptr; + QWidget *m_displayWidget = nullptr; + QLabel *m_noResultLabel = nullptr; + SearchModel *m_searchModel = nullptr; + SearchView *m_searchView = nullptr; + SearchDelegate *m_searchDelegate = nullptr; +}; + +#endif // SEARCHDIALOG_H diff -Nru indicator-china-weather-2.2.8/src/searchinputedit.cpp indicator-china-weather-3.0.2~201904291430/src/searchinputedit.cpp --- indicator-china-weather-2.2.8/src/searchinputedit.cpp 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/searchinputedit.cpp 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,82 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "searchinputedit.h" + +#include +#include +#include + +SearchInputEdit::SearchInputEdit(QWidget* parent) + :QLineEdit(parent) + , m_searchText(tr("Please input the city to search")) + , m_searchPixmap(QPixmap(":/res/search.png")) +{ + this->setStyleSheet("QLineEdit{border:1px solid white;background-color:#3892eb;color:#ffffff;font-size:12px}"); + this->setFocusPolicy(Qt::ClickFocus); + this->setFocus(); +} + +void SearchInputEdit::paintEvent(QPaintEvent *event) +{ + QLineEdit::paintEvent(event); + //QPainter painter(this); + //painter.setRenderHint(QPainter::Antialiasing); + + if (!this->hasFocus() && this->text().isEmpty()) { + QRect rect = this->rect(); + + QPainter painter(this); + painter.setRenderHint(QPainter::Antialiasing); + painter.setOpacity(0.6); + painter.fillRect(this->rect(), QColor(56,146,235));//#3892eb + + QFont curFont = painter.font();//QGuiApplication::font(); + curFont.setPixelSize(12);//font.setPointSize(12); + QFontMetrics fm(curFont); + QPen pen(Qt::white); + painter.setPen(pen); + painter.setFont(curFont); + + int textWidth = fm.width(m_searchText); + int iconWidth = m_searchPixmap.width(); + + QRect textRect(5, 0, textWidth, rect.height()); + painter.drawText(textRect, Qt::AlignVCenter | Qt::AlignLeft, m_searchText); + + QRect iconRect(QPoint(rect.width() - iconWidth/qApp->devicePixelRatio() - 5, rect.height()/2 - m_searchPixmap.height()/qApp->devicePixelRatio()/2), m_searchPixmap.size()/qApp->devicePixelRatio()); + painter.drawPixmap(iconRect, m_searchPixmap); + } + /*else { + QRect rect = this->rect(); + painter.setOpacity(1); + painter.fillRect(this->rect(), QColor(56,146,235));//#3892eb + + QFont curFont = painter.font();//QGuiApplication::font(); + curFont.setPixelSize(12);//font.setPointSize(12); + QFontMetrics fm(curFont); + QPen pen(Qt::white); + painter.setPen(pen); + painter.setFont(curFont); + + int textWidth = fm.width(this->text()); + QRect textRect(5, 0, textWidth, rect.height()); + painter.drawText(textRect, Qt::AlignVCenter | Qt::AlignLeft, this->text()); + }*/ +} diff -Nru indicator-china-weather-2.2.8/src/searchinputedit.h indicator-china-weather-3.0.2~201904291430/src/searchinputedit.h --- indicator-china-weather-2.2.8/src/searchinputedit.h 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/searchinputedit.h 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef SEARCHINPUTEDIT_H +#define SEARCHINPUTEDIT_H + +#include + +class SearchInputEdit : public QLineEdit +{ + Q_OBJECT + +public: + explicit SearchInputEdit(QWidget* parent = 0); + +protected: + void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; + +private: + QString m_searchText; + QPixmap m_searchPixmap; +}; + +#endif // SEARCHINPUTEDIT_H diff -Nru indicator-china-weather-2.2.8/src/searchmodel.cpp indicator-china-weather-3.0.2~201904291430/src/searchmodel.cpp --- indicator-china-weather-2.2.8/src/searchmodel.cpp 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/searchmodel.cpp 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "searchmodel.h" + +#include + +SearchModel::SearchModel(QObject *parent) : + QAbstractListModel(parent) +{ + +} + +SearchModel::~SearchModel() +{ + +} + +int SearchModel::rowCount(const QModelIndex &parent) const +{ + return m_locationDataList.length(); +} + +bool SearchModel::insertColumns(int column, int count, const QModelIndex &) +{ + return true; +} + +QVariant SearchModel::data(const QModelIndex &index, int role) const +{ + if (!index.isValid()) { + return QVariant(); + } + + const LocationData info = m_locationDataList.at(index.row()); + + if (role == Qt::UserRole) {//for get LocationData from QList + return QVariant(info.id); + } + + if (role == Qt::ToolTipRole || role == Qt::WhatsThisRole) { + return QVariant(); + } + + return QVariant(QString("%1, %2, %3").arg(info.city).arg(info.admin_district).arg(info.province)); +} + +QList SearchModel::locationList() const +{ + return m_locationDataList; +} + +void SearchModel::setLocationData(const QList &results) +{ + beginResetModel(); + m_locationDataList = results; + endResetModel(); +} + + diff -Nru indicator-china-weather-2.2.8/src/searchmodel.h indicator-china-weather-3.0.2~201904291430/src/searchmodel.h --- indicator-china-weather-2.2.8/src/searchmodel.h 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/searchmodel.h 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include + +#include "data.h" + +class SearchModel : public QAbstractListModel +{ + Q_OBJECT +public: + explicit SearchModel(QObject *parent = 0); + ~SearchModel(); + + void setLocationData(const QList &results); + QList locationList() const; + +private: + int rowCount(const QModelIndex &parent) const; + QVariant data(const QModelIndex &index, int role) const; + bool insertColumns(int column, int count, const QModelIndex & parent = QModelIndex()); + + QList m_locationDataList; +}; diff -Nru indicator-china-weather-2.2.8/src/searchtitlebar.cpp indicator-china-weather-3.0.2~201904291430/src/searchtitlebar.cpp --- indicator-china-weather-2.2.8/src/searchtitlebar.cpp 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/searchtitlebar.cpp 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,215 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "searchtitlebar.h" +#include "searchinputedit.h" +#include "locationworker.h" + +#include +#include +#include + +SearchTitleBar::SearchTitleBar(QWidget *parent) : QWidget(parent) + , m_borderColor(QColor(255, 255, 255, 153)) + , m_borderRadius(1) + , m_borderWidth(1) + , m_bgBrush(QBrush(QColor("#1374e8"))) +{ + this->initWidgets(); + + m_searchTimer = new QTimer; + m_searchTimer->setSingleShot(true); + m_searchTimer->setInterval(500); + + m_locationWorker = new LocationWorker; + + connect(m_searchTimer, SIGNAL(timeout()), this, SLOT(onSearchTimerOut())); + + connect(m_searchInputEdit, &SearchInputEdit::textChanged, this, [this] { + emit this->requestResetViewAndModel(); + + if (m_searchTimer->isActive()) { + m_searchTimer->stop(); + } + m_searchTimer->start(); + }); +} + +SearchTitleBar::~SearchTitleBar() +{ + m_locationWorker->deleteLater(); + + if (m_searchTimer) { + disconnect(m_searchTimer, SIGNAL(timeout()), this, SLOT(onSearchTimerOut())); + if(m_searchTimer->isActive()) { + m_searchTimer->stop(); + } + delete m_searchTimer; + m_searchTimer = nullptr; + } + + QLayoutItem *child; + while ((child = m_layout->takeAt(0)) != 0) { + if (child->widget()) + child->widget()->deleteLater(); + delete child; + } +} + +void SearchTitleBar::onSearchTimerOut() +{ + const QString inputText = m_searchInputEdit->text().trimmed(); + if (inputText.isEmpty()) + return; + + QList searchResultList; + searchResultList = m_locationWorker->exactMatchCity(inputText); + if (searchResultList.isEmpty()) { + emit this->requestShowNoResultLabel(); + } + else { + setSearchResult(searchResultList); + } +} + +void SearchTitleBar::setSearchResult(const QList data) +{ + QList resultList; + for (const LocationData &line : data) { + if (resultList.indexOf(line) == -1) { + resultList.append(line); + } + } + + emit this->sendSearchResults(resultList); +} + +void SearchTitleBar::resetSearchInputEdit() const +{ + m_searchInputEdit->setText(""); + m_searchInputEdit->clearFocus(); +} + +void SearchTitleBar::initLeftContent() +{ + QWidget *w = new QWidget; + m_lLayout = new QHBoxLayout(w); + m_lLayout->setContentsMargins(0, 0, 0, 0); + m_lLayout->setSpacing(0); + m_toplayout->addWidget(w, 1, Qt::AlignLeft); +} + +void SearchTitleBar::initMiddleContent() +{ + QWidget *w = new QWidget; + w->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); + m_mLayout = new QHBoxLayout(w); + m_mLayout->setContentsMargins(0, 0, 0, 0); + m_mLayout->setSpacing(5); + m_toplayout->addWidget(w); + + QLabel *m_iconLabel = new QLabel; + m_iconLabel->setContentsMargins(0, 0, 0, 0); + QPixmap iconPixmap = QPixmap(":/res/indicator-china-weather_min.png"); + m_iconLabel->setPixmap(iconPixmap); + m_iconLabel->setFixedSize(iconPixmap.size()); + + QLabel *m_titleLabel = new QLabel; + m_titleLabel->setStyleSheet("QLabel{font-size:12px;color: rgb(255,255,255);background-color:transparent;}"); + m_titleLabel->setText(tr("Kylin Weather - Search")); + + m_mLayout->addWidget(m_iconLabel); + m_mLayout->addWidget(m_titleLabel); +} + +void SearchTitleBar::initRightContent() +{ + QWidget *w = new QWidget; + m_rLayout = new QHBoxLayout(w); + m_rLayout->setContentsMargins(0, 0, 5, 0); + m_rLayout->setSpacing(0); + m_toplayout->addWidget(w, 1, Qt::AlignRight); + + m_closeBtn = new QPushButton(this); + m_closeBtn->setFocusPolicy(Qt::NoFocus); + m_closeBtn->setFixedSize(32,32); + m_closeBtn->setStyleSheet("QPushButton{background-image:url(':/res/close_normal_btn.png');border:0px;}QPushButton:hover{background:url(':/res/close_hover_btn.png');}QPushButton:pressed{background:url(':/res/close_pressed_btn.png');}"); + + m_rLayout->addWidget(m_closeBtn); + + connect(m_closeBtn, &QPushButton::clicked, this, &SearchTitleBar::requestCloseDialog); +} + +void SearchTitleBar::initBottomContent() +{ + QWidget *w = new QWidget; + m_bLayout = new QHBoxLayout(w); + m_bLayout->setContentsMargins(10, 0, 0, 0); + m_bLayout->setSpacing(10); + m_layout->addWidget(w); + + m_searchInputEdit = new SearchInputEdit; + m_searchInputEdit->setFixedSize(280, 32); + m_bLayout->addWidget(m_searchInputEdit, 0, Qt::AlignCenter); + m_searchInputEdit->setFocus(); + + m_layout->addStretch(); +} + +void SearchTitleBar::initWidgets() +{ + m_layout = new QVBoxLayout(this); + m_layout->setContentsMargins(0, 0, 0, 0); + m_layout->setSpacing(0); + this->setLayout(m_layout); + + m_toplayout = new QHBoxLayout; + m_toplayout->setContentsMargins(0, 0, 0, 0); + m_toplayout->setSpacing(0); + + m_layout->addLayout(m_toplayout); + m_layout->addStretch(); + + initLeftContent(); + initMiddleContent(); + initRightContent(); + initBottomContent(); +} + +void SearchTitleBar::paintEvent(QPaintEvent *event) +{ + QWidget::paintEvent(event); + + QPainter painter(this); + painter.setRenderHint(QPainter::Antialiasing); + +// QPainterPath outBorderPath; +// outBorderPath.addRoundedRect(this->rect(), m_borderRadius, m_borderRadius); +// QPen pen(m_borderColor, m_borderWidth); +// painter.setPen(pen); +// painter.drawPath(outBorderPath); + +// QRect borderRect; +// borderRect.setRect(this->rect().x() + m_borderWidth, this->rect().y() + m_borderWidth, this->rect().width() - m_borderWidth * 2, this->rect().height() - m_borderWidth * 2); +// QPainterPath inBorderPath; +// inBorderPath.addRoundedRect(borderRect, m_borderRadius, m_borderRadius); +// painter.setClipPath(inBorderPath); + + painter.fillRect(0, 0, width(), height(), m_bgBrush); +} diff -Nru indicator-china-weather-2.2.8/src/searchtitlebar.h indicator-china-weather-3.0.2~201904291430/src/searchtitlebar.h --- indicator-china-weather-2.2.8/src/searchtitlebar.h 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/searchtitlebar.h 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef SEARCHTITLEBAR_H +#define SEARCHTITLEBAR_H + +#include +#include +#include +#include +#include + +#include "data.h" + +class SearchInputEdit; +class LocationWorker; + +class SearchTitleBar : public QWidget +{ + Q_OBJECT +public: + explicit SearchTitleBar(QWidget *parent = 0); + ~SearchTitleBar(); + + void initLeftContent(); + void initMiddleContent(); + void initRightContent(); + void initBottomContent(); + void initWidgets(); + + void resetSearchInputEdit() const; + void setSearchResult(const QList data); + +public slots: + void onSearchTimerOut(); + +signals: + void requestCloseDialog(); + void requestShowNoResultLabel(); + void requestResetViewAndModel(); + void sendSearchResults(QList results); + +protected: + void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; + +private: + QVBoxLayout *m_layout = nullptr; + QHBoxLayout *m_toplayout = nullptr; + QHBoxLayout *m_lLayout = nullptr; + QHBoxLayout *m_mLayout = nullptr; + QHBoxLayout *m_rLayout = nullptr; + QHBoxLayout *m_bLayout = nullptr; + QPushButton *m_closeBtn = nullptr; + + QColor m_borderColor; + int m_borderRadius; + int m_borderWidth; + QBrush m_bgBrush; + + SearchInputEdit *m_searchInputEdit = nullptr; + QTimer *m_searchTimer = nullptr; + LocationWorker *m_locationWorker = nullptr; +}; + +#endif // SEARCHTITLEBAR_H diff -Nru indicator-china-weather-2.2.8/src/searchview.cpp indicator-china-weather-3.0.2~201904291430/src/searchview.cpp --- indicator-china-weather-2.2.8/src/searchview.cpp 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/searchview.cpp 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "searchview.h" + +#include + +SearchView::SearchView(QWidget *parent) + : QListView(parent) +{ + this->setMouseTracking(true); + this->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + + this->setStyleSheet("QListView{border:none;margin:0px;padding:0px;outline:none;background-color:rgba(255, 255, 255, 1);}QListView::item:selected:!active{background:#e9eef1;}QListView::item:selected:active{background:#3f96e4;}QListView::item:hover{background:#e9eef0;}");//QListView::item{height:36px;} QListView::item:selected{color:white;background-color:#e9eef0;} + this->verticalScrollBar()->setStyleSheet("QScrollBar:vertical{margin:0px 0px 0px 0px;background-color:rgb(255,255,255,100);border:0px;width:10px;}" \ + "QScrollBar::sub-line:vertical{subcontrol-origin:margin;border:1px solid red;height:13px;}" \ + "QScrollBar::up-arrow:vertical{subcontrol-origin:margin;background-color:blue;height:13px;}" \ + "QScrollBar::sub-page:vertical{background-color:#EEEDF0;}" \ + "QScrollBar::handle:vertical{background-color:#D1D0D2;width:10px;}" \ + "QScrollBar::handle:vertical:hover{background-color:#14ACF5;width:10px;}" \ + "QScrollBar::handle:vertical:pressed{background-color:#0B95D7;width:10px;}" \ + "QScrollBar::add-page:vertical{background-color:#EEEDF0;}" \ + "QScrollBar::down-arrow:vertical{background-color:yellow;}" \ + "QScrollBar::add-line:vertical{subcontrol-origin:margin;border:1px solid green;height:18px;}"); +} + +SearchView::~SearchView() +{ + +} diff -Nru indicator-china-weather-2.2.8/src/searchview.h indicator-china-weather-3.0.2~201904291430/src/searchview.h --- indicator-china-weather-2.2.8/src/searchview.h 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/searchview.h 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include + +class SearchView : public QListView +{ + Q_OBJECT +public: + explicit SearchView(QWidget *parent = 0); + ~SearchView(); +}; diff -Nru indicator-china-weather-2.2.8/src/separator.cpp indicator-china-weather-3.0.2~201904291430/src/separator.cpp --- indicator-china-weather-2.2.8/src/separator.cpp 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/separator.cpp 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "separator.h" + +VSeparator::VSeparator(QWidget *parent) : + QFrame(parent) +{ + this->setStyleSheet("QFrame{background-color: rgba(238, 238, 238, 1.0);}");//#eeeeee 0:完全透明 1:完全不透明 + this->setFixedWidth(1); + this->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding); +} + +HSeparator::HSeparator(QWidget *parent) : + QFrame(parent) +{ + this->setStyleSheet("QFrame{background-color: rgba(238, 238, 238, 0.5);margin-left:5px;margin-right:5px;}");//#eeeeee 0:完全透明 1:完全不透明 + this->setFixedHeight(1); + this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); +} diff -Nru indicator-china-weather-2.2.8/src/separator.h indicator-china-weather-3.0.2~201904291430/src/separator.h --- indicator-china-weather-2.2.8/src/separator.h 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/separator.h 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef SEPARATOR_H +#define SEPARATOR_H + +#include + +class VSeparator : public QFrame +{ + Q_OBJECT +public: + explicit VSeparator(QWidget *parent = 0); +}; + +class HSeparator : public QFrame +{ + Q_OBJECT +public: + explicit HSeparator(QWidget *parent = 0); +}; + +#endif // SEPARATOR_H diff -Nru indicator-china-weather-2.2.8/src/settingdialog.cpp indicator-china-weather-3.0.2~201904291430/src/settingdialog.cpp --- indicator-china-weather-2.2.8/src/settingdialog.cpp 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/settingdialog.cpp 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,612 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "settingdialog.h" +#include "settingtitlebar.h" +#include "citywidget.h" +#include "spinbox.h" +#include "searchtitlebar.h" +#include "searchmodel.h" +#include "searchview.h" +#include "searchdelegate.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "preferences.h" +#include "global.h" +using namespace Global; + +namespace { +const int BUTTON_WIDGET_HEIGHT = 30; +const int GROUP_BOX_MARGIN = 20; +const int ANIMATION_DELAY_TIME_INTERVAL = 300; +const int CONTENT_MARGIN = 0; + +void animationFromBottomToTop(QWidget *topWidget, QWidget *bottomWidget) +{ + bottomWidget->setVisible(true); + topWidget->setVisible(true); + + QRect topStartRect = QRect(0, 0, topWidget->width(), topWidget->height()); + QRect topEndRect = topStartRect; + topEndRect.moveTop(-topWidget->height()); + + QPropertyAnimation *topAnim = new QPropertyAnimation(topWidget, "geometry"); + topAnim->connect(topAnim, &QPropertyAnimation::finished, topAnim, &QPropertyAnimation::deleteLater); + topAnim->connect(topAnim, &QPropertyAnimation::finished, topWidget, &QWidget::hide); + topAnim->setDuration(ANIMATION_DELAY_TIME_INTERVAL); + topAnim->setEasingCurve(QEasingCurve::InOutCubic); + topAnim->setStartValue(topStartRect); + topAnim->setEndValue(topEndRect); + topAnim->start(); + + QRect bottomStartRect = QRect(0, topWidget->height(), bottomWidget->width(), bottomWidget->height()); + QRect bottomEndRect = bottomStartRect; + bottomEndRect.moveTo(0, 0); + + QPropertyAnimation *bottomAnim = new QPropertyAnimation(bottomWidget, "geometry"); + bottomAnim->connect(bottomAnim, &QPropertyAnimation::finished, bottomAnim, &QPropertyAnimation::deleteLater); + bottomAnim->setEasingCurve(QEasingCurve::InOutCubic); + bottomAnim->setDuration(ANIMATION_DELAY_TIME_INTERVAL); + bottomAnim->setStartValue(bottomStartRect); + bottomAnim->setEndValue(bottomEndRect); + bottomAnim->start(); + + QGraphicsOpacityEffect *bottomOpacity = new QGraphicsOpacityEffect(bottomWidget); + bottomWidget->setGraphicsEffect(bottomOpacity); + bottomOpacity->setOpacity(0); + + QPropertyAnimation *bottomOpacityAnim = new QPropertyAnimation(bottomOpacity, "opacity"); + bottomOpacityAnim->connect(bottomOpacityAnim, &QPropertyAnimation::finished, bottomOpacityAnim, &QPropertyAnimation::deleteLater); + bottomOpacityAnim->connect(bottomOpacityAnim, &QPropertyAnimation::finished, bottomWidget, [ = ] () { + bottomWidget->setGraphicsEffect(nullptr); + }); + bottomOpacityAnim->setEasingCurve(QEasingCurve::InCubic); + bottomOpacityAnim->setDuration(ANIMATION_DELAY_TIME_INTERVAL); + bottomOpacityAnim->setStartValue(0.0); + bottomOpacityAnim->setEndValue(1.0); + bottomOpacityAnim->start(); + + QGraphicsOpacityEffect *topOpacity = new QGraphicsOpacityEffect(topWidget); + topWidget->setGraphicsEffect(topOpacity); + topOpacity->setOpacity(1.0); + + QPropertyAnimation *topOpacityAnim = new QPropertyAnimation(topOpacity, "opacity"); + topOpacityAnim->connect(topOpacityAnim, &QPropertyAnimation::finished, topOpacityAnim, &QPropertyAnimation::deleteLater); + topOpacityAnim->connect(topOpacityAnim, &QPropertyAnimation::finished, topWidget, [ = ] () { + topWidget->setGraphicsEffect(nullptr); + }); + topOpacityAnim->setEasingCurve(QEasingCurve::InCubic); + topOpacityAnim->setDuration(ANIMATION_DELAY_TIME_INTERVAL); + topOpacityAnim->setStartValue(1.0); + topOpacityAnim->setEndValue(0.0); + topOpacityAnim->start(); +} + +void animationFromTopToBottom(QWidget *topWidget, QWidget *bottomWidget) +{ + bottomWidget->setVisible(true); + topWidget->setVisible(true); + + QRect topStartRect = QRect(0, 0, topWidget->width(), topWidget->height()); + QRect topEndRect = topStartRect; + topEndRect.moveTo(0, topWidget->height()); + + QPropertyAnimation *topAnim = new QPropertyAnimation(topWidget, "geometry"); + topAnim->connect(topAnim, &QPropertyAnimation::finished, topAnim, &QPropertyAnimation::deleteLater); + topAnim->connect(topAnim, &QPropertyAnimation::finished, topWidget, &QWidget::hide); + topAnim->setDuration(ANIMATION_DELAY_TIME_INTERVAL); + topAnim->setEasingCurve(QEasingCurve::InOutCubic); + topAnim->setStartValue(topStartRect); + topAnim->setEndValue(topEndRect); + topAnim->start(); + + QRect bottomStartRect = QRect(0, -topWidget->height(), bottomWidget->width(), bottomWidget->height()); + QRect bottomEndRect = bottomStartRect; + bottomEndRect.moveBottom(topWidget->height() - 1); + + QPropertyAnimation *bottomAnim = new QPropertyAnimation(bottomWidget, "geometry"); + bottomAnim->connect(bottomAnim, &QPropertyAnimation::finished, bottomAnim, &QPropertyAnimation::deleteLater); + bottomAnim->setEasingCurve(QEasingCurve::InOutCubic); + bottomAnim->setDuration(ANIMATION_DELAY_TIME_INTERVAL); + bottomAnim->setStartValue(bottomStartRect); + bottomAnim->setEndValue(bottomEndRect); + bottomAnim->start(); + + QGraphicsOpacityEffect *bottomOpacity = new QGraphicsOpacityEffect(bottomWidget); + bottomWidget->setGraphicsEffect(bottomOpacity); + bottomOpacity->setOpacity(0); + + QPropertyAnimation *bottomOpacityAnim = new QPropertyAnimation(bottomOpacity, "opacity"); + bottomOpacityAnim->connect(bottomOpacityAnim, &QPropertyAnimation::finished, bottomOpacityAnim, &QPropertyAnimation::deleteLater); + bottomOpacityAnim->connect(bottomOpacityAnim, &QPropertyAnimation::finished, bottomWidget, [ = ]() { + bottomWidget->setGraphicsEffect(nullptr); + }); + bottomOpacityAnim->setEasingCurve(QEasingCurve::InCubic); + bottomOpacityAnim->setDuration(ANIMATION_DELAY_TIME_INTERVAL); + bottomOpacityAnim->setStartValue(0.0); + bottomOpacityAnim->setEndValue(1.0); + bottomOpacityAnim->start(); + + QGraphicsOpacityEffect *topOpacity = new QGraphicsOpacityEffect(topWidget); + topWidget->setGraphicsEffect(topOpacity); + topOpacity->setOpacity(1.0); + + QPropertyAnimation *topOpacityAnim = new QPropertyAnimation(topOpacity, "opacity"); + topOpacityAnim->connect(topOpacityAnim, &QPropertyAnimation::finished, topOpacityAnim, &QPropertyAnimation::deleteLater); + topOpacityAnim->connect(topOpacityAnim, &QPropertyAnimation::finished, bottomWidget, [ = ] () { + topWidget->setGraphicsEffect(nullptr); + }); + topOpacityAnim->setEasingCurve(QEasingCurve::InCubic); + topOpacityAnim->setDuration(ANIMATION_DELAY_TIME_INTERVAL); + topOpacityAnim->setStartValue(1.0); + topOpacityAnim->setEndValue(0.0); + topOpacityAnim->start(); +} +} + +SettingDialog::SettingDialog(QWidget *parent): + QDialog(parent) +// , m_settingLayout(new QVBoxLayout(this)) +// , m_stackedWidget(new QStackedWidget) +// , m_okBtn(new QPushButton(this)) +{ + this->setWindowFlags(Qt::FramelessWindowHint); + this->setFixedSize(479, 421); + this->setFocusPolicy(Qt::ClickFocus); + this->setWindowTitle(tr("Kylin Weather - Setting")); + this->setWindowIcon(QIcon(":/res/indicator-china-weather.png")); + //Why????? setStyleSheet将导致添加城市后,列表没有自动拉伸,出现重叠,但是qDebug打印的高度确实增加了,但是使用paintEvent可以 + //this->setStyleSheet("QDialog{border:1px solid #000000;border-radius:2px;background:rgba(255, 255, 255, 0.7);}QDialog:hover{background: rgba(255, 255, 255, 1.0);}"); + + + initSettings(); + initSearch(); + + QStackedLayout *contentLayout = new QStackedLayout(this); + contentLayout->setContentsMargins(20, 20, 20, 20); + contentLayout->setMargin(0); + contentLayout->setSpacing(0); + contentLayout->addWidget(m_settingFrame); + contentLayout->addWidget(m_searchFrame); + m_settingFrame->setVisible(true); +} + +SettingDialog::~SettingDialog() +{ + if (m_settingFrame) { + delete m_settingFrame; + m_settingFrame = nullptr; + } + if (m_searchFrame) { + delete m_searchFrame; + m_searchFrame = nullptr; + } + + QLayoutItem *child; + while ((child = m_settingLayout->takeAt(0)) != 0) { + if (child->widget()) + child->widget()->deleteLater(); + delete child; + } + + delete m_searchTitleBar; + delete m_noResultLabel; + delete m_searchModel; + delete m_searchView; + delete m_searchDelegate; +} + +QRect SettingDialog::getParentGeometry() const +{ + if (this->parentWidget()) { + return this->parentWidget()->window()->geometry(); + } else { + QPoint pos = QCursor::pos(); + + for (QScreen *screen : qApp->screens()) { + if (screen->geometry().contains(pos)) { + return screen->geometry(); + } + } + } + + return qApp->primaryScreen()->geometry(); +} + +void SettingDialog::moveToCenter() +{ + QRect qr = geometry(); + qr.moveCenter(this->getParentGeometry().center()); + move(qr.topLeft()); + this->show(); +} + +void SettingDialog::initSettings() +{ + m_settingFrame = new QFrame; + m_settingFrame->setFixedSize(this->size()); + m_settingFrame->setContentsMargins(0, 0, 0, 0); + + m_settingLayout = new QVBoxLayout(m_settingFrame); + m_stackedWidget = new QStackedWidget; + m_settingLayout->setContentsMargins(1, 1, 1, 1); + m_settingLayout->setSpacing(0); + + + m_settingTitleBar = new SettingTitleBar(m_settingFrame); + m_settingTitleBar->setFixedHeight(100); + m_cityWidget = new CityWidget(m_settingFrame);//m_cityWidget = new QWidget; +// m_cityWidget->setContentsMargins(0, 0, 0, 0); + m_cityWidget->setFixedHeight(this->height() - m_settingTitleBar->height() - 2/* - BUTTON_WIDGET_HEIGHT*/); + m_cityWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + m_systemWidget = new QWidget(m_settingFrame); + m_systemWidget->setStyleSheet("QWidget{border-radius: 0px; background-color:#ffffff;}"); + m_systemWidget->setFixedHeight(this->height() - m_settingTitleBar->height() - 2/* - BUTTON_WIDGET_HEIGHT*/); + m_systemWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + connect(m_cityWidget, &CityWidget::responseCityError, m_settingTitleBar, &SettingTitleBar::showWarnInfo); + + /*m_okBtn->setFixedSize(90, 25); + m_okBtn->setFocusPolicy(Qt::NoFocus); + m_okBtn->setText(tr("Close"));*/ + + //------------------ + /*m_cityListWidget = new CityListWidget(m_cityWidget); + m_addCityBtn = new QPushButton(m_cityWidget); + m_addCityBtn->setFocusPolicy(Qt::NoFocus); + m_addCityBtn->setStyleSheet("QPushButton{font-size:12px;color:#808080;background:transparent;text-align:left;}");//margin-left:18px;border:1px solid rgba(0, 0, 0, 0.08); QPushButton:hover{background-color:#f5fbff;} + m_addCityBtn->setFixedWidth(this->width()); + m_addCityBtn->setText("Add"); + m_addCityBtn->setIconSize(QSize(24, 24)); + m_addCityBtn->setIcon(QIcon(":/res/add.png")); + + QVBoxLayout *m_cityLayout = new QVBoxLayout(m_cityWidget); + m_cityLayout->setContentsMargins(0, 0, 0, 0); + m_cityLayout->setSpacing(0); + m_cityLayout->addWidget(m_cityListWidget, 1, Qt::AlignTop); + m_cityLayout->addWidget(m_addCityBtn, 0, Qt::AlignBottom);*/ + + //------------------------- + m_variableGroup = new QGroupBox(m_systemWidget); + m_variableGroup->setStyleSheet("QGroupBox{border:1px solid #e0e0e0;border-radius:2px;margin-top:15px;font-size:14px;}QGroupBox:title{subcontrol-origin: margin;subcontrol-position: top left;padding: 6px 3px;color:#00609a;font-weight:bold;}"); + m_variableGroup->setTitle(tr("Variable configuration")); + m_variableGroup->setFixedWidth(this->width() - 2*GROUP_BOX_MARGIN); +// m_variableGroup->setContentsMargins(10, 10, 10, 10); + + QLabel *updateFreqLabel = new QLabel(m_systemWidget); + updateFreqLabel->setAlignment(Qt::AlignVCenter | Qt::AlignLeft); + updateFreqLabel->setStyleSheet("QLabel{color:#808080;font-size:14px;text-align:left;}"); + updateFreqLabel->setText(tr("Update frequency") + "(15-60)"); + m_spinBox = new SpinBox(m_systemWidget); + m_spinBox->setFixedWidth(80); + m_spinBox->setContextMenuPolicy(Qt::NoContextMenu); + m_spinBox->setRange(15, 60); + m_spinBox->setSpinValue(m_preferences->m_updateFrequency); + + QHBoxLayout *m_freqLayout = new QHBoxLayout; + m_freqLayout->setSpacing(5); + m_freqLayout->addWidget(updateFreqLabel); + m_freqLayout->addWidget(m_spinBox); + + QLabel *opacityLabel = new QLabel; + opacityLabel->setAlignment(Qt::AlignVCenter | Qt::AlignLeft); + opacityLabel->setStyleSheet("QLabel{color:#808080;font-size:14px;text-align:left;}"); + opacityLabel->setText(tr("Background transparency")); + m_opacitySlider = new QSlider(Qt::Horizontal, m_systemWidget); + m_opacitySlider->setStyleSheet("QSlider::groove:horizontal,QSlider::add-page:horizontal{height:3px;border-radius:3px;background:#7c8487;}QSlider::sub-page:horizontal{height:8px;border-radius:3px;background:#bdbdbd;}QSlider::handle:horizontal{width:12px;margin-top:-5px;margin-bottom:-4px;border-radius:6px;background:qradialgradient(spread:pad,cx:0.5,cy:0.5,radius:0.5,fx:0.5,fy:0.5,stop:0.6 #7c8487,stop:0.8 #7c8487);}QSlider::groove:vertical,QSlider::sub-page:vertical{width:8px;border-radius:3px;background:#808080;}QSlider::add-page:vertical{width:8px;border-radius:3px;background:#808080;}QSlider::handle:vertical{height:12px;margin-left:-5px;margin-right:-4px;border-radius:6px;background:qradialgradient(spread:pad,cx:0.5,cy:0.5,radius:0.5,fx:0.5,fy:0.5,stop:0.6 #7c8487,stop:0.8 #7c8487);}"); + m_opacitySlider->setFocusPolicy(Qt::NoFocus); + m_opacitySlider->setFocusProxy(this); + m_opacitySlider->setTracking(true); + m_opacitySlider->setFixedWidth(80); + m_opacitySlider->setRange(60, 100); + m_opacitySlider->setSingleStep(1); + m_opacitySlider->blockSignals(true); + m_opacitySlider->setValue(m_preferences->m_opacity);//static_cast(m_preferences->m_opacity * 100); + m_opacitySlider->blockSignals(false); + + QHBoxLayout *m_opacityLayout = new QHBoxLayout; + m_opacityLayout->setSpacing(5); + m_opacityLayout->addWidget(opacityLabel); + m_opacityLayout->addWidget(m_opacitySlider); + + QVBoxLayout *m_variableLayout = new QVBoxLayout; + m_variableLayout->setContentsMargins(GROUP_BOX_MARGIN, 10, GROUP_BOX_MARGIN, 10); + m_variableLayout->setSpacing(5); + m_variableLayout->addLayout(m_freqLayout); + m_variableLayout->addLayout(m_opacityLayout); + m_variableGroup->setLayout(m_variableLayout); +// QHBoxLayout *m_variableLayout = new QHBoxLayout; +// m_variableLayout->setContentsMargins(GROUP_BOX_MARGIN, 10, GROUP_BOX_MARGIN, 10); +// m_variableLayout->setSpacing(5); +// m_variableLayout->addWidget(updateFreqLabel); +// m_variableLayout->addWidget(m_spinBox); +// m_variableGroup->setLayout(m_variableLayout); + + m_fixedGroup = new QGroupBox(m_systemWidget); + m_fixedGroup->setStyleSheet("QGroupBox{border:1px solid #e0e0e0;border-radius:2px;margin-top:15px;font-size:14px;}QGroupBox:title{subcontrol-origin: margin;subcontrol-position: top left;padding: 6px 3px;color:#00609a;font-weight:bold;}"); + m_fixedGroup->setTitle(tr("Fixed configuration")); + m_fixedGroup->setFixedWidth(m_variableGroup->width()); + + QLabel *tempLabel = new QLabel; + tempLabel->setAlignment(Qt::AlignVCenter | Qt::AlignLeft); + tempLabel->setStyleSheet("QLabel{color:#808080;font-size:14px;text-align:left;}"); + tempLabel->setText(tr("Temperature standard") + ": " + "˚C"); + QLabel *serviceLabel = new QLabel; + serviceLabel->setAlignment(Qt::AlignVCenter | Qt::AlignLeft); + serviceLabel->setStyleSheet("QLabel{color:#808080;font-size:14px;text-align:left;}"); + serviceLabel->setText(tr("Source of weather: heweather")); + + QVBoxLayout *m_fixedLayout = new QVBoxLayout; + m_fixedLayout->setContentsMargins(GROUP_BOX_MARGIN, 10, GROUP_BOX_MARGIN, 10); + m_fixedLayout->setSpacing(10); + m_fixedLayout->addWidget(tempLabel); + m_fixedLayout->addWidget(serviceLabel); + m_fixedGroup->setLayout(m_fixedLayout); + + QVBoxLayout *m_systemLayout = new QVBoxLayout(m_systemWidget); + m_systemLayout->setContentsMargins(10, 10, 10, 10); + m_systemLayout->setSpacing(20); + m_systemLayout->addWidget(m_variableGroup, 0, Qt::AlignLeft | Qt::AlignTop); + m_systemLayout->addWidget(m_fixedGroup, 0, Qt::AlignLeft); + m_systemLayout->addStretch(); + + m_stackedWidget->addWidget(m_cityWidget); + m_stackedWidget->addWidget(m_systemWidget); + m_stackedWidget->setCurrentWidget(m_cityWidget); + + m_settingLayout->addWidget(m_settingTitleBar, 0, Qt::AlignTop); + m_settingLayout->addWidget(m_stackedWidget, 1, Qt::AlignVCenter); +// m_settingLayout->addWidget(m_okBtn, 0, Qt::AlignRight); + m_settingLayout->addStretch(); + + connect(m_settingTitleBar, &SettingTitleBar::requestCloseDialog, this, [=] { + this->accept(); + }); + connect(m_cityWidget, &CityWidget::requestAddCity, this, [=] { + this->setWindowTitle(tr("Kylin Weather - Search")); + animationFromBottomToTop(m_settingFrame, m_searchFrame); + }); + + connect(m_cityWidget, &CityWidget::requestRefreshCityMenu, this, &SettingDialog::requestRefreshCityMenu); + //connect(m_cityWidget, &CityWidget::requestSetDefaultCity, this, &SettingDialog::requestSetDefaultCity); + connect(m_cityWidget, &CityWidget::requestRefreshWeatherById, this, &SettingDialog::requestRefreshWeatherById); + /*connect(m_addCityBtn, &QPushButton::clicked, this, [=] { + SearchDialog dlg; + connect(&dlg, &SearchDialog::requestAddCityToMenu, this, [this] (const LocationData &data) { + qDebug() << "set city's id=" << data.id; + CitySettingData info; + info.active = false; + info.id = data.id; + info.name = data.city; + info.icon = ":/res/weather_icons/lightgrey/100.png"; + m_cityListWidget->loadItem(info); + emit this->requestAddCityToMenu(data); + }); + dlg.exec(); + });*/ + + /*connect(m_okBtn, &QPushButton::clicked, this, [=] { + this->accept(); + });*/ + connect(m_settingTitleBar, &SettingTitleBar::requestSwitchPage, this, [=] (bool b) { + if (b) { + m_stackedWidget->setCurrentWidget(m_cityWidget); +// m_cityListWidget->resetData(); + } + else { + m_stackedWidget->setCurrentWidget(m_systemWidget); + } + }); + + connect(m_spinBox, static_cast(&SpinBox::valueChanged), this, [=] (int value) { + //qDebug() << "SpinBox Value:" << value << ", Text:" << m_spinBox->text(); + m_preferences->m_updateFrequency = value; + }); + + connect(m_opacitySlider, &QSlider::valueChanged, [=] (int value) { + m_preferences->m_opacity = value; + emit requestChangeOpacity(value); + }); +} + +void SettingDialog::initSearch() +{ + m_searchFrame = new QFrame; + m_searchFrame->setStyleSheet("QFrame{background:rgba(255, 255, 255, 0.7);}"); + m_searchFrame->setFixedSize(this->size()); + m_searchFrame->setContentsMargins(0, 0, 0, 0); + + m_searchTitleBar = new SearchTitleBar(m_searchFrame); + m_searchTitleBar->setFixedHeight(150); + m_displayWidget = new QWidget(m_searchFrame); +// m_displayWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); +// m_displayWidget->setContentsMargins(0, m_searchTitleBar->height(), 0, 0); + + m_searchModel = new SearchModel; + m_searchView = new SearchView; + m_searchDelegate = new SearchDelegate; + m_searchView->setFixedWidth(m_searchFrame->width() - 2*CONTENT_MARGIN); + m_searchView->setItemDelegate(m_searchDelegate); + m_searchView->setModel(m_searchModel); + m_searchView->setVisible(false); + + m_noResultLabel = new QLabel(m_searchFrame); + m_noResultLabel->setStyleSheet("QLabel{border:none;background-color:transparent;color:#808080;font-size:12px;}"); + m_noResultLabel->setAlignment(Qt::AlignCenter); + m_noResultLabel->setText(tr("No Result")); + m_noResultLabel->setVisible(false); + QFont font = m_noResultLabel->font(); + const QFontMetrics fm(font); + m_noResultLabel->setFixedWidth(fm.width(m_noResultLabel->text())); + + QVBoxLayout *layout = new QVBoxLayout(m_searchFrame); + layout->setContentsMargins(1, 1, 1, 1); + layout->setSpacing(0); + layout->addWidget(m_searchTitleBar); + layout->addWidget(m_displayWidget); + + QHBoxLayout *contentLayout = new QHBoxLayout(m_displayWidget); + contentLayout->setContentsMargins(CONTENT_MARGIN, 0, CONTENT_MARGIN, 0); + contentLayout->setSpacing(0); + contentLayout->addWidget(m_searchView, 1, Qt::AlignHCenter); + contentLayout->addWidget(m_noResultLabel, 1, Qt::AlignCenter); + + connect(m_searchView, &SearchView::clicked, this, [this](const QModelIndex &index) { + QVariant data = index.data(Qt::UserRole);//SearchModel::data Qt::UserRole + QString selectCityId = data.value(); + for (const LocationData &line : m_searchModel->locationList()) {//it must exits. + if (line.id == selectCityId) { + //emit this->requestAddCityToMenu(line); + if (m_preferences->isCitiesCountOverMax()) { + m_settingTitleBar->showWarnInfo(tr("Only 10 cities can be added at most!"));//最多只能添加10个城市 + break; + } + if (m_preferences->isCityIdExist(line.id)) { + m_settingTitleBar->showWarnInfo(tr("The city already exists!"));//该城市已存在 + break; + } + + CitySettingData info; + info.active = false; + info.id = line.id; + info.name = line.city; + info.icon = ":/res/weather_icons/darkgrey/100.png"; + m_cityWidget->addCityItem(info); + + City city; + city.id = line.id; + city.name = line.city; + + m_preferences->addCityInfoToPref(city); + + emit this->requestRefreshCityMenu(info.active); + + this->setWindowTitle(tr("Kylin Weather - Setting")); + animationFromTopToBottom(m_searchFrame, m_settingFrame); + break; + } + } + }); + + connect(m_searchTitleBar, &SearchTitleBar::requestCloseDialog, this, [=] { + this->setWindowTitle(tr("Kylin Weather - Setting")); + animationFromTopToBottom(m_searchFrame, m_settingFrame); + }); + + connect(m_searchTitleBar, &SearchTitleBar::requestShowNoResultLabel, this, [=] { + m_noResultLabel->setVisible(true); + }); + connect(m_searchTitleBar, &SearchTitleBar::requestResetViewAndModel, this, [=] { + m_searchView->setVisible(false); + m_noResultLabel->setVisible(false); + m_searchModel->setLocationData(QList()); + }); + + connect(m_searchTitleBar, &SearchTitleBar::sendSearchResults, this, [=] (QList results) { + m_searchModel->setLocationData(results); + m_searchView->setVisible(true); + m_noResultLabel->setVisible(false); + }); +} + +void SettingDialog::mousePressEvent(QMouseEvent *event) +{ + if (event->button() == Qt::LeftButton) { + m_mousePressed = true; + m_dragPosition = event->globalPos() - this->frameGeometry().topLeft(); + event->accept(); + } +} + +void SettingDialog::mouseReleaseEvent(QMouseEvent *) +{ + m_mousePressed = false; +} + +void SettingDialog::mouseMoveEvent(QMouseEvent *event) +{ + if(m_mousePressed) { + QPoint move_pos = event->globalPos(); + move(move_pos - m_dragPosition); + event->accept(); + } +} + +void SettingDialog::setData() +{ + +} + +void SettingDialog::refreshCityList(const QString &id) +{ + if (m_cityWidget) { + m_cityWidget->refreshCityList(id); + } +} + +void SettingDialog::accept() +{ + hide(); + setResult(QDialog::Accepted); + emit applied(); +} + +void SettingDialog::reject() +{ + hide(); + setResult(QDialog::Rejected); + setResult(QDialog::Accepted); +} + +void SettingDialog::paintEvent(QPaintEvent *event) +{ + QWidget::paintEvent(event); + + QPainter painter(this); + painter.setRenderHint(QPainter::Antialiasing); + + QRect borderRect; + borderRect.setRect(this->rect().x(), this->rect().y(), this->rect().width(), this->rect().height()); + QPainterPath inBorderPath; + inBorderPath.addRoundedRect(borderRect, 2, 2); + painter.setClipPath(inBorderPath); + + painter.fillRect(0, 0, width(), height(), QBrush(QColor("#000000"))); +} diff -Nru indicator-china-weather-2.2.8/src/settingdialog.h indicator-china-weather-3.0.2~201904291430/src/settingdialog.h --- indicator-china-weather-2.2.8/src/settingdialog.h 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/settingdialog.h 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef SETTINGDIALOG_H +#define SETTINGDIALOG_H + +#include +#include +#include + +#include "data.h" + +class QVBoxLayout; +class QStackedWidget; +class SettingTitleBar; +class CityWidget; +class SpinBox; +class QSlider; +class QGroupBox; +class SearchTitleBar; +class SearchView; +class SearchDelegate; +class SearchModel; + +class SettingDialog : public QDialog +{ + Q_OBJECT + +public: + explicit SettingDialog(QWidget *parent = 0); + ~SettingDialog(); + + void setData(); + void refreshCityList(const QString &id); + void initSettings(); + void initSearch(); + QRect getParentGeometry() const; + void moveToCenter(); + +public slots: + virtual void accept(); + virtual void reject(); + +signals: + void applied(); + void requestRefreshCityMenu(bool removedDefault); + void requestRefreshWeatherById(const QString &id); + //void requestSetDefaultCity(); + void requestChangeOpacity(int opacity); + void requestAddCityToMenu(const LocationData &data); + +protected: + void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + void paintEvent(QPaintEvent *event); + +private: + QPoint m_dragPosition; + bool m_mousePressed; + + QVBoxLayout *m_settingLayout = nullptr; + + QFrame *m_settingFrame = nullptr; + SettingTitleBar *m_settingTitleBar = nullptr; + QStackedWidget *m_stackedWidget = nullptr; + CityWidget *m_cityWidget = nullptr; + /*QWidget *m_cityWidget = nullptr; + CityListWidget *m_cityListWidget = nullptr; + QPushButton *m_addCityBtn = nullptr;*/ + QWidget *m_systemWidget = nullptr; + QGroupBox *m_variableGroup = nullptr; + QGroupBox *m_fixedGroup = nullptr; + SpinBox *m_spinBox = nullptr; + QSlider *m_opacitySlider = nullptr; + + QFrame *m_searchFrame = nullptr; + SearchTitleBar *m_searchTitleBar = nullptr; + QWidget *m_displayWidget = nullptr; + QLabel *m_noResultLabel = nullptr; + SearchModel *m_searchModel = nullptr; + SearchView *m_searchView = nullptr; + SearchDelegate *m_searchDelegate = nullptr; + +// QPushButton *m_okBtn = nullptr; +}; + +#endif // SETTINGDIALOG_H diff -Nru indicator-china-weather-2.2.8/src/settingtitlebar.cpp indicator-china-weather-3.0.2~201904291430/src/settingtitlebar.cpp --- indicator-china-weather-2.2.8/src/settingtitlebar.cpp 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/settingtitlebar.cpp 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,188 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "settingtitlebar.h" +#include "activebutton.h" + +#include +#include +#include +#include + +SettingTitleBar::SettingTitleBar(QWidget *parent) : QWidget(parent) + , m_borderColor(QColor(255, 255, 255, 153)) + , m_borderRadius(1) + , m_borderWidth(1) + , m_bgBrush(QBrush(QColor("#1374e8"))) + , m_timer(new QTimer(this)) +{ +// this->setFixedHeight(100); + this->initWidgets(); + + m_timer->setSingleShot(true); + m_timer->setInterval(1000*5); + connect(m_timer, &QTimer::timeout, this, [=] { + m_timer->stop(); + m_tipLabel->setVisible(false); + }, Qt::QueuedConnection); +} + +SettingTitleBar::~SettingTitleBar() +{ + QLayoutItem *child; + while ((child = m_layout->takeAt(0)) != 0) { + if (child->widget()) + child->widget()->deleteLater(); + delete child; + } +} + +void SettingTitleBar::initLeftContent() +{ + QWidget *w = new QWidget; + m_lLayout = new QHBoxLayout(w); + m_lLayout->setContentsMargins(0, 0, 0, 0); + m_lLayout->setSpacing(0); + m_toplayout->addWidget(w, 1, Qt::AlignLeft); +} + +void SettingTitleBar::initMiddleContent() +{ + QWidget *w = new QWidget; + w->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); + m_mLayout = new QHBoxLayout(w); + m_mLayout->setContentsMargins(0, 0, 0, 0); + m_mLayout->setSpacing(5); + m_toplayout->addWidget(w); + + QLabel *m_iconLabel = new QLabel; + m_iconLabel->setContentsMargins(0, 0, 0, 0); + QPixmap iconPixmap = QPixmap(":/res/indicator-china-weather_min.png"); + m_iconLabel->setPixmap(iconPixmap); + m_iconLabel->setFixedSize(iconPixmap.size()); + + QLabel *m_titleLabel = new QLabel; + m_titleLabel->setStyleSheet("QLabel{font-size:12px;color: rgb(255,255,255);background-color:transparent;}"); + m_titleLabel->setText(tr("Kylin Weather - Setting")); + + m_mLayout->addWidget(m_iconLabel); + m_mLayout->addWidget(m_titleLabel); +} + +void SettingTitleBar::initRightContent() +{ + QWidget *w = new QWidget; + m_rLayout = new QHBoxLayout(w); + m_rLayout->setContentsMargins(0, 0, 5, 0); + m_rLayout->setSpacing(0); + m_toplayout->addWidget(w, 1, Qt::AlignRight); + + m_closeBtn = new QPushButton(this); + m_closeBtn->setFocusPolicy(Qt::NoFocus); + m_closeBtn->setFixedSize(32,32); + m_closeBtn->setStyleSheet("QPushButton{background-image:url(':/res/close_normal_btn.png');border:0px;}QPushButton:hover{background:url(':/res/close_hover_btn.png');}QPushButton:pressed{background:url(':/res/close_pressed_btn.png');}"); + + m_rLayout->addWidget(m_closeBtn); + + connect(m_closeBtn, &QPushButton::clicked, this, &SettingTitleBar::requestCloseDialog); +} + +void SettingTitleBar::initBottomContent() +{ + QWidget *w = new QWidget; + m_bLayout = new QHBoxLayout(w); + m_bLayout->setContentsMargins(10, 0, 20, 0); + m_bLayout->setSpacing(10); + m_layout->addWidget(w); + + ActiveButton *locationBtn = new ActiveButton(tr("Location Setting")); + locationBtn->setActive(true); + ActiveButton *systemBtn = new ActiveButton(tr("System Setting")); + + m_tipLabel = new QLabel(this); + m_tipLabel->setFixedHeight(28); + m_tipLabel->setAlignment(Qt::AlignRight | Qt::AlignVCenter); + m_tipLabel->setStyleSheet("QLabel{border:none;background-color:transparent;color:#fff222;font-size:12px;}"); + m_tipLabel->setVisible(false); + + m_bLayout->addWidget(locationBtn); + m_bLayout->addWidget(systemBtn); + m_bLayout->addStretch(); + m_bLayout->addWidget(m_tipLabel); + + connect(locationBtn, &ActiveButton::btnClicked, this, [=] { + locationBtn->setActive(true); + systemBtn->setActive(false); + emit this->requestSwitchPage(true); + }); + connect(systemBtn, &ActiveButton::btnClicked, this, [=] { + systemBtn->setActive(true); + locationBtn->setActive(false); + emit this->requestSwitchPage(false); + }); +} + +void SettingTitleBar::initWidgets() +{ + m_layout = new QVBoxLayout(this); + m_layout->setContentsMargins(0, 0, 0, 0); + m_layout->setSpacing(0); + this->setLayout(m_layout); + + m_toplayout = new QHBoxLayout; + m_toplayout->setContentsMargins(0, 0, 0, 0); + m_toplayout->setSpacing(0); + + m_layout->addLayout(m_toplayout); + + initLeftContent(); + initMiddleContent(); + initRightContent(); + initBottomContent(); +} + + +void SettingTitleBar::showWarnInfo(const QString &info) +{ + m_tipLabel->setText(info); + m_tipLabel->setVisible(true); + m_timer->start(); +} + +void SettingTitleBar::paintEvent(QPaintEvent *event) +{ + QWidget::paintEvent(event); + + QPainter painter(this); + painter.setRenderHint(QPainter::Antialiasing); + +// QPainterPath outBorderPath; +// outBorderPath.addRoundedRect(this->rect(), m_borderRadius, m_borderRadius); +// QPen pen(m_borderColor, m_borderWidth); +// painter.setPen(pen); +// painter.drawPath(outBorderPath); + +// QRect borderRect; +// borderRect.setRect(this->rect().x() + m_borderWidth, this->rect().y() + m_borderWidth, this->rect().width() - m_borderWidth * 2, this->rect().height() - m_borderWidth * 2); +// QPainterPath inBorderPath; +// inBorderPath.addRoundedRect(borderRect, m_borderRadius, m_borderRadius); +// painter.setClipPath(inBorderPath); + + painter.fillRect(0, 0, width(), height(), m_bgBrush); +} diff -Nru indicator-china-weather-2.2.8/src/settingtitlebar.h indicator-china-weather-3.0.2~201904291430/src/settingtitlebar.h --- indicator-china-weather-2.2.8/src/settingtitlebar.h 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/settingtitlebar.h 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef SETTINGTITLEBAR_H +#define SETTINGTITLEBAR_H + +#include +#include +#include +#include + +class SettingTitleBar : public QWidget +{ + Q_OBJECT +public: + explicit SettingTitleBar(QWidget *parent = 0); + ~SettingTitleBar(); + + void initLeftContent(); + void initMiddleContent(); + void initRightContent(); + void initBottomContent(); + void initWidgets(); + +public slots: + void showWarnInfo(const QString &info); + +signals: + void requestCloseDialog(); + void requestSwitchPage(bool is_isFirs); + +protected: + void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; + +private: + QVBoxLayout *m_layout = nullptr; + QHBoxLayout *m_toplayout = nullptr; + QHBoxLayout *m_lLayout = nullptr; + QHBoxLayout *m_mLayout = nullptr; + QHBoxLayout *m_rLayout = nullptr; + QHBoxLayout *m_bLayout = nullptr; + QPushButton *m_closeBtn = nullptr; + QLabel *m_tipLabel = nullptr; + QTimer *m_timer = nullptr; + QColor m_borderColor; + int m_borderRadius; + int m_borderWidth; + QBrush m_bgBrush; +}; + +#endif // SETTINGTITLEBAR_H diff -Nru indicator-china-weather-2.2.8/src/spinbox.cpp indicator-china-weather-3.0.2~201904291430/src/spinbox.cpp --- indicator-china-weather-2.2.8/src/spinbox.cpp 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/spinbox.cpp 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,92 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include +#include +#include +#include + +#include "spinbox.h" + +SpinBox::SpinBox(QWidget *parent) : + QSpinBox(parent) + , m_value(1) + , m_frame(new QFrame(this)) +{ + QSpinBox::lineEdit()->setVisible(false);//hide QSpinBox's lineEdit, replace it with m_valueLabel + this->setStyleSheet("QSpinBox{min-height:21px;color:#808080;font-size:14px;border:1px solid #7c8487;border-radius:0;padding-left:28px;padding-right:28px;background-color:transparent;}QSpinBox::up-button{border:none;background:transparent;}QSpinBox::up-arrow {border:none;background:transparent;}QSpinBox::down-button{border:none;background: transparent;}QSpinBox::down-arrow {border:none;background:transparent;}");//放置左右按钮的偏移设置: padding-left:28px;padding-right:28px; + this->setSingleStep(1); + //this->setRange(1, 60); + + m_frame->setStyleSheet("QFrame{background-color:transparent;border:none;}");//border:1px solid #7c8487;border-radius:0; + + QHBoxLayout *m_layout = new QHBoxLayout(m_frame); + m_layout->setContentsMargins(1, 0, 1, 0); + m_layout->setSpacing(0); + + QPushButton *m_addBtn = new QPushButton; + QPushButton *m_subtractBtn = new QPushButton; + m_addBtn->setFocusPolicy(Qt::NoFocus); + m_subtractBtn->setFocusPolicy(Qt::NoFocus); + m_addBtn->setFixedSize(19,21); + m_subtractBtn->setFixedSize(19,21); + m_addBtn->setStyleSheet("QPushButton{background-image:url(':/res/add_normal_btn.png');border:0px;}QPushButton:hover{background:url(':/res/add_hover_btn.png');}QPushButton:pressed{background:url(':/res/add_pressed_btn.png');}"); + m_subtractBtn->setStyleSheet("QPushButton{background-image:url(':/res/subtract_normal_btn.png');border:0px;}QPushButton:hover{background:url(':/res/subtract_hover_btn.png');}QPushButton:pressed{background:url(':/res/subtract_pressed_btn.png');}"); + + m_valueLabel = new QLabel; + m_valueLabel->setStyleSheet("QLabel{font-size:14px;color:#808080;background-color:transparent;border:none}"); + //m_valueLabel->setText(this->text()); + + m_layout->addWidget(m_subtractBtn, 0, Qt::AlignVCenter | Qt::AlignLeft); + m_layout->addStretch(); + m_layout->addWidget(m_valueLabel, 1, Qt::AlignCenter); + m_layout->addStretch(); + m_layout->addWidget(m_addBtn, 0, Qt::AlignVCenter | Qt::AlignRight); + + connect(this, static_cast(&QSpinBox::valueChanged), [=] (int value) { + m_valueLabel->setText(this->text()); + this->m_value = value; + }); + connect(m_addBtn, &QPushButton::clicked, this, &SpinBox::stepUp); + connect(m_subtractBtn, &QPushButton::clicked, this, &SpinBox::stepDown); +} + +SpinBox::~SpinBox() +{ + +} + +void SpinBox::setSpinValue(int value) +{ + if (this->m_value == value) + return; + + this->m_value = value; + this->setValue(this->m_value); + m_valueLabel->setText(QString::number(this->m_value)); +} + +void SpinBox::resizeEvent(QResizeEvent *event) +{ + QSpinBox::resizeEvent(event); + + m_frame->setFixedWidth(event->size().width()); + m_frame->setFixedHeight(event->size().height()); +} diff -Nru indicator-china-weather-2.2.8/src/spinbox.h indicator-china-weather-3.0.2~201904291430/src/spinbox.h --- indicator-china-weather-2.2.8/src/spinbox.h 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/spinbox.h 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef SPINBOX_H +#define SPINBOX_H + +#include +#include +#include + +class SpinBox : public QSpinBox +{ + Q_OBJECT + +public: + explicit SpinBox(QWidget *parent = 0); + ~SpinBox(); + + int getSpinValue() const { return this->m_value; } + void setSpinValue(int value); + +protected: + void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE; + +private: + QFrame *m_frame = nullptr; + QLabel *m_valueLabel = nullptr; + int m_value; +}; + +#endif // SPINBOX_H diff -Nru indicator-china-weather-2.2.8/src/texttip.cpp indicator-china-weather-3.0.2~201904291430/src/texttip.cpp --- indicator-china-weather-2.2.8/src/texttip.cpp 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/texttip.cpp 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,97 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "texttip.h" + +#include +#include +#include +#include + +TextTip::TextTip(const QString &txt, QWidget *parent) : QFrame(parent) + , m_radius(1) + , m_background(QBrush(QColor(255,255,255,255))) + , m_borderColor(QColor(224,224,224,130)) +{ + this->setWindowFlags(Qt::ToolTip | Qt::FramelessWindowHint); + this->setAttribute(Qt::WA_TranslucentBackground); + this->setContentsMargins(0, 0, 0, 0); + this->setMinimumSize(260, 56); + + QHBoxLayout *main_layout = new QHBoxLayout(this); + main_layout->setContentsMargins(0, 0, 0, 0); + main_layout->setSpacing(0); + + m_frame = new QFrame(); + m_frame->setContentsMargins(0, 0, 0, 0); + + m_textLabel = new QLabel; + m_textLabel->setWordWrap(true);//QLabel自动换行 + m_textLabel->setStyleSheet("QLabel{border:none;background-color:transparent;color:#808080; font-size:12px;}"); + m_textLabel->setAlignment(Qt::AlignCenter); + m_textLabel->setText(txt); + + QHBoxLayout *h_layout = new QHBoxLayout(this->m_frame); + h_layout->setContentsMargins(10, 5, 10, 5); + h_layout->setSpacing(0); + h_layout->addWidget(m_textLabel, 0, Qt::AlignVCenter); + + main_layout->addWidget(m_frame, 0, Qt::AlignVCenter); + + this->adjustSize(); + + hide(); +} + +TextTip::~TextTip() +{ + +} + +void TextTip::resetTipText(const QString &txt) +{ + m_textLabel->setText(txt); +} + +void TextTip::paintEvent(QPaintEvent *event) +{ + QPainter painter(this); + painter.setRenderHints(QPainter::Antialiasing | QPainter::HighQualityAntialiasing); + + QBrush background = this->m_background; + QColor borderColor = this->m_borderColor; + + QMarginsF shadowMargins = QMarginsF(2.0, 2.0, 2.0, 2.0); + QRectF bgRect = QRectF(rect()).marginsRemoved(shadowMargins); + QPainterPath bgPath; + bgPath.addRoundedRect(bgRect, this->m_radius, this->m_radius); + painter.fillPath(bgPath, background); + + QPainterPath borderPath; + QRectF borderRect = QRectF(rect()); + int borderRadius = this->m_radius; + QMarginsF borderMargins(0.5, 0.5, 0.5, 0.5); + borderRadius += 0.5; + borderRect = borderRect.marginsAdded(borderMargins).marginsRemoved(shadowMargins); + borderPath.addRoundedRect(borderRect, borderRadius, borderRadius); + + QPen borderPen(borderColor); + borderPen.setWidthF(1.0); + painter.strokePath(borderPath, borderPen); +} diff -Nru indicator-china-weather-2.2.8/src/texttip.h indicator-china-weather-3.0.2~201904291430/src/texttip.h --- indicator-china-weather-2.2.8/src/texttip.h 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/texttip.h 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef TEXTTIP_H +#define TEXTTIP_H + +#include + +class QLabel; + +class TextTip : public QFrame +{ + Q_OBJECT +public: + explicit TextTip(const QString &txt, QWidget *parent = 0); + ~TextTip(); + + void resetTipText(const QString &txt); + +protected: + virtual void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; + +private: + int m_radius; + QBrush m_background; + QColor m_borderColor; + QLabel *m_textLabel = nullptr; + QFrame *m_frame = nullptr; +}; + +#endif // TEXTTIP_H diff -Nru indicator-china-weather-2.2.8/src/tipmodule.cpp indicator-china-weather-3.0.2~201904291430/src/tipmodule.cpp --- indicator-china-weather-2.2.8/src/tipmodule.cpp 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/tipmodule.cpp 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,127 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "tipmodule.h" + +#include +#include +#include +#include + +TipModule::TipModule(QObject *parent) : QObject(parent) + , m_displayTimer(new QTimer) +{ + m_displayTimer->setInterval(300); + connect(m_displayTimer, SIGNAL(timeout()), this, SLOT(onDisplayTimeOut())); +} + +TipModule::~TipModule() +{ + if (m_displayTimer) { + disconnect(m_displayTimer,SIGNAL(timeout()), this, SLOT(onDisplayTimeOut())); + if(m_displayTimer->isActive()) { + m_displayTimer->stop(); + } + delete m_displayTimer; + m_displayTimer = nullptr; + } +} + +void TipModule::onDisplayTimeOut() +{ + if (m_parentWidget) { + QWidget *tip = m_parentWidget->property("TextTipWidget").value(); + if (!tip) { + this->m_displayTimer->stop(); + return; + } + + if (m_tipWidget && m_tipWidget != tip) { + m_tipWidget->setVisible(false); + } + m_tipWidget = tip; + m_tipWidget->adjustSize(); + m_tipWidget->setVisible(true); + m_tipWidget->raise(); + + QTimer::singleShot(5, this, [this] { + if (!m_parentWidget) { + return; + } + + QPoint point = m_parentWidget->mapToGlobal(m_parentWidget->rect().center()); +// point.setX(point.x()/* - m_tipWidget->size().width() / 2*/); +// point.setY(point.y()/* - m_tipWidget->size().height()*/); +// point = m_tipWidget->mapFromGlobal(point); +// point = m_tipWidget->mapToParent(point); +// m_tipWidget->move(point); + + int point_X; + int point_Y; + if (point.rx() < m_tipWidget->width()) { + point_X = point.rx() + 10; + } + else { + point_X = point.rx() - m_tipWidget->width(); + } + point_Y = point.ry(); + m_tipWidget->move(QPoint(point_X, point_Y)); + }); + } + this->m_displayTimer->stop(); +} + +bool TipModule::eventFilter(QObject *obj, QEvent *event) +{ + switch (event->type()) { + case QEvent::Enter: + { + if (this->m_tipWidget && this->m_tipWidget->isVisible()) { + this->m_tipWidget->setVisible(false); + } + QWidget *widget = qobject_cast(obj); + this->m_parentWidget = widget; + if (!widget) { + break; + } + this->m_tipWidget = widget->property("TextTipWidget").value(); + if (!this->m_tipWidget) { + break; + } + this->m_displayTimer->start(); + break; + } + case QEvent::Leave: + if (this->m_tipWidget) { + this->m_tipWidget->setVisible(false); + this->m_displayTimer->stop(); + } + break; + case QEvent::MouseButtonPress: + if (this->m_tipWidget) { + this->m_tipWidget->setVisible(false); + this->m_displayTimer->stop(); + } + break; + default: + break; + } + + return QObject::eventFilter(obj, event); +} diff -Nru indicator-china-weather-2.2.8/src/tipmodule.h indicator-china-weather-3.0.2~201904291430/src/tipmodule.h --- indicator-china-weather-2.2.8/src/tipmodule.h 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/tipmodule.h 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef TIPMODULE_H +#define TIPMODULE_H + +#include + +class QTimer; + +class TipModule: public QObject +{ + Q_OBJECT +public: + TipModule(QObject *parent = 0); + ~TipModule(); + +public slots: + void onDisplayTimeOut(); + +private: + bool eventFilter(QObject *obj, QEvent *event) Q_DECL_OVERRIDE; + +private: + QWidget *m_parentWidget = nullptr; + QWidget *m_tipWidget = nullptr; + QTimer *m_displayTimer = nullptr; +}; + +#endif // TIPMODULE_H diff -Nru indicator-china-weather-2.2.8/src/tipwidget.cpp indicator-china-weather-3.0.2~201904291430/src/tipwidget.cpp --- indicator-china-weather-2.2.8/src/tipwidget.cpp 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/tipwidget.cpp 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,95 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "tipwidget.h" + +#include +#include + +#include "preferences.h" +#include "global.h" +using namespace Global; + +TipWidget::TipWidget(QWidget *parent) + : QFrame(parent) { + this->setStyleSheet("QFrame{border:none;background-color:transparent;color:#fff222;font-size:12px;}"); + this->setFixedHeight(22); + this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + + m_icon = new QLabel(this); + m_icon->setFixedSize(12, 12); + m_icon->setScaledContents(true);//自动缩放,显示图像大小自动调整为Qlabel大小 + m_text = new QLabel(this); + m_text->adjustSize();//QLabel自适应文字的大小 + m_text->setAlignment(Qt::AlignLeft); + m_icon->setStyleSheet("QLabel{border:none;background-color:transparent;}"); + m_text->setStyleSheet("QLabel{border:none;background-color:transparent;color:#fff222;font-size:12px;}"); + + m_closeBtn = new QPushButton(this); + m_closeBtn->setFixedSize(12, 12); + m_closeBtn->setFocusPolicy(Qt::NoFocus); + m_closeBtn->setStyleSheet("QPushButton{background-image:url(':/res/delete_normal.png');border:0px;}QPushButton:hover{background:url(':/res/delete_hover_press.png');}QPushButton:pressed{background:url(':/res/delete_hover_press.png');}"); + m_closeBtn->setVisible(false); + connect(m_closeBtn, &QPushButton::clicked, this, [=] { + m_preferences->m_serverNotify = false; + this->setVisible(false); + }); + + QHBoxLayout *m_layout = new QHBoxLayout(this); + m_layout->setContentsMargins(15, 0, 5, 0); + m_layout->setSpacing(5); + + m_layout->addWidget(m_icon, 0, Qt::AlignLeft | Qt::AlignVCenter); + m_layout->addWidget(m_text, 1, Qt::AlignLeft | Qt::AlignVCenter); + + this->setLayout(m_layout); +} + +TipWidget::~TipWidget() +{ + +} + +void TipWidget::setLabelIcon(const QString &iconPath) +{ + m_icon->setPixmap(QPixmap(iconPath)); +} + +void TipWidget::setLabelText(const QString &text) +{ + QFont font = m_text->font(); + const QFontMetrics fm(font); + QString elided_text = fm.elidedText(text, Qt::ElideRight, this->width() - 40); + m_text->setText(elided_text); +} + +void TipWidget::enterEvent(QEvent *event) +{ + QFrame::enterEvent(event); + + m_closeBtn->move(1, 5); + m_closeBtn->setVisible(true); +} + +void TipWidget::leaveEvent(QEvent *event) +{ + QFrame::enterEvent(event); + + m_closeBtn->setVisible(false); +} diff -Nru indicator-china-weather-2.2.8/src/tipwidget.h indicator-china-weather-3.0.2~201904291430/src/tipwidget.h --- indicator-china-weather-2.2.8/src/tipwidget.h 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/tipwidget.h 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef TIPWIDGET_H +#define TIPWIDGET_H + +#include +#include + +class TipWidget : public QFrame { + Q_OBJECT +public: + explicit TipWidget(QWidget *parent = 0); + ~TipWidget(); + + void setLabelIcon(const QString &iconPath); + void setLabelText(const QString &text); + +protected: + void enterEvent(QEvent *event) Q_DECL_OVERRIDE; + void leaveEvent(QEvent *event) Q_DECL_OVERRIDE; + +private: + QLabel *m_icon = nullptr; + QLabel *m_text = nullptr; + QPushButton *m_closeBtn = nullptr; +}; +#endif // TIPWIDGET_H diff -Nru indicator-china-weather-2.2.8/src/titlebar.cpp indicator-china-weather-3.0.2~201904291430/src/titlebar.cpp --- indicator-china-weather-2.2.8/src/titlebar.cpp 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/titlebar.cpp 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,181 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "titlebar.h" + +#include +#include +#include + +TitleBar::TitleBar(QWidget *parent) : QWidget(parent) +{ + this->setFixedHeight(32); + + this->initWidgets(); +} + +TitleBar::~TitleBar() +{ + QLayoutItem *child; + while ((child = m_layout->takeAt(0)) != 0) { + if (child->widget()) + child->widget()->deleteLater(); + delete child; + } +} + +void TitleBar::initLeftContent() +{ + m_leftWidget = new QWidget; + m_leftWidget->setStyleSheet("QWidget{background-image:none;}QWidget::hover{background-image:url(':/res/location_bg_hover.png');}"); + m_leftWidget->installEventFilter(this); + m_leftWidget->setFixedSize(69, 22); + m_lLayout = new QHBoxLayout(m_leftWidget); + m_lLayout->setContentsMargins(5, 0, 0, 0); + m_lLayout->setSpacing(5); + m_layout->addWidget(m_leftWidget, 1, Qt::AlignLeft | Qt::AlignTop); + + QPushButton *city_button = new QPushButton; + city_button->setFocusPolicy(Qt::NoFocus); + city_button->setStyleSheet("QPushButton{background:transparent;border:none;}"); + city_button->setFixedSize(11, 11); + city_button->setIconSize(QSize(11, 11)); + city_button->setIcon(QIcon(":/res/set_city.png")); + + m_cityLabel = new QLabel; + m_cityLabel->setText("--");//for test + m_cityLabel->setStyleSheet("QLabel{font-size:12px;color:#ffffff;background:transparent;background-color:transparent;}"); + + QLabel *locationLabel = new QLabel; + locationLabel->setStyleSheet("QLabel{background:transparent;}"); + locationLabel->setFixedSize(8, 11); + locationLabel->setPixmap(QPixmap(":/res/location.png")); + + m_lLayout->addStretch(); + m_lLayout->addWidget(city_button); + m_lLayout->addWidget(m_cityLabel); + m_lLayout->addWidget(locationLabel); + m_lLayout->addStretch(); + + connect(city_button, &QPushButton::clicked, this, &TitleBar::requestShowSettingDialog); +} + +void TitleBar::initRightContent() +{ + /*QWidget *w = new QWidget; + m_rLayout = new QHBoxLayout(w); + m_rLayout->setContentsMargins(0, 0, 5, 0); + m_rLayout->setSpacing(0); + m_layout->addWidget(w, 1, Qt::AlignRight); + m_minBtn = new QPushButton(this); + m_closeBtn = new QPushButton(this); + + m_minBtn->setFocusPolicy(Qt::NoFocus); + m_closeBtn->setFocusPolicy(Qt::NoFocus); + + m_minBtn->setFixedSize(32,32); + m_closeBtn->setFixedSize(32,32); + + m_minBtn->setStyleSheet("QPushButton{background-image:url(':/res/min_normal_btn.png');border:0px;}QPushButton:hover{background:url(':/res/min_hover_btn.png');}QPushButton:pressed{background:url(':/res/min_pressed_btn.png');}"); + m_closeBtn->setStyleSheet("QPushButton{background-image:url(':/res/close_normal_btn.png');border:0px;}QPushButton:hover{background:url(':/res/close_hover_btn.png');}QPushButton:pressed{background:url(':/res/close_pressed_btn.png');}"); + + m_rLayout->addWidget(m_minBtn); + m_rLayout->addWidget(m_closeBtn); + + connect(m_minBtn, &QPushButton::clicked, this, [=] { + if (parentWidget() && parentWidget()->parentWidget()) { +// parentWidget()->parentWidget()->showMinimized(); + parentWidget()->parentWidget()->hide(); + } + }); + + connect(m_closeBtn, &QPushButton::clicked, this, [=] { +// qApp->quit(); + if (parentWidget() && parentWidget()->parentWidget()) { +// parentWidget()->parentWidget()->showMinimized(); + parentWidget()->parentWidget()->hide(); + } + });*/ +} + +void TitleBar::initWidgets() +{ + m_layout = new QHBoxLayout(this); + m_layout->setContentsMargins(2, 2, 0, 0); + m_layout->setSpacing(0); + this->setLayout(m_layout); + + initLeftContent(); + initRightContent(); +} + +void TitleBar::setCityName(const QString &city) +{ + m_cityLabel->setText(city); +} + +void TitleBar::setDayStyleSheets() +{ + //m_leftWidget->setStyleSheet("QWidget{background-image:none;}"); +} + +void TitleBar::setNightStyleSheets() +{ + //m_leftWidget->setStyleSheet("QWidget{background-image:url(':/res/location_bg_hover.png');}"); +} + +bool TitleBar::eventFilter(QObject *obj, QEvent *event) +{ + if(obj == m_leftWidget) { + switch (event->type()) { + case QEvent::Enter: { + QWidget *widget = qobject_cast(obj); + if (widget) { + widget->setCursor(QCursor(Qt::PointingHandCursor)); + } + break; + } + case QEvent::Leave: { + QWidget *widget = qobject_cast(obj); + if (!widget) { + widget->unsetCursor(); + } + break; + } + default: + break; + } + + if (event->type() == QEvent::MouseButtonPress) { + QMouseEvent *mouseEvent = static_cast(event); + if(mouseEvent->button() == Qt::LeftButton) { + emit this->requestShowSettingDialog(); + return true; + } + else { + return false; + } + } + else { + return false; + } + } + + return QObject::eventFilter(obj, event); +} diff -Nru indicator-china-weather-2.2.8/src/titlebar.h indicator-china-weather-3.0.2~201904291430/src/titlebar.h --- indicator-china-weather-2.2.8/src/titlebar.h 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/titlebar.h 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef TITLEBAR_H +#define TITLEBAR_H + +#include +#include +#include +#include + +class TitleBar : public QWidget +{ + Q_OBJECT +public: + explicit TitleBar(QWidget *parent = 0); + ~TitleBar(); + + void initLeftContent(); + void initRightContent(); + void initWidgets(); + void setCityName(const QString &city); + + void setDayStyleSheets(); + void setNightStyleSheets(); + +signals: + void requestShowSettingDialog(); + +private: + bool eventFilter(QObject *obj, QEvent *event) Q_DECL_OVERRIDE; + +private: + QHBoxLayout *m_layout = nullptr; + QHBoxLayout *m_lLayout = nullptr; +// QHBoxLayout *m_rLayout = nullptr; + QWidget *m_leftWidget = nullptr; + QPushButton *m_setCityBtn = nullptr; + QLabel *m_cityLabel = nullptr; +// QPushButton *m_minBtn = nullptr; +// QPushButton *m_closeBtn = nullptr; +}; + +#endif // TITLEBAR_H diff -Nru indicator-china-weather-2.2.8/src/tooltip.cpp indicator-china-weather-3.0.2~201904291430/src/tooltip.cpp --- indicator-china-weather-2.2.8/src/tooltip.cpp 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/tooltip.cpp 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,217 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "tooltip.h" + +#include +#include +#include +#include +#include + +ToolTip::ToolTip(QWidget *parent) : + QFrame(parent) + , m_radius(0) + , m_background(QBrush(QColor(255,255,255,230))) + , m_borderColor(QColor(224,224,224,130)) +{ + this->setWindowFlags(Qt::ToolTip | Qt::FramelessWindowHint); + this->setAttribute(Qt::WA_TranslucentBackground); + this->setContentsMargins(0, 0, 0, 0); + + m_layout = new QVBoxLayout(this); + m_layout->setContentsMargins(0, 0, 0, 0); + m_layout->setSpacing(5); + + m_frame = new QFrame(); + m_frame->setContentsMargins(0, 0, 0, 0); + QVBoxLayout *layout = new QVBoxLayout(this->m_frame); + layout->setContentsMargins(15, 5, 15, 5); + layout->setSpacing(5); + + m_dateLabel = new QLabel(this); + m_dWeatherLabel = new QLabel(this); + m_nWeatherLabel = new QLabel(this); + m_dIconLabel = new QLabel(this); + m_nIconLabel = new QLabel(this); + m_tempLabel = new QLabel(this); + m_mrmsLabel = new QLabel(this); + m_srssLabel = new QLabel(this); + m_humLabel = new QLabel(this); + m_pcpnLabel = new QLabel(this); + m_popLabel = new QLabel(this); + m_presLabel = new QLabel(this); + m_uvIndexLabel = new QLabel(this); + m_visLabel = new QLabel(this); + m_windLabel = new QLabel(this); + + m_dIconLabel->setFixedSize(48, 48); + m_nIconLabel->setFixedSize(48, 48); + + m_dateLabel->setStyleSheet("QLabel{border:none;background-color:transparent;color:#808080;font-size:12px;}"); + m_dWeatherLabel->setStyleSheet("QLabel{border:none;background-color:transparent;color:#808080;font-size:12px;}"); + m_nWeatherLabel->setStyleSheet("QLabel{border:none;background-color:transparent;color:#808080;font-size:12px;}"); + m_dIconLabel->setStyleSheet("QLabel{border:none;background-color:transparent;}"); + m_nIconLabel->setStyleSheet("QLabel{border:none;background-color:transparent;}"); + m_tempLabel->setStyleSheet("QLabel{border:none;background-color:transparent;color:#808080;font-size:12px;}"); + m_mrmsLabel->setStyleSheet("QLabel{border:none;background-color:transparent;color:#808080;font-size:12px;}"); + m_srssLabel->setStyleSheet("QLabel{border:none;background-color:transparent;color:#808080;font-size:12px;}"); + m_humLabel->setStyleSheet("QLabel{border:none;background-color:transparent;color:#808080;font-size:12px;}"); + m_pcpnLabel->setStyleSheet("QLabel{border:none;background-color:transparent;color:#808080;font-size:12px;}"); + m_popLabel->setStyleSheet("QLabel{border:none;background-color:transparent;color:#808080;font-size:12px;}"); + m_presLabel->setStyleSheet("QLabel{border:none;background-color:transparent;color:#808080;font-size:12px;}"); + m_uvIndexLabel->setStyleSheet("QLabel{border:none;background-color:transparent;color:#808080;font-size:12px;}"); + m_visLabel->setStyleSheet("QLabel{border:none;background-color:transparent;color:#808080;font-size:12px;}"); + m_windLabel->setStyleSheet("QLabel{border:none;background-color:transparent;color:#808080;font-size:12px;}"); + + QVBoxLayout *d_vlayout = new QVBoxLayout; + d_vlayout->addWidget(m_dIconLabel, 0, Qt::AlignHCenter); + d_vlayout->addWidget(m_dWeatherLabel, 0, Qt::AlignHCenter); + QVBoxLayout *n_vlayout = new QVBoxLayout; + n_vlayout->addWidget(m_nIconLabel, 0, Qt::AlignHCenter); + n_vlayout->addWidget(m_nWeatherLabel, 0, Qt::AlignHCenter); + QHBoxLayout *h_layout = new QHBoxLayout; + h_layout->addLayout(d_vlayout); + h_layout->addLayout(n_vlayout); + + layout->addWidget(m_dateLabel, 0, Qt::AlignTop | Qt::AlignHCenter); + layout->addLayout(h_layout); + layout->addWidget(m_tempLabel, 0, Qt::AlignHCenter); + layout->addWidget(m_srssLabel, 0, Qt::AlignHCenter); + layout->addWidget(m_mrmsLabel, 0, Qt::AlignHCenter); + layout->addWidget(m_humLabel, 0, Qt::AlignHCenter); + layout->addWidget(m_pcpnLabel, 0, Qt::AlignHCenter); + layout->addWidget(m_popLabel, 0, Qt::AlignHCenter); + layout->addWidget(m_presLabel, 0, Qt::AlignHCenter); + layout->addWidget(m_uvIndexLabel, 0, Qt::AlignHCenter); + layout->addWidget(m_visLabel, 0, Qt::AlignHCenter); + layout->addWidget(m_windLabel, 0, Qt::AlignBottom | Qt::AlignHCenter); + + m_layout->addWidget(m_frame, 0, Qt::AlignVCenter); + + adjustSize(); +} + +ToolTip::~ToolTip() +{ + +} + +void ToolTip::resetData(const ForecastWeather &data, const QString &week) +{ + m_dateLabel->setText(QString("%1 %2").arg(week).arg(data.forcast_date)); + + QPixmap pixmap1 = QPixmap(QString(":/res/weather_icons/darkgrey/%1.png").arg(data.cond_code_d)); + pixmap1 = pixmap1.scaled(48, 48, Qt::KeepAspectRatio, Qt::SmoothTransformation); + m_dIconLabel->setPixmap(pixmap1); + + QPixmap pixmap2 = QPixmap(QString(":/res/weather_icons/darkgrey/%1.png").arg(data.cond_code_n)); + pixmap2 = pixmap2.scaled(48, 48, Qt::KeepAspectRatio, Qt::SmoothTransformation); + m_nIconLabel->setPixmap(pixmap2); + + m_dWeatherLabel->setText(data.cond_txt_d); + m_nWeatherLabel->setText(data.cond_txt_n); + + m_tempLabel->setText(QString("%1°C~%2°C").arg(data.tmp_min).arg(data.tmp_max)); + + if (data.sr_ss.contains(QChar('+'))) { + QStringList sunList= data.sr_ss.split(QChar('+')); + m_srssLabel->setText(QString(tr("Sunrise: %1 sunset: %2")).arg(sunList.at(0)).arg(sunList.at(1))); + } + else { + m_srssLabel->setText(QString(tr("Sunrise and sunset: %1")).arg(data.sr_ss)); + } + if (data.mr_ms.contains(QChar('+'))) { + QStringList moonList= data.mr_ms.split(QChar('+')); + m_mrmsLabel->setText(QString(tr("Moonrise: %1 moonset: %2")).arg(moonList.at(0)).arg(moonList.at(1))); + } + else { + m_mrmsLabel->setText(QString(tr("Moonrise and moonset: %1")).arg(data.mr_ms)); + } + + m_humLabel->setText(QString(tr("Relative humidity:%1")).arg(data.hum) + "%");//相对湿度 + m_pcpnLabel->setText(QString(tr("Precipitation:%1 mm")).arg(data.pcpn));//降水量 + m_popLabel->setText(QString(tr("Probability of precipitation:%1")).arg(data.pop) + "%");//降水概率 + m_presLabel->setText(QString(tr("Atmospheric pressure:%1 hPa")).arg(data.pres));//大气压强 + m_uvIndexLabel->setText(QString(tr("UV intensity index:%1")).arg(data.uv_index));//紫外线强度指数 + m_visLabel->setText(QString(tr("Visibility:%1 km")).arg(data.vis));//能见度 + m_windLabel->setText(QString(tr("Wind:%1 %2stage direction %3 speed %4 km/h")).arg(data.wind_dir).arg(data.wind_sc).arg(data.wind_deg).arg(data.wind_spd)); +} + +void ToolTip::popupTip(QPoint point) +{ + int point_X; + int point_Y; + if (point.rx() < this->width()) { + point_X = point.rx() + 10; + } + else { + point_X = point.rx() - this->width(); + } + point_Y = point.ry(); + this->move(QPoint(point_X, point_Y)); +// this->show(); + QFrame::show(); + QGraphicsOpacityEffect *opacityEffect = new QGraphicsOpacityEffect(this->m_frame); + opacityEffect->setOpacity(1); +// this->m_frame->setGraphicsEffect(opacityEffect); + + QPropertyAnimation *animation = new QPropertyAnimation(opacityEffect, "opacity"); + animation->setDuration(200); + animation->setStartValue(0); + animation->setKeyValueAt(0.25, 1); + animation->setKeyValueAt(0.5, 1); + animation->setKeyValueAt(0.75, 1); + animation->setEndValue(0);//1 + animation->start(); + + connect(animation, &QPropertyAnimation::finished, this, [=] { + animation->deleteLater(); + this->show(); +// this->m_frame->setGraphicsEffect(NULL); +// this->hide(); + }); +} + +void ToolTip::paintEvent(QPaintEvent *event) +{ + QPainter painter(this); + painter.setRenderHints(QPainter::Antialiasing | QPainter::HighQualityAntialiasing); + + QBrush background = this->m_background; + QColor borderColor = this->m_borderColor; + + QMarginsF shadowMargins = QMarginsF(2.0, 2.0, 2.0, 2.0); + QRectF bgRect = QRectF(rect()).marginsRemoved(shadowMargins); + QPainterPath bgPath; + bgPath.addRoundedRect(bgRect, this->m_radius, this->m_radius); + painter.fillPath(bgPath, background); + + QPainterPath borderPath; + QRectF borderRect = QRectF(rect()); + int borderRadius = this->m_radius; + QMarginsF borderMargins(0.5, 0.5, 0.5, 0.5); + borderRadius += 0.5; + borderRect = borderRect.marginsAdded(borderMargins).marginsRemoved(shadowMargins); + borderPath.addRoundedRect(borderRect, borderRadius, borderRadius); + + QPen borderPen(borderColor); + borderPen.setWidthF(1.0); + painter.strokePath(borderPath, borderPen); +} diff -Nru indicator-china-weather-2.2.8/src/tooltip.h indicator-china-weather-3.0.2~201904291430/src/tooltip.h --- indicator-china-weather-2.2.8/src/tooltip.h 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/tooltip.h 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef TOOLTIP_H +#define TOOLTIP_H + +#include +#include +#include +#include + +#include "data.h" + +class ToolTip : public QFrame +{ + Q_OBJECT +public: + explicit ToolTip(QWidget *parent = 0); + ~ToolTip(); + + void resetData(const ForecastWeather &data, const QString &week); + void popupTip(QPoint point); + +protected: + void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; + +private: + int m_radius; + QBrush m_background; + QColor m_borderColor; + + QFrame *m_frame = nullptr; + QLabel *m_dateLabel = nullptr; + QLabel *m_dWeatherLabel = nullptr; + QLabel *m_nWeatherLabel = nullptr; + QLabel *m_dIconLabel = nullptr; + QLabel *m_nIconLabel = nullptr; + QLabel *m_tempLabel = nullptr; + QLabel *m_mrmsLabel = nullptr; + QLabel *m_srssLabel = nullptr; + QLabel *m_humLabel = nullptr; + QLabel *m_pcpnLabel = nullptr; + QLabel *m_popLabel = nullptr; + QLabel *m_presLabel = nullptr; + QLabel *m_uvIndexLabel = nullptr; + QLabel *m_visLabel = nullptr; + QLabel *m_windLabel = nullptr; + + QVBoxLayout *m_layout = nullptr; +}; + +#endif // TOOLTIP_H diff -Nru indicator-china-weather-2.2.8/src/translucentlabel.cpp indicator-china-weather-3.0.2~201904291430/src/translucentlabel.cpp --- indicator-china-weather-2.2.8/src/translucentlabel.cpp 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/translucentlabel.cpp 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,140 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "translucentlabel.h" + +#include +#include +#include +#include + +TranslucentLabel::TranslucentLabel(bool showTip, QWidget *parent) + : QLabel(parent), m_showTip(showTip) +{ + //使用颜色值设置背景 + //this->setStyleSheet("QLabel{border-radius:4px;background-color:rgba(0,0,0,0.2);color:rgb(255,255,255);}"); + //使用图片设置背景 + this->setStyleSheet("QLabel{background:transparent;background-image:url(':/res/min_bg.png');}");//border-image + this->setFixedSize(69, 26); + this->setFocusPolicy(Qt::NoFocus); + + if (m_showTip) { + this->setFocusPolicy(Qt::ClickFocus); + this->setMouseTracking(true); + installEventFilter(this); + } + + m_icon = new QLabel(this); + m_icon->setStyleSheet("QLabel{border:none;background:transparent;background-color:transparent;}"); + //m_icon->setScaledContents(true);//自动缩放,显示图像大小自动调整为Qlabel大小 + m_icon->setFixedSize(12, 16); + + m_text = new QLabel(this); + m_text->adjustSize();//QLabel自适应文字的大小 + m_text->setAlignment(Qt::AlignLeft); + m_text->setStyleSheet("QLabel{border:none;background:transparent;background-color:transparent;color:#ffffff;font-size:12px;}"); + + QHBoxLayout *m_layout = new QHBoxLayout(this); + m_layout->setContentsMargins(5, 0, 5, 0); + m_layout->setSpacing(5); + + m_layout->addWidget(m_icon, 0, Qt::AlignLeft | Qt::AlignVCenter); + m_layout->addWidget(m_text, 1, Qt::AlignLeft | Qt::AlignVCenter); + + this->setLayout(m_layout); +} + +void TranslucentLabel::setLabelIcon(const QString &iconPath) +{ + m_icon->setPixmap(QPixmap(iconPath)); +} + +void TranslucentLabel::setLabelText(const QString &text) +{ + QFont font = m_text->font(); + const QFontMetrics fm(font); + QString elided_text = fm.elidedText(text, Qt::ElideRight, this->width() - m_icon->width() - 10); + m_text->setText(elided_text); + +} + +bool TranslucentLabel::eventFilter(QObject *obj, QEvent *event) +{ + switch (event->type()) { + case QEvent::Enter: { + QWidget *widget = qobject_cast(obj); + if (widget) { + widget->setCursor(QCursor(Qt::PointingHandCursor)); + } + break; + } + case QEvent::Leave: { + QWidget *widget = qobject_cast(obj); + if (!widget) { + widget->unsetCursor(); + } + break; + } + default: + break; + } + + return QObject::eventFilter(obj, event); +} + + +void TranslucentLabel::mousePressEvent(QMouseEvent *event) +{ + if (m_showTip) { + emit this->clicked(); + } + + QLabel::mousePressEvent(event); +} + +/*bool TranslucentLabel::event(QEvent *event) +{ + switch (event->type()) { + case QEvent::MouseButtonPress: + qDebug() << "press."; + break; + default: + break; + } + + return QWidget::event(event); +} + +void TranslucentLabel::focusOutEvent(QFocusEvent *event) +{ + QPoint mousePos = mapToParent(mapFromGlobal(QCursor::pos())); + if (!this->geometry().contains(mousePos)) { + if (event && event->reason() == Qt::MouseFocusReason) { + qDebug() << "focus out..........."; + } + } + + QLabel::focusOutEvent(event); +} + +void TranslucentLabel::focusInEvent(QFocusEvent *event) +{ + qDebug() << "focus in..........."; + QLabel::focusInEvent(event); +}*/ diff -Nru indicator-china-weather-2.2.8/src/translucentlabel.h indicator-china-weather-3.0.2~201904291430/src/translucentlabel.h --- indicator-china-weather-2.2.8/src/translucentlabel.h 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/translucentlabel.h 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef TRANLUCENTLABEL_H +#define TRANLUCENTLABEL_H + +#include + +class TranslucentLabel : public QLabel { + Q_OBJECT +public: + explicit TranslucentLabel(bool showTip = false, QWidget *parent = 0); + + void setLabelIcon(const QString &iconPath); + void setLabelText(const QString &text); + +signals: + void clicked(); + +protected: +// virtual void focusInEvent(QFocusEvent *event) Q_DECL_OVERRIDE; +// virtual void focusOutEvent(QFocusEvent *event) Q_DECL_OVERRIDE; + virtual void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + +private: + bool eventFilter(QObject *obj, QEvent *event) Q_DECL_OVERRIDE; + //bool event(QEvent *event) Q_DECL_OVERRIDE; + +private: + QLabel *m_icon = nullptr; + QLabel *m_text = nullptr; + bool m_showTip; +}; +#endif // TRANLUCENTLABEL_H Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/src/weather-app.db and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/src/weather-app.db differ diff -Nru indicator-china-weather-2.2.8/src/weatherworker.cpp indicator-china-weather-3.0.2~201904291430/src/weatherworker.cpp --- indicator-china-weather-2.2.8/src/weatherworker.cpp 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/weatherworker.cpp 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,580 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "weatherworker.h" + +#include +#include +#include +#include +#include +#include +#include + +#include "preferences.h" +#include "global.h" +using namespace Global; + +inline QString readOsInfo() +{ + QString idParse = "DISTRIB_ID="; + QString releaseParse = "DISTRIB_RELEASE="; + QString osId; + QString osRelease; + + QFile file("/etc/lsb-release"); + if (!file.open(QFile::ReadOnly)) { + qCritical() << QString("open lsb-release file failed"); + return QString("distro=ukylin&version_os=18.04"); + } + + QByteArray content = file.readAll(); + file.close(); + QTextStream stream(&content, QIODevice::ReadOnly); + while (!stream.atEnd()) { + QString line = stream.readLine(); + if (line.startsWith(idParse)) { + osId = line.remove(0, idParse.size()); + } + else if (line.startsWith(releaseParse)) { + osRelease = line.remove(0, releaseParse.size()); + } + } + + return QString("distro=%1&version_os=%2").arg(osId).arg(osRelease); +} + +WeatherWorker::WeatherWorker(QObject *parent) : + QObject(parent) + , m_networkManager(new QNetworkAccessManager(this)) +{ + connect(m_networkManager, &QNetworkAccessManager::finished, this, [] (QNetworkReply *reply) { + reply->deleteLater(); + }); +} + +WeatherWorker::~WeatherWorker() +{ + +} + +bool WeatherWorker::isNetWorkSettingsGood() +{ + //判断网络是否有连接,不一定能上网 + QNetworkConfigurationManager mgr; + return mgr.isOnline(); +} + +void WeatherWorker::netWorkOnlineOrNot() +{ + //http://service.ubuntukylin.com:8001/weather/pingnetwork/ + QHostInfo::lookupHost("www.baidu.com", this, SLOT(networkLookedUp(QHostInfo))); +} + +void WeatherWorker::networkLookedUp(const QHostInfo &host) +{ + if(host.error() != QHostInfo::NoError) { + //qDebug() << "test network failed, errorCode:" << host.error(); + emit this->nofityNetworkStatus(host.errorString()); + } + else { + //qDebug() << "test network success, the server's ip:" << host.addresses().first().toString(); + emit this->nofityNetworkStatus("OK"); + } +} + +void WeatherWorker::refreshObserveWeatherData(const QString &cityId) +{ + if (cityId.isEmpty()) { + emit responseFailure(0); + return; + } + + /*QString forecastUrl = QString("http://service.ubuntukylin.com:8001/weather/api/1.0/observe/%1").arg(cityId); + qDebug() << "forecastUrl=" << forecastUrl; + QNetworkAccessManager *manager = new QNetworkAccessManager(); + QNetworkReply *reply = manager->get(QNetworkRequest(QUrl(forecastUrl))); + QByteArray responseData; + QEventLoop eventLoop; + QObject::connect(manager, SIGNAL(finished(QNetworkReply *)), &eventLoop, SLOT(quit())); + eventLoop.exec(); + responseData = reply->readAll(); + reply->deleteLater(); + manager->deleteLater(); + qDebug() << "weather observe size: " << responseData.size();*/ + + //heweather_observe_s6 + QString forecastUrl = QString("http://service.ubuntukylin.com:8001/weather/api/2.0/heweather_observe_s6/%1").arg(cityId); + QNetworkRequest request; + request.setUrl(forecastUrl); + //request.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true);//Qt5.6 for redirect + QNetworkReply *reply = m_networkManager->get(request); + connect(reply, &QNetworkReply::finished, this, &WeatherWorker::onWeatherObserveReply); +} + +void WeatherWorker::refreshForecastWeatherData(const QString &cityId) +{ + if (cityId.isEmpty()) { + emit responseFailure(0); + return; + } + + //heweather_forecast_s6 + QString forecastUrl = QString("http://service.ubuntukylin.com:8001/weather/api/2.0/heweather_forecast_s6/%1").arg(cityId); + QNetworkReply *reply = m_networkManager->get(QNetworkRequest(forecastUrl)); + connect(reply, &QNetworkReply::finished, this, &WeatherWorker::onWeatherForecastReply); +} + +void WeatherWorker::requestPingBackWeatherServer() +{ + QNetworkReply *reply = m_networkManager->get(QNetworkRequest(QString("http://service.ubuntukylin.com:8001/weather/pinginformation/"))); + connect(reply, &QNetworkReply::finished, this, [=] () { + QNetworkReply *m_reply = qobject_cast(sender()); + int statusCode = m_reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); + if(m_reply->error() != QNetworkReply::NoError || statusCode != 200) {//200 is normal status + qDebug() << "pingback request error:" << m_reply->error() << ", statusCode=" << statusCode; + emit responseFailure(statusCode); + return; + } + + QByteArray ba = m_reply->readAll(); + m_reply->close(); + m_reply->deleteLater(); + + QJsonParseError err; + QJsonDocument jsonDocument = QJsonDocument::fromJson(ba, &err); + if (err.error != QJsonParseError::NoError) {// Json type error + qDebug() << "Json type error"; + return; + } + if (jsonDocument.isNull() || jsonDocument.isEmpty()) { + qDebug() << "Json null or empty!"; + return; + } + + QJsonObject jsonObject = jsonDocument.object(); + QString notifyInfo = jsonObject.value("info").toString(); + if (!notifyInfo.isEmpty() && !notifyInfo.isNull()) { + emit requestDiplayServerNotify(notifyInfo); + } + }); +} + +void WeatherWorker::requestPostHostInfoToWeatherServer() +{ + QString osInfo = readOsInfo(); + QString hostInfo = QString("%1&version_weather=%2&city=%3").arg(osInfo).arg(qApp->applicationVersion()).arg(m_preferences->m_currentCity); + this->m_hostInfoParameters = hostInfo; + + QByteArray parameters = hostInfo.toUtf8(); + QNetworkRequest request; + request.setUrl(QUrl("http://service.ubuntukylin.com:8001/weather/pingbackmain")); + request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); + request.setHeader(QNetworkRequest::ContentLengthHeader, parameters.length()); + //QUrl url("http://service.ubuntukylin.com:8001/weather/pingbackmain"); + QNetworkReply *reply = m_networkManager->post(request, parameters);//QNetworkReply *reply = m_networkManager->post(QNetworkRequest(url), parameters); + connect(reply, &QNetworkReply::finished, this, &WeatherWorker::onPingBackPostReply); +} + +bool WeatherWorker::AccessDedirectUrl(const QString &redirectUrl, WeatherType weatherType) +{ + if (redirectUrl.isEmpty()) + return false; + + QNetworkRequest request; + QString url; + url = redirectUrl; + request.setUrl(QUrl(url)); + + QNetworkReply *reply = m_networkManager->get(request); + + switch (weatherType) { + case WeatherType::Type_Observe: + connect(reply, &QNetworkReply::finished, this, &WeatherWorker::onWeatherObserveReply); + break; + case WeatherType::Type_Forecast: + connect(reply, &QNetworkReply::finished, this, &WeatherWorker::onWeatherForecastReply); + break; + default: + break; + } + + return true; +} + +void WeatherWorker::AccessDedirectUrlWithPost(const QString &redirectUrl) +{ + if (redirectUrl.isEmpty()) + return; + + QNetworkRequest request; + QString url; + url = redirectUrl; + QByteArray parameters = this->m_hostInfoParameters.toUtf8(); + request.setUrl(QUrl(url)); + request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); + request.setHeader(QNetworkRequest::ContentLengthHeader, parameters.length()); + QNetworkReply *reply = m_networkManager->post(request, parameters); + connect(reply, &QNetworkReply::finished, this, &WeatherWorker::onPingBackPostReply); +} + +void WeatherWorker::onWeatherObserveReply() +{ + QNetworkReply *reply = qobject_cast(sender()); + int statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); + bool redirection = false; + + if(reply->error() != QNetworkReply::NoError || statusCode != 200) {//200 is normal status + //qDebug() << "weather request error:" << reply->error() << ", statusCode=" << statusCode; + if (statusCode == 301 || statusCode == 302) {//redirect + QVariant redirectionUrl = reply->attribute(QNetworkRequest::RedirectionTargetAttribute); + //qDebug() << "redirectionUrl=" << redirectionUrl.toString(); + redirection = AccessDedirectUrl(redirectionUrl.toString(), WeatherType::Type_Observe);//AccessDedirectUrl(reply->rawHeader("Location")); + reply->close(); + reply->deleteLater(); + } + if (!redirection) { + emit responseFailure(statusCode); + } + return; + } + + QByteArray ba = reply->readAll(); + //QString reply_content = QString::fromUtf8(ba); + reply->close(); + reply->deleteLater(); + //qDebug() << "weather observe size: " << ba.size(); + + QJsonParseError err; + QJsonDocument jsonDocument = QJsonDocument::fromJson(ba, &err); + if (err.error != QJsonParseError::NoError) {// Json type error + qDebug() << "Json type error"; + emit responseFailure(0); + return; + } + if (jsonDocument.isNull() || jsonDocument.isEmpty()) { + qDebug() << "Json null or empty!"; + emit responseFailure(0); + return; + } + + QJsonObject jsonObject = jsonDocument.object(); + //qDebug() << "jsonObject" << jsonObject; + + QJsonObject mainObj = jsonObject.value("KylinWeather").toObject(); + QJsonObject airObj = mainObj.value("air").toObject(); + QJsonObject weatherObj = mainObj.value("weather").toObject(); + //qDebug() << "airObj" << airObj; + + m_preferences->air.id = weatherObj.value("id").toString(); + m_preferences->air.aqi = airObj.value("aqi").toString(); + m_preferences->air.qlty = airObj.value("qlty").toString(); + m_preferences->air.main = airObj.value("main").toString(); + m_preferences->air.pm25 = airObj.value("pm25").toString(); + m_preferences->air.pm10 = airObj.value("pm10").toString(); + m_preferences->air.no2 = airObj.value("no2").toString(); + m_preferences->air.so2 = airObj.value("so2").toString(); + m_preferences->air.co = airObj.value("co").toString(); + m_preferences->air.o3 = airObj.value("o3").toString(); + + m_preferences->weather.id = weatherObj.value("id").toString(); + m_preferences->weather.city = weatherObj.value("location").toString(); + m_preferences->weather.updatetime = weatherObj.value("update_loc").toString(); + m_preferences->weather.air = QString("%1(%2)").arg(airObj.value("aqi").toString()).arg(airObj.value("qlty").toString()); + m_preferences->weather.cloud = weatherObj.value("cloud").toString(); + m_preferences->weather.cond_code = weatherObj.value("cond_code").toString(); + m_preferences->weather.cond_txt = weatherObj.value("cond_txt").toString(); + m_preferences->weather.fl = weatherObj.value("fl").toString(); + m_preferences->weather.hum = weatherObj.value("hum").toString(); + m_preferences->weather.pcpn = weatherObj.value("pcpn").toString(); + m_preferences->weather.pres = weatherObj.value("pres").toString(); + m_preferences->weather.tmp = weatherObj.value("tmp").toString(); + m_preferences->weather.vis = weatherObj.value("vis").toString(); + m_preferences->weather.wind_deg = weatherObj.value("wind_deg").toString(); + m_preferences->weather.wind_dir = weatherObj.value("wind_dir").toString(); + m_preferences->weather.wind_sc = weatherObj.value("wind_sc").toString(); + m_preferences->weather.wind_spd = weatherObj.value("wind_spd").toString(); + + /*ObserveWeather observeData; + observeData.id = weatherObj.value("id").toString(); + observeData.city = weatherObj.value("location").toString(); + observeData.updatetime = weatherObj.value("update_loc").toString(); + observeData.air = QString("%1(%2)").arg(airObj.value("aqi").toString()).arg(airObj.value("qlty").toString()); + observeData.cloud = weatherObj.value("cloud").toString(); + observeData.cond_code = weatherObj.value("cond_code").toString(); + observeData.cond_txt = weatherObj.value("cond_txt").toString(); + observeData.fl = weatherObj.value("fl").toString(); + observeData.hum = weatherObj.value("hum").toString(); + observeData.pcpn = weatherObj.value("pcpn").toString(); + observeData.pres = weatherObj.value("pres").toString(); + observeData.tmp = weatherObj.value("tmp").toString(); + observeData.vis = weatherObj.value("vis").toString(); + observeData.wind_deg = weatherObj.value("wind_deg").toString(); + observeData.wind_dir = weatherObj.value("wind_dir").toString(); + observeData.wind_sc = weatherObj.value("wind_sc").toString(); + observeData.wind_spd = weatherObj.value("wind_spd").toString();*/ + + emit this->observeDataRefreshed(m_preferences->weather); +} + +void WeatherWorker::onWeatherForecastReply() +{ + QNetworkReply *reply = qobject_cast(sender()); + int statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); + bool redirection = false; + + if(reply->error() != QNetworkReply::NoError || statusCode != 200) {//200 is normal status + //qDebug() << "weather forecast request error:" << reply->error() << ", statusCode=" << statusCode; + if (statusCode == 301 || statusCode == 302) {//redirect + QVariant redirectionUrl = reply->attribute(QNetworkRequest::RedirectionTargetAttribute); + //qDebug() << "redirectionUrl=" << redirectionUrl.toString(); + redirection = AccessDedirectUrl(redirectionUrl.toString(), WeatherType::Type_Forecast);//AccessDedirectUrl(reply->rawHeader("Location")); + reply->close(); + reply->deleteLater(); + } + if (!redirection) { + emit responseFailure(statusCode); + } + return; + } + + QByteArray ba = reply->readAll(); + //QString reply_content = QString::fromUtf8(ba); + reply->close(); + reply->deleteLater(); + //qDebug() << "weather forecast size: " << ba.size(); + + QJsonParseError err; + QJsonDocument jsonDocument = QJsonDocument::fromJson(ba, &err); + if (err.error != QJsonParseError::NoError) {// Json type error + qDebug() << "Json type error"; + emit responseFailure(0); + return; + } + if (jsonDocument.isNull() || jsonDocument.isEmpty()) { + qDebug() << "Json null or empty!"; + emit responseFailure(0); + return; + } + + QJsonObject jsonObject = jsonDocument.object(); + //qDebug() << "jsonObject" << jsonObject; + + QJsonObject mainObj = jsonObject.value("KylinWeather").toObject(); + QJsonObject forecastObj = mainObj.value("forecast").toObject(); + QJsonObject lifestyleObj = mainObj.value("lifestyle").toObject(); + + m_preferences->forecast0.forcast_date = forecastObj.value("forcast_date0").toString(); + m_preferences->forecast0.cond_code_d = forecastObj.value("cond_code_d0").toString(); + m_preferences->forecast0.cond_code_n = forecastObj.value("cond_code_n0").toString(); + m_preferences->forecast0.cond_txt_d = forecastObj.value("cond_txt_d0").toString(); + m_preferences->forecast0.cond_txt_n = forecastObj.value("cond_txt_n0").toString(); + m_preferences->forecast0.hum = forecastObj.value("hum0").toString(); + m_preferences->forecast0.mr_ms = forecastObj.value("mr_ms0").toString(); + m_preferences->forecast0.pcpn = forecastObj.value("pcpn0").toString(); + m_preferences->forecast0.pop = forecastObj.value("pop0").toString(); + m_preferences->forecast0.pres = forecastObj.value("pres0").toString(); + m_preferences->forecast0.sr_ss = forecastObj.value("sr_ss0").toString(); + m_preferences->forecast0.tmp_max = forecastObj.value("tmp_max0").toString(); + m_preferences->forecast0.tmp_min = forecastObj.value("tmp_min0").toString(); + m_preferences->forecast0.uv_index = forecastObj.value("uv_index0").toString(); + m_preferences->forecast0.vis = forecastObj.value("vis0").toString(); + m_preferences->forecast0.wind_deg = forecastObj.value("wind_deg0").toString(); + m_preferences->forecast0.wind_dir = forecastObj.value("wind_dir0").toString(); + m_preferences->forecast0.wind_sc = forecastObj.value("wind_sc0").toString(); + m_preferences->forecast0.wind_spd = forecastObj.value("wind_spd0").toString(); + + m_preferences->forecast1.forcast_date = forecastObj.value("forcast_date1").toString(); + m_preferences->forecast1.cond_code_d = forecastObj.value("cond_code_d1").toString(); + m_preferences->forecast1.cond_code_n = forecastObj.value("cond_code_n1").toString(); + m_preferences->forecast1.cond_txt_d = forecastObj.value("cond_txt_d1").toString(); + m_preferences->forecast1.cond_txt_n = forecastObj.value("cond_txt_n1").toString(); + m_preferences->forecast1.hum = forecastObj.value("hum1").toString(); + m_preferences->forecast1.mr_ms = forecastObj.value("mr_ms1").toString(); + m_preferences->forecast1.pcpn = forecastObj.value("pcpn1").toString(); + m_preferences->forecast1.pop = forecastObj.value("pop1").toString(); + m_preferences->forecast1.pres = forecastObj.value("pres1").toString(); + m_preferences->forecast1.sr_ss = forecastObj.value("sr_ss1").toString(); + m_preferences->forecast1.tmp_max = forecastObj.value("tmp_max1").toString(); + m_preferences->forecast1.tmp_min = forecastObj.value("tmp_min1").toString(); + m_preferences->forecast1.uv_index = forecastObj.value("uv_index1").toString(); + m_preferences->forecast1.vis = forecastObj.value("vis1").toString(); + m_preferences->forecast1.wind_deg = forecastObj.value("wind_deg1").toString(); + m_preferences->forecast1.wind_dir = forecastObj.value("wind_dir1").toString(); + m_preferences->forecast1.wind_sc = forecastObj.value("wind_sc1").toString(); + m_preferences->forecast1.wind_spd = forecastObj.value("wind_spd1").toString(); + + m_preferences->forecast2.forcast_date = forecastObj.value("forcast_date2").toString(); + m_preferences->forecast2.cond_code_d = forecastObj.value("cond_code_d2").toString(); + m_preferences->forecast2.cond_code_n = forecastObj.value("cond_code_n2").toString(); + m_preferences->forecast2.cond_txt_d = forecastObj.value("cond_txt_d2").toString(); + m_preferences->forecast2.cond_txt_n = forecastObj.value("cond_txt_n2").toString(); + m_preferences->forecast2.hum = forecastObj.value("hum2").toString(); + m_preferences->forecast2.mr_ms = forecastObj.value("mr_ms2").toString(); + m_preferences->forecast2.pcpn = forecastObj.value("pcpn2").toString(); + m_preferences->forecast2.pop = forecastObj.value("pop2").toString(); + m_preferences->forecast2.pres = forecastObj.value("pres2").toString(); + m_preferences->forecast2.sr_ss = forecastObj.value("sr_ss2").toString(); + m_preferences->forecast2.tmp_max = forecastObj.value("tmp_max2").toString(); + m_preferences->forecast2.tmp_min = forecastObj.value("tmp_min2").toString(); + m_preferences->forecast2.uv_index = forecastObj.value("uv_index2").toString(); + m_preferences->forecast2.vis = forecastObj.value("vis2").toString(); + m_preferences->forecast2.wind_deg = forecastObj.value("wind_deg2").toString(); + m_preferences->forecast2.wind_dir = forecastObj.value("wind_dir2").toString(); + m_preferences->forecast2.wind_sc = forecastObj.value("wind_sc2").toString(); + m_preferences->forecast2.wind_spd = forecastObj.value("wind_spd2").toString(); + + m_preferences->lifestyle.air_brf = lifestyleObj.value("air_brf").toString(); + m_preferences->lifestyle.air_txt = lifestyleObj.value("air_txt").toString(); + m_preferences->lifestyle.comf_brf = lifestyleObj.value("comf_brf").toString(); + m_preferences->lifestyle.comf_txt = lifestyleObj.value("comf_txt").toString(); + m_preferences->lifestyle.cw_brf = lifestyleObj.value("cw_brf").toString(); + m_preferences->lifestyle.cw_txt = lifestyleObj.value("cw_txt").toString(); + m_preferences->lifestyle.drsg_brf = lifestyleObj.value("drsg_brf").toString(); + m_preferences->lifestyle.drsg_txt = lifestyleObj.value("drsg_txt").toString(); + m_preferences->lifestyle.flu_brf = lifestyleObj.value("flu_brf").toString(); + m_preferences->lifestyle.flu_txt = lifestyleObj.value("flu_txt").toString(); + m_preferences->lifestyle.sport_brf = lifestyleObj.value("sport_brf").toString(); + m_preferences->lifestyle.sport_txt = lifestyleObj.value("sport_txt").toString(); + m_preferences->lifestyle.trav_brf = lifestyleObj.value("trav_brf").toString(); + m_preferences->lifestyle.trav_txt = lifestyleObj.value("trav_txt").toString(); + m_preferences->lifestyle.uv_brf = lifestyleObj.value("uv_brf").toString(); + m_preferences->lifestyle.uv_txt = lifestyleObj.value("uv_txt").toString(); + + QList forecastDatas; + forecastDatas.append(m_preferences->forecast0); + forecastDatas.append(m_preferences->forecast1); + forecastDatas.append(m_preferences->forecast2); + emit this->forecastDataRefreshed(forecastDatas, m_preferences->lifestyle); + + + /*ForecastWeather forecastData[3]; + for (int i = 0; i < 3; i++) { + forecastData[i].cond_code_d = "N/A"; + forecastData[i].cond_code_n = "N/A"; + forecastData[i].cond_txt_d = "N/A"; + forecastData[i].cond_txt_n = "N/A"; + forecastData[i].forcast_date = "N/A"; + forecastData[i].hum = "N/A"; + forecastData[i].mr_ms = "N/A"; + forecastData[i].pcpn = "N/A"; + forecastData[i].pop = "N/A"; + forecastData[i].pres = "N/A"; + forecastData[i].sr_ss = "N/A"; + forecastData[i].tmp_max = "N/A"; + forecastData[i].tmp_min = "N/A"; + forecastData[i].uv_index = "N/A"; + forecastData[i].vis = "N/A"; + forecastData[i].wind_deg = "N/A"; + forecastData[i].wind_dir = "N/A"; + forecastData[i].wind_sc = "N/A"; + forecastData[i].wind_spd = "N/A"; + }*/ + + /*QList forecastDatas; + ForecastWeather data0; + data0.forcast_date = forecastObj.value("forcast_date0").toString(); + data0.cond_code_d = forecastObj.value("cond_code_d0").toString(); + data0.cond_code_n = forecastObj.value("cond_code_n0").toString(); + data0.cond_txt_d = forecastObj.value("cond_txt_d0").toString(); + data0.cond_txt_n = forecastObj.value("cond_txt_n0").toString(); + data0.hum = forecastObj.value("hum0").toString(); + data0.mr_ms = forecastObj.value("mr_ms0").toString(); + data0.pcpn = forecastObj.value("pcpn0").toString(); + data0.pop = forecastObj.value("pop0").toString(); + data0.pres = forecastObj.value("pres0").toString(); + data0.sr_ss = forecastObj.value("sr_ss0").toString(); + data0.tmp_max = forecastObj.value("tmp_max0").toString(); + data0.tmp_min = forecastObj.value("tmp_min0").toString(); + data0.uv_index = forecastObj.value("uv_index0").toString(); + data0.vis = forecastObj.value("vis0").toString(); + data0.wind_deg = forecastObj.value("wind_deg0").toString(); + data0.wind_dir = forecastObj.value("wind_dir0").toString(); + data0.wind_sc = forecastObj.value("wind_sc0").toString(); + data0.wind_spd = forecastObj.value("wind_spd0").toString(); + ForecastWeather data1; + data1.forcast_date = forecastObj.value("forcast_date1").toString(); + ForecastWeather data2; + data2.forcast_date = forecastObj.value("forcast_date2").toString(); + forecastDatas.append(data0); + forecastDatas.append(data1); + forecastDatas.append(data2); + emit this->forecastDataRefreshed(forecastDatas);*/ +} + +void WeatherWorker::onPingBackPostReply() +{ + QNetworkReply *m_reply = qobject_cast(sender()); + int statusCode = m_reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); + if(m_reply->error() != QNetworkReply::NoError || statusCode != 200) {//200 is normal status + //qDebug() << "post host info request error:" << m_reply->error() << ", statusCode=" << statusCode; + if (statusCode == 301 || statusCode == 302) {//redirect + QVariant redirectionUrl = m_reply->attribute(QNetworkRequest::RedirectionTargetAttribute); + //qDebug() << "pingback redirectionUrl=" << redirectionUrl.toString(); + AccessDedirectUrlWithPost(redirectionUrl.toString()); + m_reply->close(); + m_reply->deleteLater(); + } + return; + } + + //QByteArray ba = m_reply->readAll(); + m_reply->close(); + m_reply->deleteLater(); + //QString reply_content = QString::fromUtf8(ba); + //qDebug() << "return size: " << ba.size() << reply_content; +} + +/* http://www.heweather.com/documents/status-code */ +QString WeatherWorker::getErrorCodeDescription(QString errorCode) +{ + if ("ok" == errorCode) { + return "数据正常"; + } + else if ("invalid key" == errorCode) { + return "错误的key,请检查你的key是否输入以及是否输入有误"; + } + else if ("unknown location" == errorCode) { + return "未知或错误城市/地区"; + } + else if ("no data for this location" == errorCode) { + return "该城市/地区没有你所请求的数据"; + } + else if ("no more requests" == errorCode) { + return "超过访问次数,需要等到当月最后一天24点(免费用户为当天24点)后进行访问次数的重置或升级你的访问量"; + } + else if ("param invalid" == errorCode) { + return "参数错误,请检查你传递的参数是否正确"; + } + else if ("too fast" == errorCode) {//http://www.heweather.com/documents/qpm + return "超过限定的QPM,请参考QPM说明"; + } + else if ("dead" == errorCode) {//http://www.heweather.com/contact + return "无响应或超时,接口服务异常请联系我们"; + } + else if ("permission denied" == errorCode) { + return "无访问权限,你没有购买你所访问的这部分服务"; + } + else if ("sign error" == errorCode) {//http://www.heweather.com/documents/api/s6/sercet-authorization + return "签名错误,请参考签名算法"; + } + else { + return tr("Unknown"); + } +} diff -Nru indicator-china-weather-2.2.8/src/weatherworker.h indicator-china-weather-3.0.2~201904291430/src/weatherworker.h --- indicator-china-weather-2.2.8/src/weatherworker.h 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/src/weatherworker.h 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2013 ~ 2019 National University of Defense Technology(NUDT) & Tianjin Kylin Ltd. + * + * Authors: + * Kobe Lee lixiang@kylinos.cn/kobe24_lixiang@126.com + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef WEATHERWORKER_H +#define WEATHERWORKER_H + +#include +#include +#include +#include +#include + +#include "data.h" + +class WeatherWorker : public QObject +{ + Q_OBJECT + +public: + + enum WeatherType + { + Type_Observe, + Type_Forecast + }; + + explicit WeatherWorker(QObject *parent = 0); + ~WeatherWorker(); + + + bool isNetWorkSettingsGood(); + void netWorkOnlineOrNot(); + + void refreshObserveWeatherData(const QString &cityId); + void refreshForecastWeatherData(const QString &cityId); + + void requestPingBackWeatherServer(); + void requestPostHostInfoToWeatherServer(); + + bool AccessDedirectUrl(const QString &redirectUrl, WeatherType weatherType); + void AccessDedirectUrlWithPost(const QString &redirectUrl); + + QString getErrorCodeDescription(QString errorCode); + +signals: + void observeDataRefreshed(const ObserveWeather &data); + void forecastDataRefreshed(const QList &datas, LifeStyle data); + void nofityNetworkStatus(const QString &status); + void responseFailure(int code); + void requestDiplayServerNotify(const QString ¬ifyInfo); + +public slots: + void onWeatherObserveReply(); + void onWeatherForecastReply(); + void onPingBackPostReply(); + void networkLookedUp(const QHostInfo &host); + +private: + QNetworkAccessManager *m_networkManager = nullptr; + QString m_hostInfoParameters; +}; + +#endif // WEATHERWORKER_H Binary files /tmp/tmpcviXQg/jd8qRmobTw/indicator-china-weather-2.2.8/translation/indicator-china-weather_zh_CN.qm and /tmp/tmpcviXQg/utQTwL16u7/indicator-china-weather-3.0.2~201904291430/translation/indicator-china-weather_zh_CN.qm differ diff -Nru indicator-china-weather-2.2.8/translation/indicator-china-weather_zh_CN.ts indicator-china-weather-3.0.2~201904291430/translation/indicator-china-weather_zh_CN.ts --- indicator-china-weather-2.2.8/translation/indicator-china-weather_zh_CN.ts 1970-01-01 00:00:00.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/translation/indicator-china-weather_zh_CN.ts 2019-04-24 03:09:16.000000000 +0000 @@ -0,0 +1,642 @@ + + + + + AboutDialog + + + + Kylin Weather - About + 麒麟天气 - 关于 + + + + Real-time and three-day weather forecast information is obtained from Ubuntu Kylin weather server, which supports multi-city switching and automatic data updating. + 从麒麟天气服务器实时获取天气实况和三天天气预报,支持多城市切换和天气自动更新。 + + + + AirWidget + + + aqi:%1 + 空气质量指数:%1 + + + + qlty:%1 + 空气质量:%1 + + + + main:%1 + 主要污染物:%1 + + + + pm25:%1 + pm25:%1 + + + + pm10:%1 + pm10:%1 + + + + no2:%1 + 二氧化氮:%1 + + + + so2:%1 + 二氧化硫:%1 + + + + co:%1 + 一氧化碳:%1 + + + + o3:%1 + 臭氧:%1 + + + + CityItemWidget + + + Set as default + 设为默认 + + + + + %1 [Default] + %1 [默认] + + + + CityWidget + + + Add City + 添加城市 + + + + Only 10 cities can be added at most! + 最多只能添加10个城市! + + + + The city already exists! + 该城市已存在! + + + + At least one city needs to be preserved! + 至少需要保留一个城市! + + + + ForecastItemWidget + + + Today + 今天 + + + + ForecastWeatherWidget + + + Life index + 生活指数 + + + + IndexItemWidget + + + comf + 舒适度指数 + + + + drsg + 穿衣指数 + + + + flu + 感冒指数 + + + + sport + 运动指数 + + + + trav + 旅游指数 + + + + uv + 紫外线指数 + + + + cw + 洗车指数 + + + + air + 空气指数 + + + + MainWindow + + + + Kylin Weather + 麒麟天气 + + + + Refresh time + 刷新时间 + + + + Network not connected + 网络未连接 + + + + Getting data + 正在获取数据 + + + + Incorrect access address + 访问地址异常 + + + + Network error code:%1 + 网络错误代码:%1 + + + + Refresh time:Just updated + 刷新时间:刚刚 + + + + Refresh time:%1 minute ago + 刷新时间:%1 分钟之前 + + + + Refresh time:%1 minutes ago + 刷新时间:%1 分钟之前 + + + + City + 城市 + + + + Release time + 发布时间 + + + + Weather Forecast + 天气预报 + + + + Settings + 设置 + + + + Kylin Weather - About + 麒麟天气 - 关于 + + + + Exit + 退出 + + + + Temperature:%1˚C + 温度:%1˚C + + + + Relative humidity:%1 + 相对湿度:%1 + + + + + Air quality:%1 + 空气质量:%1 + + + + Unknown + 未知 + + + + Release time:%1 + 发布时间:%1 + + + + NetworkErrorWidget + + + retry + 重试 + + + + Current network exception, please check network settings + 当前网络异常,请检查网络设置 + + + + NowWeatherWidget + + + Humidity + 湿度 + + + Update failure + 更新失败 + + + + Static wind + 静风 + + + + %1stage wind + %1级风 + + + + Unknown + 未知 + + + + QObject + + + Monday + 星期一 + + + + Tuesday + 星期二 + + + + Wednesday + 星期三 + + + + Thursday + 星期四 + + + + Friday + 星期五 + + + + Saturday + 星期六 + + + + Sunday + 星期日 + + + comf + 舒适度指数 + + + drsg + 穿衣指数 + + + flu + 感冒指数 + + + sport + 运动指数 + + + trav + 旅游指数 + + + uv + 紫外线指数 + + + cw + 洗车指数 + + + air + 空气污染扩散条件指数 + + + + Extremely cold + 极寒 + + + + Cold and cold + 奇寒 + + + + Severe cold + 酷寒 + + + + Bitter cold + 严寒 + + + + Deep cold + 深寒 + + + + Very cold + 大寒 + + + + Lesser cold + 小寒 + + + + Mildly cold + 轻寒 + + + + Slightly cold + 微寒 + + + + Cold + + + + + Warm and cool + 温凉 + + + + Mild + 温和 + + + + Warm + 温暖 + + + + Hot + + + + + Scorching hot + 炎热 + + + + Boiling hot + 酷热 + + + + Excessive heat + 奇热 + + + + Extremely hot + 极热 + + + + SearchDialog + + Kylin Weather - Search + 麒麟天气 - 查找城市 + + + No Result + 没有结果 + + + + SearchInputEdit + + + Please input the city to search + 请输入城市名查找 + + + + SearchTitleBar + + + Kylin Weather - Search + 麒麟天气 - 查找城市 + + + + SettingDialog + + + + + Kylin Weather - Setting + 麒麟天气 - 设置 + + + + Variable configuration + 可变配置 + + + + Update frequency + 更新周期 + + + + Background transparency + 背景透明度 + + + + Fixed configuration + 固定配置 + + + + Temperature standard + 温度标准 + + + + Source of weather: heweather + 天气来源:和风天气 + + + + Kylin Weather - Search + 麒麟天气 - 查找城市 + + + + No Result + 没有结果 + + + + Only 10 cities can be added at most! + 最多只能添加10个城市! + + + + The city already exists! + 该城市已存在! + + + Source of weather + 天气来源 + + + + SettingTitleBar + + + Kylin Weather - Setting + 麒麟天气 - 设置 + + + + Location Setting + 地区设置 + + + + System Setting + 系统设置 + + + + ToolTip + + + Sunrise: %1 sunset: %2 + 日出: %1 日落: %2 + + + + Sunrise and sunset: %1 + 日出日落:%1 + + + + Moonrise: %1 moonset: %2 + 月升:%1 月降:%2 + + + + Moonrise and moonset: %1 + 月升月降:%1 + + + + Relative humidity:%1 + 相对湿度:%1 + + + + Precipitation:%1 mm + 降水量:%1 mm + + + + Probability of precipitation:%1 + 降水概率:%1 + + + + Atmospheric pressure:%1 hPa + 大气压强:%1 hPa + + + + UV intensity index:%1 + 紫外线强度指数:%1 + + + + Visibility:%1 km + 能见度:%1 km + + + + Wind:%1 %2stage direction %3 speed %4 km/h + 风:%1 %2级 风向 %3 风速 %4 km/h + + + + WeatherWorker + + + Unknown + 未知 + + + diff -Nru indicator-china-weather-2.2.8/ui/Assistant.ui indicator-china-weather-3.0.2~201904291430/ui/Assistant.ui --- indicator-china-weather-2.2.8/ui/Assistant.ui 2018-03-19 06:04:16.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/ui/Assistant.ui 1970-01-01 00:00:00.000000000 +0000 @@ -1,239 +0,0 @@ - - - - - - - - 12 - 编辑地点 - mouse - 400 - 200 - False - - - - - - True - 12 - 6 - - - True - 0 - 0 - 6 - 请先找到你所在的地点(拼音即可): - True - word-char - - - 0 - - - - - True - 12 - 6 - - - True - - - - True - True - - - - - 0 - - - - - True - 查找 - - - - 1 - - - - - 1 - - - - - 选择一个地点 - - - - - True - 12 - 6 - - - True - 0 - 请输入该地点的名称: - - - False - 0 - - - - - True - True - - - - False - 1 - - - - - 命名 - - - - - True - 12 - - - True - 0 - 6 - 请仔细阅读下面的选择。如果有不正确的地方,请返回并选择正确的选项。 - True - word-char - - - False - 0 - - - - - True - 12 - - - True - - - True - 5 - - - True - False - - - False - 0 - - - - - True - 0 - 标签: - True - - - False - 1 - - - - - True - 0 - <b>Home</b> - True - - - 2 - - - - - False - 0 - - - - - True - 5 - - - True - False - - - False - 0 - - - - - True - 0 - 地点: - True - - - False - 1 - - - - - True - 0 - <b>Orange, Texas</b> - True - - - 2 - - - - - False - 1 - - - - - - - False - 1 - - - - - - - - confirm - 回顾选择 - - - - diff -Nru indicator-china-weather-2.2.8/ui/assistant.xml indicator-china-weather-3.0.2~201904291430/ui/assistant.xml --- indicator-china-weather-2.2.8/ui/assistant.xml 2018-03-19 06:04:16.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/ui/assistant.xml 1970-01-01 00:00:00.000000000 +0000 @@ -1,8 +0,0 @@ - - - - - diff -Nru indicator-china-weather-2.2.8/ui/Forecast-org.ui indicator-china-weather-3.0.2~201904291430/ui/Forecast-org.ui --- indicator-china-weather-2.2.8/ui/Forecast-org.ui 2018-03-19 06:04:16.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/ui/Forecast-org.ui 1970-01-01 00:00:00.000000000 +0000 @@ -1,1149 +0,0 @@ - - - - - - 540 - 600 - False - 0.97999999999999998 - 六天天气预报 - False - mouse - ../indicator-china-weather.png - - - True - False - 10 - 8 - - - True - False - 12 - - - 100 - 20 - True - False - 0.14000000059604645 - 城市 - 67 - - - - - - - True - True - 0 - - - - - 300 - 20 - True - False - 1 - 18 - 发布时间 - - - - - - True - True - 1 - - - - - True - True - 0 - - - - - True - False - 10 - - - True - False - 5 - - - 150 - True - False - 今天 - - - - - - True - True - 0 - - - - - True - False - 天气 - - - - - - True - True - 1 - - - - - True - False - 5 - - - True - False - 0.75 - gtk-missing-image - - - True - True - 0 - - - - - True - False - 0.25 - gtk-missing-image - - - True - True - 1 - - - - - True - True - 2 - - - - - True - False - 温度 - - - - - - True - True - 3 - - - - - True - False - 风力 - - - - - - True - True - 4 - - - - - True - False - 白天风力 - - - - - - True - True - 5 - - - - - True - False - 夜间风力 - - - - - - True - True - 6 - - - - - True - False - 日出日落 - - - - - - True - True - 7 - - - - - True - True - 0 - - - - - True - False - 5 - - - 150 - True - False - 第二天 - - - True - True - 0 - - - - - True - False - 天气 - - - True - True - 1 - - - - - True - False - 5 - - - True - False - 0.75 - gtk-missing-image - - - True - True - 0 - - - - - True - False - 0.25 - gtk-missing-image - - - True - True - 1 - - - - - True - True - 2 - - - - - True - False - 温度 - - - True - True - 3 - - - - - True - False - 风力 - - - True - True - 4 - - - - - True - False - 白天风力 - - - True - True - 5 - - - - - True - False - 夜间风力 - - - True - True - 6 - - - - - True - False - 日出日落 - - - True - True - 7 - - - - - True - True - 1 - - - - - True - False - 5 - - - 150 - True - False - 第三天 - - - True - True - 0 - - - - - True - False - 天气 - - - True - True - 1 - - - - - True - False - 5 - - - True - False - 0.75 - gtk-missing-image - - - True - True - 0 - - - - - True - False - 0.25 - gtk-missing-image - - - True - True - 1 - - - - - True - True - 2 - - - - - True - False - 温度 - - - True - True - 3 - - - - - True - False - 风力 - - - True - True - 4 - - - - - True - False - 白天风力 - - - True - True - 5 - - - - - True - False - 夜间风力 - - - True - True - 6 - - - - - True - False - 日出日落 - - - True - True - 7 - - - - - True - True - 2 - - - - - True - True - 1 - - - - - True - False - 10 - - - True - False - 5 - - - 150 - True - False - 第四天 - - - True - True - 0 - - - - - True - False - 天气 - - - True - True - 1 - - - - - True - False - 5 - - - True - False - 0.75 - gtk-missing-image - - - True - True - 0 - - - - - True - False - 0.25 - gtk-missing-image - - - True - True - 1 - - - - - True - True - 2 - - - - - True - False - 温度 - - - True - True - 3 - - - - - True - False - 风力 - - - True - True - 4 - - - - - True - True - 0 - - - - - True - False - 5 - - - 150 - True - False - 第五天 - - - True - True - 0 - - - - - True - False - 天气 - - - True - True - 1 - - - - - True - False - 5 - - - True - False - 0.75 - gtk-missing-image - - - True - True - 0 - - - - - True - False - 0.25 - gtk-missing-image - - - True - True - 1 - - - - - True - True - 2 - - - - - True - False - 温度 - - - True - True - 3 - - - - - True - False - 风力 - - - True - True - 4 - - - - - True - True - 1 - - - - - True - False - 5 - - - 150 - True - False - 第六天 - - - True - True - 0 - - - - - True - False - 天气 - - - True - True - 1 - - - - - True - False - 5 - - - True - False - 0.75 - gtk-missing-image - - - True - True - 0 - - - - - True - False - 0.25 - gtk-missing-image - - - True - True - 1 - - - - - True - True - 2 - - - - - True - False - 温度 - - - True - True - 3 - - - - - True - False - 风力 - - - True - True - 4 - - - - - True - True - 2 - - - - - True - True - 2 - - - - - True - False - - - True - False - - - True - False - 5 - - - 240 - True - False - 0 - 紫外线指数: - - - True - True - 0 - - - - - 240 - True - False - 0 - 晨练指数: - - - True - True - 1 - - - - - True - True - 0 - - - - - True - False - 5 - - - 240 - True - False - 0 - 洗车指数: - - - True - True - 0 - - - - - 240 - True - False - 0 - 晾晒指数: - - - True - True - 1 - - - - - True - True - 1 - - - - - True - False - 5 - - - 240 - True - False - 0 - 旅游指数: - - - True - True - 0 - - - - - 240 - True - False - 0 - 过敏指数: - - - True - True - 1 - - - - - True - True - 2 - - - - - True - False - 5 - - - 240 - True - False - 0 - 舒适指数: - - - True - True - 0 - - - - - 240 - True - False - 0 - 24小时穿衣指数: - - - True - True - 1 - - - - - True - True - 3 - - - - - True - False - 0.0099999997764825821 - 温馨提示: - True - middle - - - True - True - 4 - - - - - True - False - - - True - False - 5 - - - 240 - True - False - 0 - 城市级别: - - - True - True - 0 - - - - - 240 - True - False - 0 - 区号: - - - True - True - 1 - - - - - True - True - 0 - - - - - True - False - 5 - - - 240 - True - False - 0 - 经纬度: - - - True - True - 0 - - - - - 240 - True - False - 0 - 邮政编码: - - - True - True - 1 - - - - - True - True - 1 - - - - - True - False - 5 - - - 240 - True - False - 0 - 城市海拔: - - - True - True - 0 - - - - - 240 - True - False - 0 - 雷达站点: - - - True - True - 1 - - - - - True - True - 2 - - - - - True - True - 5 - - - - - True - True - 0 - - - - - True - True - 3 - - - - - - diff -Nru indicator-china-weather-2.2.8/ui/Forecast.ui indicator-china-weather-3.0.2~201904291430/ui/Forecast.ui --- indicator-china-weather-2.2.8/ui/Forecast.ui 2018-03-19 06:04:16.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/ui/Forecast.ui 1970-01-01 00:00:00.000000000 +0000 @@ -1,1177 +0,0 @@ - - - - - - 550 - 531 - False - 0 - 优客天气预报 - False - center - 540 - 600 - True - False - - - True - False - True - True - 0 - 10 - - - contentgrid - True - False - True - True - 10 - - - True - False - True - True - - - True - False - True - vertical - 5 - - - 150 - True - False - 今天 - - - - - - False - True - 0 - - - - - 150 - True - False - 天气 - - - - - - False - True - 1 - - - - - True - False - - - True - False - 0.75 - gtk-missing-image - - - True - True - 0 - - - - - True - False - 0.25 - gtk-missing-image - - - True - True - 1 - - - - - False - True - 2 - - - - - 150 - True - False - 温度 - - - - - - False - True - 3 - - - - - 150 - True - False - 风向风力等级 - - - - - - False - True - 4 - - - - - 150 - True - False - 风向(360度) - - - - - - False - True - 5 - - - - - 150 - True - False - 风速(kmph) - - - - - - False - True - 6 - - - - - 150 - True - False - 相对湿度(%) - - - - - - False - True - 7 - - - - - 150 - True - False - 降水量(mm) - - - - - - False - True - 8 - - - - - 150 - True - False - 降水概率 - - - - - - False - True - 9 - - - - - 150 - True - False - 气压 - - - - - - False - True - 10 - - - - - 150 - True - False - 紫外线指数 - - - - - - False - True - 11 - - - - - 150 - True - False - 能见度(km) - - - - - - False - True - 12 - - - - - 150 - True - False - 月升月落时间 - - - - - - False - True - 13 - - - - - 150 - True - False - 日出日落时间 - - - - - - False - True - 14 - - - - - 0 - 0 - - - - - True - False - True - vertical - 5 - - - 150 - True - False - 第二天 - - - False - True - 0 - - - - - 150 - True - False - 天气 - - - False - True - 1 - - - - - True - False - - - True - False - 0.75 - gtk-missing-image - - - True - True - 0 - - - - - True - False - 0.25 - gtk-missing-image - - - True - True - 1 - - - - - False - True - 2 - - - - - 150 - True - False - 温度 - - - False - True - 3 - - - - - 150 - True - False - 风向风力等级 - - - False - True - 4 - - - - - 150 - True - False - 风向(360度) - - - False - True - 5 - - - - - 150 - True - False - 风速(kmph) - - - False - True - 6 - - - - - 150 - True - False - 相对湿度(%) - - - False - True - 7 - - - - - 150 - True - False - 降水量(mm) - - - False - True - 8 - - - - - 150 - True - False - 降水概率 - - - False - True - 9 - - - - - 150 - True - False - 气压 - - - False - True - 10 - - - - - 150 - True - False - 紫外线指数 - - - False - True - 11 - - - - - 150 - True - False - 能见度(km) - - - False - True - 12 - - - - - 150 - True - False - 月升月落时间 - - - False - True - 13 - - - - - 150 - True - False - 日出日落时间 - - - False - True - 14 - - - - - 1 - 0 - - - - - True - False - True - vertical - 5 - - - 150 - True - False - 第三天 - - - False - True - 0 - - - - - 150 - True - False - 天气 - - - False - True - 1 - - - - - True - False - - - True - False - 0.75 - gtk-missing-image - - - True - True - 0 - - - - - True - False - 0.25 - gtk-missing-image - - - True - True - 1 - - - - - False - True - 2 - - - - - 150 - True - False - 温度 - - - False - True - 3 - - - - - 150 - True - False - 风向风力等级 - - - False - True - 4 - - - - - 150 - True - False - 风向(360度) - - - False - True - 5 - - - - - 150 - True - False - 风速(kmph) - - - False - True - 6 - - - - - 150 - True - False - 相对湿度(%) - - - False - True - 7 - - - - - 150 - True - False - 降水量(mm) - - - False - True - 8 - - - - - 150 - True - False - 降水概率 - - - False - True - 9 - - - - - 150 - True - False - 气压 - - - False - True - 10 - - - - - 150 - True - False - 紫外线指数 - - - False - True - 11 - - - - - 150 - True - False - 能见度(km) - - - False - True - 12 - - - - - 150 - True - False - 月升月落时间 - - - False - True - 13 - - - - - 150 - True - False - 日出日落时间 - - - False - True - 14 - - - - - 2 - 0 - - - - - 0 - 0 - - - - - True - False - True - True - 5 - - - True - False - 10 - 10 - 5 - True - vertical - - - True - False - - - 240 - True - False - 舒适度指数: - 0 - - - True - True - 0 - - - - - 240 - True - False - 洗车指数: - 0 - - - True - True - 1 - - - - - False - True - 0 - - - - - True - False - - - 240 - True - False - 穿衣指数: - 0 - - - True - True - 0 - - - - - 240 - True - False - 感冒指数: - 0 - - - True - True - 1 - - - - - False - True - 1 - - - - - True - False - - - 240 - True - False - 运动指数: - 0 - - - True - True - 0 - - - - - 240 - True - False - 旅游指数: - 0 - - - True - True - 1 - - - - - False - True - 2 - - - - - True - False - - - 240 - True - False - 紫外线指数: - 0 - - - True - True - 0 - - - - - False - True - 3 - - - - - 0 - 0 - - - - - 0 - 1 - - - - - - 0 - 1 - - - - - True - False - True - 0 - 10 - - - 30 - True - False - - - 36 - 36 - True - True - True - end - center - False - False - 0.49000000953674316 - 0.49000000953674316 - - - - - 0 - 0 - - - - - 36 - 36 - True - True - True - end - center - False - False - - - - - 1 - 0 - - - - - True - False - 67 - True - 天气预报 - - - - 2 - 0 - - - - - - 0 - 0 - - - - - True - False - True - - - True - False - start - 5 - 10 - True - 城市 - - - - False - True - 0 - - - - - True - False - end - 5 - True - 发布时间 - right - - - False - True - end - 1 - - - - - 0 - 1 - - - - - - 0 - 0 - - - - - True - False - True - True - 10 - - - True - False - end - True - True - - - 0 - 0 - - - - - True - False - start - True - True - 正在获取天气预报,请耐心等待...... - - - 1 - 0 - - - - - True - False - start - True - True - 天气预报数据获取失败,请重试! - - - 2 - 0 - - - - - 重试 - 91 - 25 - True - True - True - start - center - True - - - - - 3 - 0 - - - - - 0 - 2 - - - - - - diff -Nru indicator-china-weather-2.2.8/ui/PreferencesDialog-org.ui indicator-china-weather-3.0.2~201904291430/ui/PreferencesDialog-org.ui --- indicator-china-weather-2.2.8/ui/PreferencesDialog-org.ui 2018-03-19 06:04:16.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/ui/PreferencesDialog-org.ui 1970-01-01 00:00:00.000000000 +0000 @@ -1,424 +0,0 @@ - - - - - - - - - - - 5 - 60 - 1 - 10 - - - False - 12 - 天气配置 - mouse - 320 - 300 - ../indicator-china-weather.png - normal - - - True - False - 6 - - - True - False - end - - - gtk-cancel - False - True - False - True - True - - - - False - False - 0 - - - - - gtk-ok - False - True - False - False - True - True - - - - False - False - 1 - - - - - False - False - end - 0 - - - - - True - True - - - True - False - 12 - 12 - - - True - False - True - - - True - False - 0 - 3 - <b>可变配置</b> - True - middle - - - False - True - 0 - - - - - Enable the Weather Indicator Applet - False - True - False - 0 - True - True - - - False - True - 1 - - - - - 图标旁显示温度 - False - True - True - False - 0 - True - - - False - True - 2 - - - - - True - False - 6 - - - True - False - 1 - 更新时间(5-60): - True - - - False - True - 0 - - - - - True - True - - rate - - - False - False - 1 - - - - - True - False - 0 - 分钟 - - - False - True - 2 - - - - - True - True - 3 - - - - - False - True - 0 - - - - - True - False - - - True - False - 0 - 3 - <b>固定配置</b> - True - - - False - True - 0 - - - - - True - False - 12 - - - True - False - True - - - True - False - 0.0099999997764825821 - 0.50999999046325684 - 1 - 温标 :摄氏 (°C) - True - right - - - False - True - 0 - - - - - True - False - 0 - 3 - 风速单位: 蒲福级 - True - - - False - True - 1 - - - - - True - False - 0 - 3 - 天气来源: 中国气象局 - True - - - False - True - 2 - - - - - - - True - True - 1 - - - - - False - True - 1 - - - - - - - True - False - 常规 - - - False - - - - - True - False - 12 - 6 - - - True - True - in - - - True - True - citieslist - False - False - True - 0 - - - - - - City - True - - - - 0 - - - - - - - - - True - True - 0 - - - - - True - False - 6 - start - - - gtk-add - False - True - True - True - True - 0.49000000953674316 - 0.4699999988079071 - top - - - - False - False - 0 - - - - - gtk-delete - False - True - True - True - True - - - - False - False - 1 - - - - - False - True - 1 - - - - - 2 - - - - - True - False - 地点 - - - 2 - False - - - - - False - True - 1 - - - - - - cancel_button - ok_button - - - diff -Nru indicator-china-weather-2.2.8/ui/PreferencesDialog.ui indicator-china-weather-3.0.2~201904291430/ui/PreferencesDialog.ui --- indicator-china-weather-2.2.8/ui/PreferencesDialog.ui 2018-03-19 06:04:16.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/ui/PreferencesDialog.ui 1970-01-01 00:00:00.000000000 +0000 @@ -1,553 +0,0 @@ - - - - - - - - - - - - 5 - 60 - 1 - 10 - - - False - 0 - 天气配置 - False - center - 320 - 300 - True - False - False - - - True - False - vertical - 5 - - - 36 - True - False - - - 36 - 36 - True - False - True - - - - - 0 - 0 - - - - - True - False - 70 - True - 天气配置 - center - - - - 2 - 0 - - - - - 36 - 36 - True - True - True - - - - - 1 - 0 - - - - - - False - True - 0 - - - - - 240 - True - False - 5 - 5 - - - 240 - True - True - True - True - - - True - False - vertical - 10 - - - 100 - True - False - 15 - 5 - 0 - etched-out - - - True - False - 12 - - - True - False - vertical - - - True - False - 5 - - - True - True - False - 0 - True - - - False - False - 0 - - - - - True - False - 0 - 托盘图标旁显示温度 - - - False - True - 1 - - - - - False - True - 0 - - - - - True - False - - - True - False - 0 - 更新频率(5-60): - True - - - False - True - 0 - - - - - True - True - - 5 - rate - 5 - - - False - False - 1 - - - - - True - False - 0 - 分钟 - - - False - True - 2 - - - - - False - True - 1 - - - - - - - - - True - False - 可变配置 - - - - - - - False - True - 0 - - - - - 100 - True - False - 15 - 5 - 0 - etched-out - - - True - False - 12 - - - True - False - vertical - 5 - - - True - False - 0 - 温标 :摄氏 (°C) - - - False - True - 0 - - - - - True - False - 0 - 风速单位: 蒲福级 - - - False - True - 1 - - - - - True - False - 0 - 天气来源: 中国气象局 - - - False - True - 2 - - - - - - - - - True - False - 固定配置 - - - - - - - False - True - 1 - - - - - - - True - False - 常规 - - - False - - - - - True - False - vertical - 10 - - - True - False - 5 - 10 - start - - - 添加 - True - True - True - - - - - True - True - 0 - - - - - 删除 - True - True - True - - - - - True - True - 1 - - - - - False - True - end - 1 - - - - - True - True - in - - - 150 - True - True - citieslist - False - False - True - 0 - - - - - - City - True - - - - 0 - - - - - - - - - True - True - 2 - - - - - 1 - - - - - True - False - 地点 - - - 1 - False - - - - - - - - - - - 0 - 0 - - - - - - True - True - 1 - - - - - True - False - - - True - False - 10 - 10 - True - False - 10 - end - - - 确定 - 91 - 25 - True - True - True - center - - - - - False - True - 0 - - - - - 取消 - 91 - 25 - True - True - True - center - 0.50999999046325684 - - - - - False - True - 1 - - - - - 0 - 0 - - - - - False - True - 2 - - - - - - diff -Nru indicator-china-weather-2.2.8/ui/preferences_dialog.xml indicator-china-weather-3.0.2~201904291430/ui/preferences_dialog.xml --- indicator-china-weather-2.2.8/ui/preferences_dialog.xml 2018-03-19 06:04:16.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/ui/preferences_dialog.xml 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ - - - - - - diff -Nru indicator-china-weather-2.2.8/ui/SelectDialog-org.ui indicator-china-weather-3.0.2~201904291430/ui/SelectDialog-org.ui --- indicator-china-weather-2.2.8/ui/SelectDialog-org.ui 2018-03-19 06:04:16.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/ui/SelectDialog-org.ui 1970-01-01 00:00:00.000000000 +0000 @@ -1,131 +0,0 @@ - - - - - False - 12 - 选择城市 - mouse - 400 - 120 - ../indicator-china-weather.png - normal - - - True - False - 15 - - - True - False - 18 - True - - - True - False - 24 - - - True - False - - - - True - True - 0 - - - - - True - False - - - - True - True - 1 - - - - - True - False - - - True - True - 2 - - - - - True - True - 0 - - - - - False - True - 0 - - - - - True - False - end - - - gtk-cancel - False - True - False - True - True - - - - False - False - 0 - - - - - gtk-ok - False - True - True - False - True - True - - - - False - False - 1 - - - - - False - False - end - 0 - - - - - - cancel_button - ok_button - - - diff -Nru indicator-china-weather-2.2.8/ui/SelectDialog.ui indicator-china-weather-3.0.2~201904291430/ui/SelectDialog.ui --- indicator-china-weather-2.2.8/ui/SelectDialog.ui 2018-03-19 06:04:16.000000000 +0000 +++ indicator-china-weather-3.0.2~201904291430/ui/SelectDialog.ui 1970-01-01 00:00:00.000000000 +0000 @@ -1,204 +0,0 @@ - - - - - - False - 0 - 选择城市 - False - True - center - 400 - 200 - True - False - False - - - True - False - vertical - 10 - - - 36 - True - False - - - 36 - 36 - True - False - True - - - - - 0 - 0 - - - - - True - False - center - 35 - True - 0 - 选择城市 - center - - - - 1 - 0 - - - - - - False - True - 0 - - - - - True - False - center - 5 - 5 - 5 - 5 - True - - - True - False - 10 - - - True - False - - - - True - True - 0 - - - - - True - False - - - - True - True - 1 - - - - - True - False - - - True - True - 2 - - - - - 0 - 0 - - - - - - True - True - 1 - - - - - True - False - 10 - - - True - False - 5 - True - 10 - end - - - 确定 - True - True - True - - - - - True - True - 0 - - - - - 取消 - True - True - True - - - - - True - True - 1 - - - - - 0 - 0 - - - - - False - True - end - 2 - - - - - -