#JavaScript (ES6), 160 158 158146 bytes
n=>(g=(e,v,p)=>[...Array(N=2*n),N-1,1,n].reduce((s,x,i)=>v>>=>(m=1<<(x=i<N?i:(p+x)%N)&1)&v?s:s+g((i>=N)/p?[...e,p<x?p*n*n+x:x*n*n+p]1<<p|m]:e,v|1<<xv|m,x),g[e.sort()]^(g[e]=1)))``
Try it online!Try it online!
n => ( // n = input
g = ( // g = recursive function taking:
e, // e[] = array holding visited edges
v, // v = bitmask holding visited vertices
p // p = previous vertex
) => // we iterate over an array of N + 3 entries, where N = 2n:
[ ...Array(N = 2 * n), // - 0...N-1: each vertex of the N-gon
N - 1, // - N : previous vertex \
1, // - N+1 : next vertex }-- connected withto p
n // - N+2 : opposite vertex /
].reduce((s, x, i) => // reduce() loop with s = accumulator, x = vertex, i = index:
v >> (x m = i1 <<< N( // testm is a bitmask where only the x-th bit ofis theset
bitmask v, with:
x = i < N // and x is either:
? i // // x =- i if i < N
: (p + x) % N // - or (p + x) mod N otherwise
)) & 1v ? // if this vertex was already visited:
s // leave s unchanged
: // else:
s + // add to s
g( // the result of a recursive call:
(i >= N) / p ? // if p and x are connected (i >= N and p is defined):
[ ...e, // append to e[]:
p < x 1 << p | m // the edge formed by p and x
? p * n * n + x // and uniquely identified by
] : x * n * n + p // min(p, x) * n² + max(p, x)
] and uniquely identified by 1 << p | 1 << //x
: // else:
e, // leave e[] unchanged
v | 1 << x, // mark the vertex x as visited
x // previous vertex = x
), // end of recursive call
g[e.sort()] ^ // sort the edges and yield 1 if this list of edges has not
(g[e] = 1) // already been encountered; either way, save it in g
) // end of reduce()
)`` // initial call to g with e = ['']