Spatialite 笔记三:python for Spatialite
Python使用spatilite扩展
实现语言去驱动spatialite有两种方法:
运用sqlite的语言扩展,只需加载DLL,在语言端调用数据库的CLI。
运用适配的第三方包,有对应的方法函数去实现数据库处理的功能。
第二种方法固然比较方便,但是在windows平台安装上存在一定的麻烦。如果你的平台是linux,可以参考pySpatialite。在CookBook提供了C,JAVA,PHP和python的语言包。
import pyspatialite.dbapi2 as db
con = db.connect(':memory:')
# 测试空间扩展是否加载
cursor = con.execute('SELECT sqlite_version(), spatialite_version()')
print cursor.fetchall()
# Output should be something like: [(u'3.7.9', u'3.0.1')]
由于windows的一些问题,pySpatialite的安装会存在一些冲突。
python +spatialite + window 解决方案
而在这里重点介绍,第一种方法,一次配置多种语言都通用。在Python的Windows配置上同样会出现一些问题。就此参考解决方法,我使用的版本和他有所不同,如下。
- Python 2.7.11 64bit
- SQLite 3.9.2 64bit
- mod_Spatialite 4.3.0a 64bit
运行环境在windows 10 64bit。先将python安装完成。然后,到 spatilite官网 找到MS(即Microsoft)版本,下载64位的mod_spatialite,将其先解压到目标文件夹。由于原生的sqlite.dll有问题,到 cyqlite 下载扩展版sqlite,点击 Browse All Files 找到你想要的版本,然后解压到同样的文件夹,其中出现一些覆盖现象,允许即可。将该文件夹设置成环境变量。最后将python目录的 DLLs 文件夹中(i.e. C:\Python27\DLLs ), 找到 sqlite3.dll,将其改为 sqlite3_old.dll。 因此,在环境变量中的 sqlite3.dll 和 mod_spatialite 将替代旧dll。
新建一个python脚本测试一下,输入:
import sqlite3
with sqlite3.connect(':memory:') as conn:
conn.enable_load_extension(True)
conn.execute("SELECT load_extension('mod_spatialite')")
如果没报错,就恭喜你成功了。
你可以享受各种Spatialite的CLI,参考笔记二,可以完成将一些复杂的数据入库等等。
举个栗子
在懂得sqlite
的基础知识的情况下,以下的示范代码就变得非常简单。不过是用enable_load_extension
打开扩展,然后,在sql的语句上就可以使用空间数据库特有的语法。
#打开数据库
conn = sqlite3.connect('MyDatabase.sqlite')
# 加载扩展,先确保mod_spatialite.dll在你的系统路径下
conn.enable_load_extension(True)
conn.execute('SELECT load_extension("mod_spatialite.dll")')
cursor = conn.cursor()
# 做一个查询
query = "SELECT AsGeoJson(geometry) ,firstAttribute, secondAttribute, thirdAttribute FROM MyTable"
cursor.execute(query)
results = cursor.fetchall()
参考:
动态加载Spatialite作为扩展模块
通过Python空间查询展示GeoJSON
转载,请表明出处。总目录Awesome GIS