         return self._point(for: location)
     }
 
-    public func location(for point: CGPoint) -> GridLayer.Location {
-        return self._location(for: point)
+    public func location(for point: CGPoint, snapToGrid: Bool) -> GridLayer.Location {
+        return self._location(for: point, snapToGrid: snapToGrid)
     }
 }
 

        )
    }
    
    func _location(for point: CGPoint) -> GridLayer.Location {
        let nearestRowAbsOffset: CGFloat = self._absOffset(
            nearestToAbsOffset: point.y,
            minAbsOffset: self._verticalAbsOffset(forGridPosition: 0),

            absStepUnit: self.columnWidth
        )
        
        let insetFactor: CGFloat = self.gridInsetFactor
        let exactRowValue: CGFloat = (nearestRowAbsOffset / self.rowHeight) - insetFactor
        let exactColumnValue: CGFloat = (nearestColumnAbsOffset / self.columnWidth) - insetFactor
        
        guard snapToGrid else {
            return (exactRowValue, exactColumnValue)
        }
        
        func roundToSubdiv(_ position: CGFloat) -> CGFloat {
            let invertedSubdivision: CGFloat = 1 / self.subdivision.rawValue
            return round(position * invertedSubdivision) / invertedSubdivision
        }
        
        return (roundToSubdiv(exactRowValue), roundToSubdiv(exactColumnValue))
    }
    
    // Helpers
