// #include // #include // #include // #include // #include // #include // #include // #include // #include // #include // #include // #include // #include // #include // namespace DB // { // template // class FunctionPolygonArea : public IFunction // { // public: // static inline const char * name; // explicit FunctionPolygonArea() = default; // static FunctionPtr create(const Context &) // { // return std::make_shared(); // } // String getName() const override // { // return name; // } // bool isVariadic() const override // { // return false; // } // size_t getNumberOfArguments() const override // { // return 1; // } // DataTypePtr getReturnTypeImpl(const DataTypes &) const override // { // return std::make_shared(); // } // ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr & /*result_type*/, size_t input_rows_count) const override // { // checkColumnTypeOrThrow(arguments[0]); // auto parser = MultiPolygonFromColumnParser(std::move(arguments[0].column->convertToFullColumnIfConst())); // MultiPolygon container; // auto res_column = ColumnFloat64::create(); // for (size_t i = 0; i < input_rows_count; i++) // { // parser.get(container, i); // res_column->insertValue(boost::geometry::area(container)); // } // return res_column; // } // bool useDefaultImplementationForConstants() const override // { // return true; // } // }; // template <> // const char * FunctionPolygonArea::name = "polygonAreaCartesian"; // template <> // const char * FunctionPolygonArea::name = "polygonAreaGeographic"; // void registerFunctionPolygonArea(FunctionFactory & factory) // { // factory.registerFunction>(); // factory.registerFunction>(); // } // }