This tool provides basic spatial functions for processing a CSV files with WKT geometries. You can calculate interesection, buffer, bounding box, area, dissolve, difference and so on. It is build on top of Spatialite and thanks to it has very low memory footprint and it is even ready for large datasets (millions of rows). This tool could be handy if you dont have PostGIS or similar tools available.

SpatialUtils is CSV based (input and output). There are some requirements for geometries:

If your data is in other format than CSV with WKT (e.g. Shapefile, GeoJSON), you can convert it using for example ogr2ogr utility (https://gdal.org/drivers/vector/csv.html).

Spatial functions

You can use one of the following spatial function in each execution of SpatialUtils:


You can check for example https://postgis.net/workshops/postgis-intro/geometry_returning.html for further information about spatial functions.

Installation

SpatialUtils is available as Keboola Connection Component and it is available to registered Keboola users. You have to be logged in your Keboola project (https://connection.keboola.com) to use it. To open SpatialUtils just go to Applications, choose New Application and write "SpatialUtils" into the search bar. Then choose CleverMaps SpatialUtils

Configuration

With the SpatialUtils application opened, choose New Configuration and fill in the form.

Firstly, you need to specify input and output mappings.

Secondly you need to pass a configuration JSON into SpatialUtils. Please check the examples below to get the idea how the configuration file should look.


{
  "function": "area",
  "in_csv": {
    "wkt_column_name": "geom",
    "out_columns": [
      "zone_id"
    ]
  }
}


{
    "function": "bbox",
    "in_csv": {
        "wkt_column_name": "wkt"
    }
}


{
  "function": "buffer",
  "in_csv": {
    "wkt_column_name": "wkt",
    "out_columns": [
      "id"
    ]
  },
  "buffer": {
    "srs_wkid": 3857,
    "dist": 100
  }
}


{
  "function": "centroid",
  "in_csv": {
    "wkt_column_name": "geom",
    "out_columns": [
      "zone_id"
    ]
  }
}


{
  "function": "union",
  "in_csv": {
    "wkt_column_name": "geom",
    "group_column_name": "restaurant_id",
    "out_columns": [
      "restaurant_id"
    ]
  },
  "simplify": true
}


{
  "function": "intersection",
  "in_left_csv": {
    "filename": "/workdir/orders.csv",
    "wkt_column": "geom",
    "join_column": "restaurant_id",
    "out_columns": [
      "order_id",
      "restaurant_id"
    ]
  },
  "in_right_csv": {
    "filename": "/workdir/zones.csv",
    "wkt_column": "geom",
    "join_column": "zone_id",
    "out_columns": [
      "zone_id",
      "restaurant_id"
    ]
  }
}

Additional info:


{
  "function": "isvalid",
  "in_csv": {
    "wkt_column_name": "geom",
    "out_columns": [
      "zone_id"
    ]
  }
}