python Spatialite庫應用 (sqlite3擴充)

來源:互聯網
上載者:User

標籤:不清楚   geometry   rowid   教程   4.0   查詢   select   type   進位   

問題:

需要從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擴充)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.