* Add lookside check to geozero, fixes #294
comparison is based on 0eb175f86f/cxx/isce3/geometry/detail/Geo2Rdr.icc (L83-L89)
This gets rid of the duplicate image for UAVSAR geocoding with diagonal heading
* fix bindings and include for new number of arguments
LT1AB
parent
eb5790a884
commit
b99aa5975f
|
@ -247,7 +247,7 @@ class Geocode(Component):
|
||||||
demCropAcc = 0
|
demCropAcc = 0
|
||||||
geozero.geozero_Py(demAccessor, inputAccessor, demCropAcc,
|
geozero.geozero_Py(demAccessor, inputAccessor, demCropAcc,
|
||||||
self.geoAccessor, inband, outband,
|
self.geoAccessor, inband, outband,
|
||||||
int(complexFlag), int(self.interp_methods[self.method]))
|
int(complexFlag), int(self.interp_methods[self.method]), int(self.lookSide))
|
||||||
|
|
||||||
combinedlibmodule.freeCOrbit(cOrbit)
|
combinedlibmodule.freeCOrbit(cOrbit)
|
||||||
self.getState()
|
self.getState()
|
||||||
|
|
|
@ -75,15 +75,15 @@ PyObject * geozero_C(PyObject* self, PyObject* args)
|
||||||
uint64_t var1;
|
uint64_t var1;
|
||||||
uint64_t var2;
|
uint64_t var2;
|
||||||
uint64_t var3;
|
uint64_t var3;
|
||||||
int b1, b2, b3,b4;
|
int b1, b2, b3, b4, b5;
|
||||||
if(!PyArg_ParseTuple(args, "KKKKiiii", &var0, &var1, &var2, &var3,
|
if(!PyArg_ParseTuple(args, "KKKKiiiii", &var0, &var1, &var2, &var3,
|
||||||
&b1,&b2,&b3,&b4))
|
&b1,&b2,&b3,&b4,&b5))
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
b1++; //Python bandnumber to Fortran bandnumber
|
b1++; //Python bandnumber to Fortran bandnumber
|
||||||
b2++; //Python bandnumber to Fortran bandnumber
|
b2++; //Python bandnumber to Fortran bandnumber
|
||||||
geozero_f(&var0,&var1,&var2,&var3,&b1,&b2,&b3,&b4);
|
geozero_f(&var0,&var1,&var2,&var3,&b1,&b2,&b3,&b4,&b5);
|
||||||
return Py_BuildValue("i", 0);
|
return Py_BuildValue("i", 0);
|
||||||
}
|
}
|
||||||
PyObject * setEllipsoidMajorSemiAxis_C(PyObject* self, PyObject* args)
|
PyObject * setEllipsoidMajorSemiAxis_C(PyObject* self, PyObject* args)
|
||||||
|
|
|
@ -41,7 +41,7 @@ extern "C"
|
||||||
#include "poly1d.h"
|
#include "poly1d.h"
|
||||||
|
|
||||||
void geozero_f(uint64_t *, uint64_t *, uint64_t *, uint64_t *,
|
void geozero_f(uint64_t *, uint64_t *, uint64_t *, uint64_t *,
|
||||||
int*, int*, int*, int*);
|
int*, int*, int*, int*, int*);
|
||||||
PyObject * geozero_C(PyObject *, PyObject *);
|
PyObject * geozero_C(PyObject *, PyObject *);
|
||||||
void setEllipsoidMajorSemiAxis_f(double *);
|
void setEllipsoidMajorSemiAxis_f(double *);
|
||||||
PyObject * setEllipsoidMajorSemiAxis_C(PyObject *, PyObject *);
|
PyObject * setEllipsoidMajorSemiAxis_C(PyObject *, PyObject *);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
subroutine geozero(demAccessor,inAccessor,demCropAccessor,outAccessor,inband,outband,iscomplex,method)
|
subroutine geozero(demAccessor,inAccessor,demCropAccessor,outAccessor,inband,outband,iscomplex,method,lookSide)
|
||||||
use geozeroState
|
use geozeroState
|
||||||
use geozeroReadWrite
|
use geozeroReadWrite
|
||||||
use geozeroMethods
|
use geozeroMethods
|
||||||
|
@ -16,7 +16,7 @@ subroutine geozero(demAccessor,inAccessor,demCropAccessor,outAccessor,inband,out
|
||||||
!! DECLARE LOCAL VARIABLES
|
!! DECLARE LOCAL VARIABLES
|
||||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
integer inband,outband
|
integer inband,outband
|
||||||
integer iscomplex,method
|
integer iscomplex,method,lookSide
|
||||||
integer stat,cnt
|
integer stat,cnt
|
||||||
integer*8 inAccessor,demAccessor
|
integer*8 inAccessor,demAccessor
|
||||||
integer*8 outAccessor,demCropAccessor
|
integer*8 outAccessor,demCropAccessor
|
||||||
|
@ -69,6 +69,10 @@ subroutine geozero(demAccessor,inAccessor,demCropAccessor,outAccessor,inband,out
|
||||||
real*8 BAD_VALUE
|
real*8 BAD_VALUE
|
||||||
parameter(BAD_VALUE = -10000.0d0)
|
parameter(BAD_VALUE = -10000.0d0)
|
||||||
|
|
||||||
|
!! Cross product holder, for comparison to lookSide
|
||||||
|
real*8 :: look_side_vec(3)
|
||||||
|
real*8 look_side_sign
|
||||||
|
integer pixel_side
|
||||||
|
|
||||||
!Doppler factor
|
!Doppler factor
|
||||||
type(poly1dType) :: fdvsrng, fddotvsrng
|
type(poly1dType) :: fdvsrng, fddotvsrng
|
||||||
|
@ -300,6 +304,22 @@ subroutine geozero(demAccessor,inAccessor,demCropAccessor,outAccessor,inband,out
|
||||||
satx = xyz_mid
|
satx = xyz_mid
|
||||||
satv = vel_mid
|
satv = vel_mid
|
||||||
|
|
||||||
|
! Check that the pixel is on the correct side of the platform
|
||||||
|
! https://github.com/isce-framework/isce2/issues/294#issuecomment-853413396
|
||||||
|
dr = xyz - satx
|
||||||
|
call cross(dr, satv, look_side_vec)
|
||||||
|
look_side_sign = dot(look_side_vec, satx)
|
||||||
|
if(look_side_sign.gt.0) then
|
||||||
|
pixel_side = -1
|
||||||
|
else
|
||||||
|
pixel_side = 1
|
||||||
|
endif
|
||||||
|
! Skip if the current pixel side doesn't matches the look side
|
||||||
|
if(pixel_side.ne.lookSide) then
|
||||||
|
! print *, "Skipp. lookSide ", lookSide, "look_side_sign", look_side_sign
|
||||||
|
goto 100
|
||||||
|
endif
|
||||||
|
|
||||||
do k=1,21
|
do k=1,21
|
||||||
tprev = tline
|
tprev = tline
|
||||||
!! print *, pixel, k, tline
|
!! print *, pixel, k, tline
|
||||||
|
@ -321,7 +341,6 @@ subroutine geozero(demAccessor,inAccessor,demCropAccessor,outAccessor,inband,out
|
||||||
|
|
||||||
tline = tline + c1/(c2-c3)
|
tline = tline + c1/(c2-c3)
|
||||||
|
|
||||||
|
|
||||||
stat = interpolateWGS84Orbit_f(orbit,tline,satx,satv)
|
stat = interpolateWGS84Orbit_f(orbit,tline,satx,satv)
|
||||||
|
|
||||||
if (stat.ne.0) then
|
if (stat.ne.0) then
|
||||||
|
|
Loading…
Reference in New Issue