]> granicus.if.org Git - postgis/commitdiff
Add ST_Intersection() and ST_Intersects() for geography.
authorPaul Ramsey <pramsey@cleverelephant.ca>
Thu, 5 Nov 2009 00:58:18 +0000 (00:58 +0000)
committerPaul Ramsey <pramsey@cleverelephant.ca>
Thu, 5 Nov 2009 00:58:18 +0000 (00:58 +0000)
git-svn-id: http://svn.osgeo.org/postgis/trunk@4748 b70326c6-7e19-0410-871a-916f4a2858ee

postgis/geography.sql.in.c
postgis/lwgeom_geos.c

index 23353215862e14cd6839f39b44b658227cc884a7..1266afd30e84ede77052b72f00b337f4cf71c260 100644 (file)
@@ -525,6 +525,12 @@ CREATE OR REPLACE FUNCTION ST_CoveredBy(geography, geography)
        AS 'SELECT $1 && $2 AND _ST_Covers($2, $1)'
        LANGUAGE 'SQL' IMMUTABLE STRICT;
 
+-- Availability: 1.5.0
+CREATE OR REPLACE FUNCTION ST_Intersects(geography, geography)
+       RETURNS boolean
+       AS 'SELECT $1 && $2 AND _ST_Distance($1, $2, 0.0, false) < 0.00001'
+       LANGUAGE 'SQL' IMMUTABLE STRICT;
+
 -- Availability: 1.5.0
 CREATE OR REPLACE FUNCTION _ST_BestSRID(geography, geography)
        RETURNS integer
@@ -543,7 +549,11 @@ CREATE OR REPLACE FUNCTION ST_Buffer(geography, float8)
        AS 'SELECT geography(ST_Transform(ST_Buffer(ST_Transform(geometry($1), _ST_BestSRID($1)), $2), 4326))'
        LANGUAGE 'SQL' IMMUTABLE STRICT;
 
-
+-- Availability: 1.5.0
+CREATE OR REPLACE FUNCTION ST_Intersection(geography, geography)
+       RETURNS geography
+       AS 'SELECT geography(ST_Transform(ST_Intersection(ST_Transform(geometry($1), _ST_BestSRID($1, $2)), ST_Transform(geometry($2), _ST_BestSRID($1, $2))), 4326))'
+       LANGUAGE 'SQL' IMMUTABLE STRICT;
 
 -- ---------- ---------- ---------- ---------- ---------- ---------- ----------
 
index 86a02712abe45494c1b74d8cabcd9719b3271f9d..e6652f6783fae0dccabcc75a58fe3350bb75b5b4 100644 (file)
@@ -2228,7 +2228,7 @@ Datum intersects(PG_FUNCTION_ARGS)
        type1 = lwgeom_getType((uchar)SERIALIZED_FORM(geom1)[0]);
        type2 = lwgeom_getType((uchar)SERIALIZED_FORM(geom2)[0]);
        if ( (type1 == POINTTYPE && (type2 == POLYGONTYPE || type2 == MULTIPOLYGONTYPE)) ||
-               (type2 == POINTTYPE && (type1 == POLYGONTYPE || type1 == MULTIPOLYGONTYPE)))
+            (type2 == POINTTYPE && (type1 == POLYGONTYPE || type1 == MULTIPOLYGONTYPE)))
        {
                POSTGIS_DEBUG(3, "Point in Polygon test requested...short-circuiting.");