package geospatial // NewCalculator creates a fully configured GeospatialCalculator with all dependencies func NewCalculator(config *Config) Calculator { // Validate config if err := config.Validate(); err != nil { // Use default config if provided config is invalid config = DefaultConfig() } // Create individual calculators distanceCalc := NewDistanceCalculator(config) bearingCalc := NewBearingCalculator(config) boundingBoxCalc := NewBoundingBoxCalculator(config) coordinateTransformer := NewCoordinateTransformer(config) validator := NewSpatialValidator(config) // Create main calculator with all dependencies return NewGeospatialCalculator( config, distanceCalc, bearingCalc, boundingBoxCalc, coordinateTransformer, validator, ) } // NewCalculatorWithDefaults creates a calculator with default configuration func NewCalculatorWithDefaults() Calculator { return NewCalculator(DefaultConfig()) }