<div dir="ltr">Hi,<div><br></div><div>This message is more as a reference for current and future PostGIS/Golang users.<br><div><br></div><div>I've been using PostGIS with Go very successfully. The combination of PostGIS's awesome power and Go's "better Python" (static typing, built-in concurrency, compiled) is a fantastic for writing geo pipelines with custom processing steps.</div><div><br></div><div>I've written a number of open source libraries that may be of help to others:</div><div><br></div><div><a href="https://github.com/twpayne/go-geos" target="_blank">https://github.com/twpayne/go-geos</a> - official Go bindings for GEOS<br></div><div><a href="https://github.com/twpayne/go-proj" target="_blank">https://github.com/twpayne/go-proj</a> - official Go bindings for PROJ<br></div><div><a href="https://github.com/twpayne/pgx-geos" target="_blank">https://github.com/twpayne/pgx-geos</a> - PostGIS and GEOS support forĀ <a href="http://github.com/jackc/pgx" target="_blank">github.com/jackc/pgx</a><br></div><div><br></div><div>This particular combo works very well with <a href="https://sqlc.dev" target="_blank">https://sqlc.dev</a> (which supports several languages, not just Go).</div><div><br></div><div>My workflow for a custom processing step is:<br>1. Write a SELECT query to retrieve input data.</div><div>2. Write an INSERT (or COPY FROM) query to persist output data.</div><div>3. sqlc generates type-safe bindings to these queries directly from the queries.</div><div>4. Call the SELECT function which returns PostGIS geometries as GEOS objects.</div><div>5. Manipulate the GEOS objects using the full power of GEOS and Go. Go is already fast, and for bulk operations, Go's concurrency allows me to use all my CPU cores.</div><div>6. Call the INSERT function to persist the GEOS objects in PostGIS.</div><div><br></div></div><div>Regards,</div><div>Tom</div></div>