Smoothing a Polygon using 1, 2 and 3 iterations.
SELECT n AS iterations, ST_ChaikinSmoothing(
'POLYGON ((20 20,60 90,10 150,100 190,190 160,130 120,190 50,140 70,120 10,90 60,20 20))', n
) AS smoothed
FROM generate_series(1, 3) AS n;
1 | POLYGON((30 37.5,50 72.5,47.5 105,22.5 135,32.5 160,77.5 180,122.5 182.5,167.5 167.5,175 150,145 130,145 102.5,175 67.5,177.5 55,152.5 65,135 55,125 25,112.5 22.5,97.5 47.5,72.5 50,37.5 30,30 37.5))
2 | POLYGON((35 46.25,45 63.75,49.375 80.625,48.125 96.875,41.25 112.5,28.75 127.5,25 141.25,30 153.75,43.75 165,66.25 175,88.75 180.625,111.25 181.875,133.75 178.75,156.25 171.25,169.375 163.125,173.125 154.375,167.5 145,152.5 135,145 123.125,145 109.375,152.5 93.75,167.5 76.25,175.625 64.375,176.875 58.125,171.25 57.5,158.75 62.5,148.125 62.5,139.375 57.5,132.5 47.5,127.5 32.5,121.875 24.375,115.625 23.125,108.75 28.75,101.25 41.25,91.25 48.125,78.75 49.375,63.75 45,46.25 35,35.625 31.875,31.875 35.625,35 46.25))
3 | POLYGON((37.5 50.625,42.5 59.375,46.09375 67.96875,48.28125 76.40625,49.0625 84.6875,48.4375 92.8125,46.40625 100.78125,42.96875 108.59375,38.125 116.25,31.875 123.75,27.8125 130.9375,25.9375 137.8125,26.25 144.375,28.75 150.625,33.4375 156.5625,40.3125 162.1875,49.375 167.5,60.625 172.5,71.875 176.40625,83.125 179.21875,94.375 180.9375,105.625 181.5625,116.875 181.09375,128.125 179.53125,139.375 176.875,150.625 173.125,159.53125 169.21875,166.09375 165.15625,170.3125 160.9375,172.1875 156.5625,171.71875 152.03125,168.90625 147.34375,163.75 142.5,156.25 137.5,150.625 132.03125,146.875 126.09375,145 119.6875,145 112.8125,146.875 105.46875,150.625 97.65625,156.25 89.375,163.75 80.625,169.53125 73.28125,173.59375 67.34375,175.9375 62.8125,176.5625 59.6875,175.46875 57.96875,172.65625 57.65625,168.125 58.75,161.875 61.25,156.09375 62.5,150.78125 62.5,145.9375 61.25,141.5625 58.75,137.65625 55,134.21875 50,131.25 43.75,128.75 36.25,126.09375 30.46875,123.28125 26.40625,120.3125 24.0625,117.1875 23.4375,113.90625 24.53125,110.46875 27.34375,106.875 31.875,103.125 38.125,98.75 42.96875,93.75 46.40625,88.125 48.4375,81.875 49.0625,75 48.28125,67.5 46.09375,59.375 42.5,50.625 37.5,43.59375 34.21875,38.28125 32.65625,34.6875 32.8125,32.8125 34.6875,32.65625 38.28125,34.21875 43.59375,37.5 50.625))
1 | 010300000001000000150000000000000000003E400000000000C04240000000000000494000000000002052400000000000C047400000000000405A4000000000008036400000000000E0604000000000004040400000000000006440000000000060534000000000008066400000000000A05E400000000000D066400000000000F064400000000000F064400000000000E065400000000000C062400000000000206240000000000040604000000000002062400000000000A059400000000000E065400000000000E0504000000000003066400000000000804B40000000000010634000000000004050400000000000E060400000000000804B400000000000405F4000000000000039400000000000205C40000000000080364000000000006058400000000000C04740000000000020524000000000000049400000000000C042400000000000003E400000000000003E400000000000C04240
2 | 010300000001000000290000000000000000804140000000000020474000000000008046400000000000E04F400000000000B048400000000000285440000000000010484000000000003858400000000000A044400000000000205C400000000000C03C400000000000E05F4000000000000039400000000000A861400000000000003E4000000000003863400000000000E045400000000000A0644000000000009050400000000000E06540000000000030564000000000009466400000000000D05B400000000000BC66400000000000B8604000000000005866400000000000886340000000000068654000000000002C654000000000006464400000000000A4654000000000004C63400000000000F06440000000000020624000000000001063400000000000E0604000000000002062400000000000C85E4000000000002062400000000000585B40000000000010634000000000007057400000000000F0644000000000001053400000000000F46540000000000018504000000000001C66400000000000104D4000000000006865400000000000C04C400000000000D863400000000000404F4000000000008462400000000000404F4000000000006C61400000000000C04C4000000000009060400000000000C047400000000000E05F4000000000004040400000000000785E4000000000006038400000000000E85C4000000000002037400000000000305B400000000000C03C4000000000005059400000000000A044400000000000D0564000000000001048400000000000B053400000000000B048400000000000E04F400000000000804640000000000020474000000000008041400000000000D041400000000000E03F400000000000E03F400000000000D0414000000000008041400000000000204740
3 | 010300000001000000510000000000000000C04240000000000050494000000000004045400000000000B04D4000000000000C47400000000000FE5040000000000024484000000000001A5340000000000088484000000000002C5540000000000038484000000000003457400000000000344740000000000032594000000000007C45400000000000265B4000000000001043400000000000105D400000000000E03F400000000000F05E400000000000D03B4000000000005E60400000000000F0394000000000003A61400000000000403A4000000000000C62400000000000C03C400000000000D462400000000000B840400000000000926340000000000028444000000000004664400000000000B048400000000000F064400000000000504E4000000000009065400000000000F8514000000000000D66400000000000C854400000000000676640000000000098574000000000009E66400000000000685A400000000000B266400000000000385D400000000000A366400000000000046040000000000071664000000000006C614000000000001C66400000000000D462400000000000A465400000000000F1634000000000002765400000000000C364400000000000A5644000000000004A654000000000001E6440000000000086654000000000009263400000000000776540000000000001634000000000001D654000000000006B624000000000007864400000000000D06140000000000088634000000000003061400000000000D46240000000000081604000000000005C62400000000000865F4000000000002062400000000000EC5D4000000000002062400000000000345C4000000000005C624000000000005E5A400000000000D4624000000000006A58400000000000886340000000000058564000000000007864400000000000285440000000000031654000000000005252400000000000B365400000000000D650400000000000FE65400000000000684F4000000000001266400000000000D84D400000000000EF65400000000000FC4C4000000000009565400000000000D44C4000000000000465400000000000604D4000000000003C64400000000000A04E4000000000008363400000000000404F400000000000D962400000000000404F4000000000003E62400000000000A04E400000000000B261400000000000604D4000000000003561400000000000804B400000000000C76040000000000000494000000000006860400000000000E04540000000000018604000000000002042400000000000865F400000000000783E400000000000D25E400000000000683A400000000000145E40000000000010384000000000004C5D40000000000070374000000000007A5C40000000000088384000000000009E5B400000000000583B400000000000B85A400000000000E03F400000000000C8594000000000001043400000000000B0584000000000007C45400000000000705740000000000034474000000000000856400000000000384840000000000078544000000000008848400000000000C0524000000000002448400000000000E0504000000000000C47400000000000B04D40000000000040454000000000005049400000000000C042400000000000CC454000000000001C41400000000000244340000000000054404000000000005841400000000000684040000000000068404000000000005841400000000000544040000000000024434000000000001C41400000000000CC45400000000000C042400000000000504940
Smoothing a LineString using 1, 2 and 3 iterations.
SELECT n AS iterations, ST_ChaikinSmoothing(
'LINESTRING (10 140,80 130,100 190,190 150,140 20,120 120,50 30,30 100)', n
) AS smoothed
FROM generate_series(1, 3) AS n;
1 | LINESTRING(10 140,62.5 132.5,85 145,95 175,122.5 180,167.5 160,177.5 117.5,152.5 52.5,135 45,125 95,102.5 97.5,67.5 52.5,45 47.5,30 100)
2 | LINESTRING(10 140,49.375 134.375,68.125 135.625,79.375 141.875,87.5 152.5,92.5 167.5,101.875 176.25,115.625 178.75,133.75 175,156.25 165,170 149.375,175 128.125,171.25 101.25,158.75 68.75,148.125 50.625,139.375 46.875,132.5 57.5,127.5 82.5,119.375 95.625,108.125 96.875,93.75 86.25,76.25 63.75,61.875 51.25,50.625 48.75,41.25 60.625,30 100)
3 | LINESTRING(10 140,39.53125 135.78125,54.0625 134.6875,63.4375 135.3125,70.9375 137.1875,76.5625 140.3125,81.40625 144.53125,85.46875 149.84375,88.75 156.25,91.25 163.75,94.84375 169.6875,99.53125 174.0625,105.3125 176.875,112.1875 178.125,120.15625 177.8125,129.21875 175.9375,139.375 172.5,150.625 167.5,159.6875 161.09375,166.5625 153.28125,171.25 144.0625,173.75 133.4375,174.0625 121.40625,172.1875 107.96875,168.125 93.125,161.875 76.875,156.09375 64.21875,150.78125 55.15625,145.9375 49.6875,141.5625 47.8125,137.65625 49.53125,134.21875 54.84375,131.25 63.75,128.75 76.25,125.46875 85.78125,121.40625 92.34375,116.5625 95.9375,110.9375 96.5625,104.53125 94.21875,97.34375 88.90625,89.375 80.625,80.625 69.375,72.65625 60.625,65.46875 54.375,59.0625 50.625,53.4375 49.375,48.28125 51.71875,43.59375 57.65625,38.4375 70.46875,30 100)
1 | 01020000000E000000000000000000244000000000008061400000000000404F400000000000906040000000000040554000000000002062400000000000C057400000000000E065400000000000A05E4000000000008066400000000000F06440000000000000644000000000003066400000000000605D4000000000001063400000000000404A400000000000E0604000000000008046400000000000405F400000000000C057400000000000A0594000000000006058400000000000E050400000000000404A4000000000008046400000000000C047400000000000003E400000000000005940
2 | 01020000001A000000000000000000244000000000008061400000000000B048400000000000CC604000000000000851400000000000F460400000000000D853400000000000BC61400000000000E05540000000000010634000000000002057400000000000F06440000000000078594000000000000866400000000000E85C4000000000005866400000000000B860400000000000E0654000000000008863400000000000A0644000000000004065400000000000AC62400000000000E065400000000000046040000000000068654000000000005059400000000000D8634000000000003051400000000000846240000000000050494000000000006C6140000000000070474000000000009060400000000000C04C400000000000E05F400000000000A054400000000000D85D400000000000E857400000000000085B4000000000003858400000000000705740000000000090554000000000001053400000000000E04F400000000000F04E400000000000A04940000000000050494000000000006048400000000000A044400000000000504E400000000000003E400000000000005940
3 | 010200000032000000000000000000244000000000008061400000000000C443400000000000F960400000000000084B400000000000D660400000000000B84F400000000000EA60400000000000BC51400000000000266140000000000024534000000000008A614000000000005A5440000000000011624000000000005E55400000000000BB6240000000000030564000000000008863400000000000D0564000000000007864400000000000B6574000000000003665400000000000E258400000000000C265400000000000545A4000000000001C664000000000000C5C40000000000044664000000000000A5E4000000000003A664000000000002760400000000000FE654000000000006C614000000000009065400000000000D462400000000000F064400000000000F6634000000000002364400000000000D264400000000000296340000000000068654000000000000262400000000000B865400000000000AE60400000000000C2654000000000005A5E4000000000008665400000000000FE5A400000000000046540000000000048574000000000003C64400000000000385340000000000083634000000000000E50400000000000D962400000000000944B4000000000003E62400000000000D848400000000000B261400000000000E8474000000000003561400000000000C448400000000000C7604000000000006C4B4000000000006860400000000000E04F400000000000186040000000000010534000000000005E5F40000000000072554000000000005A5E4000000000001657400000000000245D400000000000FC57400000000000BC5B4000000000002458400000000000225A4000000000008E5740000000000056584000000000003A5640000000000058564000000000002854400000000000285440000000000058514000000000002A52400000000000504E4000000000005E50400000000000304B400000000000884D4000000000005049400000000000B84A400000000000B0484000000000002448400000000000DC49400000000000CC45400000000000D44C40000000000038434000000000009E51400000000000003E400000000000005940
Smoothing a triangle shows the weakest visual change, so it is kept last.
SELECT ST_ChaikinSmoothing(geom) smoothed
FROM (SELECT 'POLYGON((0 0,8 8,0 16,0 0))'::geometry geom) AS foo;
POLYGON((2 2,6 6,6 10,2 14,0 12,0 4,2 2))
0103000000010000000700000000000000000000400000000000000040000000000000184000000000000018400000000000001840000000000000244000000000000000400000000000002C40000000000000000000000000000028400000000000000000000000000000104000000000000000400000000000000040