当前位置: 首页 > 科技观察

教你用Python代替Mapinfo求两张表最近点

时间:2023-03-20 17:18:49 科技观察

1.前言大家好,我是崔燕飞。有时工作中需要将表A中的经纬度点与表B中最近的点进行匹配。也可以用Mapinfo来实现,但是处理速度慢,尤其是数据量大的时候。实现起来很简单,还可以显示处理进度,详见下文。2.项目目标用Python实现两张表最近点的计算。3、项目准备软件:PyCharm所需库:pandas、xlrd、os4、项目分析1)如何选择和读取待处理的Excel文件?使用os和xlrd选择要读取和处理的Excel文件。2)如何计算两个经纬度点之间的距离?使用pandas库读取两个表的内容,然后定义一个函数来计算两个经纬度点之间的距离。3)如何计算并保存循环中最近点的数据?使用For循环循环读取两张表的内容,通过If判断保持距离最近的点数据。4)如何保存结果?使用to_excel保存得到最近点的数据。五、项目实现1、第一步导入需要的库importpandasaspdimportxlrdimportos2。第二步,选择并读取要处理的Excel文件path="D:/a/"#获取文件夹下所有EXCEL名称bb=path+'result.xlsx'writer=pd.ExcelWriter(bb,engine='openpyxl')xlsx_names=[xforxinos.listdir(path)ifx.endswith(".xlsx")]#获取第一个EXCEL名称xlsx_names1=xlsx_names[0]aa=路径+xlsx_names1#打开第一个EXCELfirst_file_fh=xlrd.open_workbook(aa)#获取SHEET名称first_file_sheet=first_file_fh.sheets()3、第三步计算并保存最新点的数据foriinrange(h1):w1=df1。loc[i,'latitude']j1=df1.loc[i,'longitude']d1=df1.loc[i,:]d0=10000000000000000000000000.0000print("原始单元格的%d。"%(i+1))test_dict={'distance':[d0]}d3=pd.DataFrame(test_dict)forlinrange(h2):w2=df2.loc[l,'latitude']j2=df2.loc[l,'经度']d=haversine(j1,w1,j2,w2)ifd