如何在sqlite3中创建和填充几何列

时间:2015-08-21 19:47:32

标签: python-2.7 sqlite gis

我正在我的本地机器上创建一个测试数据库,所以我可以测试一些计算,然后再转到更大的运行,以保存在实际的postgres数据库中。但是我无法sqlite3创建数据并将数据保存到我的geom列(由python正确创建)。似乎geom列也未创建。任何帮助将不胜感激。

conn = lite.connect('geom_test.db')
c = conn.cursor()
c.execute("""CREATE TABLE test
(
lat double precision,
long double precision,
speed double precision)"""))
c.execute(""" 
SELECT AddGeometryColumn('test', 'geom',
4326, 'POINT', 'XY');""")

line = ogr.Geometry(ogr.wkbLineString)
line.AddPoint_2D(lon,lat)
line = line.ExportToWkt()

qry ="INSERT INTO sequence VALUES (?,?,?,?);"
conn = lite.connect('geom_test.db')
c = conn.cursor()
c.executemany(qry, data) #data is 4 columns dict 
c.close()
conn.commit()
conn.close()

3 个答案:

答案 0 :(得分:1)

您需要导入spatialite共享库:

import sqlite3 as lite
from os.path import realpath
conn = lite.connect('geom_test.db')
library_path = "/usr/local/lib/mod_spatialite.so"  # on my ubuntu linux
conn.enable_load_extension(True)
conn.load_extension(realpath(library_path))

或者加载扩展程序的其他方式:

conn.execute("SELECT load_extension(?, 'sqlite3_modspatialite_init');",
             (realpath(library_path),))  

在Windows上,名称将为' mod_spatialite.dll' (还要注意提供给load_extension()的路径,即正确转义有问题的字符并在调用之前解析符号链接。)
无论如何this page on SpatiaLite website显示了有关加载共享库的一些细节。

编辑: 如果失败,加载将引发OperationalError。如果成功,您可以检查它是否使用了您期望的版本(当然还要执行您尝试的操作):

vs = str([i for i in c.execute("""SELECT spatialite_version()""")])
vgeos = str([i for i in c.execute("""SELECT geos_version()""")]
print('Spatialite {} (GEOS {})'.format(
              vs.strip("()[]',"), vgeos.strip("()',[]")))

答案 1 :(得分:0)

看起来你正在使用PostGIS,后者为PostgreSQL增加了功能。其中包括AddGeometryColumn函数。这不是SQLite可用的,因为它不是标准功能。

答案 2 :(得分:0)

看起来您正在使用SpatiaLite,它为SQLite增加了功能。见Recipe #6: Creating a new Geometry column。下一张幻灯片显示了如何将一些简单的几何图形加载到表格中。

请参阅main web resource for SpatiaLite,附带食谱,参考资料等。如果您需要查看几何图形,请尝试使用QGIS。