利用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="duplicate.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("\"","")
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("]","")
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})