1. 程式人生 > >【問題小結】專案中遇到的問題小結篇(第一篇)

【問題小結】專案中遇到的問題小結篇(第一篇)

問題:使用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 。既然功能都已經實現了,也就懶得再改回第一種方法了 。