[postgis-users] ST_GeomFromKML error with LinearRing

Teluk, Bill G Bill.Teluk at team.telstra.com
Wed May 13 00:04:37 PDT 2020


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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/postgis-users/attachments/20200513/28a8feaa/attachment.html>


More information about the postgis-users mailing list