Thanks Paul! That makes sense - it would be just duplication to allow LinearRing as a top level object... I assume it's there to make it easier to clearly distinguish donut holes in polygons, but not for use as a top-level "object".
I've found that the "LinearRing" appearing in my data, was in fact a coding error in my application, so the data itself didn't have any actual "LinearRing" as the top level object - it was in fact nested in a complex polygon. My error! Regards, Bill Teluk -----Original Message----- From: postgis-users <[email protected]> On Behalf Of Paul Ramsey Sent: Friday, 15 May 2020 1:59 AM To: PostGIS Users Discussion <[email protected]> Subject: Re: [postgis-users] ST_GeomFromKML error with LinearRing [External Email] This email was sent from outside the organisation – be cautious, particularly with links and attachments. It's not a bug, it's deliberate. LinearRing is not an instantiable type, it's a component of a Polygon. If you want to instantiate a closed area, use a Polygon. If you want to instantiate a close line, use a closed LineString. P > On May 13, 2020, at 12:04 AM, Teluk, Bill G <[email protected]> > wrote: > > Hi, > > I’ve encountered a problem with the ST_GeomFromKML function. I’m not sure if > it’s a bug or not. The problem description is: > > I have an external data source that I’m loading into a PostGIS-enabled > PostgreSQL instance. The data source is KML and needs to be parsed and > loaded to the database using just INSERT’s (because of embedded content > within it.) > > I’m extracting the XML for the feature spatial description, and using the > ST_GeomFromKML() function to convert that XML text to the geometry object for > the INSERT statement. This has been working fine for other data sources I’ve > got – however I’ve got a data source, that doesn’t work – and checking it, I > can see that it differs from the others because it is using “LinearRing” > elements as the “top level” spatial element. > > As far as I understand – the KML XSD (v2.2) allows for a LinearRing to be a > top level spatial object (“AbstractGeometryGroup”.) but it seems that the > ST_GeomFromKML function won’t accept it and generates an error. > > I’ve tried wrapping the XML fragment in a “<Polygon><outerBoundaryIs>” > element pair, and ST_GeomFromKML accepts that. > > I’ve reproduced the error on two different versions of PostGIS being v2.3 and > 2.5. Details below: > > SQL Statement that produces error: > <pre> > select ST_GeomFromKML('<LinearRing><coordinates> > 148,-35 > 148,-36 > 144,-36 > 148,-36 > 148,-35 > </coordinates></LinearRing>'); > </pre> > > System #1: > postgis_version: > 2.3 USE_GEOS=1 USE_PROJ=1 USE_STATS=1 > (1 row) > > PostgreSQL version > PostgreSQL 9.2.18 on x86_64-redhat-linux-gnu, compiled by gcc (GCC) 4.8.5 > 20150 > 623 (Red Hat 4.8.5-11), 64-bit > (1 row) > > Error Message: > ERROR: invalid KML representation > > System #2: > postgis_version: > 2.5 USE_GEOS=1 USE_PROJ=1 USE_STATS=1 > > PostgreSQL version > PostgreSQL 10.12, compiled by Visual C++ build 1800, 64-bit > > Error Message: > ERROR: invalid KML representation > SQL state: XX000 > > Workaround, works successfully in both tested systems: > <pre> > select ST_GeomFromKML('<Polygon><outerBoundaryIs><LinearRing><coordinates> > 148,-35 > 148,-36 > 144,-36 > 148,-36 > 148,-35 > </coordinates></LinearRing></outerBoundaryIs></Polygon>'); > </pre> > Regards, Bill Teluk > _______________________________________________ > postgis-users mailing list > [email protected] > https://lists.osgeo.org/mailman/listinfo/postgis-users _______________________________________________ postgis-users mailing list [email protected] https://lists.osgeo.org/mailman/listinfo/postgis-users _______________________________________________ postgis-users mailing list [email protected] https://lists.osgeo.org/mailman/listinfo/postgis-users
