看了昨晚的数模题,发现B题与经纬度定位及定价有关,容易想到订单价格和执行情况可能和它的位置分布有一定关系,如果能把所有坐标都导入地图,就可以直观地看出它们的特点了。
同理可以得到纬度坐标:57°55’56.6” tempE = str(int(E)) +"°"+ str(int((E - int(E))*60)) +"'" + str((((E - int(E))*60) -int((E - int(E))*60))*60) + "''"+' '+ 'E' 其中E为从原表中读到的经纬度数据,tempE为转换得到度分秒坐标。为了区分执行情况,可以加一些判断语句,将成功订单和失败订单分开,最终结果如下图所示: 之后将表格另存为CSV格式,用GlobalMapper打开 文件格式选择CSV,并打开对应文件 选择只有点 下一个页面用默认选项,之后会得到坐标示意图 再选择输出为矢量格式 注意选择KML/KMZ选项 最后去掉“创建压缩KMZ”前面的勾 点完成即可生成KML文件了。 其中在导入CSV时可能会导入失败,出现如下错误: 一直没找出错误原因,可能是EXCEL生成的CSV编码和它要求的不符,我的解决方法是用GlobalMapper打开一个Google Earth导出的XML,再将其输出为CSV文件,然后把自己的文件内容复制到这个CSV中就能顺利导入了。 之后用Google Earth打开生成XML文件,可以发现所有坐标都可以标记出来,之后调整一下标签和图标,就可以发现失败订单的分布: 同理添加成功订单的坐标,调整标签和图标,可以观察两者的分布特点: 除了按订单执行情况分类,还可以按价格分类查看分布: 用Google Earth打开XML文件后会发现所有坐标点只是小黑点,这时在左边侧栏里选中要编辑的XML文件,右击“属性”,在名称框后面有设置图标的选项,在“样式/颜色”栏可以调标签和图标的大小和颜色,同时打开多个XML,调成不同的样式就可以比较明显的对比。 最后坐标格式转换的完整代码如下: #按执行情况分类,执行成功写入success,否则写入flase import openpyxl #处理Excel的包 f = openpyxl.load_workbook('GPS.xlsx') #打开原文件,即附件一 out_f = openpyxl.Workbook() #创建输出Excel table1 = out_f.active table1.title = 'false' #分别创建执行成功和失败的sheet table2 = out_f.create_sheet('success') #写入表头 title = ['LONGITUDE','LATITUDE','LABEL'] for i in range(3): table1.cell(row = 1,column = i+1,value = title[i]) table2.cell(row = 1,column = i+1,value = title[i]) sheet1 = f['t'] ncols = sheet1.max_row f = s = 2 for i in range(2,ncols+1): N = sheet1.cell(row = i,column = 2).value #获取原坐标 E = sheet1.cell(row = i, column = 3).value tempN = str(int(N)) +"°"+ str(int((N - int(N))*60)) +"'" + str((((N - int(N))*60) -int((N - int(N))*60))*60) + "''"+' ' +'N' #坐标转换 tempE = str(int(E)) +"°"+ str(int((E - int(E))*60)) +"'" + str((((E - int(E))*60) -int((E - int(E))*60))*60) + "''"+' '+ 'E' label = sheet1.cell(row = i,column = 1).value if(sheet1.cell(row = i,column = 5).value == 0): #如果执行失败,写入flase sheet table1.cell(row = f,column = 2,value = tempN) table1.cell(row = f,column = 1,value = tempE) table1.cell(row = f,column = 3,value = label) f += 1 else: #否则写入success sheet table2.cell(row = s,column = 2,value = tempN) table2.cell(row = s,column = 1,value = tempE) table2.cell(row = s,column = 3,value = label) s += 1 out_f.save('GPS2.xlsx') #保存文件 #按定价分类,区间为65-70,70-75,75-80,80+ import openpyxl f = openpyxl.load_workbook('GPS.xlsx') out_f = openpyxl.Workbook() table1 = out_f.active table1.title = '65-70' table2 = out_f.create_sheet('70-75') table3 = out_f.create_sheet('75-80') table4 = out_f.create_sheet('80-') title = ['LONGITUDE','LATITUDE','LABEL'] for i in range(3): table1.cell(row = 1,column = i+1,value = title[i]) table2.cell(row = 1,column = i+1,value = title[i]) table3.cell(row = 1,column = i+1,value = title[i]) table4.cell(row = 1,column = i+1,value = title[i]) sheet1 = f['t'] ncols = sheet1.max_row k = l = m = n = 2 for i in range(2,ncols+1): N = sheet1.cell(row = i,column = 2).value E = sheet1.cell(row = i, column = 3).value tempN = str(int(N)) +"°"+ str(int((N - int(N))*60)) +"'" + str((((N - int(N))*60) -int((N - int(N))*60))*60) + "''"+' ' +'N' tempE = str(int(E)) +"°"+ str(int((E - int(E))*60)) +"'" + str((((E - int(E))*60) -int((E - int(E))*60))*60) + "''"+' '+ 'E' label = sheet1.cell(row = i,column = 1).value if(sheet1.cell(row = i,column = 4).value <70): table1.cell(row = k,column = 2,value = tempN) table1.cell(row = k,column = 1,value = tempE) table1.cell(row = k,column = 3,value = label) k += 1 elif(sheet1.cell(row = i,column = 4).value <75): table2.cell(row = l,column = 2,value = tempN) table2.cell(row = l,column = 1,value = tempE) table2.cell(row = l,column = 3,value = label) l += 1 elif(sheet1.cell(row = i,column = 4).value <80): table3.cell(row = m,column = 2,value = tempN) table3.cell(row = m,column = 1,value = tempE) table3.cell(row = m,column = 3,value = label) m += 1 else: table4.cell(row = n,column = 2,value = tempN) table4.cell(row = n,column = 1,value = tempE) table4.cell(row = n,column = 3,value = label) n += 1 out_f.save('GPS3.xlsx') |
|
来自: 昵称14945998 > 《电脑科技》