PostGIS无效的GML表示

时间:2016-05-12 14:31:15

标签: postgis

我的地貌有什么问题?几何是here

当我运行此命令时:

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

抛出了这个错误:

ERROR:  invalid GML representation

我使用的是postgres 9.4.1和PostGIS 2.1.6

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

documentation for ST_GeomFromGML表示该函数不支持SQL / MM曲线几何"。遗憾的是,错误信息没有表达这一缺点,因为GML对现代软件具有有效的表示。有is an enhancement ticket to enable this support,但几年后没有任何动向。

作为一种解决方法,您可以使用(例如)Python中的GDAL / OGR来读取GML并将WKB导出到PostGIS:

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

两个区域的计算(使用不同的方法)基本相同,这是令人放心的。