Line data Source code
1 : /****************************************************************************** 2 : * 3 : * Project: GDAL 4 : * Purpose: gdal "vector grid minimum/maximum/range/count/average-distance/average-distance-pts" subcommand 5 : * Author: Even Rouault <even dot rouault at spatialys.com> 6 : * 7 : ****************************************************************************** 8 : * Copyright (c) 2025, Even Rouault <even dot rouault at spatialys.com> 9 : * 10 : * SPDX-License-Identifier: MIT 11 : ****************************************************************************/ 12 : 13 : #include "gdalalg_vector_grid_data_metrics.h" 14 : 15 : #include <limits> 16 : 17 : //! @cond Doxygen_Suppress 18 : 19 : /************************************************************************/ 20 : /* GDALVectorGridDataMetricsAbstractAlgorithm() */ 21 : /************************************************************************/ 22 : 23 18 : GDALVectorGridDataMetricsAbstractAlgorithm:: 24 : GDALVectorGridDataMetricsAbstractAlgorithm(const std::string &name, 25 : const std::string &description, 26 : const std::string &helpURL, 27 18 : const std::string &method) 28 : : GDALVectorGridAbstractAlgorithm(name, description, helpURL), 29 18 : m_method(method) 30 : { 31 18 : AddRadiusArg(); 32 18 : AddRadius1AndRadius2Arg(); 33 18 : AddAngleArg(); 34 18 : AddMinPointsArg(); 35 18 : AddMinMaxPointsPerQuadrantArg(); 36 18 : AddNodataArg(); 37 18 : } 38 : 39 : /************************************************************************/ 40 : /* GDALVectorGridDataMetricsAbstractAlgorithm::RunImpl() */ 41 : /************************************************************************/ 42 : 43 12 : std::string GDALVectorGridDataMetricsAbstractAlgorithm::GetGridAlgorithm() const 44 : { 45 : std::string ret = CPLSPrintf("%s:angle=%.17g:nodata=%.17g", 46 12 : m_method.c_str(), m_angle, m_nodata); 47 12 : if (m_radius > 0) 48 : { 49 6 : ret += CPLSPrintf(":radius=%.17g", m_radius); 50 : } 51 : else 52 : { 53 6 : if (m_radius1 > 0) 54 1 : ret += CPLSPrintf(":radius1=%.17g", m_radius1); 55 6 : if (m_radius2 > 0) 56 1 : ret += CPLSPrintf(":radius2=%.17g", m_radius2); 57 : } 58 12 : if (m_minPoints > 0) 59 1 : ret += CPLSPrintf(":min_points=%d", m_minPoints); 60 12 : if (m_minPointsPerQuadrant > 0) 61 : ret += 62 1 : CPLSPrintf(":min_points_per_quadrant=%d", m_minPointsPerQuadrant); 63 12 : if (m_maxPointsPerQuadrant < std::numeric_limits<int>::max()) 64 : ret += 65 1 : CPLSPrintf(":max_points_per_quadrant=%d", m_maxPointsPerQuadrant); 66 12 : return ret; 67 : } 68 : 69 : //! @endcond