With an idea like this GridMap is still best sollution. Too bad in Godot 3.1 it is kind of clunky.
What do You mean You can't get position right ? You propably need to dig into how worldtomap and maptoworld work, it is easy.
Setcellitem should remove former item. If it is not happening, than You must have messed up tile scale. Simply set cell_size to be the very same as size of meshes ( in meters actually, just change it until one mesh fits in one cell ).
Never change scale of whole GridMap node.
Remember, that if You want to place some objects onto another ( like fence on the grass ), than You will need two gridmaps