一、外业测量获取数据
以下列草图为例进行大比例尺地形图测绘,若希望绘制该区域地形图,首先要进行控制点测量,得到控制点坐标,再依据控制点进行碎部测量,采集碎部点后成图。
在此使用闭合导线网,具体流程:
- 在起始点BM-49处架站,先盘左瞄准J7,水平度盘置零,读取水平度盘读数和水平距离;
- 之后瞄准J1,读取水平度盘读数和水平距离;
- 切换到盘右,再读J1处水平度盘读数和水平距离;
- 瞄准J7,读取水平度盘读数和水平距离。
BM-48,与BM-49为控制点,通过测量BM-48,BM-49,J1间角度与J7,BM-49,J1间角度相减得到起始坐标方位角。
二、组织数据
创建记事本:
#第一行:初始点方位角的度,分,秒;
#第二行:初始点坐标;
#第三行:J1观测角的度,分,秒,J1与J2测站间距离;
#以此类推;
三、内业计算
运行之前要修改测站数,观测角为左角还是右角!
#数据准备
D_list=[] #测站距离
Obs_degree_list=[] #观测角的弧度
import math
def dms_to_radians(degree):
#获取度分秒
degrees_str=degree[0]
minutes_str=degree[1]
seconds_str=degree[2]
#转化为数字
degrees=float(degrees_str)
minutes=float(minutes_str)
seconds=float(seconds_str)
#计算弧度
radians=math.radians(degrees+(minutes/60)+(seconds/3600))
return radians
'''
#第一行:初始点方位角的度,分,秒;
#第二行:初始点坐标;
#第三行:J1观测角的度,分,秒,J1与J2测站间距离;
#以此类推;
'''
filename = '/home/z/observation_01'
n=8#测站数
user_input="T" #确定观测角方向,输入T(左角)或F(右角)
with open(filename, 'r') as f:
# 读取第一行数据
first_line = f.readline().strip()
# 读取第二行数据
second_line = f.readline().strip()
# 读取第三行以后的数据
for line in f:
items_list=[]#存储观测角
v_degree=[]#存储竖直角
# 按分隔符拆分每一行数据
data =line.strip()
data=data.split(',')
print(data)
# 读取前三个元素和第四个元素
item1,item2,item3,item4=data[0],data[1],data[2],data[3]
items_list.append(item1)
items_list.append(item2)
items_list.append(item3)
Obs_degree_list.append(dms_to_radians(items_list))
D_list.append(float(item4))
a12=[]
a12=first_line.split(',')
print("起始方位角:",a12)
a12=dms_to_radians(a12)
J_x_1,J_y_1=second_line.split(',')
J_x_1,J_y_1=float(J_x_1),float(J_y_1)
print("起始点测站坐标:",J_x_1,",",J_y_1)
print("测站距离:",D_list)
print("观测角弧度:",Obs_degree_list)
b_list=Obs_degree_list
#1.计算方位角闭合差
sum_b=sum(b_list)
f_b=sum_b-((n-2)*math.pi)
print("\n方位角闭合差为:",f_b)
f_b_limit=(40/3600)*(math.pi/180)*math.sqrt(n)
print("理论限差为:",f_b_limit)
f_b_abs=abs(f_b)
if(f_b_abs<f_b_limit):
print("\n小于图根级限差,测的不错!")
else:
print("\n测的依托答辩,爬去重测!!!")
#sys.exit()
#2.计算改正数,分配内角和
V=-f_b/n
print("\n方位角改正数:",V)
b_list_new=list(map(lambda x:x+V,b_list))
print("\n改正后各观测角:",b_list_new)
#3.计算各边方位角
b_list_cal=b_list_new[1:]+b_list_new[:1]
a_list=[]
a_list.append(a12)
i=0
while i<=n-2:
if user_input=="T":
a_j=a_list[i]+b_list_cal[i]-math.pi #j=i+1
elif user_input == "F":
a_j=a_list[i]-b_list_cal[i]+math.pi #j=i+1
a_list.append(a_j)
i+=1
print("各边方位角:",a_list)
#4.计算各边坐标增量
cos_a_list=list(map(lambda x:math.cos(x),a_list))
sin_a_list=list(map(lambda x:math.sin(x),a_list))
import numpy as np
array1=np.array(cos_a_list)
array2=np.array(sin_a_list)
array3=np.array(D_list)
diff_x=np.multiply(array1,array3)
diff_y=np.multiply(array2,array3)
print("\nx坐标增量:",diff_x)
print("y坐标增量",diff_y)
#5.计算导线闭合差
f_x=sum(diff_x)
f_y=sum(diff_y)
f=math.sqrt(f_x**2+f_y**2)
K=f/sum(D_list)
print("\n导线相对闭合差:\n",K)
if(K<(1/4000)):
print("真棒!!!")
else:
print("\n真他娘可惜!")
#sys.exit()
#6.分配坐标增量闭合差
v_x_list=list(map(lambda x:(-f_x/sum(D_list))*x,D_list))
v_y_list=list(map(lambda x:(-f_y/sum(D_list))*x,D_list))
print("\nx轴坐标增量闭合差:",v_x_list)
print("\ny轴坐标增量闭合差:",v_y_list)
diff_x_new=[]
diff_y_new=[]
for x,y in zip(diff_x,v_x_list):
diff_x_new.append(x+y)
for x,y in zip(diff_y,v_y_list):
diff_y_new.append(x+y)
print("\nx轴坐标增量:",diff_x_new)
print("\ny轴坐标增量:",diff_y_new)
#7.计算各点坐标
J_x=[]
J_x.append(J_x_1)
i=0
while(i<=n-2):
J_x_j=diff_x_new[i]+J_x[i] #j=i+1
J_x.append(J_x_j)
i+=1
J_y=[]
J_y.append(J_y_1)
i=0
while(i<=n-2):
J_y_j=diff_y_new[i]+J_y[i] #j=i+1
J_y.append(J_y_j)
i+=1
#8.输出各点坐标
i=0
result=[[x,y] for x,y in zip(J_x,J_y)]
for item in result:
print("\n测站%d坐标:"%(i+1),item)
i+=1
result[-1][-1]+=diff_y_new[n-1]
result[-1][-2]+=diff_x_new[n-1]
print("\n检核测站1坐标:",result[n-1])
运行结果: