.. image:: https://github.com/geoscript/geoscript-groovy/workflows/Maven%20Build/badge.svg :target: https://github.com/geoscript/geoscript-groovy/actions GeoScript Groovy ================ GeoScript Groovy is the `Groovy `_ implementation of `GeoScript `_. GeoScript is a geospatial scripting API for the JVM that contains one API and four implementations (`Python `_, `JavaScript `_, `Scala `_, and `Groovy `_). GeoScript is built on the shoulders of giants and essentially wraps the `Java Topology Suite `_ and the `GeoTools `_ libraries. GeoScript provides several modules that includes geometry, projection, features, layers, workspaces, styling and rendering. Build ----- Building GeoScript Groovy is quite easy. You will need to have git, Java, Maven, and Ant installed. Use git to clone the repository:: git clone git://github.com/jericks/geoscript-groovy.git Use maven to build, test, and package:: mvn clean install The distribution can be found in target/geoscript-groovy-${version}-app/geoscript-groovy-${version}. Use --- To use GeoScript Groovy you need Java and Groovy installed and on your PATH. Next, download the `latest stable release `_ , the `latest in development build `_, or build the code yourself. Then put the GeoScript Groovy bin directory on your PATH. You are now ready to use GeoScript Groovy! GeoScript Groovy has three commands: 1. geoscript-groovy (which can run Groovy files) 2. geoscript-groovysh (which starts a REPL shell) 3. geoscript-groovyConsole (which starts a graphical editor/mini IDE) Buffering a Point:: import geoscript.geom.Point def point = new Point(0,0) def poly = point.buffer(10) println(poly.wkt) Project a Geomemtry:: import geoscript.geom.Point import geoscript.proj.Projection def p1 = new Point(-111.0, 45.7) def p2 = Projection.transform(p1, "EPSG:4326", "EPSG:26912") Read a Shapefile:: import geoscript.layer.Shapefile import geoscript.geom.Bounds def shp = new Shapefile("states.shp") int count = shp.count Bounds bounds = shp.bounds shp.features.each {f-> println(f) } Drawing a Shapefile:: import geoscript.layer.Shapefile import geoscript.style.Stroke import static geoscript.render.Draw.draw def shp = new Shapefile("states.shp") shp.style = new Stroke("#999999", 0.1) draw(shp) Reading a Raster:: import geoscript.layer.GeoTIFF def format = new GeoTIFF(new File("raster.tif")) def raster = format.read() println "Format = ${raster.format}" println "Proj EPSG = ${raster.proj.id}" println "Proj WKT = ${raster.proj.wkt}" println "Bounds = ${raster.bounds.geometry.wkt}" println "Size = ${raster.size}" println "Block Size = ${raster.blockSize}" println "Pixel Size = ${raster.pixelSize}" println "Band:" raster.bands.eachWithIndex{b,i -> println " ${i}). ${b}" } Generating tiles:: import geoscript.layer.* import geoscript.style.* Shapefile shp = new Shapefile(new File("states.shp")) shp.style = new Fill("wheat") + new Stroke("navy", 0.1) File file = new File("states.gpkg") GeoPackage gpkg = new GeoPackage(file, "states", Pyramid.createGlobalMercatorPyramid(origin: Pyramid.Origin.TOP_LEFT)) TileRenderer renderer = new ImageTileRenderer(gpkg, shp) TileGenerator generator = new TileGenerator(verbose: true) generator.generate(gpkg, renderer, 0, 4) See the `web site `_, the `groovy docs `_ or the `cook book `_ or the `examples directory `_ for more examples. You can also use GeoScript Groovy as a library. If you use Maven you will need to add the OSGeo Maven Repository:: osgeo-releases OSGeo Nexus Release Repository https://repo.osgeo.org/repository/release/ false true and then include the GeoScript Groovy dependency:: org.geoscript geoscript-groovy 1.22.0 Docker ------ If you want to give GeoScript Groovy a spin with Docker use the following image:: https://hub.docker.com/repository/docker/jarederickson/geoscript-groovy To run the image use:: docker image build -t jarederickson/geoscript-groovy:latest . To build the image locally:: docker run -it --rm --name geoscript-groovy jarederickson/geoscript-groovy:latest Versions -------- +-----------+----------+-----------+--------+----------+ | GeoScript | GeoTools | GeoServer | JTS | Groovy | +-----------+----------+-----------+--------+----------+ | 1.22 | 30 | 2.24 | 1.19.0 | 4.0.15 | +-----------+----------+-----------+--------+----------+ | 1.21 | 29 | 2.23 | 1.19.0 | 4.0.13 | +-----------+----------+-----------+--------+----------+ | 1.20 | 28 | 2.22 | 1.19.0 | 3.0.13 | +-----------+----------+-----------+--------+----------+ | 1.19 | 27 | 2.21 | 1.18.2 | 3.0.11 | +-----------+----------+-----------+--------+----------+ | 1.18 | 26 | 2.20 | 1.18.2 | 3.0.9 | +-----------+----------+-----------+--------+----------+ | 1.17 | 25 | 2.19 | 1.18.1 | 3.0.7 | +-----------+----------+-----------+--------+----------+ | 1.16 | 24 | 2.18 | 1.17.1 | 3.0.5 | +-----------+----------+-----------+--------+----------+ | 1.15 | 23 | 2.17 | 1.16.1 | 3.0.3 | +-----------+----------+-----------+--------+----------+ | 1.14 | 22 | 2.16 | 1.16.1 | 2.5.8 | +-----------+----------+-----------+--------+----------+ | 1.13 | 21 | 2.15 | 1.16.0 | 2.5.6 | +-----------+----------+-----------+--------+----------+ | 1.12 | 20 | 2.14 | 1.16.0 | 2.4.15 | +-----------+----------+-----------+--------+----------+ | 1.11 | 19 | 2.13 | 1.14 | 2.4.14 | +-----------+----------+-----------+--------+----------+ | 1.10 | 18 | 2.12 | 1.13 | 2.4.12 | +-----------+----------+-----------+--------+----------+ | 1.9 | 17 | 2.11 | 1.13 | 2.4.10 | +-----------+----------+-----------+--------+----------+ | 1.8 | 16 | 2.10 | 1.13 | 2.4.7 | +-----------+----------+-----------+--------+----------+ | 1.7 | 15 | 2.9 | 1.13 | 2.4.6 | +-----------+----------+-----------+--------+----------+ | 1.6 | 14 | 2.8 | 1.13 | 2.4.5 | +-----------+----------+-----------+--------+----------+ | 1.5 | 13 | 2.7 | 1.13 | 2.3.10 | +-----------+----------+-----------+--------+----------+ | 1.4 | 12 | 2.6 | 1.13 | 2.2.2 | +-----------+----------+-----------+--------+----------+ | 1.3 | 11 | 2.5 | 1.13 | 2.1.9 | +-----------+----------+-----------+--------+----------+ | 1.2 | 10 | 2.4 | 1.13 | 2.1.6 | +-----------+----------+-----------+--------+----------+ | 1.1 | 9 | 2.3 | 1.13 | 1.8.9 | +-----------+----------+-----------+--------+----------+ | 1.0 | 8 | 2.2 | 1.12 | 1.8.8 | +-----------+----------+-----------+--------+----------+ API Groovy Docs --------------- `1.22.0 `_ `1.21.0 `_ `1.20.0 `_ `1.19.0 `_ `1.18.0 `_ `1.17.0 `_ `1.16.0 `_ `1.15.0 `_ `1.14.0 `_ `1.13.0 `_ `1.12.0 `_ `1.11.0 `_ `1.10.0 `_ `1.9.0 `_ `1.8.0 `_ Projects using GeoScript Groovy ------------------------------- `geoc: A geospatial command line application `_ `geo-shell: An interactive geospatial shell `_ `mbtiles server: Restful web services for mbtiles `_ `geopackage server: Restful web services for geopackage `_ `geoscript groovy jupyter kernel `_ Presentations ------------- `GeoScript: The GeoSpatial Swiss Army Knife (FOSS4G 2014) `_ `Using GeoScript Groovy (CUGOS 2014) `_ `Rendering Maps in GeoScript (CUGOS 2012) `_ `Scripting GeoServer (CUGOS 2012) `_ `GeoScript: Spatial Capabilities for Scripting Languages (FOSS4G 2011) `_ Build Servers ------------- https://github.com/geoscript/geoscript-groovy/actions https://build.geoserver.org/job/geoscript-groovy/ License ------- GeoScript Groovy is open source and licensed under the MIT license.