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).
You can use one of the following spatial function in each execution of SpatialUtils:
function
parameter in configuration is area
function
parameter in configuration is bbox
function
parameter in configuration is buffer
function
parameter in configuration is centroid
function
parameter in configuration is dissolve
function
parameter in configuration is intersection
isvalid
and isvalid_reason
function
parameter in configuration is isvalid
You can check for example https://postgis.net/workshops/postgis-intro/geometry_returning.html for further information about spatial functions.
SpatialUtils is distributed as a Docker image so you need to have Docker platform installed. You can get Docker here.
SpatialUtils is publicly available on Docker hub: https://hub.docker.com/r/clevermaps/spatial-utils
Use following command to get the image:
docker pull clevermaps/spatial-utils:latest |
There are few steps you need to do before running SpatialUtils:
Use following command to run SpatialUtils:
docker run -t -v /home/user/clevermaps/spatial-utils/:/workdir clevermaps/spatial-utils:latest --config /workdir/area_config.json |
! You need to change /home/user/clevermaps/spatial-utils to your directory path !
Here you can find examples of configuration files, each one is for different spatial function. Basicaly you need to define:
{ "function": "area", "in_csv": { "filename": "/workdir/data/zones.csv", "delimiter": ",", "wkt_column_name": "geom", "out_columns": [ "zone_id" ] }, "out_csv": { "filename": "/workdir/area_test.csv", "delimiter": "," }, "temp_directory": "/workdir" } |
{ "function": "bbox", "in_csv": { "filename": "/workdir/data/zones.csv", "delimiter": ",", "wkt_column_name": "wkt" }, "out_csv": { "filename": "/workdir/bbox_test.csv", "delimiter": "," }, "temp_directory": "/workdir" } |
{ "function": "buffer", "in_csv": { "filename": "/workdir/data/restaurants.csv", "delimiter": ",", "wkt_column_name": "geom", "out_columns": [ "id" ] }, "buffer": { "srs_wkid": 3857, "dist": 100 }, "out_csv": { "filename": "/workdir/buffer_test.csv", "delimiter": "," }, "temp_directory": "/workdir" } |
{ "function": "centroid", "in_csv": { "filename": "/workdir/data/zones.csv", "delimiter": ",", "wkt_column_name": "geom", "out_columns": [ "zone_id" ] }, "out_csv": { "filename": "/workdir/centroid_test.csv", "delimiter": "," }, "temp_directory": "/workdir" } |
{ "function": "dissolve", "in_csv": { "filename": "/workdir/data/zones.csv", "delimiter": ",", "wkt_column_name": "geom", "group_column_name": "restaurant_id", "out_columns": [ "restaurant_id" ] }, "simplify": true, "out_csv": { "filename": "/workdir/dissolve_test.csv", "delimiter": "," }, "temp_directory": "/workdir" } |
{ "function": "intersection", "in_left_csv": { "filename": "/workdir/orders.csv", "delimiter": ",", "wkt_column": "geom", "join_column": "restaurant_id", "out_columns": [ "order_id", "restaurant_id" ] }, "in_right_csv": { "filename": "/workdir/zones.csv", "delimiter": ",", "wkt_column": "geom", "join_column": "restaurant_id", "out_columns": [ "zone_id", "restaurant_id" ] }, "out_csv": { "filename": "/workdir/intersection_test.csv", "delimiter": ",", "intersection_geometry": false }, "temp_directory": "/workdir" } |
Additional info:
join_column
is optional. If specified than left and right table is firstly joined using this column and then an intersection is computed.{ "function": "isvalid", "in_csv": { "filename": "/workdir/data/zones.csv", "delimiter": ",", "wkt_column_name": "geom", "out_columns": [ "zone_id" ] }, "out_csv": { "filename": "/workdir/isvalid_test.csv", "delimiter": "," }, "temp_directory": "/workdir" } |