isce3 0.25.0
Loading...
Searching...
No Matches
Geocode.h
1#pragma once
2
3#include <any>
4#include <functional>
5#include <memory>
6#include <vector>
7
8#include <isce3/core/forward.h>
9#include <isce3/geometry/forward.h>
10
11#include <thrust/device_vector.h>
12
13#include <isce3/container/RadarGeometry.h>
14#include <isce3/cuda/container/forward.h>
15#include <isce3/cuda/core/InterpolatorHandle.h>
16#include <isce3/cuda/core/ProjectionBaseHandle.h>
17#include <isce3/cuda/core/gpuInterpolator.h>
18#include <isce3/cuda/core/gpuLUT2d.h>
19#include <isce3/cuda/core/gpuProjections.h>
20#include <isce3/cuda/product/SubSwaths.h>
21#include <isce3/geometry/detail/Geo2Rdr.h>
22#include <isce3/io/Raster.h>
23#include <isce3/product/GeoGridParameters.h>
24
25namespace isce3::cuda::geocode {
26
27template<typename T>
28using DeviceLUT2d = isce3::cuda::core::gpuLUT2d<T>;
29
30/* light weight radar grid container */
32 double sensing_start;
33 double sensing_mid;
34 double prf;
35 double starting_range;
36 double range_pixel_spacing;
37 size_t length;
38 size_t width;
39};
40
66class Geocode {
67public:
77 const isce3::container::RadarGeometry & rdr_geom,
78 const size_t lines_per_block = 1000);
79
109 void geocodeRasters(
110 std::vector<std::reference_wrapper<isce3::io::Raster>>& output_rasters,
111 std::vector<std::reference_wrapper<isce3::io::Raster>>& input_rasters,
112 const std::vector<isce3::core::dataInterpMethod>& interp_methods,
113 const std::vector<GDALDataType>& raster_datatypes,
114 const std::vector<double>& invalid_values,
115 isce3::io::Raster& dem_raster,
116 const isce3::core::LUT2d<double>& hostNativeDoppler = {},
117 const isce3::core::LUT2d<double>& hostAzTimeCorrection = {},
118 const isce3::core::LUT2d<double>& hostSRangeCorrection = {},
119 const isce3::product::SubSwaths* subswaths = nullptr,
120 const isce3::core::dataInterpMethod dem_interp_method =
121 isce3::core::BIQUINTIC_METHOD,
122 const double threshold = 1e-8,
123 const int maxiter = 50,
124 const double dr = 10);
125
126private:
127 // total number of blocks necessary to geocoding a provided geogrid
128 size_t _n_blocks;
129
130 // geogrid defining output product
132
133 // light weight clone of isce3::product::RadarGridParameters _radar_grid
134 RadarGridParamsLite _radar_grid;
135
136 // radar geometry describing input rasters
138
139 // ellipsoid based on EPSG of output grid
140 isce3::core::Ellipsoid _ellipsoid;
141
142 // Radar grid indices of block number last passed to setBlockRdrCoordGrid
143 thrust::device_vector<double> _radar_x;
144 thrust::device_vector<double> _radar_y;
145
146 // Valid pixel map; follows numpy masked array convention
147 thrust::device_vector<bool> _mask;
148
149 // DEM used to calculate radar grid indices
150 //isce3::io::Raster _dem_raster;
151
152 // Radar grid boundaries of block last passed to setBlockRdrCoordGrid,
153 // not for entire geogrid
154 size_t _az_first_line;
155 size_t _az_last_line;
156 size_t _range_first_pixel;
157 size_t _range_last_pixel;
158 size_t _geo_block_length;
159 size_t _rdr_block_length;
160 size_t _rdr_block_width;
161 size_t _line_start;
162
163 // projection based on geogrid EPSG - common to all blocks
165
166 /* Check if input and output raster are consistent in:
167 * 1. size - same number input and output rasters
168 * 2. type - input and output rasters datatypes match expected values set
169 * in the constructor
170 *
171 * \param[in] output_rasters Geocoded rasters
172 * \param[in] input_rasters Rasters to be geocoded. Needs to be same
173 * size as output_rasters.
174 * \param[in] interp_methods Data interpolation method per raster
175 * \param[in] raster_datatypes GDAL type of each raster represented by
176 * equivalent int. Necessary to correctly
177 * initialize templated interpolators.
178 * \param[in] invalid_values_double Invalid values for each raster as double, to
179 be converted later to the correct type
180 */
181 void ensureRasterConsistency(
182 const std::vector<std::reference_wrapper<isce3::io::Raster>>& output_rasters,
183 const std::vector<std::reference_wrapper<isce3::io::Raster>>& input_rasters,
184 const std::vector<isce3::core::dataInterpMethod>& interp_methods,
185 const std::vector<GDALDataType>& raster_datatypes,
186 const std::vector<double>& invalid_values_double) const;
187
213 void setBlockRdrCoordGrid(const size_t block_number,
214 isce3::io::Raster& dem_raster,
215 const isce3::core::dataInterpMethod dem_interp_method,
216 const isce3::cuda::container::RadarGeometry& dev_rdr_geom,
217 const isce3::geometry::detail::Geo2RdrParams geo2rdr_params,
218 const DeviceLUT2d<double>& nativeDoppler,
219 const DeviceLUT2d<double>& azTimeCorrection,
220 const DeviceLUT2d<double>& sRangeCorrection,
221 const isce3::cuda::product::ViewSubSwaths& subswaths);
222
237 template<typename T>
238 void geocodeRasterBlock(
239 isce3::io::Raster& output_raster, isce3::io::Raster& input_raster,
240 const std::shared_ptr<
242 const std::any& invalid_value_any, const bool is_sinc_interp);
243};
244} // namespace isce3::cuda::geocode
Scene geometry in radar coordinate system.
Definition RadarGeometry.h:16
Data structure to store Ellipsoid information.
Definition Ellipsoid.h:20
Data structure to store 2D Lookup table.
Definition LUT2d.h:20
CUDA counterpart of isce3::container::RadarGeometry.
Definition RadarGeometry.h:13
Definition InterpolatorHandle.h:14
Class that handles device ProjectionBase double pointers on device.
Definition ProjectionBaseHandle.h:13
Geocode(const isce3::product::GeoGridParameters &geogrid, const isce3::container::RadarGeometry &rdr_geom, const size_t lines_per_block=1000)
Class constructor.
Definition Geocode.cu:345
void geocodeRasters(std::vector< std::reference_wrapper< isce3::io::Raster > > &output_rasters, std::vector< std::reference_wrapper< isce3::io::Raster > > &input_rasters, const std::vector< isce3::core::dataInterpMethod > &interp_methods, const std::vector< GDALDataType > &raster_datatypes, const std::vector< double > &invalid_values, isce3::io::Raster &dem_raster, const isce3::core::LUT2d< double > &hostNativeDoppler={}, const isce3::core::LUT2d< double > &hostAzTimeCorrection={}, const isce3::core::LUT2d< double > &hostSRangeCorrection={}, const isce3::product::SubSwaths *subswaths=nullptr, const isce3::core::dataInterpMethod dem_interp_method=isce3::core::BIQUINTIC_METHOD, const double threshold=1e-8, const int maxiter=50, const double dr=10)
Geocode rasters with a shared geogrid.
Definition Geocode.cu:645
View subswaths class.
Definition SubSwaths.h:143
Data structure meant to handle Raster I/O operations.
Definition Raster.h:32
Definition GeoGridParameters.h:21
Sub-swaths metadata of a SAR dataset.
Definition SubSwaths.h:23

Generated for ISCE3.0 by doxygen 1.13.2.