如今咱們的數據量愈來愈來越大,每每會有短期渲染大量數據的要求,可是每每這些數據過大難以實時處理,總體切片花費時間又過長。在這裏提出一種緩存加實時處理的方案。
html
軟件環境,PostGIS(3.0.0rc2 r17909)和 PostgreSQL( 12.0, compiled by Visual C++ build 1914, 64-bit),數據是微軟開源的房屋數據。PostGIS3.0相對與PostGIS 2.5大幅度提高矢量切片性能,並行環境表現更好。前端
預處理就是將3級到12級的矢量切片事先切好。首先獲取數據12級的最大最小xyz,經過這個範圍生成網格,而後和數據相交獲得一一對應的關係表a。 接下來就是使用四叉樹鍵(quadkey),四叉樹有一些有意思的特性。第一,四叉樹鍵的長度等於該瓦片所對應的圖像級別;第二,每一個瓦片的四叉樹鍵的前幾位和其父瓦片(上一圖像級別所對應的瓦片)的四叉樹鍵相同,下圖中,第1級的 '瓦片2' 是第2級的 '瓦片20' 至 '瓦片23' 的父瓦片,第2級的 '瓦片13' 是 第3級的 '瓦片130' 至 '瓦片133' 的父瓦片。經過四叉樹的這個特性把3到11級的xyz和11級的xyz創建對應關係表b,最終a和b關聯能夠獲得三到十一級和數據的對應關係。
python
預處理矢量切片生成完之後,使用golang把矢量切片所有加載進程序中,而且創建鍵值對,可以快速的判斷請求的xyz在3-11級是否有數據而且存在數據時能快速獲取。當數據請求大於十一級時候,咱們使用數據庫查詢方式獲取矢量切片。後臺編寫時候遇到問題,後端向前端傳輸大的矢量切片速度過慢。我經過數據切割方式解決這個問題。打個比方,吃一個西瓜,你一口吃不下。那咱們是否是切成塊吃就能夠?切塊就是數據分割這樣能較快的傳輸又不影響數據完整性。git
前臺渲染使用mapbox gl加載自定義矢量切片 github
本文方案中使用緩存少許層級提高總體渲染速度,實際前端瀏覽中能較爲流暢。因爲數據限制,方案的測試數據較爲單一,可能不具備表明性。本方案預處理切片層級不宜過大,超過12級預處理性能會急劇下降。
golang
www.runoob.com/python/pyth… stackoverflow.com/questions/4… docs.objectrocket.com/redis_pytho… stackoverflow.com/questions/1… blog.csdn.net/why_not2007… www.jianshu.com/p/443719f60… docs.microsoft.com/en-us/bingm… github.com/Microsoft/U… github.com/buckhx/Quad… github.com/CartoDB/pyt… www.cnblogs.com/xwgli/archi… stackoverflow.com/questions/4… postgres.cn/docs/postgi… postgis.net/docs/manual… postgis.net/docs/manual… postgis.net/docs/ST_AsM… wiki.openstreetmap.org/wiki/Slippy… www.postgresql.org/docs/9.5/gi… www.postgresql.org/docs/9.5/gi… blog.csdn.net/xk_zhang/ar… www.cnblogs.com/LCGIS/archi… blog.csdn.net/Happy52Wang… blog.csdn.net/a624806998/… www.dongcoder.com/detail-1195… www.cnblogs.com/520zm/p/107… pynative.com/psycopg2-py… initd.org/psycopg/doc… www.v2ex.com/t/351734 www.cnblogs.com/kaituorensh… blog.csdn.net/kanon122500…redis