2016-05-12 5 views
1

Was stimmt nicht mit meiner Geometrie? Geometrie ist here.PostGIS ungültige GML-Darstellung

Wenn ich diesen Befehl ausführen:

SELECT st_geomfromgml('content of file geometry.xml'); 

dieser Fehler ausgelöst wurde:

ERROR: invalid GML representation 

ich Postgres 9.4.1 und PostGIS 2.1.6

um Hilfe Danke mit

Antwort

0

Die documentation for ST_GeomFromGML sagt, dass die Funktion "nicht unterstützt SQL/MM Kurven Geometrien". Es ist bedauerlich, dass die Fehlermeldung diesen Mangel nicht artikuliert, da die GML eine gültige Darstellung für moderne Software hat. Es gibt is an enhancement ticket to enable this support, aber es gab keine Bewegung auf diesem nach mehreren Jahren.

Als Abhilfe können Sie GDAL/OGR aus (zB) Python verwenden, um die GML und exportieren Sie die WKB zu PostGIS zu lesen:

from osgeo import ogr 

with open('geometry.xml', 'r') as fp: 
    g = ogr.CreateGeometryFromGML(fp.read()) 
g.GetArea() # 4519550457.106098 

# There is more than one way to insert this to PostGIS, here is one way 
import psycopg2 
conn = psycopg2.connect('dbname=postgis host=localhost user=postgres port=5432') 
curs = conn.cursor() 
curs.execute('CREATE TABLE surf(geom geometry);') 
curs.execute('INSERT INTO surf(geom) VALUES (%s)', (g.ExportToWkb().encode('hex'),)) 
conn.commit() 

curs.execute('SELECT ST_Area(geom) FROM surf') 
curs.fetchone()[0] # 4519550457.07643 

Die beiden Flächenberechnungen (mit verschiedenen Methoden) sind im Wesentlichen die gleichen Das ist beruhigend.