1.加入读取D文件功能。
This commit is contained in:
parent
65ef2f5685
commit
a29fee1644
|
|
@ -192,7 +192,7 @@ class TaFileObject:
|
||||||
tower_number = s_entry[0]
|
tower_number = s_entry[0]
|
||||||
tower_height = s_entry[7]
|
tower_height = s_entry[7]
|
||||||
if tower_number in s_tower_height_dic:
|
if tower_number in s_tower_height_dic:
|
||||||
continue# 只取第一次出现的。避免耐张段末端和首端不一致的问题。
|
continue # 只取第一次出现的。避免耐张段末端和首端不一致的问题。
|
||||||
s_tower_height_dic[tower_number] = tower_height
|
s_tower_height_dic[tower_number] = tower_height
|
||||||
ta_content = self._read(self._file_path)
|
ta_content = self._read(self._file_path)
|
||||||
new_ta_content = list(ta_content)
|
new_ta_content = list(ta_content)
|
||||||
|
|
@ -267,7 +267,7 @@ class CordinationObject:
|
||||||
continue
|
continue
|
||||||
sep = line.split(",")
|
sep = line.split(",")
|
||||||
J_or_Z = sep[0][0]
|
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
|
JZ_pile = J_or_Z + pile
|
||||||
# pile = sep[0][1:len(sep[0])]
|
# pile = sep[0][1:len(sep[0])]
|
||||||
altitude = sep[1]
|
altitude = sep[1]
|
||||||
|
|
@ -287,3 +287,60 @@ class CordinationObject:
|
||||||
|
|
||||||
def content(self):
|
def content(self):
|
||||||
return self._content
|
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_XC_TOWER_NAME = "WNSZ"
|
||||||
TA_CONDUCTOR_TYPE = "LGJ-400/50"
|
TA_CONDUCTOR_TYPE = "LGJ-400/50"
|
||||||
S_NC_STRING_NAME = "2*42-50"
|
S_NC_STRING_NAME = "2*42-50"
|
||||||
|
|
||||||
|
|
||||||
# 通过串型来判别是不是耐张塔
|
# 通过串型来判别是不是耐张塔
|
||||||
def is_tension_tower_by_string(string_name):
|
def is_tension_tower_by_string(string_name):
|
||||||
if string_name == S_NC_STRING_NAME:
|
if string_name == S_NC_STRING_NAME:
|
||||||
return 2
|
return 2
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
# SFiles中的文件必须是按顺序排列的`
|
||||||
# SFiles中的文件应该是按顺序排列的`
|
def generate_ta_from_D(TA_file, SFiles, D_file_path):
|
||||||
def generate_ta(TA_file, SFiles, cordination_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 = {} # 记录访问过的塔号
|
visited_tower_number = {} # 记录访问过的塔号
|
||||||
cord_file_object = CordinationObject(cordination_file_path)
|
cord_file_object = CordinationObject(cordination_file_path)
|
||||||
with open(TA_file, "w") as file:
|
with open(TA_file, "w") as file:
|
||||||
16
main.py
16
main.py
|
|
@ -1,7 +1,8 @@
|
||||||
import generate_ta_from_csv
|
import generate_ta
|
||||||
from file_object import TaFileObject
|
from file_object import TaFileObject, DFileAsSingle
|
||||||
|
from file_object import DFileObject
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__1":
|
||||||
SFile = [
|
SFile = [
|
||||||
r"d:\工程\灵州-青山\排位\0-20\S000.DAT",
|
r"d:\工程\灵州-青山\排位\0-20\S000.DAT",
|
||||||
r"d:\工程\灵州-青山\排位\20-72\S020.DAT",
|
r"d:\工程\灵州-青山\排位\20-72\S020.DAT",
|
||||||
|
|
@ -16,3 +17,12 @@ if __name__ == "__main__":
|
||||||
# r"d:\工程\灵州-青山\排位\道亨\最终排位\最终排位.TA", SFile, r"d:\工程\灵州-青山\排位\道亨\最终排位\成果表-0120.csv"
|
# r"d:\工程\灵州-青山\排位\道亨\最终排位\最终排位.TA", SFile, r"d:\工程\灵州-青山\排位\道亨\最终排位\成果表-0120.csv"
|
||||||
# )
|
# )
|
||||||
print("Finished.")
|
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