读没有spatialite的sqlite地理blob

时间:2016-10-30 15:22:37

标签: python sqlite sqlalchemy spatialite gis

我使用sqlalchemy作为一个大多数非地理数据库,使用对几何不了解的桌面程序进行查询和填充。

我现在正在慢慢地添加地理位置感知,并且我要编写一个单独的程序,我不打算增强旧的桌面应用程序,它应该能够继续执行它的无论数据库是否已扩展到空间数据库,都可以完成工作。

该计划是关于植物收藏品,在扩展的数据库中,植物将位于空间中的某个点。该决定不是决定性的,但我考虑使用空间数据库(point列),而不是仅将latlon两列添加到plant列表

如果我选择空间数据库,即使我不打算让用户在桌面应用程序中插入坐标,仍然能够显示具有坐标的植物的坐标,对于数据库而言确实在空间上扩大了。

如果我选择latlon列,我可以扩展SQLAlchemy数据库模型,以包含植物的坐标,并且不会出现技术问题。

如果数据库系统是PostgreSQL + PostGIS,我执行它并且它可以工作:

session = object_session(row)
result = session.execute('select id, coords from plant where id=%d' % row.id)
myid, mycoords = result.fetchone()
if mycoords[:2] == '01':
    r = '>Q'
else:
    r = '<Q'
import struct
lon = struct.unpack('d', struct.pack(r, int(mycoords[-32:-16], 16)))[0]
lat = struct.unpack('d', struct.pack(r, int(mycoords[-16:], 16)))[0]

但是使用SQLite,上面的查询给了我一个None,我期望至少有一个BLOB。如果我像这样直接连接数据库,我会得到一个60字节的BLOB:

import sqlite3
cn = sqlite3.connect("/home/mario/.bauble/geo-btuu-11.db")
cr = cn.cursor()
cr.execute("select id, coords from plant where coords is not null")
r = cr.fetchall()

在任何情况下,如果我设法检索它,我不知道如何处理BLOB。

0 个答案:

没有答案