// #include // #include // #include // #include // #include // #include // #include // #include // #include // #include // #include // #include // #include // #include // #include // #include // namespace DB // { // template // class FunctionPolygonsDistance : public IFunction // { // public: // static inline const char * name; // explicit FunctionPolygonsDistance() = 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 2; // } // 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 first_parser = MultiPolygonFromColumnParser(std::move(arguments[0].column->convertToFullColumnIfConst())); // MultiPolygon first_container; // checkColumnTypeOrThrow(arguments[1]); // auto second_parser = MultiPolygonFromColumnParser(std::move(arguments[1].column->convertToFullColumnIfConst())); // MultiPolygon second_container; // auto res_column = ColumnFloat64::create(); // for (size_t i = 0; i < input_rows_count; i++) // { // first_parser.get(first_container, i); // second_parser.get(second_container, i); // boost::geometry::correct(first_container); // boost::geometry::correct(second_container); // res_column->insertValue(boost::geometry::distance(first_container, second_container)); // } // return res_column; // } // bool useDefaultImplementationForConstants() const override // { // return true; // } // }; // template <> // const char * FunctionPolygonsDistance::name = "polygonsDistanceCartesian"; // template <> // const char * FunctionPolygonsDistance::name = "polygonsDistanceGeographic"; // void registerFunctionPolygonsDistance(FunctionFactory & factory) // { // factory.registerFunction>(); // factory.registerFunction>(); // } // }