C ADJUSTMENT OF BUNDLES, SORTING JUNE 1978 G.H.S. 2001 C 2002 C ***** SORT STEREOCOMPARATOR DATA **** MAIN ROUTINE ***** 2003 C 2004 C **************************************************************** 2005 C * SET DIMENSIONS AND 8 CONSTANTS AS FOLLOWS, OR LARGER * 2006 C * MPH IS NUMBER OF PHOTOGRAPHS * 2007 C * MENH IS NUMBER OF CONTROL AND CHECK POINTS, PLUS ONE * 2008 C * MXY IS MAXIMUM NUMBER OF STEREO POINTS PER STEREOPAIR * 2009 C * MID IS NUMBER OF STEREO POINTS * 2010 C * MIM IS TWICE MAXIMUM NUMBER OF STEREOPAIRS PER TERRAIN POINT 2011 C * MTY IS MAXIMUM NUMBER OF POINTS IN ARRAY LTIE (.LE. MXY) * 2012 C * MW IS BANDWIDTH * 2013 C * MSP IS NUMBER OF STEREOPAIRS * 2014 C * LAIR(8,MPH),LPH(4,MPH),LENH(4,MENH), * 2015 C * LXY(5,MXY),ID(MID),LTIE(3,MIM,MTY),LSP(3,MSP) * 2016 C * ROT(3,3,MW) * 2017 C **************************************************************** 2018 C 2019 COMMON INT(16), CLIST(161) 2020 EQUIVALENCE (INT(1),N), (INT(2),NIM), (INT(3),NW), (INT(5),NP), 2021 1 (LPH(1,1),LTIE(1,1,1)), (LXY(1,1),ROT(1,1,1)), (ID(1),LENH(1,1)) 2022 C **************************************************************** 2023 C DIMENSIONS FOR CRYSLER TEST BLOCK STER C ********************************* DIMENSION LAIR(8,30),LPH(4,30),LENH(4,65), 1 LXY(5,18),ID( 350),LTIE(3,12, 6), LSP(3,27) DOUBLE PRECISION ROT(3,3, 9) DATA MPH,MENH,MXY,MID,MIM,MTY,MW,MSP / 30,65,18,350,12,6,9,27 / C **************************************************************** 2030 C 2031 C READ PHOTOGRAPH SPECIFICATIONS, READ AIR STATIONS IN DESIRED ORDER 2032 C WITH APPROXIMATE VALUES OF ALL ORIENTATION PARAMETERS 2033 CALL COMM1 (LAIR,LPH,4,MPH) 2034 C 2035 C READ, REDUCE, AND SORT IMAGE COORDINATES 2036 CALL STER2 (LXY,MXY, LPH,MPH, LSP,MSP, ID,MID) 2037 NSP = INT(2) 2038 INT(3) = MW 2039 CALL STER3 (LSP,NSP, ID, LXY,MXY, LTIE,MIM,MTY) 2040 C 2041 C READ GROUND CONTROL AND COMPUTE APPROXIMATE COORDINATES 2042 CALL COMM4 (LENH,MENH, LAIR, LTIE,MTY, ROT) 2043 STOP 77 2044 END 2045 SUBROUTINE COMM1 (LAIR,LPH,JPH,MPH) 1101 C 1102 C READ JOB AND PHOTOGRAPH SPECIFICATIONS. 1103 C READ AIR STATIONS IN DESIRED ORDER, WITH INITIAL VALUES 1104 C OF ORIENTATION PARAMETERS 1105 C 1106 COMMON INT(6),JD31,JD32,JD33,IPR,JW11,JW12,JW13,LFOC,LSC(2), 1107 1 CLIST(160),DELR 1108 DOUBLE PRECISION FOC,SC(2) 1109 DIMENSION A(19), LAIR(8,MPH),LPH(JPH,MPH) 1110 EQUIVALENCE (INT(1),N), (INT(2),KODE),(INT(3),LENS),(INT(4),JTOT), 1111 1 (INT(6),LIST) 1112 C 1113 1 FORMAT (19A4, I4, / 24X, 4I8, 20X, I4) 1114 2 FORMAT (I4, F4.1, 8F8.1, 4X, I4) 1115 3 FORMAT (8I10) 1116 11 FORMAT (3H1 19A4// 7H F = F8.3, 16H, ROTATION CODES I4, 1117 1 15H, SCALE FACTORS 2F9.5 /) 1118 12 FORMAT (19H LENS CORRECTION /) 1119 13 FORMAT (50H0 AIR STATIONS AND INITIAL PHOTOGRAPH PARAMETERS / 1120 1 T7,5HSEQ.# T20,2HPH / (1H 9I10)) 1121 21 FORMAT (34H0 ERROR IN LENS CORRECTION TABLE) 1122 22 FORMAT (19H0 NO AIR STATIONS) 1123 23 FORMAT ( 7H0 THE I4, 28H AIR STATIONS OVERFLOW ARRAY) 1124 C 1125 C DEFINE INPUT DEVICES JW, STORAGE DEVICES JD, AND PRINTER IPR 1126 JW11 = 11 1127 JW12 = 12 1128 JW13 = 13 1129 JD31 = 31 1130 JD32 = 32 1131 JD33 = 33 1132 IPR = 6 1133 C 1134 C READ JOB DESCRIPTION CARD, FOCAL LENGTH, ETC. 1135 READ (JW11,1) A, LIST, LFOC, KODE, LSC, LENS 1136 FOC = 1D-3 * LFOC 1137 DO 101 J = 1,2 1138 IF (LSC(J) .EQ. 0) LSC(J) = 100000 1139 101 SC(J) = LSC(J) * 1D-5 1140 WRITE (IPR,11) A, FOC, KODE, SC 1141 IF (LENS .EQ. 0) GO TO 110 1142 C READ LENS CORRECTION TABLE 1143 DO 104 J1 = 1,160,8 1144 J2 = J1 + 7 1145 READ (JW11,2, END=151) JJ, DR, (CLIST(J), J = J1,J2), J3 1146 IF (J1.GT.1) GO TO 102 1147 JTOT = JJ 1148 DELR = DR 1149 102 LENS = LENS + 1 1150 IF (J3 .NE. LENS) GO TO 151 1151 IF (J2 .GE. JTOT) GO TO 106 1152 104 CONTINUE 1153 GO TO 151 1154 106 DO 107 J = 1,JTOT 1155 107 CLIST(J) = CLIST(J) / (DELR * 1000.) 1156 WRITE (IPR,12) 1157 C 1158 C READ IN PROPER SEQUENCE ALL AIR STATIONS 1159 C WITH INITIAL VALUES OF ALL PHOTOGRAPH PARAMETERS 1160 110 DO 115 N = 1,9999 1161 IF (N .GT. MPH) GO TO 114 1162 READ (JW11,3, END=116) (LAIR(J,N), J = 1,8) 1163 IF (LAIR(1,N) .EQ. 0) GO TO 116 1164 LPH(1,N) = LAIR(1,N) 1165 DO 112 J = 2,JPH 1166 112 LPH(J,N) = 0 1167 GO TO 115 1168 114 READ (JW11,3, END=116) JJ 1169 IF (JJ .EQ. 0) GO TO 116 1170 115 CONTINUE 1171 116 N = N - 1 1172 IF (N .EQ. 0) GO TO 152 1173 IF (N .GT. MPH) GO TO 153 1174 WRITE (IPR,13) (J2, (LAIR(J1,J2), J1=1,8), J2=1,N) 1175 RETURN 1176 C 1177 C ERROR MESSAGES 1178 151 WRITE (IPR,21) 1179 GO TO 159 1180 152 WRITE (IPR,22) 1181 GO TO 159 1182 153 WRITE (IPR,23) N 1183 159 STOP 01 1184 END 1185 SUBROUTINE COMM4 (LENH,MENH, LAIR, LTIE,MTY, ROT) 1801 C 1802 C COMPLETE AND STORE ONE RECORD FOR EACH TERRAIN POINT 1803 COMMON N,NIM,NW,JNT(2),LIST,JD31,JD32,JD33,IPR,JW11,JW12,JW13,LFOC 1804 DIMENSION LENH(4,MENH),LAIR(8,N),LTIE(3,NIM,MTY),LTER(4) 1805 DIMENSION BASE(3),XA(3),XB(3), INT(6) 1806 DOUBLE PRECISION ROT(3,3,NW), ABCD(4),AR,BR,CR,DR 1807 EQUIVALENCE (AR,ABCD(1)),(BR,ABCD(2)),(CR,ABCD(3)),(DR,ABCD(4)) 1808 EQUIVALENCE (INT(1),N) 1809 3 FORMAT (8I10) 1810 71 FORMAT (41H0 POINTS INITIAL TERRAIN COORDINATES 1811 1 / T51,'#' 4X,'IM' ) 1812 72 FORMAT (1H 5I10, I6) 1813 73 FORMAT (1H0 I8,' PLANIMETRIC CONTROL POINTS' / 1H I8,' HEIGHT CONT 1814 1ROL POINTS' / 1H I8,' CHECK POINTS' / 1H I8,' TERRAIN POINTS' /) 1815 81 FORMAT (21H0 NO GROUND CONTROL) 1816 82 FORMAT (37H0 GROUND CONTROL OVERFLOWS AT POINT I7) 1817 83 FORMAT ( 9H POINT I8, 26H OCCURS ONLY IN PHOTOGRAPH I8) 1818 84 FORMAT (49H POINT 7777 NOT USED AS CONTROL OR CHECK POINT) 1819 C 1820 ITER = 0 1821 WRITE (JD31) ITER, (INT(J),J=1,3), LFOC, 1822 1 ((LAIR(J1,J2), J1=1,8), J2=1,N) 1823 C 1824 C READ GROUND COORDINATES, CHECK ON OVERFLOW 1825 LL1 = 0 1826 J = 0 1827 401 J = J + 1 1828 IF (J .GT. MENH) GO TO 492 1829 402 READ (JW13,3, END=405) (LENH(J1,J), J1 = 1,4) 1830 IF (INT(5).GT.0 .OR. LENH(1,J).NE.7777) GO TO 403 1831 WRITE (IPR,84) 1832 GO TO 402 1833 403 IF (LENH(1,J) .GT. 0) GO TO 401 1834 IF (LL1 .NE. 0) GO TO 405 1835 LL1 = J - 1 1836 GO TO 402 1837 C 1838 405 LL2 = J - 1 1839 IF (LL1 .EQ. 0) LL1 = LL2 1840 IF (LL1 .EQ. 0) GO TO 491 1841 C 1842 IF (LIST .GT. 0) WRITE (IPR,71) 1843 LG1 = 0 1844 LG2 = 0 1845 LG3 = 0 1846 C 1847 C READ AND PROCESS ONE RECORD 1848 KK = 0 1849 KKMAX = N - NW + 1 1850 410 READ (JD33,END=480) K,MZ,MT, (((LTIE(J,M1,M2),J=1,3),M1=1,MZ), 1851 1 M2=1,MT) 1852 IF (KK .EQ. KKMAX .OR. K .EQ. KK) GO TO 430 1853 C 1854 C COMPUTE AND STORE THE ORIENTATION MATRICES 1855 IF (KK .NE. 0) GO TO 421 1856 KK = K 1857 L1 = 1 1858 GO TO 425 1859 C SHIFT THE AVAILABLE MATRICES 1860 421 INCR = K - KK 1861 IF ((KKMAX-KK) .LT. INCR) INCR = KKMAX - KK 1862 KK = KK + INCR 1863 M1 = INCR + 1 1864 DO 422 J2 = M1,NW 1865 M2 = J2 - INCR 1866 DO 422 J1 = 1,3 1867 DO 422 J = 1,3 1868 422 ROT(J,J1,M2) = ROT(J,J1,J2) 1869 L1 = NW - INCR + 1 1870 C FORM THE MISSING MATRICES 1871 425 DO 428 L = L1,NW 1872 J = L + KK - 1 1873 DO 426 J1 = 1,4 1874 426 ABCD(J1) = LAIR(J1+4,J) * 1D-7 1875 ROT(2,3,L) = 2D0*(BR*CR - AR*DR) 1876 ROT(3,1,L) = 2D0*(CR*AR - BR*DR) 1877 ROT(1,2,L) = 2D0*(AR*BR - CR*DR) 1878 ROT(3,2,L) = 2D0*(BR*CR + AR*DR) 1879 ROT(1,3,L) = 2D0*(CR*AR + BR*DR) 1880 ROT(2,1,L) = 2D0*(AR*BR + CR*DR) 1881 DO 427 J1 = 1,4 1882 427 ABCD(J1) = ABCD(J1)**2 1883 ROT(1,1,L) = DR + AR - BR - CR 1884 ROT(2,2,L) = DR - AR + BR - CR 1885 428 ROT(3,3,L) = DR - AR - BR + CR 1886 C 1887 C PROCESS THE TERRAIN POINTS IN THE RECORD, ONE AT A TIME 1888 430 DO 479 M2 = 1,MT 1889 LTER(1) = LTIE(1,1,M2) 1890 LTIE(1,1,M2) = K 1891 DO 431 M1 = 1,MZ 1892 IF (LTIE(1,M1,M2) .EQ. 0) GO TO 432 1893 431 CONTINUE 1894 M1 = MZ + 1 1895 432 M1 = M1 - 1 1896 C 1897 C SEARCH FOR GIVEN GROUND COORDINATES 1898 DO 441 L = 1,LL2 1899 IF (LTER(1) .EQ. LENH(1,L)) GO TO 445 1900 441 CONTINUE 1901 L = 0 1902 DO 442 J1 = 2,4 1903 442 LTER(J1) = 0 1904 443 IF (M1 .GT. 1) GO TO 450 1905 444 WRITE (IPR,83) LTER(1), LAIR(1,K) 1906 GO TO 479 1907 445 DO 446 J1 = 2,4 1908 446 LTER(J1) = LENH(J1,L) 1909 IF (LTER(3).EQ.0 .OR. LTER(4).EQ.0) GO TO 443 1910 IF (M1.EQ.1 .AND. L.GT.LL1) GO TO 444 1911 GO TO 460 1912 C 1913 C COMPUTE APPROXIMATE COORDINATES 1914 C BASE AND VECTORS TO PHOTO POINTS 1915 450 J = LTIE(1,2,M2) 1916 JL = K - KK + 1 1917 JR = J - KK + 1 1918 DO 451 J1 = 1,3 1919 451 BASE(J1) = LAIR(J1+1,J) - LAIR(J1+1,K) 1920 DO 452 J = 1,3 1921 XA(J) = ROT(J,1,JL)*LTIE(2,1,M2) + ROT(J,2,JL)*LTIE(3,1,M2) - 1922 1 ROT(J,3,JL)*1D6 1923 452 XB(J) = ROT(J,1,JR)*LTIE(2,2,M2) + ROT(J,2,JR)*LTIE(3,2,M2) - 1924 1 ROT(J,3,JR)*1D6 1925 C CROSS PRODUCTS 1926 D1 = XA(2) * XB(3) - XA(3) * XB(2) 1927 D2 = XA(3) * XB(1) - XA(1) * XB(3) 1928 D3 = XA(1) * XB(2) - XA(2) * XB(1) 1929 DD = D1*D1 + D2*D2 + D3*D3 1930 D4 = BASE(2) * XB(3) - BASE(3) * XB(2) 1931 D5 = BASE(3) * XB(1) - BASE(1) * XB(3) 1932 D6 = BASE(1) * XB(2) - BASE(2) * XB(1) 1933 D7 = (D4*D1 + D5*D2 + D6*D3) / DD 1934 D8 = .5 * (BASE(1)*D1 + BASE(2)*D2 + BASE(3)*D3) / DD 1935 C TAG GROUND CONTROL AND INSERT APPROXIMATE COORDINATES 1936 IF (LTER(3) .EQ. 0) GO TO 461 1937 460 LTER(1) = LTER(1) + 2000000 1938 IF (L .LE. LL1) LG1 = LG1 + 1 1939 GO TO 462 1940 461 LTER(2) = LAIR(2,K) + D7 * XA(1) + D8 * D1 1941 LTER(3) = LAIR(3,K) + D7 * XA(2) + D8 * D2 1942 462 IF (LTER(4) .EQ. 0) GO TO 463 1943 LTER(1) = LTER(1) + 1000000 1944 IF (L .LE. LL1) LG2 = LG2 + 1 1945 GO TO 466 1946 463 LTER(4) = LAIR(4,K) + D7 * XA(3) + D8 * D3 1947 466 IF (L .LE. LL1) GO TO 467 1948 LTER(1) = LTER(1) + 3000000 1949 LG3 = LG3 + 1 1950 467 IF (LIST .GT. 0) WRITE (IPR,72) LTER, K, M1 1951 C 1952 C WRITE ONE RECORD FOR EACH TERRAIN POINT 1953 WRITE (JD31) LTER, M1, ((LTIE(J,J1,M2),J=1,3),J1=1,M1) 1954 479 CONTINUE 1955 GO TO 410 1956 C 1957 480 END FILE JD31 1958 REWIND JD31 1959 REWIND JD33 1960 WRITE (IPR,73) LG1, LG2, LG3, INT(4) 1961 RETURN 1962 C 1963 C ERROR MESSAGES 1964 491 WRITE (IPR,81) 1965 GO TO 499 1966 492 WRITE (IPR,82) LENH(1,MENH) 1967 499 STOP 04 1968 END 1969 SUBROUTINE STER2 (LXY,MXY, LPH,MPH, LSP,MSP, ID,MID) 2201 C 2202 C READ STEREOCOMPARATOR COORD., COMPUTE REDUCED PHOTOGRAPH COORD. 2203 C CONSTRUCT ONE RECORD WITH REDUCED COORDINATES FOR EACH STEREOPAIR 2204 C 2205 COMMON INT(6),JD31,JD32,JD33,IPR,JW11,JW12,JW13,LFOC,LSC(2), 2206 1 CLIST(160),DELR 2207 DOUBLE PRECISION S(2,2),FREC,T,W(2),ROUND 2208 DIMENSION L(3,3),LXY(5,MXY),LPH(4,MPH),LSP(3,MSP),ID(MID), 2209 1 LPPX(2),LPPY(2),JSP(2) 2210 EQUIVALENCE (INT(1),N), (INT(2),KODE),(INT(3),LENS),(INT(4),JTOT), 2211 1 (INT(5),NP),(INT(6),LIST) 2212 FREC = 1D0 / (1D-3 * LFOC) 2213 C 2214 8 FORMAT (10I8) 2215 31 FORMAT (15H0 STEREOPAIRS / T9,'#' T17,'#' T28,'PH' T38,'PH') 2216 32 FORMAT (1H 2I8, 2X, 2I10) 2217 33 FORMAT (15H0 PHOTOGRAPHS T27,'CODES' T38,'SCALE FACTORS' / 2218 1 T11, '#' T20, 'PH' / (1H 5I10)) 2219 34 FORMAT (1H0 I8, 12H STEREOPAIRS / I9, 13H STEREOPOINTS) 2220 40 FORMAT (27H0 NO MEASURED COORDINATES) 2221 41 FORMAT (23H0 MEASURED PHOTOGRAPH I8, 19H HAS NO AIR STATION) 2222 42 FORMAT (15H0 AIR STATION I8, 27H HAS NO MEASURED PHOTOGRAPH) 2223 43 FORMAT (16H0 INVALID CODE I3, 21H FOR ROTATION OF AXES) 2224 44 FORMAT (33H0 NO STEREOPOINTS IN STEREOPAIR I8) 2225 45 FORMAT (39H0 TOO MANY STEREOPOINTS IN STEREOPAIR I8) 2226 46 FORMAT (35H0 TOO MANY STEREOPOINTS IN BLOCK: I4) 2227 47 FORMAT (32H0 NO SPACE FOR NEXT STEREOPAIR) 2228 48 FORMAT (16H POINT NUMBER I8, 27H IS DUPLICATE IN STEREOPAIR I8) 2229 49 FORMAT ( 9H POINT I7, 14H IN PHOTOGRAPH I8, 2230 1 42H IS OUTSIDE RANGE OF LENS CORRECTION TABLE) 2231 C 2232 C FOR EACH STEREOPAIR, READ FIRST THE PRINCIPAL POINTS 2233 C THEN THE MEASURED POINTS, ONE PER CARD 2234 C NO SEPARATION BETWEEN SETS OF CARDS FOR DIFFERENT STEREOPAIRS 2235 C END OF DECK OR BLANK CARD ENDS READING 2236 WRITE (IPR,31) 2237 MISS = 0 2238 NSP = 1 2239 NP = 0 2240 MODL = 0 2241 205 READ (JW12, 8, END=240) JPAIR, ((L(J1,J2), J1 = 1,3), J2 = 1,3) 2242 IF (JPAIR .EQ. MODL) GO TO 230 2243 IF (MODL .NE. 0) GO TO 250 2244 C 2245 C PROCESS PRINCIPAL POINTS CARD 2246 210 MODL = JPAIR 2247 IF (L(1,3) .NE. 0) KODE = L(1,3) 2248 DO 215 J1 = 1,2 2249 IF (L(J1+1,3) .NE. 0) LSC(J1) = L(J1+1,3) 2250 LPPX(J1) = L(2,J1) 2251 LPPY(J1) = L(3,J1) 2252 C FIND THE SEQUENCE NUMBERS OF THE TWO PHOTOGRAPHS, 2253 DO 213 J2 = 1,N 2254 IF (L(1,J1) .EQ. LPH(1,J2)) GO TO 214 2255 213 CONTINUE 2256 WRITE (IPR,41) L(1,J1) 2257 MISS = MISS + 1 2258 GO TO 215 2259 214 JSP(J1) = J2 2260 IF (LPH(2,J2) .EQ. 0) LPH(2,J2) = KODE 2261 IF (LPH(2,J2) .NE. KODE) GO TO 293 2262 215 CONTINUE 2263 C 2264 C PREPARE TO PLACE THE TWO PHOTOGRAPHS IN PROPER SEQUENCE 2265 L4 = 1 2266 L5 = 2 2267 IF (JSP(1) .LT. JSP(2)) GO TO 217 2268 L4 = 2 2269 L5 = 1 2270 C STORE SEQUENCE NUMBERS AND PHOTOGRAPH NUMBERS 2271 C INTERCHANGES ARE MADE HERE 2272 217 LSP(1,NSP) = JSP(L4) 2273 LSP(2,NSP) = JSP(L5) 2274 LSP(3,NSP) = NSP 2275 JSP(1) = L(1,L4) 2276 JSP(2) = L(1,L5) 2277 C STORE SCALE FACTORS 2278 DO 218 J = 1,2 2279 J2 = LSP(J,NSP) 2280 DO 218 J1 = 3,4 2281 IF (LPH(J1,J2) .EQ. 0) LPH(J1,J2) = LSC(J1-2) 2282 218 S(J1-2,J) = LPH(J1,J2) * 1D-8 2283 C 2284 C PREPARE FOR CHANGE TO U,V COORDINATES 2285 L2 = 2 2286 L3 = 3 2287 JU = KODE / 10 2288 JV = KODE - 10 * JU 2289 IF (JU.GT.4 .OR. JV.GT.4) GO TO 293 2290 JU = JU + 1 2291 JV = JV + 1 2292 GO TO (221, 222, 221, 222, 221), JU 2293 221 GO TO (225, 293, 225, 293, 225), JV 2294 222 GO TO (293, 223, 293, 223, 293), JV 2295 223 L2 = 3 2296 L3 = 2 2297 C CHANGE OF POSITIVE DIRECTIONS 2298 225 DO 226 J = 1,2 2299 IF (JU.EQ.3 .OR. JU.EQ.4) S(1,J) = -S(1,J) 2300 IF (JV.EQ.2 .OR. JV.EQ.3) S(2,J) = -S(2,J) 2301 226 CONTINUE 2302 L1 = 0 2303 GO TO 205 2304 C 2305 C STORE IMAGE POINTS IN ARRAY LXY, CHANGE DUPLICATE POINT NUMBERS 2306 C SHIFT ORIGIN AND MAKE REQUIRED INTERCHANGES 2307 230 IF (L1 .EQ. 0) GO TO 233 2308 IF (L(1,1) .EQ. 7777) GO TO 232 2309 DO 231 J = 1,L1 2310 IF (L(1,1) .NE. LXY(1,J)) GO TO 231 2311 IF (LIST.GT.0) WRITE (IPR,48) L(1,1), MODL 2312 L(1,1) = 7777 2313 GO TO 232 2314 231 CONTINUE 2315 232 IF (L1 .EQ. MXY) GO TO 295 2316 233 L1 = L1 + 1 2317 C TO ADD PARALLAXES ON THE RIGHT TO COORDINATES ON THE LEFT, INSERT 2318 C L(2,2) = L(2,1) + L(2,2) 2319 C L(3,2) = L(3,1) + L(3,2) 2320 C INTERCHANGE OF LEFT AND RIGHT PHOT. COORD. IS MADE HERE 2321 LXY(1,L1) = L(1,1) 2322 LXY(2,L1) = L(2,L4) - LPPX(L4) 2323 LXY(3,L1) = L(3,L4) - LPPY(L4) 2324 LXY(4,L1) = L(2,L5) - LPPX(L5) 2325 LXY(5,L1) = L(3,L5) - LPPY(L5) 2326 GO TO 205 2327 C 2328 240 IF (MODL .EQ. 0) GO TO 290 2329 JPAIR = -1 2330 C 2331 C PROCESS THE POINTS IN ONE STEREOPAIR 2332 250 IF (L1 .EQ. 0) GO TO 294 2333 DO 259 J3 = 1,L1 2334 DO 259 J1 = 1,2 2335 J2 = J1 + J1 2336 C X,Y COORDINATE INTERCHANGE IS MADE HERE 2337 W(L2-1) = LXY(J2,J3) * S(1,J1) 2338 W(L3-1) = LXY(J2+1,J3) * S(2,J1) 2339 T = 0. 2340 IF (LENS .EQ. 0) GO TO 253 2341 T1 = W(1)**2 + W(2)**2 2342 T2 = T1**.5 + 1E-7 2343 J = T2 / DELR + 1. 2344 IF (J .LT. JTOT) GO TO 252 2345 WRITE (IPR,49) LXY(1,J3), JSP(J1) 2346 GO TO 253 2347 252 T3 = DELR * J - T2 2348 T = (T3*CLIST(J) + (DELR-T3)*CLIST(J+1)) / T2 2349 253 DO 254 J = 1,2 2350 J2 = J1 + J1 + J - 1 2351 W(J) = (W(J) + W(J) * T) * FREC 2352 ROUND = .5D0 2353 IF (W(J) .LT. 0) ROUND = - ROUND 2354 254 LXY(J2,J3) = W(J) * 1D6 + ROUND 2355 259 CONTINUE 2356 C 2357 C STORE THE DATA, ONE RECORD PER STEREOPAIR 2358 WRITE (JD33) L1, ((LXY(J1,J2), J1=1,5), J2=1,L1) 2359 WRITE (IPR,32) (LSP(J,NSP), J=1,2), (JSP(J), J=1,2) 2360 NP = NP + L1 2361 IF (JPAIR .LE. 0) GO TO 260 2362 NSP = NSP + 1 2363 IF (NSP .GT. MSP) GO TO 297 2364 GO TO 210 2365 C 2366 C CHECK WHETHER ALL PHOTOGRAPHS IN LPH HAVE BEEN MEASURED 2367 260 DO 262 J1 = 1,N 2368 DO 261 J2 = 1,NSP 2369 DO 261 J = 1,2 2370 IF (J1 .EQ. LSP(J,J2)) GO TO 262 2371 261 CONTINUE 2372 WRITE (IPR,42) LPH(1,J1) 2373 MISS = MISS + 1 2374 262 CONTINUE 2375 WRITE (IPR,33) (J2, (LPH(J1,J2), J1=1,4), J2=1,N) 2376 IF (MISS .GT. 0) GO TO 299 2377 INT(2) = NSP 2378 END FILE JD33 2379 REWIND JD33 2380 IF (NP .GT. MID) GO TO 296 2381 C 2382 C SORT STEREOPAIRS IN SEQUENCE FOR ADJUSTMENT 2383 NP = 0 2384 J = 1 2385 L3 = 1 2386 DO 279 J1 = 1,N 2387 L2 = L3 2388 DO 278 J2 = L2,NSP 2389 IF (LSP(1,J2) .NE. J1) GO TO 278 2390 IF (J2 .EQ. L3) GO TO 272 2391 DO 271 L4 = 1,3 2392 MOVE = LSP(L4,J2) 2393 LSP(L4,J2) = LSP(L4,L3) 2394 271 LSP(L4,L3) = MOVE 2395 272 IF (LSP(3,L3) - J) 273, 275, 274 2396 273 BACKSPACE JD33 2397 J = J - 1 2398 GO TO 272 2399 274 READ (JD33) 2400 J = J + 1 2401 GO TO 272 2402 275 READ (JD33) L1, ((LXY(L4,L5), L4=1,5), L5=1,L1) 2403 J = J + 1 2404 WRITE (JD32) L3, L1, ((LXY(L4,L5), L4 = 1,5), L5 = 1,L1) 2405 C 2406 C STORE POINT NUMBERS IN ARRAY ID 2407 DO 277 L4 = 1,L1 2408 NP = NP + 1 2409 277 ID(NP) = LXY(1,L4) 2410 LSP(3,L3) = NP 2411 L3 = L3 + 1 2412 IF (L3 .GT. NSP) GO TO 280 2413 278 CONTINUE 2414 279 CONTINUE 2415 C 2416 280 WRITE (IPR,34) NSP, NP 2417 END FILE JD32 2418 REWIND JD32 2419 REWIND JD33 2420 RETURN 2421 C 2422 C ERROR MESSAGES 2423 290 WRITE (IPR,40) 2424 GO TO 299 2425 293 WRITE (IPR,43) KODE 2426 GO TO 299 2427 294 WRITE (IPR,44) MODL 2428 GO TO 299 2429 295 WRITE (IPR,45) MODL 2430 GO TO 299 2431 296 WRITE (IPR,46) NP 2432 GO TO 299 2433 297 WRITE (IPR,47) 2434 299 STOP 02 2435 END 2436 SUBROUTINE STER3 (LSP,NSP, ID, LXY,MXY, LTIE,MIM,MTY) 2501 C 2502 C FOR EACH TERRAIN POINT, CODE INFORMATION ON EACH IMAGE POINT 2503 C AND PLACE IN ARRAY LTIE 2504 C 2505 COMMON N,NIM,NW,MTOT,NP,LIST, JD31,JD32,JD33,IPR,JW(3), LFOC 2506 DOUBLE PRECISION REC 2507 DIMENSION ID(NP), LXY(5,MXY), LSP(3,NSP), LTIE(3,MIM,MTY) 2508 DIMENSION LLL(4), INT(6) 2509 EQUIVALENCE (INT(1),N) 2510 50 FORMAT (17H0 PH.# POINT T26,'DIFFERENCES') 2511 51 FORMAT (33H0 STEREOPAIRS WITH STEREOPOINTS / T9,'#' T17,'#') 2512 52 FORMAT (1H 2I8, (1H T24, 12I8)) 2513 53 FORMAT (22H0 A MAXIMUM OF NIM = I3, 25H IMAGES PER TERRAIN POINT 2514 1 / 27H REQUIRED BANDWIDTH NW = I3) 2515 61 FORMAT (9H0 POINT I8, 23H, FIRST IN PHOTOGRAPH # I4, 2516 1 24H, OCCURS MORE THAN MIM = I3, 6H TIMES) 2517 62 FORMAT (9H0 POINT I8, 23H, FIRST IN PHOTOGRAPH # I4, 2518 1 26H, OVERFLOWS BANDWIDTH MW = I3) 2519 F = LFOC * 1E-6 2520 IF (LIST .GT. 0) WRITE (IPR,50) 2521 C 2522 MW = INT(3) 2523 DO 301 J = 2,4 2524 301 INT(J) = 0 2525 KK = 0 2526 JSUM = 0 2527 L2 = 0 2528 C 2529 C FOR EACH STEREOPAIR, 2530 DO 379 K1 = 1,NSP 2531 K = LSP(1,K1) 2532 LST = K + 2*MW - 1 2533 IF (LST .GT. N) LST = N 2534 K11 = K1 + 1 2535 LL = L2 + 1 2536 L = L2 2537 L2 = LSP(3,K1) 2538 C 2539 C AT FIRST OCCURRENCE OF A TERRAIN POINT, STORE IN ARRAY LTIE 2540 C POINT NUMBER AND POINT SEQ.# 2541 310 L1 = L + 1 2542 MT = 0 2543 DO 329 L = L1,L2 2544 IF (ID(L) .LE. 0) GO TO 329 2545 IF (MT .GT. 0) GO TO 311 2546 KMAX = LSP(2,K1) 2547 KKMAX = K1 2548 MZZ = 2 2549 311 M1 = 2 2550 MT = MT + 1 2551 LTIE(1,1,MT) = ID(L) 2552 LTIE(2,1,MT) = L - (LL - 1) 2553 IF (K1.EQ.NSP .OR. ID(L).EQ.7777) GO TO 326 2554 C 2555 C SEARCH FOR POINT NUMBER IN FOLLOWING STEREOPAIRS, 2556 C RECORD EACH OCCURRENCE BY STEREOPAIR SEQ.# AND POINT SEQ.# 2557 DO 325 J2 = K11,NSP 2558 IF (LSP(1,J2) .GT. LST) GO TO 326 2559 L3 = LSP(3,J2-1) + 1 2560 L4 = LSP(3,J2) 2561 DO 325 J = L3,L4 2562 IF (ID(J) .NE. ID(L)) GO TO 325 2563 M1 = M1 + 2 2564 J3 = LSP(2,J2) 2565 IF (J2 .GT. KKMAX) KKMAX = J2 2566 IF (J3 .GT. KMAX) KMAX = J3 2567 IF (M1.LE.MIM .AND. KMAX.LT.K+MW) GO TO 323 2568 IF (M1 .GT. MIM) WRITE (IPR,61) ID(L), K, MIM 2569 IF (J3-K .GE. MW) WRITE (IPR,62) ID(L), K, MW 2570 JSUM = JSUM + 1 2571 GO TO 324 2572 323 LTIE(1,M1-1,MT) = J2 2573 LTIE(2,M1-1,MT) = J - (L3 - 1) 2574 324 ID(J) = -ID(J) 2575 325 CONTINUE 2576 C 2577 C COMPLETE PROCESSING OF A TERRAIN POINT 2578 C MZZ IS REQUIRED SECOND DIMENSION OF LTIE 2579 326 ID(L) = -ID(L) 2580 IF (M1 .GT. MZZ) MZZ = M1 2581 IF (M1 .EQ. MIM) GO TO 328 2582 J2 = M1 + 1 2583 DO 327 J = J2,MIM 2584 327 LTIE(1,J,MT) = 7777 2585 328 IF (MT . EQ. MTY) GO TO 330 2586 329 CONTINUE 2587 L = L2 2588 IF (MT .EQ. 0) GO TO 379 2589 C 2590 C INSERT REDUCED COORDINATES OF ALL TERRAIN POINTS IN ARRAY LTIE 2591 C 2592 C FIRST, UPDATE COUNTERS IN ARRAY INT 2593 C K AND KMAX ARE SEQUENCE NUMBERS OF FIRST AND LAST PHOTOGRAPH, 2594 C MT IS NUMBER OF TERRAIN POINTS COLLECTED IN LTIE 2595 330 IF (KMAX-K .GE. NW) NW = KMAX - K + 1 2596 INT(4) = INT(4) + MT 2597 C 2598 C SEARCH ARRAY LTIE FOR POINTS THAT BELONG TO RECORD KK 2599 J1 = 1 2600 DO 349 J3 = K1,KKMAX 2601 DO 348 J2 = 1,MT 2602 IF (J3 .EQ. K1) GO TO 340 2603 335 DO 336 J1 = 3,MZZ,2 2604 IF (LTIE(1,J1,J2) - J3) 336, 340, 348 2605 336 CONTINUE 2606 GO TO 348 2607 C READ NEEDED RECORD OF STEREOPAIR J3 INTO ARRAY LXY 2608 340 IF (J3 .EQ. KK) GO TO 345 2609 341 IF (KK+1 - J3) 342, 344, 343 2610 342 READ (JD32) 2611 KK = KK + 1 2612 GO TO 341 2613 343 BACKSPACE JD32 2614 KK = KK - 1 2615 GO TO 341 2616 344 READ (JD32) KK,JJ, ((LXY(J,JJ1), J=1,5), JJ1=1,JJ) 2617 345 J = LTIE(2,J1,J2) 2618 DO 346 JJ = 2,3 2619 LTIE(JJ,J1,J2) = LXY(JJ,J) 2620 346 LTIE(JJ,J1+1,J2) = LXY(JJ+2,J) 2621 IF (J1 .GT. 1) LTIE(1,J1,J2) = -LSP(1,KK) 2622 LTIE(1,J1+1,J2) = LSP(2,KK) 2623 348 CONTINUE 2624 349 CONTINUE 2625 C CHANGE NEGATIVE PHOTOGRAPH SEQUENCE NUMBERS TO POSITIVE 2626 DO 332 J2 = 1,MT 2627 DO 331 J1 = 3,MZZ,2 2628 IF (LTIE(1,J1,J2)) 331, 332, 332 2629 331 LTIE(1,J1,J2) = -LTIE(1,J1,J2) 2630 332 CONTINUE 2631 C 2632 C FOR EACH TERRAIN POINT, SORT IMAGES IN SEQUENCE OF PHOTOGRAPHS AND 2633 C ELIMINATE DUPLICATE MEASUREMENTS BY TAKING THE MEAN 2634 MZ = 1 2635 DO 377 JJ = 1,MT 2636 NXTPH = K 2637 JJ1 = 1 2638 LAST = MZZ 2639 DO 369 NXTLOC = 1,MZZ 2640 351 IF (LTIE(1,LAST,JJ) .LT. 7777) GO TO 352 2641 LAST = LAST - 1 2642 GO TO 351 2643 352 IF (NXTLOC.GE.LAST .OR. LAST.EQ.2) GO TO 370 2644 IF (NXTLOC .EQ. 1) GO TO 360 2645 C FIND NEXT NEEDED IMAGE POINT, 2646 NXTPH = N + 1 2647 DO 353 J1 = NXTLOC,LAST 2648 J2 = LTIE(1,J1,JJ) 2649 IF (J2 .GE. NXTPH) GO TO 353 2650 NXTPH = J2 2651 JJ1 = J1 2652 353 CONTINUE 2653 IF (JJ1 .EQ. NXTLOC) GO TO 360 2654 C SHIFT INTO NEXT POSITION 2655 DO 354 J1 = 1,3 2656 LOC = LTIE(J1,JJ1,JJ) 2657 LTIE(J1,JJ1,JJ) = LTIE(J1,NXTLOC,JJ) 2658 354 LTIE(J1,NXTLOC,JJ) = LOC 2659 IF (JJ1 .EQ. LAST) GO TO 369 2660 C SEARCH FOR DUPLICATES 2661 360 KOUNT = 1 2662 L3 = NXTLOC + 1 2663 DO 365 J2 = L3,LAST 2664 IF (LTIE(1,J2,JJ) .NE. NXTPH) GO TO 365 2665 DO 362 J = 2,3 2666 LLL(J+1) = (LTIE(J,J2,JJ) - LTIE(J,NXTLOC,JJ)) * F + .5 2667 IF (LLL(J+1) .LT. 0) LLL(J+1) = LLL(J+1) - 1 2668 362 LTIE(J,NXTLOC,JJ) = LTIE(J,NXTLOC,JJ) + LTIE(J,J2,JJ) 2669 IF (LIST .LE. 0) GO TO 364 2670 LLL(1) = NXTPH 2671 LLL(2) = LTIE(1, 1,JJ) 2672 WRITE (IPR,52) LLL 2673 364 KOUNT = KOUNT + 1 2674 LTIE(1,J2,JJ) = 7777 2675 365 CONTINUE 2676 IF (KOUNT .EQ. 1) GO TO 369 2677 C COMPUTE MEANS OF DUPLICATE MEASUREMENTS 2678 REC = 1D0 / KOUNT 2679 DO 368 J = 2,3 2680 368 LTIE(J,NXTLOC,JJ) = LTIE(J,NXTLOC,JJ) * REC 2681 369 CONTINUE 2682 C 2683 370 IF (MZ .LT. LAST) MZ = LAST 2684 IF (LAST .EQ. MZZ) GO TO 377 2685 C STORE ZEROS IN UNUSED LOCATIONS OF LTIE 2686 L3 = LAST + 1 2687 DO 371 J1 = L3,MZZ 2688 DO 371 J = 1,3 2689 371 LTIE(J,J1,JJ) = 0 2690 377 CONTINUE 2691 C 2692 C MZ IS HIGHEST NUMBER OF IMAGES PER TERRAIN POINT 2693 IF (MZ .GT. NIM) NIM = MZ 2694 WRITE (JD33) K,MZ,MT, (((LTIE(J1,J2,J3),J1=1,3),J2=1,MZ),J3=1,MT) 2695 IF (L .LT. L2) GO TO 310 2696 379 CONTINUE 2697 C 2698 C OPTIONALLY, LIST ALL STEREOPOINTS IN EACH STEREOPAIR 2699 IF (LIST.LE.0 .AND. JSUM.EQ.0) GO TO 390 2700 DO 381 J = 1,NP 2701 381 ID(J) = -ID(J) 2702 WRITE (IPR,51) 2703 J2 = 0 2704 DO 382 L = 1,NSP 2705 J1 = J2 + 1 2706 J2 = LSP(3,L) 2707 WRITE (IPR,52) (LSP(J,L), J=1,2), (ID(J), J=J1,J2) 2708 382 CONTINUE 2709 IF (JSUM .GT. 0) STOP 03 2710 C 2711 390 WRITE (IPR,53) NIM, NW 2712 INT(5) = -INT(5) 2713 END FILE JD33 2714 REWIND JD33 2715 REWIND JD32 2716 RETURN 2717 END 2718