python Spatialite库应用 (sqlite3扩展),spatialitesqlite3,问题:需要从Spat
python Spatialite库应用 (sqlite3扩展),spatialitesqlite3,问题:需要从Spat
问题:
需要从Spatialite库中使用python读取内容,有个geometry字段,读出来的东西是一串二进制字节。附最初代码:
import sqlite3conn = sqlite3.connect(‘./20059363.db‘)cursor = conn.execute( "SELECT ROWID, OBJECT_PID, MESH, TRAFSIGN_SHAPE, SIGN_TYPE, GEOMETRY FROM HAD_OBJECT_TRAFFIC_SIGN WHERE TRAFSIGN_SHAPE == 2 " "ORDER BY ROWID")for row in cursor: print(row[0]) print(row[1]) print(row[5])
输出是:
11833191183319b"\x00\x01\x00\x00\x00\x00\xeb\x1aGy\x1c\xbc!A‘F\xef\xd4\x81\x00HA\x1d\xb0\xaby\x1f\xbc!A7\xfcnV\x82\x00HA|\xeb\x03\x00\x00\x01\x00\x00\x00\x05\x00\x00\x00\x1d\xb0\xaby\x1f\xbc!A7\xfcnV\x82\x00HA\x07\xb5\xdf\xda\[email protected]\xeb\x1aGy\x1c\xbc!A‘F\xef\xd4\x81\x00HA\x07\xb5\xdf\xda\[email protected]\xeb\x1aGy\x1c\xbc!A‘F\xef\xd4\x81\x00HA\xd8}\xc7\xf0\xd8\[email protected]\x1d\xb0\xaby\x1f\xbc!A7\xfcnV\x82\x00HA\xd8}\xc7\xf0\xd8\[email protected]\x1d\xb0\xaby\x1f\xbc!A7\xfcnV\x82\x00HA\x07\xb5\xdf\xda\[email protected]\xfe"
这第三个二进制字节串显然是有问题的。
过程:
后询问同事,说是个保存地理信息的字段,需要特殊的方法来解码。
后来查询到一个astext方法,可以读取到该字段的text?(其实我也不清楚读到的是啥,主要那个字段我就没搞明白里面都写啥了。。。),
sql语句是这样:
"SELECT ROWID, OBJECT_PID, MESH, TRAFSIGN_SHAPE, SIGN_TYPE, AsText(GEOMETRY) FROM HAD_OBJECT_TRAFFIC_SIGN WHERE TRAFSIGN_SHAPE == 2 ORDER BY ROWID")
但是sqlite3中并没有AsTest方法,所以需要扩展。
从网上搜到了这个教程:http://www.jianshu.com/p/5bc7d8b7b429,使用了其中的“python +spatialite + window 解决方案”,不过没有成功。。。
后来想了个简单粗暴的方法,还是依据这个教程,下好对应的dll,然后直接放入python安装目录下的DLLs中,然后修改代码:
import sqlite3conn = sqlite3.connect(‘./20059363.db‘)conn.enable_load_extension(True)conn.load_extension(‘mod_spatialite‘)cursor = conn.execute( "SELECT ROWID, OBJECT_PID, MESH, TRAFSIGN_SHAPE, SIGN_TYPE, AsText(GEOMETRY) FROM HAD_OBJECT_TRAFFIC_SIGN WHERE TRAFSIGN_SHAPE == 2 " "ORDER BY ROWID")for row in cursor: print(row[0]) print(row[1]) print(row[5])
输出:
11833191183319POLYGON Z((581135.737638 3145988.675262 105.977164, 581134.236871 3145987.663552 105.977164, 581134.236871 3145987.663552 104.060116, 581135.737638 3145988.675262 104.060116, 581135.737638 3145988.675262 105.977164))
搞定。
下面附一个python3,64位的dll包,方便大家使用。
链接:http://pan.baidu.com/s/1gfioKZD 密码:m23o
python Spatialite库应用 (sqlite3扩展)
热门文章:
相关内容
- [python]RobotFramework自定义库实现UI自动化,robotframeworku
- Python在Windows下操作CH341DLL,pythonch341dll, 1 #! /usr
- python小白之矩阵matrix笔记(updating),pythonupdating,Matrix#p
- python matplotlib 绘图 和 dpi对应关系,matplotlibdpi,dpi表示图
- hadoop streaming 中跑python程序,自定义模块的导入,hado
- python2 与python3中最大的区别(编码问题bytes&str,
- Python的X[y==1, 0],python,最近研究逻辑回归,I
- centos 7 编译 python3.7.0,centospython3.7.0,安装编译所需库
- python GUI尝鲜(但当涉猎,见往事耳),pythongui,第一步
- python之单元测试,python单元测试,一. 什么是单元测试
评论关闭