1.加入读取D文件功能。
This commit is contained in:
parent
65ef2f5685
commit
a29fee1644
|
|
@ -192,7 +192,7 @@ class TaFileObject:
|
|||
tower_number = s_entry[0]
|
||||
tower_height = s_entry[7]
|
||||
if tower_number in s_tower_height_dic:
|
||||
continue# 只取第一次出现的。避免耐张段末端和首端不一致的问题。
|
||||
continue # 只取第一次出现的。避免耐张段末端和首端不一致的问题。
|
||||
s_tower_height_dic[tower_number] = tower_height
|
||||
ta_content = self._read(self._file_path)
|
||||
new_ta_content = list(ta_content)
|
||||
|
|
@ -267,7 +267,7 @@ class CordinationObject:
|
|||
continue
|
||||
sep = line.split(",")
|
||||
J_or_Z = sep[0][0]
|
||||
pile = re.findall(r"[JZ]0*([0-9]+)", sep[0])[0]
|
||||
pile = re.findall(r"[JZ]0*([0-9]+)", sep[0])[0] # 桩
|
||||
JZ_pile = J_or_Z + pile
|
||||
# pile = sep[0][1:len(sep[0])]
|
||||
altitude = sep[1]
|
||||
|
|
@ -287,3 +287,60 @@ class CordinationObject:
|
|||
|
||||
def content(self):
|
||||
return self._content
|
||||
|
||||
|
||||
class DFileObject:
|
||||
def __init__(self, D_file_path):
|
||||
_content = []
|
||||
with open(D_file_path) as D_file:
|
||||
for _line in D_file:
|
||||
line = re.sub(r"\s+", ",", _line)
|
||||
_content.append(line.split(","))
|
||||
self._content = _content
|
||||
|
||||
def content(self):
|
||||
return self._content
|
||||
|
||||
|
||||
class DFileAsSingle:
|
||||
def __init__(self, d_files):
|
||||
self._d_file_object = []
|
||||
for d in d_files:
|
||||
self._d_file_object.append(DFileObject(d))
|
||||
|
||||
def content(self):
|
||||
for d_object in self._d_file_object:
|
||||
for c in d_object.content():
|
||||
yield c
|
||||
|
||||
def float_content(self):
|
||||
for c in self.content():
|
||||
yield [float(num) for num in c if num != ""]
|
||||
|
||||
# 通过里程获取高程
|
||||
def get_altitude(self, mileage):
|
||||
lower_mileage_altitude = None
|
||||
upper_mileage_altitude = None
|
||||
d_mileage = 0
|
||||
base_mileage = 0
|
||||
for d_content in self.float_content():
|
||||
if d_content[1] == 0:
|
||||
base_mileage = d_mileage
|
||||
d_mileage = base_mileage + d_content[1]
|
||||
if d_mileage < mileage:
|
||||
lower_mileage_altitude = (d_mileage, d_content[2])
|
||||
if d_mileage >= mileage:
|
||||
upper_mileage_altitude = (d_mileage, d_content[2])
|
||||
break
|
||||
if d_mileage == mileage:
|
||||
return upper_mileage_altitude[1]
|
||||
# 如果不是正好有高程,就线性插值。
|
||||
if d_mileage > mileage:
|
||||
return (
|
||||
(mileage - lower_mileage_altitude[0])
|
||||
/ (upper_mileage_altitude[0] - lower_mileage_altitude[0])
|
||||
* (upper_mileage_altitude[1] - lower_mileage_altitude[1])
|
||||
+ lower_mileage_altitude[1]
|
||||
)
|
||||
# 没有高程就返回None
|
||||
return None
|
||||
|
|
|
|||
|
|
@ -9,15 +9,72 @@ TA_XC_STRING_LENGTH = 9.5
|
|||
TA_XC_TOWER_NAME = "WNSZ"
|
||||
TA_CONDUCTOR_TYPE = "LGJ-400/50"
|
||||
S_NC_STRING_NAME = "2*42-50"
|
||||
|
||||
|
||||
# 通过串型来判别是不是耐张塔
|
||||
def is_tension_tower_by_string(string_name):
|
||||
if string_name == S_NC_STRING_NAME:
|
||||
return 2
|
||||
return 1
|
||||
|
||||
|
||||
# SFiles中的文件应该是按顺序排列的`
|
||||
def generate_ta(TA_file, SFiles, cordination_file_path):
|
||||
# SFiles中的文件必须是按顺序排列的`
|
||||
def generate_ta_from_D(TA_file, SFiles, D_file_path):
|
||||
visited_tower_number = {} # 记录访问过的塔号
|
||||
cord_file_object = CordinationObject(cordination_file_path)
|
||||
with open(TA_file, "w") as file:
|
||||
# 生成所有需要用到的数据
|
||||
last_S_mileage = 0
|
||||
for S in SFiles:
|
||||
SObj = SFileObject(S)
|
||||
S_content = SObj.content()
|
||||
for S_entry in S_content:
|
||||
if S_entry[0] == "首端转角号" or S_entry[0] == "塔号":
|
||||
continue
|
||||
tower_number = S_entry[0]
|
||||
if tower_number not in visited_tower_number:
|
||||
visited_tower_number[tower_number] = 0
|
||||
else:
|
||||
continue
|
||||
mileage = int(S_entry[1]) + last_S_mileage
|
||||
tower_height = float(S_entry[7])
|
||||
angel = S_entry[5]
|
||||
string_name = S_entry[8]
|
||||
suspend_or_tension = is_tension_tower_by_string(string_name)
|
||||
conductor_type = TA_CONDUCTOR_TYPE
|
||||
# 1是悬垂 2是耐张
|
||||
if suspend_or_tension == 1:
|
||||
string_length = TA_XC_STRING_LENGTH
|
||||
conductor_suspension_poit = tower_height - string_length
|
||||
pile_number = tower_number
|
||||
ta_string_name = TA_XC_STRING_NAME
|
||||
tower_name = TA_XC_TOWER_NAME
|
||||
else:
|
||||
string_length = TA_NC_STRING_LENGTH
|
||||
conductor_suspension_poit = tower_height
|
||||
pile_number = tower_number
|
||||
ta_string_name = TA_NC_STRING_NAME
|
||||
tower_name = TA_NC_TOWER_NAME
|
||||
altitude = cord_file_object.get_altitude(pile_number)
|
||||
file.write(
|
||||
TA_ENTRY_TEMPLATE.format(
|
||||
tower_number=tower_number,
|
||||
suspend_or_tension=suspend_or_tension,
|
||||
mileage=mileage,
|
||||
conductor_suspension_poit=conductor_suspension_poit,
|
||||
altitude=altitude,
|
||||
pile_number=pile_number,
|
||||
tower_name=tower_name,
|
||||
tower_height=tower_height,
|
||||
string_name=ta_string_name,
|
||||
string_length=string_length,
|
||||
angel=angel,
|
||||
conductor_type=conductor_type,
|
||||
)
|
||||
)
|
||||
last_S_mileage = float(S_content[-1][1]) + last_S_mileage
|
||||
|
||||
# SFiles中的文件必须是按顺序排列的`
|
||||
def generate_ta_from_csv(TA_file, SFiles, cordination_file_path):
|
||||
visited_tower_number = {} # 记录访问过的塔号
|
||||
cord_file_object = CordinationObject(cordination_file_path)
|
||||
with open(TA_file, "w") as file:
|
||||
16
main.py
16
main.py
|
|
@ -1,7 +1,8 @@
|
|||
import generate_ta_from_csv
|
||||
from file_object import TaFileObject
|
||||
import generate_ta
|
||||
from file_object import TaFileObject, DFileAsSingle
|
||||
from file_object import DFileObject
|
||||
|
||||
if __name__ == "__main__":
|
||||
if __name__ == "__main__1":
|
||||
SFile = [
|
||||
r"d:\工程\灵州-青山\排位\0-20\S000.DAT",
|
||||
r"d:\工程\灵州-青山\排位\20-72\S020.DAT",
|
||||
|
|
@ -16,3 +17,12 @@ if __name__ == "__main__":
|
|||
# r"d:\工程\灵州-青山\排位\道亨\最终排位\最终排位.TA", SFile, r"d:\工程\灵州-青山\排位\道亨\最终排位\成果表-0120.csv"
|
||||
# )
|
||||
print("Finished.")
|
||||
|
||||
if __name__ == "__main__":
|
||||
SFile = [r"d:\道亨排位\流程测试\S034.DAT"]
|
||||
DFile = [r"d:\道亨排位\流程测试\D034.TXT", r"d:\道亨排位\流程测试\D038.TXT"]
|
||||
ta_object = TaFileObject(r"d:\道亨排位\流程测试\ 流程测试\ 流程测试.TA", SFile)
|
||||
d_file_object = DFileObject(r"d:\道亨排位\流程测试\D034.TXT")
|
||||
d_as_single = DFileAsSingle(DFile)
|
||||
print(d_as_single.get_altitude(1956+13))
|
||||
print("Finished.")
|
||||
|
|
|
|||
Loading…
Reference in New Issue