利用python生成excel中模板范围对应的shape文件

发布于:2025-03-12 ⋅ 阅读:(25) ⋅ 点赞:(0)

利用python生成excel中模板范围对应的shape文件

# -*- coding: utf-8 -*-
import os.path

import pandas as pd
from shapely.geometry import Polygon
from shapely.wkt import dumps
import argparse

# 创建解析器
parser = argparse.ArgumentParser(description="这是一个示例程序")
# 添加位置参数(必须提供)
parser.add_argument("-i","--input",default="qqdlsjkV0312_final.xlsx",  type=str, help="输入文件路径")
# 读取Excel文件的默认工作表
# 解析参数
args = parser.parse_args()

# 使用参数
print(f"输入文件路径: {args.input}")
# df = pd.read_excel('demo.xlsx')

def getWkt(minx,miny,maxx,maxy):
    # 创建一个几何多边形对象
    polygon = Polygon([(minx, miny), (minx, maxy), (maxx, maxy), (maxx, miny)])

    # 调用dumps方法,将几何对象转换为WKT字符串
    wkt_string = dumps(polygon)
    print(wkt_string)
    return wkt_string

def getlistFromStr(strs):
    str_l = str(strs).replace("'","").replace("[","").replace("]","")
    str_ll = str_l.split(",")
    return [float(s) for s in str_ll]
    ccc=0

import numpy as np
def getUpdateExtent(externs):
    exten_np = np.stack(externs)
    minx =np.min(np.array([np.min(exten_np[:,0]),np.min(exten_np[:,2])]))
    miny = np.min(np.array([np.min(exten_np[:,1]),np.min(exten_np[:,3])]))
    maxx = np.max(np.array([np.max(exten_np[:,0]),np.max(exten_np[:,0])]))
    maxy = np.max(np.array([np.max(exten_np[:,1]),np.max(exten_np[:,3])]))
    return [minx,miny,maxx,maxy]

def dealNanhai(path):
    file_path = path
    df = pd.read_excel(file_path, sheet_name='Sheet1').values
    row_nums, col_nums = df.shape
    with open("nanhai_deal.csv","w") as f:
        f.write("id;airport;extent;center;wkt\n")
        idx=1
        for row in range(row_nums):
            key = df[row, 0]
            extent = df[row, 1]
            jw_s = str(extent).split(',')
            zb_s = []
            for jw in jw_s:
                zbs= str(jw).split('-')
                for zb in zbs:
                    zb_s.append(float(zb))
                    ccc=0
            extent = [zb_s[0],zb_s[2],zb_s[1],zb_s[3]]
            ccc=0
            wktstr = getWkt(*extent)
            center = [(extent[0]+extent[2])/2,(extent[1]+extent[3])/2]
            # 输出到文件
            extentStr = ",".join([str(_) for _ in  extent])
            centerStr = ",".join([str(_) for _ in center])
            f.write(f"{idx};{key};{extentStr};{centerStr};{wktstr}\n")
            idx +=1

def dealDuplicate(path):
    file_path = path
    #处理 shiju
    df = pd.read_excel(file_path, sheet_name='shiju').values
    row_nums, col_nums = df.shape
    with open("shijuAFB_deal.csv","w") as f:
        f.write("id;airport;extent;center;wkt\n")
        idx=1
        for row in range(row_nums):
            key = df[row, 0]
            extent = df[row, 1]
            extent = extent.replace("[","").replace("]","").replace("\"","").replace("\"","").replace("\'", "")
            jw_s = str(extent).split(',')
            zb_s = []
            for jw in jw_s:
                zb_s.append(float(jw))
                ccc=0
            extent = [zb_s[0],zb_s[1],zb_s[2],zb_s[3]]
            ccc=0
            wktstr = getWkt(*extent)
            center = [(extent[0]+extent[2])/2,(extent[1]+extent[3])/2]
            # 输出到文件
            extentStr = ",".join([str(_) for _ in  extent])
            centerStr = ",".join([str(_) for _ in center])
            f.write(f"{idx};{key};{extentStr};{centerStr};{wktstr}\n")
            idx +=1
    #处理 ditu
    df = pd.read_excel(file_path, sheet_name='ditu').values
    row_nums, col_nums = df.shape
    with open("dituAFB_deal.csv","w") as f:
        f.write("id;airport;extent;center;wkt\n")
        idx=1
        for row in range(row_nums):
            key = df[row, 0]
            extent = df[row, 1]
            extent = extent.replace("\"","").replace("\"","").replace("[","").replace("]","").replace("\'", "")
            jw_s = str(extent).split(',')

            zb_s = []
            for jw in jw_s:
                # zbs= str(jw).split('-')
                # for zb in zbs:
                zb_s.append(float(jw))
                ccc=0
            extent = [zb_s[0],zb_s[1],zb_s[2],zb_s[3]]
            ccc=0
            wktstr = getWkt(*extent)
            center = [(extent[0]+extent[2])/2,(extent[1]+extent[3])/2]
            # 输出到文件
            extentStr = ",".join([str(_) for _ in  extent])
            centerStr = ",".join([str(_) for _ in center])
            f.write(f"{idx};{key};{extentStr};{centerStr};{wktstr}\n")
            idx +=1

    #处理补充
    # 处理 ditu
    df = pd.read_excel(file_path, sheet_name='buchong').values
    row_nums, col_nums = df.shape
    with open("buchongAFB_deal.csv", "w") as f:
        f.write("id;airport;extent;center;wkt\n")
        idx = 1
        for row in range(row_nums):
            key = df[row, 0]
            extent = df[row, 1]
            extent = extent.replace("\"", "").replace("\"", "").replace("[", "").replace("]", "").replace("\'", "")
            jw_s = str(extent).split(',')

            zb_s = []
            for jw in jw_s:
                # zbs= str(jw).split('-')
                # for zb in zbs:
                zb_s.append(float(jw))
                ccc = 0
            extent = [zb_s[0], zb_s[1], zb_s[2], zb_s[3]]
            ccc = 0
            wktstr = getWkt(*extent)
            center = [(extent[0] + extent[2]) / 2, (extent[1] + extent[3]) / 2]
            # 输出到文件
            extentStr = ",".join([str(_) for _ in extent])
            centerStr = ",".join([str(_) for _ in center])
            f.write(f"{idx};{key};{extentStr};{centerStr};{wktstr}\n")
            idx += 1

    #处理南海
    df = pd.read_excel(file_path, sheet_name='nanhai').values
    row_nums, col_nums = df.shape
    with open("nanhaiAFB_deal.csv", "w") as f:
        f.write("id;airport;extent;center;wkt\n")
        idx = 1
        for row in range(row_nums):
            key = df[row, 0]
            extent = df[row, 1]
            extent = extent.replace("\"", "").replace("\"", "").replace("[", "").replace("]", "").replace("\'", "")
            jw_s = str(extent).split(',')

            zb_s = []
            for jw in jw_s:
                # zbs= str(jw).split('-')
                # for zb in zbs:
                zb_s.append(float(jw))
                ccc = 0
            extent = [zb_s[0], zb_s[1], zb_s[2], zb_s[3]]
            ccc = 0
            wktstr = getWkt(*extent)
            center = [(extent[0] + extent[2]) / 2, (extent[1] + extent[3]) / 2]
            # 输出到文件
            extentStr = ",".join([str(_) for _ in extent])
            centerStr = ",".join([str(_) for _ in center])
            f.write(f"{idx};{key};{extentStr};{centerStr};{wktstr}\n")
            idx += 1


if __name__ == "__main__":
    # file_path = "南海目标.xlsx"
    # dealNanhai(file_path)
    # print(f"success")
    dealDuplicate(args.input)
    print(f"success")
    # getWkt(10,20,30,60)
    # file_path = 'demo.xlsx'
    # file_path = args.input
    # df = pd.read_excel(file_path, sheet_name='Sheet1',usecols=['file_path','extent']).values
    # row_nums,col_nums = df.shape
    # port_map={}
    # with open("demo_deal.csv","w") as f:
    #     f.write("id;airport;extent;center;wkt\n")
    #     for row in range(row_nums):
    #         file_path = df[row,0]
    #         extent = df[row,1]
    #         extent_list = getlistFromStr(extent)
    #         airport_name = file_path.split('/')[0]
    #         extents = port_map.get(airport_name,list())
    #         extents.append(extent_list)
    #         port_map[airport_name]=extents
    #         ccc=0
    #     idx=1
    #     for key,value in port_map.items():
    #         extent = getUpdateExtent(value)
    #         wktstr = getWkt(*extent)
    #         center = [(extent[0]+extent[2])/2,(extent[1]+extent[3])/2]
    #         # 输出到文件
    #         extentStr = ",".join([str(_) for _ in  extent])
    #         centerStr = ",".join([str(_) for _ in center])
    #         f.write(f"{idx};{key};{extentStr};{centerStr};{wktstr}\n")
    #
    #
    #
    #
    #         idx += 1
    # print(f"success! output:{os.path.abspath(os.path.join(os.getcwd(),'demo_deal.csv'))}")
    # ccc=0
    # ccc=0
# import pandas as pd
#
# file_path = 'data.xlsx'
# df = pd.read_excel(file_path, sheet_name='Sheet2', usecols=['A', 'C'])
#
# print(df)
# # 读取指定的工作表
# df = pd.read_excel('demo.xlsx', sheet_name='Sheet1')
# ccc=0
# # # 读取特定的列
# # df = pd.read_excel('demo.xlsx', usecols=['A', 'C', 'E'])
#
# # 指定数据类型
# # df = pd.read_excel('demo.xlsx', dtype={'列名': str})

网站公告

今日签到

点亮在社区的每一天
去签到