]> granicus.if.org Git - postgis/commitdiff
Add http://www.epsg.org/6.11.2/4326 srsName pattern support (related to CITE WFS...
authorOlivier Courtin <olivier.courtin@camptocamp.com>
Wed, 23 Dec 2009 15:48:18 +0000 (15:48 +0000)
committerOlivier Courtin <olivier.courtin@camptocamp.com>
Wed, 23 Dec 2009 15:48:18 +0000 (15:48 +0000)
git-svn-id: http://svn.osgeo.org/postgis/trunk@5050 b70326c6-7e19-0410-871a-916f4a2858ee

postgis/lwgeom_in_gml.c
regress/in_gml.sql
regress/in_gml_expected

index 920adce8c2f13e8a657fe18acdb30abd478f771d..edd2712af54a01e1306b191a6f57a63579dfdf67 100644 (file)
@@ -409,6 +409,7 @@ static gmlSrs* parse_gml_srs(xmlNodePtr xnode)
         *  cf WFS 1.1.0 -> 9.2 (p36)
         *  cf ISO 19142 -> 7.9.2.4.4 (p34)
         *  cf RFC 5165 <http://tools.ietf.org/html/rfc5165>
+        *  cf CITE WFS-1.1 (GetFeature-tc17.2)
         */
 
        /* SRS pattern like:    EPSG:4326                                       
@@ -418,6 +419,7 @@ static gmlSrs* parse_gml_srs(xmlNodePtr xnode)
                                urn:ogc:def:crs:EPSG:6.6:4326
                                urn:x-ogc:def:crs:EPSG:6.6:4326
                                http://www.opengis.net/gml/srs/epsg.xml#4326
+                               http://www.epsg.org/6.11.2/4326
        */
 
        if (!strncmp((char *) srsname, "EPSG:", 5)) {
@@ -432,6 +434,9 @@ static gmlSrs* parse_gml_srs(xmlNodePtr xnode)
                                "http://www.opengis.net/gml/srs/epsg.xml#", 40)) {
                sep = '#';
                latlon = false;
+       } else if (!strncmp((char *) srsname, "http://www.epsg.org/", 20)) {
+               sep = '/';
+               latlon = false;
        } else lwerror("unknown spatial reference system");
 
        /* retrieve the last ':' or '#' char */
index b4e3467470b0ec284a361cd66c4b9386bf114987..80a2889f520a37957dabd2e053b2b30e66aef782 100644 (file)
@@ -445,35 +445,35 @@ SELECT 'srs_4', ST_AsEWKT(ST_GeomFromGML('<gml:Point srsName="urn:ogc:def:crs:EP
 SELECT 'srs_5', ST_AsEWKT(ST_GeomFromGML('<gml:Point srsName="urn:ogc:def:crs:EPSG:6.6:4326"><gml:pos>1 2</gml:pos></gml:Point>'));
 SELECT 'srs_6', ST_AsEWKT(ST_GeomFromGML('<gml:Point srsName="urn:x-ogc:def:crs:EPSG:6.6:4326"><gml:pos>1 2</gml:pos></gml:Point>'));
 SELECT 'srs_7', ST_AsEWKT(ST_GeomFromGML('<gml:Point srsName="http://www.opengis.net/gml/srs/epsg.xml#4326"><gml:pos>1 2</gml:pos></gml:Point>'));
+SELECT 'srs_8', ST_AsEWKT(ST_GeomFromGML('<gml:Point srsName="http://www.epsg.org/6.11.2/4326"><gml:pos>1 2</gml:pos></gml:Point>'));
 
 -- ERROR not a valid pattern
-SELECT 'srs_8', ST_AsEWKT(ST_GeomFromGML('<gml:Point srsName="a:wrong:pattern:4326"><gml:pos>1 2</gml:pos></gml:Point>'));
+SELECT 'srs_9', ST_AsEWKT(ST_GeomFromGML('<gml:Point srsName="a:wrong:pattern:4326"><gml:pos>1 2</gml:pos></gml:Point>'));
 
 -- ERROR: not a defined SRID
-SELECT 'srs_9', ST_AsEWKT(ST_GeomFromGML('<gml:Point srsName="EPSG:01"><gml:pos>1 2</gml:pos></gml:Point>'));
+SELECT 'srs_10', ST_AsEWKT(ST_GeomFromGML('<gml:Point srsName="EPSG:01"><gml:pos>1 2</gml:pos></gml:Point>'));
 
 -- ERROR: SRID is not an int
-SELECT 'srs_10', ST_AsEWKT(ST_GeomFromGML('<gml:Point srsName="EPSG:abc"><gml:pos>1 2</gml:pos></gml:Point>'));
+SELECT 'srs_11', ST_AsEWKT(ST_GeomFromGML('<gml:Point srsName="EPSG:abc"><gml:pos>1 2</gml:pos></gml:Point>'));
 
 -- ERROR: SRID is not only int
-SELECT 'srs_11', ST_AsEWKT(ST_GeomFromGML('<gml:Point srsName="EPSG:4326abc"><gml:pos>1 2</gml:pos></gml:Point>'));
-SELECT 'srs_12', ST_AsEWKT(ST_GeomFromGML('<gml:Point srsName="EPSG:abc4326"><gml:pos>1 2</gml:pos></gml:Point>'));
+SELECT 'srs_12', ST_AsEWKT(ST_GeomFromGML('<gml:Point srsName="EPSG:4326abc"><gml:pos>1 2</gml:pos></gml:Point>'));
+SELECT 'srs_13', ST_AsEWKT(ST_GeomFromGML('<gml:Point srsName="EPSG:abc4326"><gml:pos>1 2</gml:pos></gml:Point>'));
 
 -- ERROR: srsName empty
-SELECT 'srs_13', ST_AsEWKT(ST_GeomFromGML('<gml:Point srsName="EPSG:"><gml:pos>1 2</gml:pos></gml:Point>'));
-SELECT 'srs_14', ST_AsEWKT(ST_GeomFromGML('<gml:Point srsName=""><gml:pos>1 2</gml:pos></gml:Point>'));
+SELECT 'srs_14', ST_AsEWKT(ST_GeomFromGML('<gml:Point srsName="EPSG:"><gml:pos>1 2</gml:pos></gml:Point>'));
+SELECT 'srs_15', ST_AsEWKT(ST_GeomFromGML('<gml:Point srsName=""><gml:pos>1 2</gml:pos></gml:Point>'));
 
 -- ERROR: srsName is defined as -1
-SELECT 'srs_15', ST_AsEWKT(ST_GeomFromGML('<gml:Point srsName="EPSG:-1"><gml:pos>1 2</gml:pos></gml:Point>'));
+SELECT 'srs_16', ST_AsEWKT(ST_GeomFromGML('<gml:Point srsName="EPSG:-1"><gml:pos>1 2</gml:pos></gml:Point>'));
 
 -- Reverse axis with all kind of simples geometry types 
-SELECT 'srs_16', ST_AsEWKT(ST_GeomFromGML('<gml:MultiGeometry srsName="urn:ogc:def:crs:EPSG::4326"><gml:geometryMember><gml:Point><gml:pos srsDimension="2">1 2</gml:pos></gml:Point></gml:geometryMember><gml:geometryMember><gml:LineString><gml:posList srsDimension="2">3 4 5 6</gml:posList></gml:LineString></gml:geometryMember><gml:geometryMember><gml:Curve><gml:segments><gml:LineStringSegment><gml:posList srsDimension="2">7 8 9 10</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:geometryMember><gml:geometryMember><gml:Polygon><gml:exterior><gml:LinearRing><gml:posList srsDimension="2">11 12 13 14 15 16 11 12</gml:posList></gml:LinearRing></gml:exterior><gml:interior><gml:LinearRing><gml:posList srsDimension="2">17 18 19 20 21 22 17 18</gml:posList></gml:LinearRing></gml:interior></gml:Polygon></gml:geometryMember><gml:geometryMember><gml:Surface><gml:patches><gml:PolygonPatch><gml:exterior><gml:LinearRing><gml:posList srsDimension="2">23 24 25 26 27 28 23 24</gml:posList></gml:LinearRing></gml:exterior><gml:interior><gml:LinearRing><gml:posList srsDimension="2">25 26 27 28 29 30 25 26</gml:posList></gml:LinearRing></gml:interior></gml:PolygonPatch></gml:patches></gml:Surface></gml:geometryMember></gml:MultiGeometry>'));
-
-
+SELECT 'srs_17', ST_AsEWKT(ST_GeomFromGML('<gml:MultiGeometry srsName="urn:ogc:def:crs:EPSG::4326"><gml:geometryMember><gml:Point><gml:pos srsDimension="2">1 2</gml:pos></gml:Point></gml:geometryMember><gml:geometryMember><gml:LineString><gml:posList srsDimension="2">3 4 5 6</gml:posList></gml:LineString></gml:geometryMember><gml:geometryMember><gml:Curve><gml:segments><gml:LineStringSegment><gml:posList srsDimension="2">7 8 9 10</gml:posList></gml:LineStringSegment></gml:segments></gml:Curve></gml:geometryMember><gml:geometryMember><gml:Polygon><gml:exterior><gml:LinearRing><gml:posList srsDimension="2">11 12 13 14 15 16 11 12</gml:posList></gml:LinearRing></gml:exterior><gml:interior><gml:LinearRing><gml:posList srsDimension="2">17 18 19 20 21 22 17 18</gml:posList></gml:LinearRing></gml:interior></gml:Polygon></gml:geometryMember><gml:geometryMember><gml:Surface><gml:patches><gml:PolygonPatch><gml:exterior><gml:LinearRing><gml:posList srsDimension="2">23 24 25 26 27 28 23 24</gml:posList></gml:LinearRing></gml:exterior><gml:interior><gml:LinearRing><gml:posList srsDimension="2">25 26 27 28 29 30 25 26</gml:posList></gml:LinearRing></gml:interior></gml:PolygonPatch></gml:patches></gml:Surface></gml:geometryMember></gml:MultiGeometry>'));
 
+-- Reverse axis with severals multi geometry types 
+-- TODO
 
 
--- Reverse axis with severals multi geometry types 
 
 --
 -- GML Namespace
index 264efe670dfe404158d0cfea510894429caa5e6e..f03a703fa845e3e64ef804090b01b0e5b3941da8 100644 (file)
@@ -133,6 +133,7 @@ srs_4|SRID=4326;POINT(2 1)
 srs_5|SRID=4326;POINT(2 1)
 srs_6|SRID=4326;POINT(2 1)
 srs_7|SRID=4326;POINT(1 2)
+srs_8|SRID=4326;POINT(1 2)
 ERROR:  unknown spatial reference system
 ERROR:  unknown spatial reference system
 ERROR:  unknown spatial reference system
@@ -141,7 +142,7 @@ ERROR:  unknown spatial reference system
 ERROR:  unknown spatial reference system
 ERROR:  unknown spatial reference system
 ERROR:  unknown spatial reference system
-srs_16|SRID=4326;GEOMETRYCOLLECTION(POINT(2 1),LINESTRING(4 3,6 5),LINESTRING(8 7,10 9),POLYGON((12 11,14 13,16 15,12 11),(18 17,20 19,22 21,18 17)),POLYGON((24 23,26 25,28 27,24 23),(26 25,28 27,30 29,26 25)))
+srs_17|SRID=4326;GEOMETRYCOLLECTION(POINT(2 1),LINESTRING(4 3,6 5),LINESTRING(8 7,10 9),POLYGON((12 11,14 13,16 15,12 11),(18 17,20 19,22 21,18 17)),POLYGON((24 23,26 25,28 27,24 23),(26 25,28 27,30 29,26 25)))
 ns_1|POINT(1 2)
 ns_2|POINT(1 2)
 ns_3|POINT(1 2)