赞
踩
import random import math import matplotlib.pyplot as plt import city class no: #该类表示每个点的坐标 def __init__(self,x,y): self.x = x self.y = y def draw(t): #该函数用于描绘路线图 x = [0] * (m+1) y = [0] * (m+1) for i in range(m): x[i] = p[t[i]].x y[i] = p[t[i]].y x[m] = p[t[0]].x y[m] = p[t[0]].y plt.plot(x,y,color='r',marker='*' ) plt.show() def GA_TSP(pc_=0.9,pm_=0.2,n_=10,cross=1,epochs=10000): '''与禁忌搜索算法的对比''' global n,m,pc,pm,best,p,dna,value,way p = [] pc = pc_ pm = pm_ #pc为交配概率 pm为变异概率 best = 1000 #best记录最优距离,初始化无限大 n = n_ #n:样本个数 m = 100 #m:城市个数 dna = [[0]*(m) for i in range(n)] #开辟n*m的数组 value = [0.0]*n #value数组记录个体适应度 way = [0]*m #way数组记录最优解路线 mycol() #数据输入 init() #群体初始化 a = [] for i in range(epochs): #控制进化次数 slove(cross) a.append(best) #draw(way) # 画图描绘路线 #print("The way is",way) # 打印路线,以序列表示 #print("************************") return a def mutation(x): # 变异操作函数 x1 = [0]*m for i in range(m): x1[i] = x[i] a = random.randint(0,m-1) #随机选出两个点,将之间各点进行倒置 b = random.randint(0,m-1) if(a > b): a,b = b,a le = b - a + 1 for i in range(le): x[a+i] = x1[b-i] def mycol(): #城市坐标输入 ''' p.append(no( 16 , 96 )) p.append(no( 16 , 94 )) p.append(no( 20 , 92 )) p.append(no( 22 , 93 )) p.append(no( 25 , 97 )) p.append(no( 22 , 96 )) p.append(no( 20 , 97 )) p.append(no( 17 , 96 )) p.append(no( 16 , 97 )) p.append(no( 14 , 98 )) p.append(no( 17 , 97 )) p.append(no( 21 , 95 )) p.append(no( 19 , 97 )) p.append(no( 20 , 94 )) ''' a = dict.values(city.china) a = list(a) for i in range(30): p.append(no(a[i][0],a[i][1])) def init(): #初始化函数 随机产生初始个体 vis = [0] * m num = 0 for i in range(n): for j in range(m): vis[j] = 0 for j in range(m): num = random.randint(0,m-1) while(vis[num] == 1): # 第num个城市已被占用,需要重新选择num num = random.randint(0,m-1) vis[num] = 1 # 表示第num个城市被使用 dna[i][j] = num # 表示第j步去第num个城市 def get_value(t): #适应度计算,即计算当先线路的距离 # t就是dna[i],一个列表,长度为m ans = 0.0 for i in range(1,m): #两点距离公式 ans += math.sqrt((p[t[i]].x-p[t[i-1]].x) * (p[t[i]].x-p[t[i-1]].x) + (p[t[i]].y-p[t[i-1]].y) * (p[t[i]].y-p[t[i-1]].y)) ans += math.sqrt((p[t[0]].x-p[t[m-1]].x) * (p[t[0]].x-p[t[m-1]].x) + (p[t[0]].y-p[t[m-1]].y) * (p[t[0]].y-p[t[m-1]].y))#计算首尾结点的距离 return ans def find(x,num,a=0,b=99): #交叉算子运算时判断是否出现重复的城市id for i in range(a,b+1): if(num[i] == x): return i return -1 def cross2(x,y): # 均匀交叉法 x1 = [0] * m y1 = [0] * m sample = [] for i in range(m): x1[i] = x[i] y1[i] = y[i] sample.append(random.randint(0,1)) #print(sample) for i in range(m): #交叉运算 if(sample[i]==0): # 模板值为0则xy交换 if(y[i] not in x1): x1[i] = y[i] if(x[i] not in x1): y1[i] = x[i] def cross1(x,y): # 多点交叉法 x1 = [0]*m y1 = [0]*m for i in range(m): x1[i] = x[i] y1[i] = y[i] a = random.randint(0,m-1) #随机产生两个点 b = random.randint(0,m-1) if(a > b): a,b = b,a for i in range(a): #交叉运算 x1[i]=y[i] y1[i]=x[i] for i in range(b+1,m): x1[i]=y[i] y1[i]=x[i] ob = 0 for i in range(m): #判断交叉的合法性并进行维护,直到交叉成功 if(i<a or i>b): ob = find(x1[i],x1,a,b) while(ob != -1):#x1[i]与x[ob]重复 x1[i] = y1[ob]#y1[ob]即y[ob],必与x[ob](x1[ob])不同,将之赋给x1[i],出现不重复概率更高 ob = find(x1[i],x1,a,b)#再次检测 for i in range(m): #操作同上,维护另一新个体的交叉合法性。 if(i<a or i>b): ob = find(y1[i],y1,a,b) while(ob != -1): y1[i] = x1[ob] ob = find(y1[i],y1,a,b) for i in range(m): x[i] = x1[i] y[i] = y1[i] def cross(x,y): # 一点交叉法 x1 = [0]*m y1 = [0]*m for i in range(m): x1[i] = x[i] y1[i] = y[i] a = random.randint(0,m-1) #随机产生一个点 for i in range(a): #交叉运算 x1[i]=y[i] y1[i]=x[i] ob = 0 for i in range(m): #判断交叉的合法性并进行维护,直到交叉成功 if(i<a): ob = find(x1[i],x1,a) while(ob != -1):#x1[i]与x[ob]重复 x1[i] = y1[ob]#y1[ob]即y[ob],必与x[ob](x1[ob])不同,将之赋给x1[i],出现不重复概率更高 ob = find(x1[i],x1,a)#再次检测 for i in range(m): #操作同上,维护另一新个体的交叉合法性。 if(i<a): ob = find(y1[i],y1,a) while(ob != -1): y1[i] = x1[ob] ob = find(y1[i],y1,a) for i in range(m): x[i]=x1[i] y[i]=y1[i] def slove(choice): # 总执行函数 global best for i in range(n): # 选择 value[i] = get_value(dna[i]) # 计算距离 max_id = value.index(max(value)) # 记录id min_id = value.index(min(value)) if(value[min_id] < best): best = value[min_id] for i in range(m): way[i] = dna[min_id][i] value[max_id] = value[min_id] # 最优保存策略:最优解覆盖最差解 fa = -1 for i in range(m): dna[max_id][i] = dna[min_id][i] for i in range(n): # 交叉 if(random.random()> pc or i == max_id or i == min_id): continue if(fa == -1): # fa的判断让每两个样本才能有一次交叉操作 fa = i else : if(choice==1): cross1(dna[fa], dna[i]) # 均匀交叉 if(choice==2): cross2(dna[fa], dna[i]) # 多点交叉 if(choice==3): cross3(dna[fa], dna[i]) # 一点交叉 fa = -1 for i in range(n): #变异运算 if(random.random()> pm or i == max_id or i == min_id): continue mutation(dna[i]) def main(pc_=0.9,pm_=0.2,n_=10,cross=1,epochs=10000): global n,m,pc,pm,best,p,dna,value,way p = [] pc = pc_ pm = pm_ #pc为交配概率 pm为变异概率 best = 1000 #best记录最优距离,初始化无限大 n = n_ #n:种群样本个数 m = 30 #m:城市个数 dna = [[0]*(m) for i in range(n)] #开辟n*m的数组 value = [0.0]*n #value数组记录个体适应度 way = [0]*m #way数组记录最优解路线 mycol() #数据输入 init() #群体初始化 for i in range(epochs): #控制进化次数 slove(cross) print("The distance is",round(best,2)) #打印距离 #draw(way) # 画图描绘路线 #print("The way is",way) # 打印路线,以序列表示 #print("************************") return best if __name__ == "__main__": k = 0 #main(epochs=200) if(k==1): """不同交叉方法的性能表现""" way_cross = [] distance1 = [] distance2 = [] distance3 = [] for i in range(1,16): print(i) epoch = i*1000 way_cross.append(epoch) print("一点交叉法",end=' ') distance1.append(main(cross=1,epochs=epoch)) # 一点交叉 print("多点交叉法",end=' ') distance2.append(main(cross=2,epochs=epoch)) # 多点交叉 print("均匀交叉法",end=' ') distance3.append(main(cross=3,epochs=epoch)) # 均匀交叉 plt.plot(way_cross,distance1,color='green',label='One-point Crossing') plt.plot(way_cross,distance2,color='blue',label='Multi-point Crossing') plt.plot(way_cross,distance3,color='red',label='Uniform Crossing') plt.plot(way_cross,distance1,color='green') plt.plot(way_cross,distance2,color='blue') plt.plot(way_cross,distance3,color='red') plt.xlabel('way_cross') plt.ylabel('distance') plt.title('The effect of the way of cross on the distance') plt.legend() elif(k==2): """不同交叉概率的性能表现""" cross_probability = [] distance = [] for i in range(1,5): print("the probability of cross is %.1f"%(i*0.2)) cross_probability.append(i*0.2) distance.append(main(pc_=i*0.2,epochs=40000)) plt.plot(cross_probability,distance) plt.xlabel('cross_probability') plt.ylabel('distance') plt.title('The effect of the probability of cross on the distance') elif(k==3): """不同变异概率的性能表现""" mutation_probability = [] distance = [] for i in range(1,10): print("the probability of mutation is %.1f"%(i*0.1)) mutation_probability.append(i*0.1) distance.append(main(pc_=i*0.1,epochs=30000)) plt.plot(mutation_probability,distance) plt.xlabel('mutation_probability') plt.ylabel('distance') plt.title('The effect of the probability of mutation on the distance') elif(k==4): """不同样本个数的性能表现""" sample_numbers = [] distance = [] for i in range(2,10): print("the numbers of sample is %d"%(i*2)) sample_numbers.append(i*2) distance.append(main(n_=i*2)) plt.plot(sample_numbers,distance) plt.xlabel('sample_numbers') plt.ylabel('distance') plt.title('The effect of the number of sample on the distance') elif(k==5): """不同迭代次数的性能表现""" epopchs = [] distance = [] for i in range(1): print("epochs = %d"%(i*3000+1000)) epopchs.append(i*3000+1000) distance.append(main(epochs=i*3000+1000)) plt.plot(epopchs,distance) plt.xlabel('epochs') plt.ylabel('distance') plt.title('The effect of the number of epochs on the distance') elif(k==6): '''遗传算法与禁忌搜索算法的比较''' from 禁忌TSP import TSA_TSP way_cross = [] distance1 = [] distance2 = [] i = 500 epoch = [x for x in range(1,i+1)] #distance1.append(main(epochs=epoch)) #distance2.append(comparasion(epoch)) plt.plot(epoch,GA_TSP(epochs=i),color='blue',label='GA') plt.plot(epoch,TSA_TSP(i),color='red',label='TSA') plt.xlabel('epochs') plt.ylabel('distance') plt.title('The effect of the difference methods on the distance') #plt.legend() #plt.show() main()
city.py:
china = { "海门": [121.15, 31.89], "鄂尔多斯": [109.781327, 39.608266], "招远": [120.38, 37.35], "舟山": [122.207216, 29.985295], "齐齐哈尔": [123.97, 47.33], "盐城": [120.13, 33.38], "赤峰": [118.87, 42.28], "青岛": [120.33, 36.07], "乳山": [121.52, 36.89], "金昌": [102.188043, 38.520089], "泉州": [118.58, 24.93], "莱西": [120.53, 36.86], "日照": [119.46, 35.42], "胶南": [119.97, 35.88], "南通": [121.05, 32.08], "拉萨": [91.11, 29.97], "云浮": [112.02, 22.93], "梅州": [116.1, 24.55], "文登": [122.05, 37.2], "上海": [121.48, 31.22], "攀枝花": [101.718637, 26.582347], "威海": [122.1, 37.5], "承德": [117.93, 40.97], "厦门": [118.1, 24.46], "汕尾": [115.375279, 22.786211], "潮州": [116.63, 23.68], "丹东": [124.37, 40.13], "太仓": [121.1, 31.45], "曲靖": [103.79, 25.51], "烟台": [121.39, 37.52], "福州": [119.3, 26.08], "瓦房店": [121.979603, 39.627114], "即墨": [120.45, 36.38], "抚顺": [123.97, 41.97], "玉溪": [102.52, 24.35], "张家口": [114.87, 40.82], "阳泉": [113.57, 37.85], "莱州": [119.942327, 37.177017], "湖州": [120.1, 30.86], "汕头": [116.69, 23.39], "昆山": [120.95, 31.39], "宁波": [121.56, 29.86], "湛江": [110.359377, 21.270708], "揭阳": [116.35, 23.55], "荣成": [122.41, 37.16], "连云港": [119.16, 34.59], "葫芦岛": [120.836932, 40.711052], "常熟": [120.74, 31.64], "东莞": [113.75, 23.04], "河源": [114.68, 23.73], "淮安": [119.15, 33.5], "泰州": [119.9, 32.49], "南宁": [108.33, 22.84], "营口": [122.18, 40.65], "惠州": [114.4, 23.09], "江阴": [120.26, 31.91], "蓬莱": [120.75, 37.8], "韶关": [113.62, 24.84], "嘉峪关": [98.289152, 39.77313], "广州": [113.23, 23.16], "延安": [109.47, 36.6], "太原": [112.53, 37.87], "清远": [113.01, 23.7], "中山": [113.38, 22.52], "昆明": [102.73, 25.04], "寿光": [118.73, 36.86], "盘锦": [122.070714, 41.119997], "长治": [113.08, 36.18], "深圳": [114.07, 22.62], "珠海": [113.52, 22.3], "宿迁": [118.3, 33.96], "咸阳": [108.72, 34.36], "铜川": [109.11, 35.09], "平度": [119.97, 36.77], "佛山": [113.11, 23.05], "海口": [110.35, 20.02], "江门": [113.06, 22.61], "章丘": [117.53, 36.72], "肇庆": [112.44, 23.05], "大连": [121.62, 38.92], "临汾": [111.5, 36.08], "吴江": [120.63, 31.16], "石嘴山": [106.39, 39.04], "沈阳": [123.38, 41.8], "苏州": [120.62, 31.32], "茂名": [110.88, 21.68], "嘉兴": [120.76, 30.77], "长春": [125.35, 43.88], "胶州": [120.03336, 36.264622], "银川": [106.27, 38.47], "张家港": [120.555821, 31.875428], "三门峡": [111.19, 34.76], "锦州": [121.15, 41.13], "南昌": [115.89, 28.68], "柳州": [109.4, 24.33], "三亚": [109.511909, 18.252847], "自贡": [104.778442, 29.33903], "吉林": [126.57, 43.87], "阳江": [111.95, 21.85], "泸州": [105.39, 28.91], "西宁": [101.74, 36.56], "宜宾": [104.56, 29.77], "呼和浩特": [111.65, 40.82], "成都": [104.06, 30.67], "大同": [113.3, 40.12], "镇江": [119.44, 32.2], "桂林": [110.28, 25.29], "张家界": [110.479191, 29.117096], "宜兴": [119.82, 31.36], "北海": [109.12, 21.49], "西安": [108.95, 34.27], "金坛": [119.56, 31.74], "东营": [118.49, 37.46], "牡丹江": [129.58, 44.6], "遵义": [106.9, 27.7], "绍兴": [120.58, 30.01], "扬州": [119.42, 32.39], "常州": [119.95, 31.79], "潍坊": [119.1, 36.62], "重庆": [106.54, 29.59], "台州": [121.420757, 28.656386], "南京": [118.78, 32.04], "滨州": [118.03, 37.36], "贵阳": [106.71, 26.57], "无锡": [120.29, 31.59], "本溪": [123.73, 41.3], "克拉玛依": [84.77, 45.59], "渭南": [109.5, 34.52], "马鞍山": [118.48, 31.56], "宝鸡": [107.15, 34.38], "焦作": [113.21, 35.24], "句容": [119.16, 31.95], "北京": [116.46, 39.92], "徐州": [117.2, 34.26], "衡水": [115.72, 37.72], "包头": [110, 40.58], "绵阳": [104.73, 31.48], "乌鲁木齐": [87.68, 43.77], "枣庄": [117.57, 34.86], "杭州": [120.19, 30.26], "淄博": [118.05, 36.78], "鞍山": [122.85, 41.12], "溧阳": [119.48, 31.43], "库尔勒": [86.06, 41.68], "安阳": [114.35, 36.1], "开封": [114.35, 34.79], "济南": [117, 36.65], "德阳": [104.37, 31.13], "温州": [120.65, 28.01], "九江": [115.97, 29.71], "邯郸": [114.47, 36.6], "临安": [119.72, 30.23], "兰州": [103.73, 36.03], "沧州": [116.83, 38.33], "临沂": [118.35, 35.05], "南充": [106.110698, 30.837793], "天津": [117.2, 39.13], "富阳": [119.95, 30.07], "泰安": [117.13, 36.18], "诸暨": [120.23, 29.71], "郑州": [113.65, 34.76], "哈尔滨": [126.63, 45.75], "聊城": [115.97, 36.45], "芜湖": [118.38, 31.33], "唐山": [118.02, 39.63], "平顶山": [113.29, 33.75], "邢台": [114.48, 37.05], "德州": [116.29, 37.45], "济宁": [116.59, 35.38], "荆州": [112.239741, 30.335165], "宜昌": [111.3, 30.7], "义乌": [120.06, 29.32], "丽水": [119.92, 28.45], "洛阳": [112.44, 34.7], "秦皇岛": [119.57, 39.95], "株洲": [113.16, 27.83], "石家庄": [114.48, 38.03], "莱芜": [117.67, 36.19], "常德": [111.69, 29.05], "保定": [115.48, 38.85], "湘潭": [112.91, 27.87], "金华": [119.64, 29.12], "岳阳": [113.09, 29.37], "长沙": [113, 28.21], "衢州": [118.88, 28.97], "廊坊": [116.7, 39.53], "菏泽": [115.480656, 35.23375], "合肥": [117.27, 31.86], "武汉": [114.31, 30.52], "大庆": [125.03, 46.58], "台湾": [120.96, 23.70], "香港": [114.11, 22.40], "澳门": [113.54, 22.20] } #193个国内城市,198个国外城市 world = { "阿富汗": [67.709953, 33.93911], "安哥拉": [17.873887, -11.202692], "阿尔巴尼亚": [20.168331, 41.153332], "阿联酋": [53.847818, 23.424076], "阿根廷": [-63.61667199999999, -38.416097], "亚美尼亚": [45.038189, 40.069099], "法属南半球和南极领地": [69.348557, -49.280366], "澳大利亚": [133.775136, -25.274398], "奥地利": [14.550072, 47.516231], "阿塞拜疆": [47.576927, 40.143105], "布隆迪": [29.918886, -3.373056], "比利时": [4.469936, 50.503887], "贝宁": [2.315834, 9.30769], "布基纳法索": [-1.561593, 12.238333], "孟加拉国": [90.356331, 23.684994], "保加利亚": [25.48583, 42.733883], "巴哈马": [-77.39627999999999, 25.03428], "波斯尼亚和黑塞哥维那": [17.679076, 43.915886], "白俄罗斯": [27.953389, 53.709807], "伯利兹": [-88.49765, 17.189877], "百慕大": [-64.7505, 32.3078], "玻利维亚": [-63.58865299999999, -16.290154], "巴西": [-51.92528, -14.235004], "文莱": [114.727669, 4.535277], "不丹": [90.433601, 27.514162], "博茨瓦纳": [24.684866, -22.328474], "中非共和国": [20.939444, 6.611110999999999], "加拿大": [-106.346771, 56.130366], "瑞士": [8.227511999999999, 46.818188], "智利": [-71.542969, -35.675147], "中国": [104.195397, 35.86166], "象牙海岸": [-5.547079999999999, 7.539988999999999], "喀麦隆": [12.354722, 7.369721999999999], "刚果民主共和国": [21.758664, -4.038333], "刚果共和国": [15.827659, -0.228021], "哥伦比亚": [-74.297333, 4.570868], "哥斯达黎加": [-83.753428, 9.748916999999999], "古巴": [-77.781167, 21.521757], "北塞浦路斯": [33.429859, 35.126413], "塞浦路斯": [33.429859, 35.126413], "捷克共和国": [15.472962, 49.81749199999999], "德国": [10.451526, 51.165691], "吉布提": [42.590275, 11.825138], "丹麦": [9.501785, 56.26392], "多明尼加共和国": [-70.162651, 18.735693], "阿尔及利亚": [1.659626, 28.033886], "厄瓜多尔": [-78.18340599999999, -1.831239], "埃及": [30.802498, 26.820553], "厄立特里亚": [39.782334, 15.179384], "西班牙": [-3.74922, 40.46366700000001], "爱沙尼亚": [25.013607, 58.595272], "埃塞俄比亚": [40.489673, 9.145000000000001], "芬兰": [25.748151, 61.92410999999999], "斐": [178.065032, -17.713371], "福克兰群岛": [-59.523613, -51.796253], "法国": [2.213749, 46.227638], "加蓬": [11.609444, -0.803689], "英国": [-3.435973, 55.378051], "格鲁吉亚": [-82.9000751, 32.1656221], "加纳": [-1.023194, 7.946527], "几内亚": [-9.696645, 9.945587], "冈比亚": [-15.310139, 13.443182], "几内亚比绍": [-15.180413, 11.803749], "赤道几内亚": [10.267895, 1.650801], "希腊": [21.824312, 39.074208], "格陵兰": [-42.604303, 71.706936], "危地马拉": [-90.23075899999999, 15.783471], "法属圭亚那": [-53.125782, 3.933889], "圭亚那": [-58.93018, 4.860416], "洪都拉斯": [-86.241905, 15.199999], "克罗地亚": [15.2, 45.1], "海地": [-72.285215, 18.971187], "匈牙利": [19.503304, 47.162494], "印尼": [113.921327, -0.789275], "印度": [78.96288, 20.593684], "爱尔兰": [-8.24389, 53.41291], "伊朗": [53.688046, 32.427908], "伊拉克": [43.679291, 33.223191], "冰岛": [-19.020835, 64.963051], "以色列": [34.851612, 31.046051], "意大利": [12.56738, 41.87194], "牙买加": [-77.297508, 18.109581], "约旦": [36.238414, 30.585164], "日本": [138.252924, 36.204824], "哈萨克斯坦": [66.923684, 48.019573], "肯尼亚": [37.906193, -0.023559], "吉尔吉斯斯坦": [74.766098, 41.20438], "柬埔寨": [104.990963, 12.565679], "韩国": [127.766922, 35.907757], "科索沃": [20.902977, 42.6026359], "科威特": [47.481766, 29.31166], "老挝": [102.495496, 19.85627], "黎巴嫩": [35.862285, 33.854721], "利比里亚": [-9.429499000000002, 6.428055], "利比亚": [17.228331, 26.3351], "斯里兰卡": [80.77179699999999, 7.873053999999999], "莱索托": [28.233608, -29.609988], "立陶宛": [23.881275, 55.169438], "卢森堡": [6.129582999999999, 49.815273], "拉脱维亚": [24.603189, 56.879635], "摩洛哥": [-7.092619999999999, 31.791702], "摩尔多瓦": [28.369885, 47.411631], "马达加斯加": [46.869107, -18.766947], "墨西哥": [-102.552784, 23.634501], "马其顿": [21.745275, 41.608635], "马里": [-3.996166, 17.570692], "缅甸": [95.956223, 21.913965], "黑山": [19.37439, 42.708678], "蒙古": [103.846656, 46.862496], "莫桑比克": [35.529562, -18.665695], "毛里塔尼亚": [-10.940835, 21.00789], "马拉维": [34.301525, -13.254308], "马来西亚": [101.975766, 4.210484], "纳米比亚": [18.49041, -22.95764], "新喀里多尼亚": [165.618042, -20.904305], "尼日尔": [8.081666, 17.607789], "尼日利亚": [8.675277, 9.081999], "尼加拉瓜": [-85.207229, 12.865416], "荷兰": [5.291265999999999, 52.132633], "挪威": [8.468945999999999, 60.47202399999999], "尼泊尔": [84.12400799999999, 28.394857], "新西兰": [174.885971, -40.900557], "阿曼": [55.923255, 21.512583], "巴基斯坦": [69.34511599999999, 30.375321], "巴拿马": [-80.782127, 8.537981], "秘鲁": [-75.015152, -9.189967], "菲律宾": [121.774017, 12.879721], "巴布亚新几内亚": [143.95555, -6.314992999999999], "波兰": [19.145136, 51.919438], "波多黎各": [-66.590149, 18.220833], "北朝鲜": [127.510093, 40.339852], "葡萄牙": [-8.224454, 39.39987199999999], "巴拉圭": [-58.443832, -23.442503], "卡塔尔": [51.183884, 25.354826], "罗马尼亚": [24.96676, 45.943161], "俄罗斯": [105.318756, 61.52401], "卢旺达": [29.873888, -1.940278], "西撒哈拉": [-12.885834, 24.215527], "沙特阿拉伯": [45.079162, 23.885942], "苏丹": [30.217636, 12.862807], "南苏丹": [31.3069788, 6.876991899999999], "塞内加尔": [-14.452362, 14.497401], "所罗门群岛": [160.156194, -9.64571], "塞拉利昂": [-11.779889, 8.460555], "萨尔瓦多": [-88.89653, 13.794185], "索马里兰": [46.8252838, 9.411743399999999], "索马里": [46.199616, 5.152149], "塞尔维亚共和国": [21.005859, 44.016521], "苏里南": [-56.027783, 3.919305], "斯洛伐克": [19.699024, 48.669026], "斯洛文尼亚": [14.995463, 46.151241], "瑞典": [18.643501, 60.12816100000001], "斯威士兰": [31.465866, -26.522503], "叙利亚": [38.996815, 34.80207499999999], "乍得": [18.732207, 15.454166], "多哥": [0.824782, 8.619543], "泰国": [100.992541, 15.870032], "塔吉克斯坦": [71.276093, 38.861034], "土库曼斯坦": [59.556278, 38.969719], "东帝汶": [125.727539, -8.874217], "特里尼达和多巴哥": [-61.222503, 10.691803], "突尼斯": [9.537499, 33.886917], "土耳其": [35.243322, 38.963745], "坦桑尼亚联合共和国": [34.888822, -6.369028], "乌干达": [32.290275, 1.373333], "乌克兰": [31.16558, 48.379433], "乌拉圭": [-55.765835, -32.522779], "美国": [-95.712891, 37.09024], "乌兹别克斯坦": [64.585262, 41.377491], "委内瑞拉": [-66.58973, 6.42375], "越南": [108.277199, 14.058324], "瓦努阿图": [166.959158, -15.376706], "西岸": [35.3027226, 31.9465703], "也门": [48.516388, 15.552727], "南非": [22.937506, -30.559482], "赞比亚": [27.849332, -13.133897], "津巴布韦": [29.154857, -19.015438] }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。