]> granicus.if.org Git - postgis/commitdiff
#3202, ST_DistanceSphere allows operations on mixed SRIDs
authorPaul Ramsey <pramsey@cleverelephant.ca>
Wed, 22 Jul 2015 13:55:59 +0000 (13:55 +0000)
committerPaul Ramsey <pramsey@cleverelephant.ca>
Wed, 22 Jul 2015 13:55:59 +0000 (13:55 +0000)
git-svn-id: http://svn.osgeo.org/postgis/trunk@13826 b70326c6-7e19-0410-871a-916f4a2858ee

postgis/geography_measurement.c

index a93fed0cae2c36bd626844ef27a24f04cfe7575f..84acdd9559632dbddfc9cc82dbaee208e702e0f5 100644 (file)
@@ -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) )
        {