Using Geoscript Groovy

1,743 views

Published on

Using GeoScript Groovy

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,743
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
21
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Using Geoscript Groovy

  1. 1. Using GeoScript Groovy Jared Erickson CUGOS February 2014
  2. 2. What is GeoScript? • Geospatial Swiss Army Knife • One scripting API Many Languages
  3. 3. What is Groovy? • Yes, there is a language called Groovy • Dynamic JVM Language • Strong Java Integration • Closures, MetaProgramming, Scripting
  4. 4. Uses • Scripts • Shell • Console • GeoServer • uDig • Apps (GeoScript as a Library)
  5. 5. How do I install it? • Install Java • Install Groovy • Download GeoScript Groovy and put the bin directory on your path • https://github.com/jericks/geoscript-groovy/ releases
  6. 6. How do I learn it? http://geoscript.org http://geoscript.org/groovy/api/
  7. 7. Command line tools geoscript-groovy = run scripts geoscript-groovysh = interactive shell geoscript-groovyConsole = mini ide !
  8. 8. Inline Scripts (geoscript-groovy) geoscript-groovy -e "println new geoscript.layer.Shapefile('states.shp').toJSONString()" | mapfart ! geoscript-groovy -e "println new geoscript.layer.Shapefile('states.shp').bounds.geometry" ! geoscript-groovy -e "println new geoscript.layer.Shapefile('states.shp').count"
  9. 9. Inline Scripts (geoscript-groovy) geoscript-groovy -e "geoscript.render.Draw.draw(new geoscript.layer.Shapefile('states.shp'), out: 'image.png')" ! geoscript-groovy -e "new geoscript.layer.Shapefile('states.shp').eachFeature{ println it.geom.centroid}" | geom combine | geom buffer -d 1.5 ! echo "POINT (1 1)" | geom buffer -d 10 | geoscriptgroovy -e "println geoscript.geom.Geometry.fromWKT(System.in.text).kml"
  10. 10. Inline Scripts (geoscript-groovy) • One liners • Interact with other command line tools • geom, mapfart, ogr, ect… • Read Standard Input (System.in.text) • Write to Standard Output (println)
  11. 11. Scripts web.groovy (geoscript-groovy) 1 import com.sun.grizzly.http.embed.GrizzlyWebServer! 2 import com.sun.grizzly.http.servlet.ServletAdapter! 3 ! 4 @Grab(group='com.sun.grizzly', module='grizzly-servlet-webserver', version='1.9.10')! 5 def start() {! 6 println("Starting web server...")! 7 def server = new GrizzlyWebServer(8080, "web")! 8 def servlet = new ServletAdapter()! 9 servlet.contextPath = "/geoscript"! 10 servlet.servletInstance = new groovy.servlet.GroovyServlet()! 11 server.addGrizzlyAdapter(servlet, ["/geoscript"] as String[])! 12 server.start()! 13 }! 14 start()
  12. 12. Scripts (geoscript-groovy) web/buffer.groovy 1 2 3 4 5 import geoscript.geom.*! ! def geom = Geometry.fromWKT(request.getParameter("geom"))! def distance = request.getParameter("d") as double! println(geom.buffer(distance).wkt) web/draw.groovy 1 2 3 4 5 6 7 import geoscript.geom.*! import geoscript.viewer.Viewer! ! def geom = Geometry.fromWKT(request.getParameter("geom"))! def image = Viewer.drawToImage(geom, size: [400, 400])! response.contentType = "image/png"! javax.imageio.ImageIO.write(image, "png", response.outputStream)
  13. 13. Scripts (groovy) 1 2 3 4 5 6 7 @GrabResolver(name="opengeo", root="http://repo.opengeo.org")! @Grab("org.geoscript:geoscript-groovy:1.1")! import geoscript.geom.Point! ! p = new Point(1,1)! println p.geoJSON! • Use GeoScript without installing GeoScript • Just need Java and Groovy • @GrabResolver and @Grab can download dependencies
  14. 14. Scripts (geoscript-groovy) • Larger multiline scripts • Good for complex processing • Record your workflow • Can create command line tools, web services, or desktop apps • Use @Grab to get dependencies
  15. 15. Shell (geoscript-groovysh) Groovy Shell (2.1.9, JVM: 1.7.0_45) Type 'help' or 'h' for help. ------------------------------------------------------------------------------- groovy:000> import geoscript.workspace.PostGIS ===> [import geoscript.workspace.PostGIS] groovy:000> postgis = new PostGIS("states",user: "jericks") ===> geoscript.workspace.PostGIS@7840df80 groovy:000> postgis.layers ===> [states] groovy:000> states = postgis.get("states") ===> states groovy:000> states.bounds ===> (-124.731422,24.955967,-66.969849,49.371735,EPSG:4326) groovy:000> states.count ===> 49 groovy:000> states.eachFeature{ println it.geom.centroid } POINT (-89.20368628698026 40.06397152717181) POINT (-77.01592888814594 38.90248929357207) POINT (-75.50090936853277 38.994999876971384) POINT (-80.61424804312078 38.64111336139042)
  16. 16. Shell (geoscript-groovysh) groovy:000> states.schema.fields ===> [the_geom: MultiPolygon(EPSG:4326), STATE_NAME: String, STATE_FIPS: String, SUB_REGION: String, STATE_ABBR: String, LAND_KM: Double, WATER_KM: Double, PERSONS: Double, FAMILIES: Double, HOUSHOLD: Double, MALE: Double, FEMALE: Double, WORKERS: Double, DRVALONE: Double, CARPOOL: Double, PUBTRANS: Double, EMPLOYED: Double, UNEMPLOY: Double, SERVICE: Double, MANUAL: Double, P_MALE: Double, P_FEMALE: Double, SAMP_POP: Double] groovy:000> state_centroids = states.transform("state_centroids", [the_geom: "centroid(the_geom)", name: "STATE_NAME", abbreviation: "STATE_ABBR"]) ===> state_centroids groovy:000> state_centroids.count ===> 49 groovy:000> postgis ===> geoscript.workspace.PostGIS@7840df80 groovy:000> postgis.add(state_centroids) ===> state_centroids groovy:000> postgis.names ===> [state_centroids, states] groovy:000> postgis["state_centroids"].schema ===> state_centroids the_geom: Point(EPSG:4326), name: String, abbreviation: String
  17. 17. Shell (geoscript-groovysh) • Good for trying things out • Interact and explore all things geospatial
  18. 18. Console (geoscript-groovyConsole)
  19. 19. Console (geoscript-groovyConsole)
  20. 20. Console geoscript-groovyConsole
  21. 21. Console • Good for longer scripts (but not too long) • Excellent preview (View -> Visualize Script Results) • Use it when rendering images, maps, geometries
  22. 22. uDig
  23. 23. uDig • • • Done by Andrea Antonello and the UDig crew • http://prezi.com/wyopic4sinhg/geographic-scripting-inudig-user-friendly-desktop-internet-gis/ Part of the Spatial Toolbox http://udig.github.io/docs/user/getting_started/GeoScript %20Introduction.html • http://www.slideshare.net/moovida/04-geographic- scripting-in-udig-halfway-between-user-and-developer
  24. 24. GeoServer • Web services • Web Processing Services (WPS) • Filter Functions (used in SLDs for styling your maps) • Download groovy plugin from http:// ares.opengeo.org/geoserver/2.4.x/community-latest/ • Extract jars to geoserver/WEB-INF/lib • http://www.slideshare.net/JaredErickson/scriptinggeoserver
  25. 25. GeoServer $DATA_DIR/scripts/wps/buffer.groovy 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 import geoscript.geom.Geometry! ! title = 'Buffer'! description = 'Buffers a geometry'! ! inputs = [! geom: [name: 'geom', title: 'The geometry to buffer', type: Geometry.class],! distance: [name: 'distance', title: 'The buffer distance', type: Double.class]! ]! ! outputs = [! result: [name: 'result', title: 'The buffered geometry', type: Geometry.class]! ]! ! def run(input) {! [result: input.geom.buffer(input.distance as double)]! }!
  26. 26. GeoServer
  27. 27. As a library Geoscript is just another jar <repositories>! <repository>! <id>opengeo</id>! <name>OpenGeo Maven Repository</name>! <url>http://repo.opengeo.org</url>! <snapshots>! <enabled>true</enabled>! </snapshots>! </repository>! </repositories> <dependency>! <groupId>org.geoscript</groupId>! <artifactId>geoscript-groovy</artifactId>! <version>1.2</version>! </dependency>
  28. 28. Gradle - App $ mkdir geo-gradle $ cd geo-gradle/ $ touch build.gradle $ vi build.gradle $ mkdir -p src/main/groovy/org/jce/geo $ touch src/main/groovy/org/jce/geo/App.groovy $ vi src/main/groovy/org/jce/geo/App.groovy $ gradle build
  29. 29. Gradle - build.gradle 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 apply plugin: "groovy"! apply plugin: "application"! ! version = 0.1! mainClassName = "org.jce.geo.App"! ! repositories {! maven {! url "http://repo.opengeo.org"! }! maven {! url "http://download.osgeo.org/webdav/geotools/"! }! mavenCentral()! }! ! dependencies {! compile "org.codehaus.groovy:groovy-all:2.1.9"! compile "org.geoscript:geoscript-groovy:1.2"! }
  30. 30. Gradle - Code src/main/groovy/org/jce/geo/App.groovy 1 2 3 4 5 6 7 8 9 10 11 12 13 14 package org.jce.geo! ! import geoscript.geom.Geometry! import geoscript.proj.Projection! ! class App {! static void main(String[] args) {! Geometry geom = Geometry.fromString(args[0])! Projection fromProj = new Projection(args[1])! Projection toProj = new Projection(args[2])! Geometry transformedGeom = fromProj.transform(geom, toProj)! println transformedGeom.wkt! }! }
  31. 31. Using GeoScript Groovy Functionality • Geometry • Projection • Layer • Raster • Style • Render Usages • Scripts • Shell • Console • GeoServer • uDig • Apps
  32. 32. Thank you!

×