I'm not sure what you're talking about but the GEOS implimentation is pretty straight forward, int GEOS_DLL GEOSHausdorffDistance( const GEOSGeometry *g1, const GEOSGeometry *g2, double *dist ); That is to say, it takes geometry's and returns a double. There are no extra arguments. There are no methods of telling it "asymmetric" or "symmetric" or "one-sided". So fullstop, if you're using GEOS you're using, [DiscreteHausdorffDistance.cpp](https://github.com/OSGeo/geos/blob/5a730fc50dab2610a9e6c037b521accc66b7777b/src/algorithm/distance/DiscreteHausdorffDistance.cpp) You can see the implementation here, * [DiscreteHausdorffDistance.h](https://github.com/OSGeo/geos/blob/5a730fc50dab2610a9e6c037b521accc66b7777b/include/geos/algorithm/distance/DiscreteHausdorffDistance.h#L59) * [DiscreteHausdorffDistance.cpp](https://github.com/OSGeo/geos/blob/5a730fc50dab2610a9e6c037b521accc66b7777b/src/algorithm/distance/DiscreteHausdorffDistance.cpp) Update ==== I think you're *way* over your head with this, but here is the breakdown of the source. PostGIS Bindings ---- There are two functions in PostGIS, you can see them made available to the user [here](https://github.com/postgis/postgis/blob/976dcf593c687a2acaf2f1087cb85184773717ec/postgis/postgis.sql.in#L3344) 1. `ST_HausdorffDistance(geom1 geometry, geom2 geometry)` 1. which dispatches to [`hausdorffdistance`](https://github.com/postgis/postgis/blob/9ca34e6790224fd00c65aff1c82cd91ca396455f/postgis/lwgeom_geos.c#L171). 2. `hausdorffdistance` references [`GEOSHausdorffDistance`](https://github.com/postgis/postgis/blob/9ca34e6790224fd00c65aff1c82cd91ca396455f/postgis/lwgeom_geos.c#L205). 2. `ST_HausdorffDistance(geom1 geometry, geom2 geometry, float8)` 1. which dispatches to [`hausdorffdistancedensify`](https://github.com/postgis/postgis/blob/9ca34e6790224fd00c65aff1c82cd91ca396455f/postgis/lwgeom_geos.c#L229). 2. `hausdorffdistancedensify` function references [`GEOSHausdorffDistanceDensify`](https://github.com/postgis/postgis/blob/9ca34e6790224fd00c65aff1c82cd91ca396455f/postgis/lwgeom_geos.c#L264). LibGEOS ---- LibGEOS provides two corresponding functions 1. [`GEOSHausdorffDistance(const Geometry *g1, const Geometry *g2, double *dist)`](https://github.com/OSGeo/geos/blob/5a730fc50dab2610a9e6c037b521accc66b7777b/capi/geos_c.cpp#L287) 1. `GEOSHausdorffDistance` dispatches to [`GEOSHausdorffDistance_r`](https://github.com/OSGeo/geos/blob/5a730fc50dab2610a9e6c037b521accc66b7777b/capi/geos_ts_c.cpp#L1199) 2. `GEOSHausdorffDistance_r`'s implementation ultimately invokes [`DiscreteHausdorffDistance::distance(*g1, *g2)`](https://github.com/OSGeo/geos/blob/5a730fc50dab2610a9e6c037b521accc66b7777b/capi/geos_ts_c.cpp#L1217) 2. [`GEOSHausdorffDistanceDensify(const Geometry *g1, const Geometry *g2, double densifyFrac, double *dist)`](https://github.com/OSGeo/geos/blob/5a730fc50dab2610a9e6c037b521accc66b7777b/capi/geos_c.cpp#L293) 1. `GEOSHausdorffDistanceDensify` dispatches to [`GEOSHausdorffDistanceDensify_r`](https://github.com/OSGeo/geos/blob/5a730fc50dab2610a9e6c037b521accc66b7777b/capi/geos_ts_c.cpp#L1233) 2. `GEOSHausdorffDistanceDensify_r`'s implementation ultimately invokes [`DiscreteHausdorffDistance::distance(*g1, *g2, densifyFrac)`](https://github.com/OSGeo/geos/blob/5a730fc50dab2610a9e6c037b521accc66b7777b/capi/geos_ts_c.cpp#L1251) `DiscreteHausdorffDistance::distance` ==== Now you can see all roads end up at `DiscreteHausdorffDistance::distance` which is overloaded. * 2 argument: [`double DiscreteHausdorffDistance::distance(const geom::Geometry& g0, const geom::Geometry& g1)`](https://github.com/OSGeo/geos/blob/5a730fc50dab2610a9e6c037b521accc66b7777b/src/algorithm/distance/DiscreteHausdorffDistance.cpp#L67) * 3 argument: [`double DiscreteHausdorffDistance::distance(const geom::Geometry& g0, const geom::Geometry& g1, double densifyFrac)`](https://github.com/OSGeo/geos/blob/5a730fc50dab2610a9e6c037b521accc66b7777b/src/algorithm/distance/DiscreteHausdorffDistance.cpp#L76) Both of those 1. create a [DiscreteHausdorffDistance](https://github.com/OSGeo/geos/blob/5a730fc50dab2610a9e6c037b521accc66b7777b/include/geos/algorithm/distance/DiscreteHausdorffDistance.h#L100) 2. Call [`distance`](https://github.com/OSGeo/geos/blob/5a730fc50dab2610a9e6c037b521accc66b7777b/include/geos/algorithm/distance/DiscreteHausdorffDistance.h#L138) on the object they create. 3. `distance` calls [`computeOrientedDistance(g0, g1, ptDist)` and `computeOrientedDistance(g1, g0, ptDist)`](https://github.com/OSGeo/geos/blob/5a730fc50dab2610a9e6c037b521accc66b7777b/include/geos/algorithm/distance/DiscreteHausdorffDistance.h#L224) which is defined [here](https://github.com/OSGeo/geos/blob/5a730fc50dab2610a9e6c037b521accc66b7777b/src/algorithm/distance/DiscreteHausdorffDistance.cpp#L87) 4. `computeOrientedDistance` mutates a private `ptDist` by calling `ptDist.setMaximum` So the answer to your question: `computeOrientedDistance` is already called by both `ST_HausdorffDistance`. If you want a directional version, I think you'll have to pull the above apart and patch it. Or draw up a test suite and pay a consultant. While there are probably a *few* other software programmers here that could do it, it's way out of the expertise of this community ([Paul Ramsey](https://gis.stackexchange.com/users/457/paul-ramsey), etc). Generally, we don't implement software suggestions on GIS.SE. At least, I don't see that activity if it happens. We answer them with software already developed. The short answer here is that it's not done.