15#include "wsf_export.h"
21#include "UtCallback.hpp"
23class GeoElevationTile;
24#include "GeoElevationTileManager.hpp"
25class GeodeticEarthDatabase;
130 int GetDTEDLevelByIndex(
size_t aIndex);
132 void GetDTEDPathByIndex(
size_t aIndex, std::string& aPath);
157 GeoElevationTileManager& GetTileManager();
160 GeoElevationTileManager& GetVegetationManager();
161 GeoElevationTileManager& GetManager();
162 GeoElevationTileManager& GetBathymetryManager();
164 bool AddDtedDirectory(
const std::string& aDirName,
int aLevel);
165 bool AddRawDtedDirectory(
const std::string& aDirName,
int aLevel,
int aSwLat,
int aSwLon,
int aNeLat,
int aNeLon);
167 bool AddGeotiffDirectory(
const std::string& aDirName);
169 bool AddBathymetry(
const std::string& aFileName);
171 int GetElevApproxP(
double aLat,
double aLon,
float& aElev, GeoElevationTileManager& aTileManager, GeoElevationTile*& aTilePtr);
173 void GetGeodeticElev(
double aLat,
double aLon,
float& aElev);
175 void GeodeticComputeNormal(
double aLat,
double aLon,
double aNormal[3]);
177 void GetNormalNED(
double aLat,
double aLon,
double aNormal[3], GeoElevationTile*& aTilePtr);
178 void GetNormalENU(
double aLat,
double aLon,
double aNormal[3], GeoElevationTile*& aTilePtr);
180 void DisableTerrain();
181 void EnableTerrain();
183 bool MaskedByTerrain(
double aLat1,
190 double aRadiusScale = 1.0);
192 bool MaskedByVegetation(
double aLat1,
199 double aRadiusScale = 1.0);
201 bool MaskedByUnderwaterTerrain(
double aLat1,
208 double aRadiusScale = 1.0);
213 bool SetFloatGridDirectory(
const std::string& aDirName,
218 GeoElevationTileManager& aTileManager);
220 bool SetFloatGridFile(
const std::string& aFileName, GeoElevationTileManager& aTileManager);
222 int GetElevInterpP(
double aLat,
double aLon,
float& aElev, GeoElevationTileManager& aTileManager, GeoElevationTile*& aTilePtr);
224 bool MaskedByTerrainP(
double aLat1,
231 GeoElevationTileManager& TileManager,
232 double aRadiusScale);
234 bool MaskedByTerrainFastP(
double aLat1,
241 GeoElevationTileManager& aTileManager);
243 bool ListTheFiles(
const std::string& aGeodeticEarthFilePathname);
245 bool DirectoryExists(
const std::string& aDirName,
const std::string& aCommand);
246 bool LoadTile(
double aLat,
double aLon, GeoElevationTile*& aTilePtr);
248 int LoadCME_File(
const char* aCfgFile);
249 bool LoadCME_Terrain();
251 void ReadString(std::istream& aIn, std::string& aString);
256 DataType mDataType = cDTED;
257 double mMinAllowableStepSize = 0.0;
258 double mMaxTerrainHeight = 8850.0;
259 double mMaxDataSize = -1.0;
260 double mEarthRadiusMultiplier = 1.0;
261 bool mIgnoreMissingCME_Terrain =
false;
262 bool mDisabledByUser =
false;
264 bool mIsEnabled =
false;
265 bool mIsVegetationEnabled =
false;
267 bool mIsDefined =
false;
268 bool mDebugTerrainMasking =
false;
269 bool mDebugTerrainExtrema =
false;
270 bool mUseFastMaskingCheck =
false;
272 std::vector<std::string> mDTEDPath;
273 std::vector<int> mDTEDLevel;
276 int mGeodeticEarthDBNumber = 4;
278 std::string mGeodeticEarthDBName =
"EDWARDS";
279 std::string mGeodeticEarthFilePathname;
280 unsigned int mGeodeticDatabaseType = 0;
282 std::string mVisualDBFile;
284 bool mGeodeticDatabase =
false;
285 std::vector<DtedInput> mDtedInputs;
286 std::vector<FloatGridInput> mFloatGridInputs;
287 std::vector<GeotiffInput> mGeotiffInputs;
288 bool mLoadCME_Terrain =
false;
289 std::string mCME_Path;
290 bool mValidateDTED =
false;
291 std::vector<Query> mQueryList;
293 VisualDatabase* mVisualDB_Ptr =
nullptr;
294 GeodeticEarthDatabase* mGeodeticEarthDB_Ptr =
nullptr;
296 std::unique_ptr<GeoElevationTileManager> mGeoTileManagerPtr =
nullptr;
297 std::unique_ptr<GeoElevationTileManager> mGeoTileVegetationManagerPtr =
nullptr;
298 std::once_flag mGeoTileManagerFlag;
299 std::once_flag mGeoTileVegetationManagerFlag;
302 bool mBathymetryDefined =
false;
303 bool mIsBathymetryEnabled =
false;
304 std::vector<BathymetryInput> mBathmetryInputs;
305 std::unique_ptr<GeoElevationTileManager> mGeoTileBathymetryManagerPtr =
nullptr;
306 std::once_flag mGeoTileBathymetryManagerFlag;
376 mInterfacePtr->GetNormalNED(aLat, aLon, aNormal, mTerrainTilePtr);
384 mInterfacePtr->GetNormalENU(aLat, aLon, aNormal, mTerrainTilePtr);
388 bool TerrainHitAlongLOS(
const double aEyepointWCS[3],
double aTerminusWCS[3]);
395 bool IsEnabled() {
return (mInterfacePtr && mInterfacePtr->IsEnabled()); }
401 bool MaskedByTerrain(
double aLat1,
408 double aRadiusScale = 1.0);
410 bool MaskedByTerrainFast(
double aLat1,
double aLon1,
double aAlt1,
double aLat2,
double aLon2,
double aAlt2,
double aMaxRange);
412 bool MaskedByVegetation(
double aLat1,
419 double aRadiusScale = 1.0);
421 bool MaskedByVegetationFast(
double aLat1,
double aLon1,
double aAlt1,
double aLat2,
double aLon2,
double aAlt2,
double aMaxRange);
448 GeoElevationTileManager& GetManager();
450 bool LoadTile(
double aLat,
double aLon) {
return mInterfacePtr->LoadTile(aLat, aLon, mTerrainTilePtr); }
452 bool ComputeTerrainImpactP(
double aLocationWCS_1[3],
double aLocationWCS_2[3],
bool aFirstPass =
false);
455 void GetEdgeExtremaInZone(
WsfZone* aZonePtr,
456 const std::vector<double>& aPostLatitudes,
457 const std::vector<double>& aPostLongitudes,
465 void CreateLocalsFromBoundaries(std::vector<double> aSortedValues,
468 std::vector<double>& aLocalValues);
471 GeoElevationTile* mTerrainTilePtr;
472 GeoElevationTile* mVegetationTilePtr;
473 GeoElevationTile* mBathymetryXYZ_TilePtr;
#define WSF_EXPORT
Definition WsfXIO_Export.hpp:35
Definition WsfCodedZone.hpp:24
Contains the data required to create a simulation, and acts as the entry point for input file process...
Definition WsfScenario.hpp:111
The main controller for a simulation.
Definition WsfSimulation.hpp:109
Definition WsfZone.hpp:63
Manages interface to terrain for a set of WsfTerrain objects.
Definition WsfTerrain.hpp:43
static TerrainInterface * Get(const WsfScenario &aScenario)
Definition WsfTerrain.cpp:2294
bool ProcessInput(UtInput &aInput)
Definition WsfTerrain.cpp:233
bool Initialize()
Definition WsfTerrain.cpp:2045
const std::vector< DtedInput > & GetDTEDInputs() const
Definition WsfTerrain.hpp:133
bool IsGeodeticDatabase() const
Definition WsfTerrain.hpp:149
bool IsEnabled() const
Definition WsfTerrain.hpp:147
double GetEarthRadiusMultiplier()
Access for Earth Radius Multiplier.
Definition WsfTerrain.hpp:143
friend class Terrain
Definition WsfTerrain.hpp:115
bool IsVegetationEnabled() const
Definition WsfTerrain.hpp:148
std::vector< int > * GetDTEDLevel()
Access for DTED DB Information.
Definition WsfTerrain.hpp:129
WsfScenario * GetScenario()
Definition WsfTerrain.hpp:125
bool IsDTED() const
Definition WsfTerrain.hpp:150
std::vector< std::string > * GetDTEDPath()
Definition WsfTerrain.hpp:131
bool IsBathymetryEnabled() const
Definition WsfTerrain.hpp:151
DataType
Definition WsfTerrain.hpp:46
@ cGEODETIC_EARTH_DATABASE
Definition WsfTerrain.hpp:51
@ cVISUAL_DATABASE
Definition WsfTerrain.hpp:49
@ cFLOAT_GRID
Definition WsfTerrain.hpp:48
@ cBATHYMETRY
Definition WsfTerrain.hpp:53
@ cGEOTIFF
Definition WsfTerrain.hpp:52
@ cDTED
Definition WsfTerrain.hpp:47
TerrainInterface(WsfScenario &aScenarioPtr)
Definition WsfTerrain.cpp:2282
const std::vector< GeotiffInput > & GetGeotiffInputs() const
Access for geotiff DB Information.
Definition WsfTerrain.hpp:138
Definition WsfTerrain.hpp:336
bool LoadTile(double aLat, double aLon)
Definition WsfTerrain.hpp:450
friend class TerrainInterface
Definition WsfTerrain.hpp:338
bool IsVegetationEnabled()
Definition WsfTerrain.hpp:397
bool GetHeightExtremaIn(WsfSimulation &aSimulation, WsfZone *aZonePtr, Post &aMin, Post &aMax)
Definition WsfTerrain.cpp:3035
void GetNormalENU(double aLat, double aLon, double aNormal[3])
Definition WsfTerrain.hpp:380
void GetNormalNED(double aLat, double aLon, double aNormal[3])
Definition WsfTerrain.hpp:372
int GetElevApprox(double aLat, double aLon, float &aElev)
Definition WsfTerrain.cpp:3755
Terrain & operator=(const Terrain &aRhs)=delete
bool Initialize(TerrainInterface *aInterfacePtr)
Definition WsfTerrain.cpp:3835
int GetVegElevInterp(double aLat, double aLon, float &aElev)
Definition WsfTerrain.cpp:2905
int GetBathymetryElevApprox(double aLat, double aLon, float &aElev)
Definition WsfTerrain.cpp:3813
int GetVegElevApprox(double aLat, double aLon, float &aElev)
Definition WsfTerrain.cpp:3794
bool IsGeodeticDatabase()
Definition WsfTerrain.hpp:442
int GetElevInterp(double aLat, double aLon, float &aElev)
Definition WsfTerrain.cpp:2860
GeoElevationTile * GetTilePtr()
Definition WsfTerrain.hpp:446
bool IsBathymetryEnabled()
Definition WsfTerrain.hpp:399
Terrain(TerrainInterface *aInterfacePtr)
Definition WsfTerrain.cpp:3635
bool DTEDTypeDatabase()
Definition WsfTerrain.hpp:443
ElevationType
Definition WsfTerrain.hpp:341
@ cTERRAIN
Definition WsfTerrain.hpp:343
@ cBATHYMETRY
Definition WsfTerrain.hpp:345
@ cVEGETATION
Definition WsfTerrain.hpp:344
@ cINVALID
Definition WsfTerrain.hpp:342
int GetBathymetryElevInterp(double aLat, double aLon, float &aElev)
Definition WsfTerrain.cpp:2927
bool IsEnabled()
Definition WsfTerrain.hpp:395
Function definitions for those who need run-time access to the version.
Definition WsfComm.cpp:32
Definition WsfTerrain.hpp:94
double mAlt
Definition WsfTerrain.hpp:108
QueryType
Definition WsfTerrain.hpp:96
@ cHORIZON
Definition WsfTerrain.hpp:99
@ cNONE
Definition WsfTerrain.hpp:97
@ cTEST_EXTREMA_IN_ZONE
Definition WsfTerrain.hpp:101
@ cHEIGHT
Definition WsfTerrain.hpp:98
@ cMASKING
Definition WsfTerrain.hpp:100
WsfCodedZone * mZonePtr
Definition WsfTerrain.hpp:112
double mEarthRadius
Definition WsfTerrain.hpp:105
double mLat
Definition WsfTerrain.hpp:106
double mLat2
Definition WsfTerrain.hpp:109
double mLon
Definition WsfTerrain.hpp:107
double mAlt2
Definition WsfTerrain.hpp:111
QueryType mType
Definition WsfTerrain.hpp:104
double mLon2
Definition WsfTerrain.hpp:110
Definition WsfTerrain.hpp:424
double mLonDeg
Definition WsfTerrain.hpp:427
double mLatDeg
Definition WsfTerrain.hpp:426
double mHeightM
Definition WsfTerrain.hpp:425