How to make edge coordinates match center of node

I’m trying to output json with edge and node coordinates and then render it with some other software. I want json to have just the coordinates, object names and ids, so I set nodes and edges to be invisible. But edge start and end coordinates still do not match node coordinates.
Is it possible to make them exactly the same?

This is my test graph:

digraph G {
    graph [splines=ortho, nodesep=1, layout=neato]
    node [shape=point width=0 style=invis]
    edge [arrowhead=none penwidth=0 style = invisible]
  
  a0 -> a1 [id=edg1]
  a0 -> a2
  a2 -> a1
  a2 -> a3

}

a0 node has "pos": "0,0"
But edge has

"pos": "0,0.1123 0,1.2109 0,10 0,10 0,10 68.888,10 71.041,10"

Which is not exaclty the same as node position.

The node position is the center of the node.
Is that where you want the edge to terminate?
Both head and tail?

I think headclip (headclip | Graphviz) & tailclip (tailclip | Graphviz) will solve your problem:

digraph G {
    graph [splines=ortho, nodesep=1, layout=neato]
    node [shape=point width=0 style=invis]
    edge [arrowhead=none penwidth=0 style = invisible]
    edge [headclip=false tailclip=false]  // terminate at node center

  a0 -> a1 [id=edg1]
  a0 -> a2
  a2 -> a1
  a2 -> a3
}