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