That depends a lot on what analyses you want to do with it afterwards - you could have an array (of species) of an array (of points) of tuples (the x and y), which is the most straigthforward thing.
For must uses I would probably use a sparse Boolean matrix, e.g. visits = [sparse([1,4,8], [3,5,9], true), sparse([4,2],[3,5], true)]
