It looks like just adjusting some gt/lt tests into gte/lte effects your rount-trip test... it breaks one regression test, for ticket https://trac.osgeo.org/postgis/ticket/4399 but that's it, and the test isn't really pushing on geohash behaviour. I would need to add some tests and confirm the behaviour is consistent in other ways.
P. On Wed, Jan 28, 2026 at 9:26 AM Sztegi <[email protected]> wrote: > Hi! > > I have bumped into something I find counter intuitive with > St_GeoHash() - boundary checking for non-point objects seems stricter > than for points in case precision is not set: > > select st_geohash(ST_MakeLine(st_point(0, 0), st_point(0.00002, 0.00002))); > -- returns "" <- this is unexpected, I expected "s00000000" > > This breaks my assumption that st_geoshash(st_geomfromgeohash(hash)) > will return the original geohash: > select st_geohash(st_geomfromgeohash('s0')); > -- returns "" <- I expected "s0" > > I bumped to this in Postgis 3.2.1 and it is still reproducible in 3.6.1 > > Meanwhile if precision is set OR the geometry is a point OR it doesn't > touch geohash boundaries then I get what I expect: > > select st_geohash(st_point(0, 0), 8)); > -- returns "s0000000" > > select st_geohash(st_point(0, 0)); > --- returns "s0000000000000000000" > > select st_geohash(ST_MakeLine(st_point(0, 0), st_point(0.00002, 0.00002)), > 8); > -- returns "s0000000" > > select st_geohash(ST_MakeLine(st_point(0.00001, 0.00001), > st_point(0.00002, 0.00002)), 8); > -- returns "s0000000" > > select st_geohash(ST_MakeLine(st_point(0.00001, 0.00001), > st_point(0.00002, 0.00002))); > -- returns "s00000000" > > I plan to create a bug report about this, but wanted to check first on > the mailing list if this is something intended. > > These edge cases are interesting to me because I am trying to create > an implementation of st_geohash()/st_geomfromgeohash() for two Apache > projects (Hive, Impala), and cross- checked my tests with the results > in postgis. > > regards, > Csaba >
geohash-bounds.patch
Description: Binary data
