function [X,Y,d0] = plannet_adjustment(d,m,s)
global plan_pathname plan_filename plan_netname;
global yzd_x0;
if(isempty(plan_pathname) || isempty(plan_netname))
[plan_filename, plan_pathname] = uigetfile({
'*.yzd;*.fxz', 'data Files(*.yzd,*.fxz)';
'*.yzd', 'yzd(*.yzd)';
'*.*', 'All Files(*.*)'
}, 'Pick a file');
if (isempty(plan_pathname))
return;
end
i = find('.' == plan_filename);
plan_netname = plan_filename(1:i - 1);
end
yzd_filepath = strcat(plan_pathname, plan_netname, '.yzd');
fxz_filepath = strcat(plan_pathname, plan_netname, '.fxz');
pyzd = dlmread(yzd_filepath);
pyzd_n = pyzd(:, 1);
pyzd_count = length(pyzd_n);
yzd_x0 = pyzd(:, 2);
yzd_y0 = pyzd(:, 3);
pfxz = dlmread(fxz_filepath);
pfxz_qdh = pfxz(:, 1);
pfxz_zdh = pfxz(:, 2);
pfxz_f = pfxz(:, 3);
pfxz_d = pfxz(:, 4);
pfxz_f = dms_rad(pfxz_f);
bcz_h = find(pfxz_d > 0);
Zc = find(pfxz(:, 3) == 0);
pcz_count = length(Zc);
pbcz_count = length(bcz_h);
all_count = max(pfxz_qdh);
wzd_count = all_count - pyzd_count;
jszb_x(1:all_count, 1) = nan;
jszb_y(1:all_count, 1) = nan;
jszb_x(1:pyzd_count, 1) = yzd_x0;
jszb_y(1:pyzd_count, 1) = yzd_y0;
pfxz_count = length(pfxz_f);
ZA = ones(pfxz_count, 1).* 9999.999;
pfwj = [pfxz, ZA];
ei = 0;
while (1)
for n = 1:pfxz_count
n1 = pfxz_qdh(n);
n2 = pfxz_zdh(n);
z1 = find(pyzd_n == n1, 1);
z2 = find(pyzd_n == n2, 1);
if (pfwj(n, 5) ~= 9999.999)
continue;
end
if (~isempty(z1) && ~isempty(z2))
x1 = yzd_x0(n1);
y1 = yzd_y0(n1);
x2 = yzd_x0(n2);
y2 = yzd_y0(n2);
[ds, da] = xy_inv(x1, y1, x2, y2);
if da < 0
da = da + 2*pi;
end
pfwj(n, 5) = da;
pfwj(n, 4) = ds;
ei = ei + 1;
n1 = find(pfxz_zdh == n1);
n2 = find(pfxz_zdh == n2);
n3 = intersect(n1, n2);
if (~isempty(n3))
pfwj(n3, 5) = da + pi;
pfwj(n3, 4) = ds;
ei = ei + 1;
end
else
XZ = find(pfxz(:, 3) == 0);
X1 = pfxz_qdh(XZ);
z = X1 == n1;
z = XZ(z);
if (z > 0)
if (pfwj(z, 5) ~= 9999.999)
pfwj(n, 5) = pfwj(z, 5) + dms_rad(pfxz(n, 3));
ei = ei + 1;
n1 = find(pfxz_zdh == n1);
n2 = find(pfxz_zdh == n2);
n3 = intersect(n1, n2);
if (~isempty(n3) && pfwj(n3, 5) == 9999.999)
pfwj(n3, 5) = pfwj(n, 5) + pi;
ei = ei + 1;
end
else
XZ = find(pfxz(:, 3) ~= 0);
X1 = pfxz_qdh(XZ);
z2 = X1 == n1;
z2 = XZ(z2);
if (z2 > 0)
zw = pfwj(z2, 5) ~= 9999.999;
zp = z2(zw);
if (pfwj(zp, 5) ~= 9999.999)
zm = zp(1);
pfwj(n, 5) = pfwj(zm, 5) - dms_rad(pfxz(zm, 3)) + dms_rad(pfxz(n, 3));
ei = ei + 1;
n1 = find(pfxz_zdh == n1);
n2 = find(pfxz_qdh == n2);
n3 = intersect(n1, n2);
if (~isempty(n3)&&pfwj(n3,5)==9999.999)
pfwj(n3, 5) = pfwj(n, 5) + pi;
ei = ei + 1;
end
end
end
end
end
end
end
if(ei==pfxz_count)
pfwj(:,5)=mod(pfwj(:,5),2*pi);
pfwj(:,3)=dms_rad(pfwj(:,3));
break;
end
end
for n=1: pfxz_count
if(pfwj(n,4)~=0)
continue;
end
n1=pfxz_qdh(n);
n2=pfxz_zdh(n);
z1=find(pfxz_qdh==n2);
z2=find(pfxz_zdh==n1);
n3=intersect(z1,z2);
if(n3>0)
pfwj(n,4)=pfwj(n3,4);
end
end
e2=0;
while(1)
for n=1: pfxz_count
n1=pfxz_qdh(n);
n2=pfxz_zdh(n);
if(n1<=pyzd_count && n2<=pyzd_count)
continue;
elseif(n1<=pyzd_count && n2>pyzd_count)
if(isnan(jszb_x(n2))==1)
jszb_x(n2)=jszb_x(n1)+pfwj(n,4)*cos(pfwj(n,5));
jszb_y(n2)=jszb_y(n1)+pfwj(n,4)*sin(pfwj(n,5));
e2=e2+1;
end
elseif(n1>pyzd_count && n2<=pyzd_count)
if(isnan(jszb_x(n1))==1)
jszb_x(n1)= jszb_x(n2)+pfwj(n,4)*cos((pfwj(n,5)-pi));
jszb_y(n1)= jszb_y(n2)+pfwj(n,4)*sin((pfwj(n,5)-pi));
e2=e2+1;
end
else
if(isnan(jszb_x(n1))==0 && isnan(jszb_x(n2))==1)
jszb_x(n2)=jszb_x(n1)+pfwj(n,4)*cos(pfwj(n,5));
jszb_y(n2)=jszb_y(n1)+pfwj(n,4)*sin(pfwj(n,5));
e2=e2+1;
elseif (isnan (jszb_x(n1))==1 &&isnan(jszb_x(n2))==0)
jszb_x(n1)=jszb_x(n2)+pfwj(n,4)*cos(pfwj(n,5)-pi);
jszb_y(n1)=jszb_y(n2)+pfwj(n,4)*sin(pfwj(n,5)-pi);
e2=e2+1;
end
end
end
if(e2==wzd_count)
break;
end
end
Bxx=[];
Bss=[];
Lss=[];
Lxx=[];
Ls=[];
e3=0;
for n=1: pcz_count
sz=find(pfwj(:,1)==n);
dw=pfwj(sz,5)-pfwj(sz,3);
sw=find(dw<0);
dw(sw)=dw(sw)+2*pi;
z0=mean(dw);
ni=length(sz);
Bx=zeros(ni,2*all_count);
Lx=zeros(ni,1);
Bs=zeros(1,2*all_count);
Ls=zeros(1,1);
px(n)=-1/ni;
for ii=1: ni
nx=sz(ii);
n1=pfxz_qdh(sz(ii));
n2=pfxz_zdh(sz(ii));
x1=jszb_x(n1);
y1=jszb_y(n1);
x2=jszb_x(n2);
y2=jszb_y(n2);
[a,b]=xy_inv(x1,y1,x2,y2);
aij =sin(b).*2062.648./a;
bij=-cos(b).*2062.648./a;
Lx(ii)=(b-pfwj(nx,3)-z0);
if(Lx(ii)<-pi)
Lx(ii)= Lx(ii)+2*pi;
end
Lx(ii)=Lx(ii)*206264.8;
if(n1<=pyzd_count&&n2>pyzd_count)
Bx(ii,n1*2-1)=0;
Bx(ii,n1*2)=0;
Bx(ii,n2*2-1)=-aij;
Bx(ii,n2*2)=-bij;
elseif(n1>pyzd_count&&n2<=pyzd_count)
Bx(ii,n1*2-1)=aij;
Bx(ii,n1*2)=bij;
Bx(ii,n2*2-1)=-0;
Bx(ii,n2*2)=-0;
elseif(n1<=pyzd_count&&n2<=pyzd_count)
Bx(ii,n1*2-1)=0;
Bx(ii,n1*2)=0;
Bx(ii,n2*2-1)=-0;
Bx(ii,n2*2)=-0;
else
Bx(ii,n1*2-1)=aij;
Bx(ii,n1*2)=bij;
Bx(ii,n2*2-1)=-aij;
Bx(ii,n2*2)=-bij;
end
if(ii==length(sz))
e3=e3+1;
Bxx=[Bxx; Bx];
Bs=sum(Bx);
Bss=[Bss;Bs];
Lxx=[Lxx; Lx];
Ls=sum(Lx);
Lss=[Lss;Ls];
end
end
end
bz=find(pfxz_d~=0);
sz=length(bz);
Bx=zeros(sz,2*all_count);
Ls=zeros(sz,1);
Ps=zeros(sz,1);
for ii=1:sz
nx=bz(ii);
n1=pfxz_qdh(nx);
n2=pfxz_zdh(nx);
x1=jszb_x(n1);
y1=jszb_y(n1);
x2=jszb_x(n2);
y2=jszb_y(n2);
[a,b]=xy_inv(x1,y1,x2,y2);
dx=x2-x1;
dy=y2-y1;
bij=(y1-y2)/a;
aij=(x1-x2)/a;
lij=(a-pfwj(nx,4))*100;
xs=m+s*pfwj(nx,4)/1000;
xs=xs/10;
Ps(ii)=(10/xs)^2;
if(n1<=pyzd_count&&n2>pyzd_count)
Bx(ii,n1*2-1)=-0;
Bx(ii,n1*2)=-0;
Bx(ii,n2*2-1)=-aij;
Bx(ii,n2*2)=-bij;
Ls(ii)=lij;
elseif(n1>pyzd_count&&n2<=pyzd_count)
Bx(ii,n1*2-1)=aij;
Bx(ii,n1*2)=bij;
Bx(ii,n2*2-1)=-0;
Bx(ii,n2*2)=-0;
Ls(ii)=lij;
elseif(n1>pyzd_count&&n2>pyzd_count)
Bx(ii,n1*2-1)=aij;
Bx(ii,n1*2)= bij;
Bx(ii,n2*2-1)=-aij;
Bx(ii,n2*2)=-bij;
Ls(ii)=lij;
end
end
Bxx=[Bxx;Bx];
Lxx=[Lxx;Ls];
Bxx=[Bxx;Bss];
Lxx=[Lxx;Lss];
B=Bxx(:,pyzd_count *2+1:end);
Om1=ones(1,pfxz_count);
Om2=blkdiag(px);
Om3=blkdiag(Ps);
Om=[Om1,Om3',Om2];
P=diag(Om);
Pv=diag([Om1,Om3']);
N=B'*P*B;
W=B'*P*Lxx;
dx=N\W;
X1=dx(2:2:end,:);
Y1=dx(2:2:end,:);
X=jszb_x(pyzd_count+1:end,:)+X1./100;
Y=jszb_y(pyzd_count+1:end,:)+Y1./100;
Vx=B*dx-Lxx;
Vd=length(Vx);
V=Vx(1:Vd-pcz_count);
n=pbcz_count+pfxz_count;
r=n-2* wzd_count;
d0=sqrt(V'*Pv*V/r);
fprintf('\n平面网平差参数:\n');
fprintf('角度观测精度: %.2f 秒\n', d);
fprintf('测距固定误差: %.2f mm\n', m);
fprintf('测距比例误差: %.2f ppm\n', s);
fprintf('单位权中误差: %.4f\n', d0);
fprintf('X=: ', X=jszb_x(pyzd_count+1:end,:)+X1./100);
fprintf('Y=: ', Y=jszb_y(pyzd_count+1:end,:)+Y1./100);
hold on;
title('乔培控制网略图');
xlabel('Y');
ylabel('X');
for n=1: pfxz_count
n1=pfxz_qdh(n);
n2=pfxz_zdh(n);
x1=jszb_x(n1);
y1=jszb_y(n1);
x2=jszb_x(n2);
y2=jszb_y(n2);
hold on;
if(n1<=pyzd_count &&n2<=pyzd_count)
plot([y1, y2],[x1, x2],'->b','LineWidth', 2);
text(y1+50,x1+50,num2str(n1));
elseif(n1>pyzd_count &&n2>pyzd_count)
plot([y1,y2],[x1,x2],'-sb');
text(y1+50,x1+50,num2str(n1));
else
plot([y1, y2],[x1,x2],'b');
end
end
i=1;
for j=1: wzd_count
Qx=N(i,i);
Qy=N(i+1, i+1);
Qxy=N(i,i+1);
K=sqrt((Qx-Qy).^2+4*Qxy.^2);
EE=d0.^2*(Qx+Qy+K)./2;
FF=d0.^2*(Qx+Qy-K)./2;
E=sqrt(EE);
F=sqrt(FF);
i=i+2;
Qe=EE/d0;
fe=atan((Qe-Qx)/Qxy);
yy=Y(j)+(E*cos(0: 0.01:2*pi)* sin(fe)+F*sin(0:0.01:2*pi)* cos(fe))* 100;
xx=X(j)+(E*cos(0: 0.01:2*pi)* cos(fe)-F*sin(0:0.01:2*pi)* sin(fe))* 100;
plot(yy,xx,'r');
end
axis equal;
end