This is a start of an answer: later I will come back with more details.
First of all, for element positioning you can refer to High level digital design in TikZ and Replicate this chart using LaTeX.
The code:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{backgrounds,calc,positioning}
\begin{document}
\begin{tikzpicture}[block/.style={draw,fill=white,rectangle,minimum width=4cm,anchor=south},
font=\small]
% = = = = = = =
% First part
\node[block,text width=3.85cm,align=center](net) at (0,0){Reading of network\\ interfaces and sensors};
%%
\draw[-stealth]($(net.north west)!0.45!(net.north)$)--++(0,0.75)
node[block,minimum width=1.5cm](rec){Recognition};
\draw[-stealth]($(net.north east)!0.45!(net.north)$)--++(0,0.75)
node[block,minimum width=1.5cm](loc){Localization};
%%
\draw[-stealth](rec.north)--++(0,0.75)
node[block,minimum width=1.5cm](sens){Driving Sensing};
%%
\path(net.north)--++(0,3.25)
node[block](lctr){Location and trajectories}; % just for positioning
\draw[-stealth](sens.north)--(sens.north|-lctr.south);
\draw[-stealth](loc.north)--(loc.north|-lctr.south);
%%
\draw[-stealth](lctr.north)--++(0,0.75)
node[block](mb){Mobility model};
% grid
\begin{scope}[on background layer]
\draw[yellow!90!red]($(net.south west)-(0.4,0.2)$)
grid[step=1.75pt]($(mb.north east)+(0.4,0.2)$);
\draw($(net.south west)-(0.4,0.2)$)rectangle($(mb.north east)+(0.4,0.2)$);
\end{scope}
\node[below of=net] {Private Phone};
% = = = = = = =
% Second part
\node[block] (carr) at (6.5,0){Carpooling request};
%%
\draw[-stealth](carr.north)--++(0,0.75)
node[block](math){Matching};
%%
\draw[stealth-]($(math.north west)!0.45!(math.north)$)--++(0,0.75)
node[block,minimum width=1.65cm,text width=1.55cm,align=center](tp){Trajectory\\ Prediction};
\draw[stealth-]($(math.north east)!0.45!(math.north)$)--++(0,0.75)
node[block,minimum width=1.65cm,text width=1.55cm,align=center](pe){Position\\ Estimation};
\draw[-stealth](pe)--(tp);
%%
\path(math.north)--++(0,2.25)
node[block](avm){Available vehicle mobility}; % just for positioning
\draw[stealth-](tp.north)--(tp.north|-avm.south);
%%
\draw[stealth-](avm.north)--++(0,0.75)
node[block](vmd){Vehicle mobility database};
% grid
\begin{scope}[on background layer]
\draw[blue!60!cyan]($(carr.south west)-(0.4,0.2)$)
grid[step=1.75pt]($(vmd.north east)+(0.4,0.2)$);
\draw($(carr.south west)-(0.4,0.2)$)rectangle($(vmd.north east)+(0.4,0.2)$);
\end{scope}
\node[below of=carr] {Carpooling Server};
% = = = = = = =
% Second part
\begin{scope}[font=\footnotesize]
% 1:
\draw[red,-stealth](mb)--(vmd)node[midway,above,text width=2cm,align=center]{(1) Crowd Sourcing};
% 2: solution that might be improved with the orthopath library
\draw[red,-stealth](sens.east)--++(2,0)|-(avm)node[pos=0.75,below,text width=2cm,align=center]{(2)\\ Activating};
% 3:
\draw[dashed,red,-stealth](loc.east)--++(1,0)|-(math)node[pos=0.55,below,text width=2cm,align=center]{(3)\\ Correcting};
\end{scope}
\end{tikzpicture}
\end{document}
The result:
