{"id":43816668,"url":"https://github.com/jericks/geo-shell","last_synced_at":"2026-02-06T00:34:58.679Z","repository":{"id":143378070,"uuid":"47480097","full_name":"jericks/geo-shell","owner":"jericks","description":"geo-shell is an interactive shell for geospatial analysis","archived":false,"fork":false,"pushed_at":"2023-11-05T22:11:15.000Z","size":122933,"stargazers_count":8,"open_issues_count":0,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-01-29T09:46:09.564Z","etag":null,"topics":["cli","geospatial","groovy","spring-shell"],"latest_commit_sha":null,"homepage":"https://jericks.github.io/geo-shell/","language":"Groovy","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jericks.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2015-12-06T01:56:55.000Z","updated_at":"2023-07-18T04:33:24.000Z","dependencies_parsed_at":null,"dependency_job_id":"9065f742-d6ef-45db-a26d-82476beb02c5","html_url":"https://github.com/jericks/geo-shell","commit_stats":{"total_commits":258,"total_committers":1,"mean_commits":258.0,"dds":0.0,"last_synced_commit":"a0faecd646b9439041f0d3e6e8a310ea47159f0b"},"previous_names":[],"tags_count":14,"template":false,"template_full_name":null,"purl":"pkg:github/jericks/geo-shell","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jericks%2Fgeo-shell","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jericks%2Fgeo-shell/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jericks%2Fgeo-shell/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jericks%2Fgeo-shell/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jericks","download_url":"https://codeload.github.com/jericks/geo-shell/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jericks%2Fgeo-shell/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29140315,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-05T23:14:48.546Z","status":"ssl_error","status_checked_at":"2026-02-05T23:14:35.724Z","response_time":65,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","geospatial","groovy","spring-shell"],"created_at":"2026-02-06T00:34:58.163Z","updated_at":"2026-02-06T00:34:58.671Z","avatar_url":"https://github.com/jericks.png","language":"Groovy","readme":".. image:: https://github.com/jericks/geo-shell/workflows/Maven%20Build/badge.svg\n    :target: https://github.com/jericks/geo-shell/actions\n\ngeo-shell\n---------\ngeo-shell is an interactive shell for geospatial analysis. \n\ngeo-shell support vector, raster, and tile datasets and includes a map module.\n\nBehind the scenes it uses GeoScript Groovy, GeoTools, and JTS.\n\n.. image:: docs/geoshell.png\n\nYou can use geo-shell interactively by typing **geo-shell** at the command line.\n\nOr you can write scripts and then execute them from the command line by typing **geo-shell --cmdfile script.txt**\n\nOr by using the **script --file script.txt** command within a geo-shell session.\n\nExample\n-------\n$ geo-shell\n\ngeo-shell\u003eworkspace open --name shps --params /Users/you/Projects/NaturalEarth/LargeScale/10m_cultural\n\n   Workspace shps opened!\n\ngeo-shell\u003eworkspace layers --name shps\n\n   10m_admin_0_breakaway_disputed_areas\n\n   10m_admin_1_states_provinces_lines_shp\n\n   10m_us_parks_line\n\n   10m_admin_0_scale_ranks_with_minor-islands\n\n   10m_admin_0_boundary_lines_maritime_indicator\n\n   10m_admin_0_boundary_breakaway_disputed_areas\n\ngeo-shell\u003elayer open --workspace shps --layer 10m_roads\n\nCommands\n--------\ngeo-shell is based on spring-shell and inherits several useful built in commands:\n\nexit = exit the shell\n\nquit = exit the shell\n\nhelp = list all commands and their usages\n\nhelp workspace open = list help for a specific command\n\n! = run os command string\n\ndate = displays local date and time\n\nscript = run a script\n\nsystem properties = show shell's properties\n\nversion = display current cli version\n\ndownload --url url --file file\n\nunzip --file file.zip --directory dir\n\nopen --file file\n\nworkspace\n---------\nworkspace open --name shps --params /Users/you/shps\n\nworkspce close --name shps\n\nworkspace list --name shps\n\nworkspace layers --name shps\n\nlayer \n-----\nlayer open --workspace shps --layer states --name us_states\n\nlayer close --name us_states\n\nlayer list\n\nlayer schema --name us_states\n\nlayer features --name us_states --filter \"NAME='Washington'\"\n\nlayer count --name us_states\n\nlayer remove --workspace shps --layer states\n\nlayer create --workspace shps --name points --fields \"the_geom=Point EPSG:4326|id=Int|name=String\"\n\nlayer add --name points --values \"the_geom=POINT (1 1)|id=1|name=Seattle\"\n\nlayer delete --name states --filter \"area \u003e 500\"\n\nlayer copy --input-name states --output-workspace layers.gpkg --output-name countries\n\nlayer style set --name us_states --style states.sld\n\nlayer style get --name us_states --style states.sld\n\nlayer addfields --input-name points --output-workspace directory --output-name points_xy --fields \"xcol=Double,ycol=Double\"\n\nlayer removefields --input-name points_xy --output-workspace mem --output-name points_no_xy --fields xcoord,ycoord\n\nlayer updatefield --name points_fields --field wkt --value 'return f.geom.wkt' --script true\n\nlayer addareafield --input-name us_states --output-workspace postgis --output-name states_area --area-fieldname area\n\nlayer addidfield --input-name us_states --output-workspace postgis --output-name states_area --id-fieldname id --start-value 1\n\nlayer addxyfields --input-name points --output-workspace postgis --output-name points_xy --x-fieldname xcoord --y-fieldname ycoord\n\nlayer buffer --input-name us_states --output-workspace postgis --output-name states_buffered --distance 10\n\nlayer centroid --input-name us_states --output-workspace postgis --output-name states_centroids\n\nlayer interiorpoint --input-name us_states --output-workspace postgis --output-name states_interiorpoints\n\nlayer random --output-workspace postgis --output-name points --number 100 --geometry 0,0,45,45\n\nlayer grid rowcol --output-workspace layers --output-name grid --rows 10 --columns 10 --geometry -180,-90,180,90\n\nlayer grid widthheight --output-workspace layers --output-name grid --width 20 --height 15 --geometry -180,-90,180,90\n\nlayer extent --input-name polygons --output-workspace memory --output-name extent\n\nlayer extents --input-name polygons --output-workspace memory --output-name extents\n\nlayer convexhull --input-name polygons --output-workspace memory --output-name convexhull\n\nlayer convexhulls --input-name polygons --output-workspace memory --output-name convexhulls\n\nlayer delaunay --input-name points --output-workspace mem --output-name delaunay\n\nlayer voronoi --input-name points --output-workspace mem --output-name voronoi\n\nlayer mincircle --input-name polygons --output-workspace memory --output-name mincircle\n\nlayer mincircles --input-name polygons --output-workspace memory --output-name mincircles\n\nlayer minrect --input-name polygons --output-workspace memory --output-name minrect\n\nlayer minrects --input-name polygons --output-workspace memory --output-name minrects\n\nlayer octagonalenvelope --input-name polygons --output-workspace memory --output-name octagonalenvelope\n\nlayer octagonalenvelopes --input-name polygons --output-workspace memory --output-name octagonalenvelopes\n\nlayer simplify --input-name polys --output-workspace directory --output-name simplified --algorithm tp --distance 120\n\nlayer densify --input-name polys --output-workspace postgis --output-name polys_densified --distance 10\n\nlayer transform --input-name points --output-workspace mem --output-name polys --transforms \"the_geom=buffer(the_geom, 2)|id=id*10\"\n\nlayer reproject --input-name states --output-workspace postgis --output-name states_merc --projection EPSG:3857\n\nlayer clip --input-name cities --clip-name state --output-workspace dir --output-name cities_states\n\nlayer union --input-name wetlands --other-name floodplain --output-workspace dir --output-name waterlogged\n\nlayer intersection --input-name parcels --other-name floodplain --output-workspace postgis --output-name parcels_floodplain\n\nlayer erase --input-name parcels --other-name zones --output-workspace shps --output-name parcel_zones\n\nlayer identity --input-name parcels --other-name zones --output-workspace shps --output-name parcel_zones_identity\n\nlayer update --input-name a:a --other-name b:b --output-workspace mem --output-name a_b_update\n\nlayer symdifference --input-name a:a --other-name b:b --output-workspace mem --output-name a_b_symdifference\n\nlayer dissolve --input-name states --output-workspace mem --output-name regions --field SUB_REGION\n\nlayer points along lines --input-name lines:lines --output-workspace mem --output-name points --distance 0.0001\n\nlayer graticule rectangle --workspace mem --name rectangles --bounds -180,-90,180,90 --width 20 --height 10\n\nlayer graticule square --workspace mem --name squares --bounds -180,-90,180,90 --length 10\n\nlayer graticule oval --workspace mem --name ovals --bounds -180,-90,180,90 --size 10\n\nlayer graticule hexagon --workspace mem --name hexagons --bounds -180,-90,180,90 --length 10\n\ntile\n----\ntile open --name states --params states.mbtiles\n\ntile close --name states\n\ntile list\n\ntile info --name states\n\ntile generate --name states --map states_map --start 0 --end 4\n\ntile stitch raster --name osm --format osm_bounds --raster osm_bounds --bounds \"-102.360992,47.126213,-100.390320,47.819610,EPSG:4326\"\n\ntile vector grid --name osm --workspace gpkg --layer gridz --z 1\n\ntile tiles --name osm --bounds \"2315277.538707974,4356146.199006655,2534193.2172859586,4470343.227121928\" --z 10\n\ntile delete --name osm --z 1\n\nformat\n------\nformat open --name earth --input earth.tif\n\nformat close --name earth\n\nformat list\n\nformat rasters --name earth\n\nraster\n------\nraster open --format earth --raster earth\n\nraster close --name earth\n\nraster list\n\nraster info --name earth\n\nraster value --name earth --x 10 --y 15 --type pixel\n\nraster crop --name earth --output-format cropped_earth --output-name cropped_earth --geometry 0,0,45,45\n\nraster reproject --name earth --output-format earth_reprojected --output-name earth-reprojected --projection EPSG:4326\n\nraster style set --name earth --style earth.sld\n\nraster style get --name earth --style earth.sld\n\nraster contour --name raster --output-workspace mem --output-name contours --band 0 --levels 74,100,120,140,160,180,200,220,240,252\n\nraster envelope --name earth --output-workspace earth_outline --output-name earth_outline\n\nraster reclassify --name raster --output-format reclassified --output-name reclassified --band 0 --ranges \"0-185=1,185-200=2,200-255=3\"\n\nraster scale --name raster --output-format scaled --output-name scaled --x 2 --y 3 --interpolation bicubic\n\nraster add constant --name raster --output-format raster10 --output-name raster10 --values 10\n\nraster add raster --name1 topo --name2 deposits --output-format topo_new --output-name topo_new\n\nraster subtract constant --name raster --output-format rasterMinus10 --output-name rasterMinus10 --values 10\n\nraster subtract raster --name1 erosion --name2 topo --output-format topo_new --output-name topo_new\n\nraster multiply constant --name raster --output-format rasterTimes10 --output-name rasterTimes10 --values 10\n\nraster multiply raster --name1 topo --name2 height --output-format topo_new --output-name topo_new\n\nraster divide constant --name raster --output-format rasterDividedBy2 --output-name rasterDividedBy2 --values 2\n\nraster divide raster --name1 topo --name2 reduce --output-format topo_new --output-name topo_new\n\nraster stylize --name raster --output-format raster_stylized --output-name raster_stylized\n\nraster shadedrelief --name raster --output-format shaded --output-name shaded --scale 1.0 --altitude 25.0 --azimuth 35.0\n\nraster mosaic --name1 raster1 --name2 raster2 --output-format mosaic --output-name mosaic\n\nraster polygon --name high --output-workspace layers --output-name grid\n\nstyle\n-----\nstyle create --params \"stroke=navy stroke=width=5\" --file earth_outline.sld\n\nstyle vector default --layer naturalearth:countries --color #a5bfdd --file ocean_blue.sld\n\nstyle vector uniquevalues --layer naturalearth:states --field NAME_1  --colors random --file states_name.sld\n\nstyle vector gradient --layer naturalearth:states --field population --number 8 --colors blues --file states_pop.sld\n\nstyle raster default --raster raster --opacity 0.75 --file raster.sld\n\nstyle raster colormap --raster raster --values \"10=red,50=blue,100=wheat,250=white\" --type ramp --opacity 0.75 --file raster_colormap.sld\n\nstyle raster palette colormap --min 1 --max 50 --palette MutedTerrain --number 20 --file terrain.sld\n\nstyle repository save --type h2 --options file=styles_county.db --layerName roads --styleName roads --styleFile examples/roads.sld\n\nstyle repository get --type nested-directory --options file=examples/county_styles --layerName roads --styleName roads\n\nstyle repository list --type directory --options file=examples/styles\n\nstyle repository delete --type directory --options file=examples/styles --layerName parcels --styleName parcels\n\nstyle repository copy --inputType sqlite --inputOptions file=examples/my-styles.db --outputType h2 --outputOptions file=examples/h2-styles.db\n\nmap\n---\nmap open --name state_map\n\nmap close --name state_map\n\nmap list\n\nmap layers --name state_map\n\nmap add layer --name state_map --layer states\n\nmap add raster --name state_map --raster usa_dem\n\nmap add tile --name state_map --tile osm\n\nmap remove layer --name state_map --layer states\n\nmap reorder --name state_map --layer states --order first | last | up | down | 1 | 2\n\nmap draw --name state_map --bounds 0,0,100,100\n\nmap display --name state_map --bounds 0,0,100,100\n\nLicense\n-------\ngeo-shell is open source and licensed under the MIT License.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjericks%2Fgeo-shell","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjericks%2Fgeo-shell","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjericks%2Fgeo-shell/lists"}