File size: 3,239 Bytes
4305a38
 
 
 
 
 
 
 
 
 
 
3edc468
4305a38
3edc468
4305a38
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
79c2f21
4305a38
 
 
 
 
 
 
 
 
 
 
 
3edc468
4305a38
3edc468
 
4305a38
 
 
3edc468
4305a38
3edc468
 
4305a38
 
 
 
 
3edc468
4305a38
3edc468
 
4305a38
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
import os

import gradio as gr
import tempfile
import shutil
import pandas as pd
from geopy.distance import geodesic

def calculate_distance(lat1,lon1,lat2,lon2):
    reference_point = (lat1, lon1)
    point = (lat2, lon2)
    return geodesic(reference_point, point).meters

def generate_file(file_obj,operation,lon,lat):
    global tmpdir
    print('临时文件夹地址:{}'.format(tmpdir))
    print('上传文件的地址:{}'.format(file_obj.name)) # 输出上传后的文件在gradio中保存的绝对地址

    #获取到上传后的文件的绝对路径后,其余的操作就和平常一致了

    # 将文件复制到临时目录中
    shutil.copy(file_obj.name, tmpdir)

    # 获取上传Gradio的文件名称
    FileName=os.path.basename(file_obj.name)

    # 获取拷贝在临时目录的新的文件地址
    NewfilePath=os.path.join(tmpdir,FileName)
    print(NewfilePath)

    # 读取excel文件
    df = pd.read_excel(NewfilePath, engine='openpyxl')

# 参考点的经纬度
    point_list = []
    distance_result_list = []
    for _,item in df.iterrows():
        point_list.append((item['lat'],item['lon']))
    print(operation)
    if operation == "只计算距离" or not operation:
        for i in range(0,len(point_list)):
            if i == 0:
                tmp = dict()
                tmp["lon"] = point_list[i][1]
                tmp["lat"] = point_list[i][0]
                tmp["lon_ref"] = ""
                tmp["lat_ref"] = ""
                tmp["distance(米)"] = ""
            else:
                tmp = dict()
                tmp["lon"] = point_list[i][1]
                tmp["lat"] = point_list[i][0]
                tmp["lon_ref"] = point_list[i-1][1]
                tmp["lat_ref"] = point_list[i-1][0]
                tmp["distance(米)"] = calculate_distance(tmp["lat"],tmp["lon"],tmp["lat_ref"],tmp["lon_ref"])
            distance_result_list.append(tmp)
    else:
        for i in range(0,len(point_list)):
            tmp = dict()
            tmp["lon"] = point_list[i][1]
            tmp["lat"] = point_list[i][0]
            tmp["lon_ref"] = float(lon)
            tmp["lat_ref"] = float(lat)
            tmp["distance(米)"] = calculate_distance(tmp["lat"],tmp["lon"],tmp["lat_ref"],tmp["lon_ref"])
            distance_result_list.append(tmp)
                
    df_new = pd.DataFrame(distance_result_list)
    outputPath=os.path.join(tmpdir,"New"+FileName)
    df_new.to_excel(outputPath, index=False) 

    # 返回新文件的的地址(注意这里)
    return outputPath

def main():
    global tmpdir
    with tempfile.TemporaryDirectory(dir='.') as tmpdir:
        # 定义输入和输出
        inputs = gr.components.File(label="上传文件")
        outputs = gr.components.File(label="下载文件")

        # 创建 Gradio 应用程序
        app = gr.Interface(fn=generate_file, inputs=[inputs, gr.Radio(["只计算距离", "计算特定点"]),"number","number"], outputs=outputs,   title="坐标文件上传,生产距离文件",
                      description="上传任何文件都可以,只要大小别超过你电脑的内存即可"
      )

        # 启动应用程序
        app.launch(share=True)
if __name__=="__main__":
    main()