Latest posts from Paul Ramsey

  • 3 min read

    Waiting for PostGIS 3: ST_Transform() and Proj6

    Paul Ramsey

    Where are you? Go ahead and figure out your answer, I'll wait. No matter what your answer, whether you said "sitting in my office chair" or "500 meters south-west of city hall" or "48.43° north by 123.36° west", you expressed your location relative to something else, whether that thing was your office layout, your city, or Greenwich . A geospatial database like PostGIS has to have able to convert between these different reference frames, known as "coordinate reference systems". The math for the...

    Read More
  • 3 min read

    Waiting for PostGIS 3: GEOS 3.8

    Paul Ramsey

    While PostGIS includes lots of algorithms and functionality we have built ourselves, it also adds geospatial smarts to PostgreSQL by linking in specialized libraries to handle particular problems: • Proj for coordinate reference support; • GDAL for raster functions and formats; • GEOS for computational geometry (basic operations); • CGAL for more computational geometry (3D operations); and • for format support, libxml2, libjsonc, libprotobuf-c Proj for coordinate reference support; GDAL...

    Read More
  • 3 min read

    Waiting for PostGIS 3: Parallelism in PostGIS

    Paul Ramsey

    Parallel query has been a part of PostgreSQL since 2016 with the release of version 9.6 and in theory PostGIS should have been benefiting from parallelism ever since. In practice, the complex nature of PostGIS has meant that very few queries would parallelize under normal operating configurations -- they could only be forced to parallelize using oddball configurations . With PostgreSQL 12 and PostGIS 3, parallel query plans will be generated and executed far more often, because of changes t...

    Read More
  • 2 min read

    Waiting for PostGIS 3: ST_TileEnvelope(z,x,y)

    Paul Ramsey

    With the availability of MVT tile format in PostGIS via ST_AsMVT() , more and more people are generating tiles directly from the database. Doing so usually involves a couple common steps: • exposing a tiled web map API over HTTP • converting tile coordinates to ground coordinates to drive tile generation exposing a tiled web map API over HTTP converting tile coordinates to ground coordinates to drive tile generation Tile coordinates consist of three values: • zoom , the level of the tile...

    Read More
  • 3 min read

    Waiting for PostGIS 3: Separate Raster Extension

    Paul Ramsey

    The raster functionality in PostGIS has been part of the main extension since it was introduced. When PostGIS 3 is released, if you want raster functionality you will need to install both the core extension, and also the extension. Breaking out the raster functionality allows packagers to more easily build stripped down "just the basics" PostGIS without also building the raster dependencies, which include the somewhat heavy GDAL library. The raster functionality remains intact however, a...

    Read More
  • 2 min read

    Waiting for PostGIS 3: ST_AsMVT Performance

    Paul Ramsey

    Vector tiles are the new hotness , allowing large amounts of dynamic data to be sent for rendering right on web clients and mobile devices, and making very beautiful and highly interactive maps possible. Since the introduction of ST_AsMVT() , people have been generating their tiles directly in the database more and more, and as a result wanting tile generation to go faster and faster. Every tile generation query has to carry out the following steps: • Gather all the relevant rows for the tile...

    Read More
  • 2 min read

    Waiting for PostGIS 3: Hilbert Geometry Sorting

    Paul Ramsey

    With the release of PostGIS 3.0 , queries that geometry columns will return rows using a Hilbert curve ordering, and do so about twice as fast. Whuuuut!?! The history of "ordering by geometry" in PostGIS is mostly pretty bad. Up until version 2.4 (2017), if you did on a geometry column, your rows would be returned using the ordering of the minimum X coordinate value in the geometry. One of the things users expect of "ordering" is that items that are "close" to each other in the ordered li...

    Read More
  • 2 min read

    Waiting for PostGIS 3: ST_AsGeoJSON(record)

    Paul Ramsey

    With PostGIS 3.0, it is now possible to generate GeoJSON features directly without any intermediate code, using the new function. The GeoJSON format is a common transport format, between servers and web clients, and even between components of processing chains. Being able to create useful GeoJSON is important for integrating different parts in a modern geoprocessing application. PostGIS has had an for forever, but it does slightly less than most users really need: it takes in a PostGIS geo...

    Read More
  • 6 min read

    Serving Dynamic Vector Tiles from PostGIS

    Paul Ramsey

    One of the most popular features of PostGIS 2.5 was the introduction of the "vector tile" output format, via the ST_AsMVT() function. Vector tiles are a transport format for efficiently sending map data from a server to a client for rendering. The vector tile specification describes how raw data are quantized to a grid and then compressed using delta-encoding to make a very small package. Prior to ST_AsMVT() , if you wanted to produce vector tiles from PostGIS you would use a rendering prog...

    Read More
  • 8 min read

    Quick and Dirty Address Matching with LibPostal

    Paul Ramsey

    Most businesses have databases of previous customers, and data analysts will frequently be asked to join arbitrary data to the customer tables in order to provide analysis. Unfortunately joining address data together is notoriously difficult: • The same address can be expressed in many ways • The parts of addresses are not always clear • There are valid lexically very similar addresses very nearby any given address The same address can be expressed in many ways The parts of addresses are not alw...

    Read More