Conversation
|
A few questions (disclaimer: i don't really know what ST_BUFFER does)
|
Extract and expand functions that create geometries for benchmarks.
JTS is generally more efficient (see benchmarks below). Also, ESRI returns an empty geometry when you buffer by small distances (< 1e-9); JTS handles these correctly. JTS Benchmark Mode Cnt Score Error Units BenchmarkSTBuffer.stBufferPoint avgt 20 14.221 2.408 us/op BenchmarkSTBuffer.stBufferMultiPointSparse avgt 20 810.414 43.980 us/op BenchmarkSTBuffer.stBufferMultiPointDense avgt 20 18539.600 998.499 us/op BenchmarkSTBuffer.stBufferMultiPointReallyDense avgt 20 1650058.575 71342.838 us/op BenchmarkSTBuffer.stBufferLineStringCircle avgt 20 562.464 26.039 us/op BenchmarkSTBuffer.stBufferLineStringDense avgt 20 316479.586 29001.318 us/op BenchmarkSTBuffer.stBufferPolygonSimple avgt 20 11.892 0.711 us/op BenchmarkSTBuffer.stBufferPolygonNormal avgt 20 46390.604 2958.109 us/op BenchmarkSTBuffer.stBufferPolygonDense avgt 20 72822.143 6841.961 us/op Esri Benchmark Mode Cnt Score Error Units BenchmarkSTBuffer.stBufferPoint avgt 20 8.290 0.541 us/op BenchmarkSTBuffer.stBufferMultiPointSparse avgt 20 16521.536 818.169 us/op BenchmarkSTBuffer.stBufferMultiPointDense avgt 20 450394.639 94490.620 us/op BenchmarkSTBuffer.stBufferMultiPointReallyDense avgt 20 3856960.148 300968.259 us/op BenchmarkSTBuffer.stBufferLineStringCircle avgt 20 13470.522 1308.101 us/op BenchmarkSTBuffer.stBufferLineStringDense avgt 20 440081.641 37944.614 us/op BenchmarkSTBuffer.stBufferPolygonSimple avgt 20 21.796 0.871 us/op BenchmarkSTBuffer.stBufferPolygonNormal avgt 20 16648.597 1348.367 us/op BenchmarkSTBuffer.stBufferPolygonDense avgt 20 1159728.778 27607.808 us/op
|
To buffer a geometry
|
|
Nice! As far as consistency, I guess my main concern would be if there were something like an inverse function where consistency between the functions would matter. Other than that seems like a good change. |
|
There's no natural inverse to buffer: the geometry is not directly recoverable. Some libraries allow buffering with a negative distance, but we forbid this. (Even if we allowed it, it's not actually an inverse operation. Consider a square with a small hole in the center: the hole would get filled in by the buffering, but would not be excavated with the negative buffering.) |


Convert ST_Buffer implementation to use JTS. JTS is generally more efficient (see benchmarks below). Also, ESRI returns an empty geometry when you buffer by small distances (< 1e-9);
JTS handles these correctly.
JTS
Benchmark Mode Cnt Score Error Units
BenchmarkSTBuffer.stBufferPoint avgt 20 14.221 2.408 us/op
BenchmarkSTBuffer.stBufferMultiPointSparse avgt 20 810.414 43.980 us/op
BenchmarkSTBuffer.stBufferMultiPointDense avgt 20 18539.600 998.499 us/op
BenchmarkSTBuffer.stBufferMultiPointReallyDense avgt 20 1650058.575 71342.838 us/op
BenchmarkSTBuffer.stBufferLineStringCircle avgt 20 562.464 26.039 us/op
BenchmarkSTBuffer.stBufferLineStringDense avgt 20 316479.586 29001.318 us/op
BenchmarkSTBuffer.stBufferPolygonSimple avgt 20 11.892 0.711 us/op
BenchmarkSTBuffer.stBufferPolygonNormal avgt 20 46390.604 2958.109 us/op
BenchmarkSTBuffer.stBufferPolygonDense avgt 20 72822.143 6841.961 us/op
Esri
Benchmark Mode Cnt Score Error Units
BenchmarkSTBuffer.stBufferPoint avgt 20 8.290 0.541 us/op
BenchmarkSTBuffer.stBufferMultiPointSparse avgt 20 16521.536 818.169 us/op
BenchmarkSTBuffer.stBufferMultiPointDense avgt 20 450394.639 94490.620 us/op
BenchmarkSTBuffer.stBufferMultiPointReallyDense avgt 20 3856960.148 300968.259 us/op
BenchmarkSTBuffer.stBufferLineStringCircle avgt 20 13470.522 1308.101 us/op
BenchmarkSTBuffer.stBufferLineStringDense avgt 20 440081.641 37944.614 us/op
BenchmarkSTBuffer.stBufferPolygonSimple avgt 20 21.796 0.871 us/op
BenchmarkSTBuffer.stBufferPolygonNormal avgt 20 16648.597 1348.367 us/op
BenchmarkSTBuffer.stBufferPolygonDense avgt 20 1159728.778 27607.808 us/op