From d2c2020870c4ee02f21d95c570a8b68fbb4b3c8c Mon Sep 17 00:00:00 2001 From: Paul Ramsey Date: Wed, 22 Jul 2015 13:55:59 +0000 Subject: [PATCH] #3202, ST_DistanceSphere allows operations on mixed SRIDs git-svn-id: http://svn.osgeo.org/postgis/trunk@13826 b70326c6-7e19-0410-871a-916f4a2858ee --- postgis/geography_measurement.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/postgis/geography_measurement.c b/postgis/geography_measurement.c index a93fed0ca..84acdd955 100644 --- a/postgis/geography_measurement.c +++ b/postgis/geography_measurement.c @@ -70,6 +70,8 @@ Datum geography_distance_knn(PG_FUNCTION_ARGS) /* Initialize spheroid */ spheroid_init_from_srid(fcinfo, gserialized_get_srid(g1), &s); + + error_if_srid_mismatch(gserialized_get_srid(g1), gserialized_get_srid(g2)); /* Set to sphere if requested */ if ( ! use_spheroid ) @@ -137,6 +139,8 @@ Datum geography_distance_uncached(PG_FUNCTION_ARGS) if ( PG_NARGS() > 3 && ! PG_ARGISNULL(3) ) use_spheroid = PG_GETARG_BOOL(3); + error_if_srid_mismatch(gserialized_get_srid(g1), gserialized_get_srid(g2)); + /* Initialize spheroid */ spheroid_init_from_srid(fcinfo, gserialized_get_srid(g1), &s); @@ -205,6 +209,8 @@ Datum geography_distance(PG_FUNCTION_ARGS) if ( PG_NARGS() > 3 && ! PG_ARGISNULL(3) ) use_spheroid = PG_GETARG_BOOL(3); + error_if_srid_mismatch(gserialized_get_srid(g1), gserialized_get_srid(g2)); + /* Initialize spheroid */ spheroid_init_from_srid(fcinfo, gserialized_get_srid(g1), &s); @@ -275,6 +281,8 @@ Datum geography_dwithin(PG_FUNCTION_ARGS) if ( PG_NARGS() > 3 && ! PG_ARGISNULL(3) ) use_spheroid = PG_GETARG_BOOL(3); + error_if_srid_mismatch(gserialized_get_srid(g1), gserialized_get_srid(g2)); + /* Initialize spheroid */ spheroid_init_from_srid(fcinfo, gserialized_get_srid(g1), &s); @@ -346,6 +354,8 @@ Datum geography_distance_tree(PG_FUNCTION_ARGS) if ( PG_NARGS() > 3 && ! PG_ARGISNULL(3) ) use_spheroid = PG_GETARG_BOOL(3); + error_if_srid_mismatch(gserialized_get_srid(g1), gserialized_get_srid(g2)); + /* Initialize spheroid */ spheroid_init_from_srid(fcinfo, gserialized_get_srid(g1), &s); @@ -392,6 +402,8 @@ Datum geography_dwithin_uncached(PG_FUNCTION_ARGS) if ( PG_NARGS() > 3 && ! PG_ARGISNULL(3) ) use_spheroid = PG_GETARG_BOOL(3); + error_if_srid_mismatch(gserialized_get_srid(g1), gserialized_get_srid(g2)); + /* Initialize spheroid */ spheroid_init_from_srid(fcinfo, gserialized_get_srid(g1), &s); @@ -725,6 +737,8 @@ Datum geography_covers(PG_FUNCTION_ARGS) lwgeom1 = lwgeom_from_gserialized(g1); lwgeom2 = lwgeom_from_gserialized(g2); + error_if_srid_mismatch(lwgeom1->srid, lwgeom2->srid); + /* EMPTY never intersects with another geometry */ if ( lwgeom_is_empty(lwgeom1) || lwgeom_is_empty(lwgeom2) ) { -- 2.50.0