@@ -1449,10 +1449,15 @@ GDALRPCTransformWholeLineWithDEM(const GDALRPCTransformInfo *psTransform,
1449
1449
const int nY = static_cast <int >(dfY);
1450
1450
const double dfDeltaY = dfY - nY;
1451
1451
1452
+ int bRet = TRUE ;
1452
1453
for (int i = 0 ; i < nPointCount; i++)
1453
1454
{
1454
1455
if (padfX[i] == HUGE_VAL)
1456
+ {
1457
+ bRet = FALSE ;
1458
+ panSuccess[i] = FALSE ;
1455
1459
continue ;
1460
+ }
1456
1461
1457
1462
double dfDEMH = 0.0 ;
1458
1463
const double dfZ_i = padfZ ? padfZ[i] : 0.0 ;
@@ -1502,6 +1507,7 @@ GDALRPCTransformWholeLineWithDEM(const GDALRPCTransformInfo *psTransform,
1502
1507
dfDEMH = psTransform->dfDEMMissingValue ;
1503
1508
else
1504
1509
{
1510
+ bRet = FALSE ;
1505
1511
panSuccess[i] = FALSE ;
1506
1512
continue ;
1507
1513
}
@@ -1546,6 +1552,7 @@ GDALRPCTransformWholeLineWithDEM(const GDALRPCTransformInfo *psTransform,
1546
1552
{
1547
1553
if (!RPCIsValidLongLat (psTransform, padfX[i], padfY[i]))
1548
1554
{
1555
+ bRet = FALSE ;
1549
1556
panSuccess[i] = FALSE ;
1550
1557
padfX[i] = HUGE_VAL;
1551
1558
padfY[i] = HUGE_VAL;
@@ -1565,6 +1572,7 @@ GDALRPCTransformWholeLineWithDEM(const GDALRPCTransformInfo *psTransform,
1565
1572
{
1566
1573
if (!RPCIsValidLongLat (psTransform, padfX[i], padfY[i]))
1567
1574
{
1575
+ bRet = FALSE ;
1568
1576
panSuccess[i] = FALSE ;
1569
1577
padfX[i] = HUGE_VAL;
1570
1578
padfY[i] = HUGE_VAL;
@@ -1582,6 +1590,7 @@ GDALRPCTransformWholeLineWithDEM(const GDALRPCTransformInfo *psTransform,
1582
1590
}
1583
1591
else
1584
1592
{
1593
+ bRet = FALSE ;
1585
1594
panSuccess[i] = FALSE ;
1586
1595
padfX[i] = HUGE_VAL;
1587
1596
padfY[i] = HUGE_VAL;
@@ -1613,6 +1622,7 @@ GDALRPCTransformWholeLineWithDEM(const GDALRPCTransformInfo *psTransform,
1613
1622
dfDEMH = psTransform->dfDEMMissingValue ;
1614
1623
else
1615
1624
{
1625
+ bRet = FALSE ;
1616
1626
panSuccess[i] = FALSE ;
1617
1627
padfX[i] = HUGE_VAL;
1618
1628
padfY[i] = HUGE_VAL;
@@ -1623,6 +1633,7 @@ GDALRPCTransformWholeLineWithDEM(const GDALRPCTransformInfo *psTransform,
1623
1633
1624
1634
if (!RPCIsValidLongLat (psTransform, padfX[i], padfY[i]))
1625
1635
{
1636
+ bRet = FALSE ;
1626
1637
panSuccess[i] = FALSE ;
1627
1638
padfX[i] = HUGE_VAL;
1628
1639
padfY[i] = HUGE_VAL;
@@ -1638,7 +1649,7 @@ GDALRPCTransformWholeLineWithDEM(const GDALRPCTransformInfo *psTransform,
1638
1649
1639
1650
VSIFree (padfDEMBuffer);
1640
1651
1641
- return TRUE ;
1652
+ return bRet ;
1642
1653
}
1643
1654
1644
1655
/* ***********************************************************************/
@@ -1900,10 +1911,12 @@ int GDALRPCTransform(void *pTransformArg, int bDstToSrc, int nPointCount,
1900
1911
}
1901
1912
}
1902
1913
1914
+ int bRet = TRUE ;
1903
1915
for (int i = 0 ; i < nPointCount; i++)
1904
1916
{
1905
1917
if (!RPCIsValidLongLat (psTransform, padfX[i], padfY[i]))
1906
1918
{
1919
+ bRet = FALSE ;
1907
1920
panSuccess[i] = FALSE ;
1908
1921
padfX[i] = HUGE_VAL;
1909
1922
padfY[i] = HUGE_VAL;
@@ -1913,6 +1926,7 @@ int GDALRPCTransform(void *pTransformArg, int bDstToSrc, int nPointCount,
1913
1926
if (!GDALRPCGetHeightAtLongLat (psTransform, padfX[i], padfY[i],
1914
1927
&dfHeight))
1915
1928
{
1929
+ bRet = FALSE ;
1916
1930
panSuccess[i] = FALSE ;
1917
1931
padfX[i] = HUGE_VAL;
1918
1932
padfY[i] = HUGE_VAL;
@@ -1925,13 +1939,15 @@ int GDALRPCTransform(void *pTransformArg, int bDstToSrc, int nPointCount,
1925
1939
panSuccess[i] = TRUE ;
1926
1940
}
1927
1941
1928
- return TRUE ;
1942
+ return bRet ;
1929
1943
}
1930
1944
1931
1945
if (padfZ == nullptr )
1932
1946
{
1933
1947
CPLError (CE_Failure, CPLE_NotSupported,
1934
1948
" Z array should be provided for reverse RPC computation" );
1949
+ for (int i = 0 ; i < nPointCount; i++)
1950
+ panSuccess[i] = FALSE ;
1935
1951
return FALSE ;
1936
1952
}
1937
1953
@@ -1940,6 +1956,7 @@ int GDALRPCTransform(void *pTransformArg, int bDstToSrc, int nPointCount,
1940
1956
/* function uses an iterative method from an initial linear */
1941
1957
/* approximation. */
1942
1958
/* -------------------------------------------------------------------- */
1959
+ int bRet = TRUE ;
1943
1960
for (int i = 0 ; i < nPointCount; i++)
1944
1961
{
1945
1962
double dfResultX = 0.0 ;
@@ -1948,13 +1965,15 @@ int GDALRPCTransform(void *pTransformArg, int bDstToSrc, int nPointCount,
1948
1965
if (!RPCInverseTransformPoint (psTransform, padfX[i], padfY[i], padfZ[i],
1949
1966
&dfResultX, &dfResultY))
1950
1967
{
1968
+ bRet = FALSE ;
1951
1969
panSuccess[i] = FALSE ;
1952
1970
padfX[i] = HUGE_VAL;
1953
1971
padfY[i] = HUGE_VAL;
1954
1972
continue ;
1955
1973
}
1956
1974
if (!RPCIsValidLongLat (psTransform, padfX[i], padfY[i]))
1957
1975
{
1976
+ bRet = FALSE ;
1958
1977
panSuccess[i] = FALSE ;
1959
1978
padfX[i] = HUGE_VAL;
1960
1979
padfY[i] = HUGE_VAL;
@@ -1967,7 +1986,7 @@ int GDALRPCTransform(void *pTransformArg, int bDstToSrc, int nPointCount,
1967
1986
panSuccess[i] = TRUE ;
1968
1987
}
1969
1988
1970
- return TRUE ;
1989
+ return bRet ;
1971
1990
}
1972
1991
1973
1992
/* ***********************************************************************/
0 commit comments