1 of 16

PostGIS Dream Journal

Where Ideas Go to Dance

2 of 16

HOW TO JOIN THE DANCE

  • Create a google slides presentation
  • Add your idea to that presentation
    • Just one slide please
    • Include an example function name
    • Include (lots of) pictures
    • Any other necessary explanatory text
    • Links to background info if necessary (papers, algorithms, etc)
  • Include your contact info
    • twitter handle, github handle, something we can credit
  • Make your presentation public-with-link
  • Add the link in a comment on this slide!

3 of 16

ST_Skeletonize(Polygon, [MultiPoint]) → MultiLinestring

  • Given a polygon, and a set of entry points, generate connecting lines that respect a medial axis of the geometry and connect all the entry points.
  • Current skeletonize doesn’t go to edges of polygon and doesn’t support providing input points.

4 of 16

ST_Drape(TIN, Linestring, [Densify]) → LineString

  • Given a 3D TIN, add the Z values to the linestring, including new vertices as necessary to fit the 3D surface.

5 of 16

ST_FittedSurface(MultiPointM, Tolerance) → TIN

  • Given a set of points with measure, generate a fitted surface that corresponds to the measure. (Kriging?)
  • Build a temperature surface from discrete weather station data, etc.

6 of 16

ST_Viewshed(Raster, MultiPoint) → Raster

7 of 16

ST_BarnesSurface(MultiPointM, Converge, Passes) → Raster

  • Given a set of points, generate a Barnes surface
  • Build a heat-map from a collection of occurrence points.

8 of 16

ST_IsoLines(TIN, ARRAY[float]) → MultiLineString�ST_IsoLines(Raster, ARRAY[float]) → MultiLineString

  • Given a surface in XYZ or XYM, return a multi-linestring with an isoline for each value provided in the array.
  • Convert a temperature surface into a weather map. Convert an elevation TIN into contour lines for a topographic map.

9 of 16

ST_SpanningTree(MultiLineString) → MultiLineString

  • Join all the vertices in a graph using the minimum length of edges.
  • https://en.m.wikipedia.org/wiki/Minimum_spanning_tree

10 of 16

ST_Raster(TIN) → Raster�ST_TIN(Raster, Tolerance) → TIN

  • Given a TIN, produce a one band raster that gives the TIN value at each point in the raster.
  • Given a one band raster, fit a TIN, skipping out the raster pixel values that are not outside the tolerance.

11 of 16

ST_MakeClean(Geometry, Tolerance) → Geometry

  • For individual features, remove common data errors within a tolerance and enforce OGC or ESRI validity rules.
    • Zigzags
    • Spikes
    • Micro-loops
    • Micro-holes
    • Ring crossings / grazes
    • Repeated points
    • Co-linear points

12 of 16

ST_MakeClean(Geometry, Tolerance) → Geometry

  • Window function
  • As for geometry function, but also look for geometry-to-geometry relationships
    • Linear features snap ends to nearby lines, add vertices at snap points
    • Polygonal features, close gaps, merge overlaps, ensure all vertices on shared boundaries match, return clean coverage

13 of 16

ST_CoverageUnion, ST_IsCoverageValid

  • Aggregate Function
  • Valid Polygonal coverages can be unioned very efficiently
    • essentially by dropping all interior edges
  • Helpful to be able to test a priori for valid polygonal coverage
    • ideally report where it is invalid to aid fixing

14 of 16

ST_Intersection(geography, geography)

  • Overlay operations �on the sphere
  • Add S2 as a (optional?) dependency for geography

15 of 16

ST_Union(geometry[]) in Parallel

  • Note number of available CPUs
  • Parallelize each pair-wise union operations in the cascaded union code of GEOS
  • Take advantage of the OpenMP extensions in clang/gcc modern versions

16 of 16

ST_Combine(Raster, Raster) → Raster and/or Table

  • Given 2 value integer rasters create a new raster with the raster value being the unique combination of the input rasters. An attribute table is created with the resulting value, the 2 inputs and their count as columns
  • like the ArcGIS raster tool
  • See also: 1 and 2

source and (c): ESRI