PCL add-on to compute normal estimation to 2D pointCloud. You can find a Normal2dEstimation class that take 3D points but ignore the z part.
You can see the example result just bellow :
The PCL library doesn't support pure 2D points. You have to use 3D points with a z compotent equals to 0. This trick work with many algorithm like centroid, ICP, ransac etc.. But it doesn't work with normal estimation due to your constant component (all normal are equal to (0,0,1). My implementation solve this problem by ignoring the z component.