Why do PostgreSQL arrays have different starting indices for 1D and 2D arrays?
You don't have a two-dimensional array, you have an one dimensional array of points.  That is not the same thing, even if they do have some similarities.  I think a "point" is a type implemented as a fixed length array type, as discussed in the docs


  For historical reasons (i.e., this is clearly wrong but it's far too late to change it), subscripting of fixed-length array types starts from zero, rather than from one as for variable-length arrays.