PG_RETURN_NULL();
}
- mindist = lwgeom_mindistance3d(lwgeom1, lwgeom2);
+ /* #3056, only do 3D distance calculation when both arguments have Z */
+ if ( lwgeom_has_z(lwgeom1) && lwgeom_has_z(lwgeom2) )
+ {
+ mindist = lwgeom_mindistance3d(lwgeom1, lwgeom2);
+ }
+ else
+ {
+ mindist = lwgeom_mindistance2d(lwgeom1, lwgeom2);
+ }
PG_FREE_IF_COPY(geom1, 0);
PG_FREE_IF_COPY(geom2, 1);
geom1 = POSTGIS2SFCGALGeometry(input1);
PG_FREE_IF_COPY(input1, 1);
- result = sfcgal_geometry_distance_3d(geom0, geom1);
+ /* #3056, only do 3D distance calculation when both arguments have Z */
+ if ( lwgeom_has_z(geom0) && lwgeom_has_z(geom1) )
+ {
+ result = sfcgal_geometry_distance_3d(geom0, geom1);
+ }
+ else
+ {
+ result = sfcgal_geometry_distance(geom0, geom1);
+ }
+
sfcgal_geometry_delete(geom0);
sfcgal_geometry_delete(geom1);
--
select 'spheroidLength1_deprecated', round(st_length_spheroid('MULTILINESTRING((-118.584 38.374,-118.583 38.5),(-71.05957 42.3589 , -71.061 43))'::geometry,'SPHEROID["GRS_1980",6378137,298.257222101]'::spheroid)::numeric,5);
select 'spheroidLength1', round(ST_LengthSpheroid('MULTILINESTRING((-118.584 38.374,-118.583 38.5),(-71.05957 42.3589 , -71.061 43))'::geometry,'SPHEROID["GRS_1980",6378137,298.257222101]'::spheroid)::numeric,5);
+
+-- #3056, only do 3d distance when *both* arguments are 3d
+select '#3056', st_3ddistance('LINESTRING(0 0 0, 1 1 1)'::geometry, 'POINT(0.5 0.5)'::geometry);
emptyCollectionArea|0
spheroidLength1_deprecated|85204.52077
spheroidLength1|85204.52077
+#3056|0