【問題小結】專案中遇到的問題小結篇(第一篇)
阿新 • • 發佈:2018-12-27
問題:使用openlayers3的ol.format.WKT類對ol.geom.Circle進行轉換,得到wkt描述傳入後臺進行處理時,chrome一直報錯(geometryEncoder should be defined ),如下:
百度了一下,沒有找到相關解決方案,於是求助了萬能的谷歌爸爸,果然一下就找到問題出現的原因:
原因是WKT中沒有Circle這個幾何型別,所以沒辦法轉換,哭暈在廁所。
這裡附上WKT支援的幾個幾何型別樣例: POINT(6 10) LINESTRING(3 4,10 50,20 25) POLYGON((1 1,5 1,5 5,1 5,1 1),(2 2,2 3,3 3,3 2,2 2)) MULTIPOINT(3.5 5.6, 4.8 10.5) MULTILINESTRING((3 4,10 50,20 25),(-5 -8,-10 -8,-15 -4)) MULTIPOLYGON(((1 1,5 1,5 5,1 5,1 1),(2 2,2 3,3 3,3 2,2 2)),((6 3,9 2,9 4,6 3))) GEOMETRYCOLLECTION(POINT(4 6),LINESTRING(4 6,7 10)) POINT ZM (1 1 5 60) POINT M (1 1 80) POINT EMPTY MULTIPOLYGON EMPTY
沒有支援的幾何型別怎麼辦呢?想了一下可以把圓轉換成
面型別,然後傳到後臺。
有兩種轉換方法:
1、使用openlayers3中ol.geom.Polygon.fromCircle方法將Circle型別轉換成Polygon型別,這是最簡單的實現方法。
2、使用Postgresql中的st_buffer函式,獲取圓的圓心座標以及半徑生成以圓心為中心點的緩衝區,得到的幾何物件也是Polygon,這樣就可以進行wkt轉換了。(第二種是需要資料庫為postgresql的)
很不幸,我當初選了第二種,很多人會問:為什麼不選第一種?我只想說,我是在用第二種方法實現後才發現第一種的直接轉換方法,當時都想拿塊豆腐撞牆了 T_T 。既然功能都已經實現了,也就懶得再改回第一種方法了 。