Spatialite 笔记三:python 4 Spatialite (pySpatialite)

Spatialite 笔记三:python for Spatialite


Python使用spatilite扩展

实现语言去驱动spatialite有两种方法:

  1. 运用sqlite的语言扩展,只需加载DLL,在语言端调用数据库的CLI。

  2. 运用适配的第三方包,有对应的方法函数去实现数据库处理的功能。

第二种方法固然比较方便,但是在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')]
spatialite

由于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.dllmod_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

你可能感兴趣的:(Spatialite 笔记三:python 4 Spatialite (pySpatialite))