quite :)
Make a new scene. It is Area. We will call it Squarer. Its children :
a) Collision shape. Leave empty in editor, You will choose your shape and range by code
b) Node2D. It will be container for tiny areas later. Lets call it Container
Make a new scene. It will be subscene of Squarer later. It is Area. We will call it minisquare. Set its collision shape to square of tile size.
3.You will instance Squarer scene when in need, and free it when used.
In ready() it will have something like this ( pseudocode )
for x in range(-size,size)
for y in range(-size,size)
var inst = minisquare.instance() #preload it earlier
inst.position += Vector2(tile_size * x,tile_size * y)
4.IN process() Squarer will have:
var mouse = worldtomap(globalmouseposition)
globalposition = mapto_world(mouse)
5.On click or press buttom Squarer will have :
var collidingtiles = []
For miniarea in get_overlapping_areas():
collidingtiles.append(miniarea.world_to_map(global_position)
This is pseudocode, so You will have to add details for syntax to work with all your references :) You can also make it more fluid, separating snapping function for main shape and minisquares