1 //**************************************************************************************************
2 //
3 //     OSSIM Open Source Geospatial Data Processing Library
4 //     See top level LICENSE.txt file for license information
5 //
6 //**************************************************************************************************
7 
8 #ifndef ossimShorelineUtil_HEADER
9 #define ossimShorelineUtil_HEADER
10 
11 #include <ossim/ossimConfig.h>
12 #include <ossim/base/ossimRefPtr.h>
13 #include <ossim/base/ossimProcessInterface.h>
14 #include <ossim/base/ossimFilename.h>
15 #include <ossim/base/ossimIpt.h>
16 #include <ossim/base/ossimIrect.h>
17 #include <ossim/base/ossimGrect.h>
18 #include <ossim/base/ossimLeastSquaresPlane.h>
19 #include <ossim/imaging/ossimImageSource.h>
20 #include <ossim/imaging/ossimImageGeometry.h>
21 #include <ossim/imaging/ossimImageData.h>
22 #include <ossim/imaging/ossimImageHandler.h>
23 #include <ossim/imaging/ossimMemoryImageSource.h>
24 #include <ossim/projection/ossimImageViewProjectionTransform.h>
25 #include <ossim/parallel/ossimJob.h>
26 #include <ossim/parallel/ossimJobMultiThreadQueue.h>
27 #include <ossim/point_cloud/ossimPointCloudHandler.h>
28 #include <ossim/util/ossimChipProcTool.h>
29 #include <vector>
30 #include <mutex>
31 
32 /*!
33  *  Class for finding helicopter landing zones (HLZ) on a DEM given the final destination and max
34  *  range from destination.
35  */
36 class OSSIMDLLEXPORT ossimShorelineTool : public ossimChipProcTool
37 {
38 public:
39    enum AlgorithmId { UNKNOWN, NDWI, AWEI, PAN_THRESHOLD };
40    enum ThresholdMode { NONE=0, MEAN=1, SIGMA=2, VARIANCE=3, VALUE=4 };
41 
42    ossimShorelineTool();
43    ~ossimShorelineTool();
44 
45    virtual void setUsage(ossimArgumentParser& ap);
46    virtual bool initialize(ossimArgumentParser& ap);
47    virtual void initialize(const ossimKeywordlist& kwl);
48    virtual ossimRefPtr<ossimImageData> getChip(const ossimIrect& img_rect);
49    virtual bool execute();
50 
getClassName()51    virtual ossimString getClassName() const { return "ossimShorelineUtil"; }
52 
53    /** Used by ossimUtilityFactory */
54    static const char* DESCRIPTION;
55 
56 
57 protected:
58    virtual void initProcessingChain();
59    void initLandsat8();
60 
61    /** @brief Hidden from use copy constructor. */
62    ossimShorelineTool( const ossimShorelineTool& obj );
63 
64    /** @brief Hidden from use assignment operator. */
65    const ossimShorelineTool& operator=( const ossimShorelineTool& rhs );
66 
67    /** @brief Initializes arg parser and outputs usage. */
68    void usage(ossimArgumentParser& ap);
69    void addArguments(ossimArgumentParser& ap);
70    void doThreshold();
71    void autoComputeThreshold();
72 
73    bool addPropsToJSON();
74 
75    ossim_uint8 m_waterValue;
76    ossim_uint8 m_marginalValue;
77    ossim_uint8 m_landValue;
78    ossimString m_sensor;
79    double m_threshold;
80    double m_tolerance;
81    AlgorithmId m_algorithm;
82    ThresholdMode m_thresholdMode;
83    double m_smoothing;
84    ossimFilename m_vectorFilename;
85    ossimFilename m_indexFilename;
86    ossimFilename m_threshFilename;
87    ossimFilename m_maskFilename;
88    std::map<ossimString, ossimString> m_geoJsonProps;
89    bool m_noVector;
90 };
91 
92 #endif
93