1.修复了写入Ta文件时没有写入直线塔的bug。

2.修复了没有存取直线塔串长的bug。
This commit is contained in:
facat 2020-05-13 17:24:49 +08:00
parent a29fee1644
commit 96b9137869
3 changed files with 107 additions and 59 deletions

View File

@ -92,6 +92,7 @@ class SFileAsSingle:
for s_file_obj, index in result: for s_file_obj, index in result:
s_file_obj.update_height(index, new_height) s_file_obj.update_height(index, new_height)
s_changed_record[s_file_obj] = 1 s_changed_record[s_file_obj] = 1
# 输出变化的文件名
for s_file_obj in s_changed_record: for s_file_obj in s_changed_record:
s_output_file_path = s_file_obj.file_path s_output_file_path = s_file_obj.file_path
s_file_obj.write(s_output_file_path) s_file_obj.write(s_output_file_path)

View File

@ -1,4 +1,4 @@
from file_object import SFileObject, CordinationObject from file_object import SFileObject, CordinationObject, DFileAsSingle
TA_ENTRY_TEMPLATE = "{tower_number},{suspend_or_tension},{mileage}, {conductor_suspension_poit},0.3212,0.000,{altitude},{pile_number},{tower_name}_{tower_height},{tower_height},{string_name},{string_length}, 0.000,0.1142,0.000000,0.000000,,15,15.500000,,{angel},2.5,15.5,2.500,3.000,1,610.4,2.000,0,2,0,2,{conductor_type},GJ-50,0,0,0,0.000,,0,0.000,9,750,1.000,,0,0.000,0,750,1.000,ZHCH_1,28,1.000,9.5,750,1.000,9.5,750,1.000,{string_name},1,{string_length},{string_name},1,{string_length},,0,0.000,,0,0.000,0,0,0.000, 0.000,0,0,0.000,0,0,4.000,0,1,1.000,,0,0.000,,0,0.000,,0,0.000,1,1,0.000,0,0,0.000, 0.000,0,0, 0.000,1.000,1.000,0.000,0.000,0.000,,0,\n" TA_ENTRY_TEMPLATE = "{tower_number},{suspend_or_tension},{mileage}, {conductor_suspension_poit},0.3212,0.000,{altitude},{pile_number},{tower_name}_{tower_height},{tower_height},{string_name},{string_length}, 0.000,0.1142,0.000000,0.000000,,15,15.500000,,{angel},2.5,15.5,2.500,3.000,1,610.4,2.000,0,2,0,2,{conductor_type},GJ-50,0,0,0,0.000,,0,0.000,9,750,1.000,,0,0.000,0,750,1.000,ZHCH_1,28,1.000,9.5,750,1.000,9.5,750,1.000,{string_name},1,{string_length},{string_name},1,{string_length},,0,0.000,,0,0.000,0,0,0.000, 0.000,0,0,0.000,0,0,4.000,0,1,1.000,,0,0.000,,0,0.000,,0,0.000,1,1,0.000,0,0,0.000, 0.000,0,0, 0.000,1.000,1.000,0.000,0.000,0.000,,0,\n"
TA_NC_STRING_NAME = "750-NC" TA_NC_STRING_NAME = "750-NC"
@ -17,50 +17,84 @@ def is_tension_tower_by_string(string_name):
return 2 return 2
return 1 return 1
# SFiles中的文件必须是按顺序排列的`
def generate_ta_from_D(TA_file, SFiles, D_file_path): def prepare_TA_entry_without_altitude(SFiles):
visited_tower_number = {} # 记录访问过的塔号 visited_tower_number = {} # 记录访问过的塔号
cord_file_object = CordinationObject(cordination_file_path)
with open(TA_file, "w") as file:
# 生成所有需要用到的数据
last_S_mileage = 0 last_S_mileage = 0
ta_entry = []
for S in SFiles: for S in SFiles:
SObj = SFileObject(S) SObj = SFileObject(S)
S_content = SObj.content() S_content = SObj.content()
for S_entry in S_content: for S_entry in S_content:
_entry = {}
if S_entry[0] == "首端转角号" or S_entry[0] == "塔号": if S_entry[0] == "首端转角号" or S_entry[0] == "塔号":
continue continue
tower_number = S_entry[0] tower_number = S_entry[0]
_entry["tower_number"]=tower_number
if tower_number not in visited_tower_number: if tower_number not in visited_tower_number:
visited_tower_number[tower_number] = 0 visited_tower_number[tower_number] = 0
else: else:
continue continue
mileage = int(S_entry[1]) + last_S_mileage mileage = int(S_entry[1]) + last_S_mileage
_entry["mileage"] = mileage
tower_height = float(S_entry[7]) tower_height = float(S_entry[7])
_entry["tower_height"] = tower_height
angel = S_entry[5] angel = S_entry[5]
_entry["angel"] = angel
string_name = S_entry[8] string_name = S_entry[8]
suspend_or_tension = is_tension_tower_by_string(string_name) suspend_or_tension = is_tension_tower_by_string(string_name)
_entry["suspend_or_tension"] = suspend_or_tension
conductor_type = TA_CONDUCTOR_TYPE conductor_type = TA_CONDUCTOR_TYPE
_entry["conductor_type"] = conductor_type
# 1是悬垂 2是耐张 # 1是悬垂 2是耐张
if suspend_or_tension == 1: if suspend_or_tension == 1:
string_length = TA_XC_STRING_LENGTH string_length = TA_XC_STRING_LENGTH
conductor_suspension_poit = tower_height - string_length _entry["string_length"] = string_length
conductor_suspension_point = tower_height - string_length
_entry["conductor_suspension_point"] = conductor_suspension_point
pile_number = tower_number pile_number = tower_number
_entry["pile_number"] = pile_number
ta_string_name = TA_XC_STRING_NAME ta_string_name = TA_XC_STRING_NAME
_entry["ta_string_name"] = ta_string_name
tower_name = TA_XC_TOWER_NAME tower_name = TA_XC_TOWER_NAME
_entry["tower_name"] = tower_name
else: else:
string_length = TA_NC_STRING_LENGTH string_length = TA_NC_STRING_LENGTH
conductor_suspension_poit = tower_height _entry["string_length"] = string_length
conductor_suspension_point = tower_height
_entry["conductor_suspension_point"] = conductor_suspension_point
pile_number = tower_number pile_number = tower_number
_entry["pile_number"] = pile_number
ta_string_name = TA_NC_STRING_NAME ta_string_name = TA_NC_STRING_NAME
_entry["ta_string_name"] = ta_string_name
tower_name = TA_NC_TOWER_NAME tower_name = TA_NC_TOWER_NAME
altitude = cord_file_object.get_altitude(pile_number) _entry["tower_name"] = tower_name
ta_entry.append(_entry)
last_S_mileage = float(S_content[-1][1]) + last_S_mileage
return ta_entry
def write_to_TA_file(TA_file, ta_entry):
with open(TA_file, "w") as file:
for entry in ta_entry:
tower_number = entry["tower_number"]
suspend_or_tension = entry["suspend_or_tension"]
mileage = entry["mileage"]
conductor_suspension_point = entry["conductor_suspension_point"]
altitude = entry["altitude"]
pile_number = entry["pile_number"]
tower_name = entry["tower_name"]
tower_height = entry["tower_height"]
ta_string_name = entry["ta_string_name"]
string_length = entry["string_length"]
angel = entry["angel"]
conductor_type = entry["conductor_type"]
file.write( file.write(
TA_ENTRY_TEMPLATE.format( TA_ENTRY_TEMPLATE.format(
tower_number=tower_number, tower_number=tower_number,
suspend_or_tension=suspend_or_tension, suspend_or_tension=suspend_or_tension,
mileage=mileage, mileage=mileage,
conductor_suspension_poit=conductor_suspension_poit, conductor_suspension_poit=conductor_suspension_point,
altitude=altitude, altitude=altitude,
pile_number=pile_number, pile_number=pile_number,
tower_name=tower_name, tower_name=tower_name,
@ -71,9 +105,21 @@ def generate_ta_from_D(TA_file, SFiles, D_file_path):
conductor_type=conductor_type, conductor_type=conductor_type,
) )
) )
last_S_mileage = float(S_content[-1][1]) + last_S_mileage
# SFiles中的文件必须是按顺序排列的`
# SFiles中的文件必须是按顺序排列的
def generate_ta_from_D(TA_file, SFiles, D_files_paths):
# 准备要写入的文件
ta_entry_without_altitude = prepare_TA_entry_without_altitude(SFiles)
d_file_object = DFileAsSingle(D_files_paths)
ta_entry = list(ta_entry_without_altitude)
for entry in ta_entry:
mileage = entry["mileage"]
entry["altitude"] = d_file_object.get_altitude(mileage)
write_to_TA_file(TA_file, ta_entry)
# SFiles中的文件必须是按顺序排列的
def generate_ta_from_csv(TA_file, SFiles, cordination_file_path): def generate_ta_from_csv(TA_file, SFiles, cordination_file_path):
visited_tower_number = {} # 记录访问过的塔号 visited_tower_number = {} # 记录访问过的塔号
cord_file_object = CordinationObject(cordination_file_path) cord_file_object = CordinationObject(cordination_file_path)

View File

@ -23,6 +23,7 @@ if __name__ == "__main__":
DFile = [r"d:\道亨排位\流程测试\D034.TXT", r"d:\道亨排位\流程测试\D038.TXT"] DFile = [r"d:\道亨排位\流程测试\D034.TXT", r"d:\道亨排位\流程测试\D038.TXT"]
ta_object = TaFileObject(r"d:\道亨排位\流程测试\ 流程测试\ 流程测试.TA", SFile) ta_object = TaFileObject(r"d:\道亨排位\流程测试\ 流程测试\ 流程测试.TA", SFile)
d_file_object = DFileObject(r"d:\道亨排位\流程测试\D034.TXT") d_file_object = DFileObject(r"d:\道亨排位\流程测试\D034.TXT")
d_as_single = DFileAsSingle(DFile) # d_as_single = DFileAsSingle(DFile)
print(d_as_single.get_altitude(1956+13)) # print(d_as_single.get_altitude(1956+13))
generate_ta.generate_ta_from_D(r"d:\道亨排位\流程测试\ 流程测试\ 流程测试.TA", SFile, DFile)
print("Finished.") print("Finished.")