SlideShare ist ein Scribd-Unternehmen logo
1 von 32
Downloaden Sie, um offline zu lesen
Using GeoScript
Groovy
Jared Erickson	

CUGOS February 2014
What is GeoScript?
• Geospatial Swiss Army Knife	

• One scripting API Many Languages
What is Groovy?
• Yes, there is a language called Groovy 	

• Dynamic JVM Language	

• Strong Java Integration	

• Closures, MetaProgramming, Scripting
Uses
• Scripts	

• Shell	

• Console	

• GeoServer	

• uDig	

• Apps (GeoScript as a Library)
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
How do I learn it?

http://geoscript.org
http://geoscript.org/groovy/api/
Command line tools
geoscript-groovy = run scripts	

geoscript-groovysh = interactive shell	

geoscript-groovyConsole = mini ide	

!
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"
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"
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)
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()
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)
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
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
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)
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
Shell	


(geoscript-groovysh)

• Good for trying things out	

• Interact and explore all things geospatial
Console	


(geoscript-groovyConsole)
Console 	


(geoscript-groovyConsole)
Console 	


geoscript-groovyConsole
Console
• Good for longer scripts (but not too long)	

• Excellent preview (View -> Visualize Script
Results)	


• Use it when rendering images, maps,
geometries
uDig
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
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
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)]!
}!
GeoServer
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>
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
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"!
}
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!
}!
}
Using GeoScript Groovy
Functionality

• Geometry	

• Projection	

• Layer	

• Raster	

• Style	

• Render	


Usages

• Scripts	

• Shell	

• Console	

• GeoServer	

• uDig	

• Apps
Thank you!

Weitere ähnliche Inhalte

Was ist angesagt?

[Image Results] Java Build Tools: Part 2 - A Decision Maker's Guide Compariso...
[Image Results] Java Build Tools: Part 2 - A Decision Maker's Guide Compariso...[Image Results] Java Build Tools: Part 2 - A Decision Maker's Guide Compariso...
[Image Results] Java Build Tools: Part 2 - A Decision Maker's Guide Compariso...ZeroTurnaround
 
Continuous delivery w projekcie open source - Marcin Stachniuk
Continuous delivery w projekcie open source - Marcin StachniukContinuous delivery w projekcie open source - Marcin Stachniuk
Continuous delivery w projekcie open source - Marcin StachniukMarcinStachniuk
 
Devfest 2021' - Artifact Registry Introduction (Taipei)
Devfest 2021' - Artifact Registry Introduction (Taipei)Devfest 2021' - Artifact Registry Introduction (Taipei)
Devfest 2021' - Artifact Registry Introduction (Taipei)KAI CHU CHUNG
 
Lecture 8 - Qooxdoo - Rap Course At The University Of Szeged
Lecture 8 - Qooxdoo - Rap Course At The University Of SzegedLecture 8 - Qooxdoo - Rap Course At The University Of Szeged
Lecture 8 - Qooxdoo - Rap Course At The University Of SzegedFabian Jakobs
 
Into The Box 2018 Going live with commandbox and docker
Into The Box 2018 Going live with commandbox and dockerInto The Box 2018 Going live with commandbox and docker
Into The Box 2018 Going live with commandbox and dockerOrtus Solutions, Corp
 
Universal JS Web Applications with React - Luciano Mammino - Codemotion Rome ...
Universal JS Web Applications with React - Luciano Mammino - Codemotion Rome ...Universal JS Web Applications with React - Luciano Mammino - Codemotion Rome ...
Universal JS Web Applications with React - Luciano Mammino - Codemotion Rome ...Luciano Mammino
 
Build microservice with gRPC in golang
Build microservice with gRPC in golangBuild microservice with gRPC in golang
Build microservice with gRPC in golangTing-Li Chou
 
LISA Qooxdoo Tutorial Handouts
LISA Qooxdoo Tutorial HandoutsLISA Qooxdoo Tutorial Handouts
LISA Qooxdoo Tutorial HandoutsTobias Oetiker
 
Gradle: The Build system you have been waiting for
Gradle: The Build system you have been waiting forGradle: The Build system you have been waiting for
Gradle: The Build system you have been waiting forCorneil du Plessis
 
Grunt & Front-end Workflow
Grunt & Front-end WorkflowGrunt & Front-end Workflow
Grunt & Front-end WorkflowPagepro
 
Openshift operator insight
Openshift operator insightOpenshift operator insight
Openshift operator insightRyan ZhangCheng
 
以 Ktor 快速打造 Web 應用
以 Ktor 快速打造 Web 應用以 Ktor 快速打造 Web 應用
以 Ktor 快速打造 Web 應用Shengyou Fan
 
Google Web Toolkitのすすめ
Google Web ToolkitのすすめGoogle Web Toolkitのすすめ
Google Web ToolkitのすすめKaisei Hamamoto
 
Meetup - retour sur la DrupalCon Dublin 2016
Meetup - retour sur la DrupalCon Dublin 2016Meetup - retour sur la DrupalCon Dublin 2016
Meetup - retour sur la DrupalCon Dublin 2016Yann Jajkiewicz
 

Was ist angesagt? (19)

Tp web
Tp webTp web
Tp web
 
[Image Results] Java Build Tools: Part 2 - A Decision Maker's Guide Compariso...
[Image Results] Java Build Tools: Part 2 - A Decision Maker's Guide Compariso...[Image Results] Java Build Tools: Part 2 - A Decision Maker's Guide Compariso...
[Image Results] Java Build Tools: Part 2 - A Decision Maker's Guide Compariso...
 
Rest, sockets em golang
Rest, sockets em golangRest, sockets em golang
Rest, sockets em golang
 
Continuous delivery w projekcie open source - Marcin Stachniuk
Continuous delivery w projekcie open source - Marcin StachniukContinuous delivery w projekcie open source - Marcin Stachniuk
Continuous delivery w projekcie open source - Marcin Stachniuk
 
Devfest 2021' - Artifact Registry Introduction (Taipei)
Devfest 2021' - Artifact Registry Introduction (Taipei)Devfest 2021' - Artifact Registry Introduction (Taipei)
Devfest 2021' - Artifact Registry Introduction (Taipei)
 
Lecture 8 - Qooxdoo - Rap Course At The University Of Szeged
Lecture 8 - Qooxdoo - Rap Course At The University Of SzegedLecture 8 - Qooxdoo - Rap Course At The University Of Szeged
Lecture 8 - Qooxdoo - Rap Course At The University Of Szeged
 
Into The Box 2018 Going live with commandbox and docker
Into The Box 2018 Going live with commandbox and dockerInto The Box 2018 Going live with commandbox and docker
Into The Box 2018 Going live with commandbox and docker
 
Universal JS Web Applications with React - Luciano Mammino - Codemotion Rome ...
Universal JS Web Applications with React - Luciano Mammino - Codemotion Rome ...Universal JS Web Applications with React - Luciano Mammino - Codemotion Rome ...
Universal JS Web Applications with React - Luciano Mammino - Codemotion Rome ...
 
Build microservice with gRPC in golang
Build microservice with gRPC in golangBuild microservice with gRPC in golang
Build microservice with gRPC in golang
 
LISA Qooxdoo Tutorial Handouts
LISA Qooxdoo Tutorial HandoutsLISA Qooxdoo Tutorial Handouts
LISA Qooxdoo Tutorial Handouts
 
Gradle: The Build system you have been waiting for
Gradle: The Build system you have been waiting forGradle: The Build system you have been waiting for
Gradle: The Build system you have been waiting for
 
Grunt & Front-end Workflow
Grunt & Front-end WorkflowGrunt & Front-end Workflow
Grunt & Front-end Workflow
 
Openshift operator insight
Openshift operator insightOpenshift operator insight
Openshift operator insight
 
以 Ktor 快速打造 Web 應用
以 Ktor 快速打造 Web 應用以 Ktor 快速打造 Web 應用
以 Ktor 快速打造 Web 應用
 
Paris container day june17
Paris container day   june17Paris container day   june17
Paris container day june17
 
Web2.0 with jQuery in English
Web2.0 with jQuery in EnglishWeb2.0 with jQuery in English
Web2.0 with jQuery in English
 
Google Web Toolkitのすすめ
Google Web ToolkitのすすめGoogle Web Toolkitのすすめ
Google Web Toolkitのすすめ
 
Meetup - retour sur la DrupalCon Dublin 2016
Meetup - retour sur la DrupalCon Dublin 2016Meetup - retour sur la DrupalCon Dublin 2016
Meetup - retour sur la DrupalCon Dublin 2016
 
Gradle Introduction
Gradle IntroductionGradle Introduction
Gradle Introduction
 

Ähnlich wie Using Geoscript Groovy

Google App Engine Java, Groovy and Gaelyk
Google App Engine Java, Groovy and GaelykGoogle App Engine Java, Groovy and Gaelyk
Google App Engine Java, Groovy and GaelykGuillaume Laforge
 
Saving Money with Open Source GIS
Saving Money with Open Source GISSaving Money with Open Source GIS
Saving Money with Open Source GISbryanluman
 
Building Android games using LibGDX
Building Android games using LibGDXBuilding Android games using LibGDX
Building Android games using LibGDXJussi Pohjolainen
 
Intro to Building Android Games using libGDX
Intro to Building Android Games using libGDXIntro to Building Android Games using libGDX
Intro to Building Android Games using libGDXJussi Pohjolainen
 
GIS User to Web-GIS Developer Journey
GIS User to Web-GIS Developer JourneyGIS User to Web-GIS Developer Journey
GIS User to Web-GIS Developer JourneyTek Kshetri
 
Of Nodes and Maps (Web Mapping with Drupal - Part II)
Of Nodes and Maps (Web Mapping with Drupal - Part II)Of Nodes and Maps (Web Mapping with Drupal - Part II)
Of Nodes and Maps (Web Mapping with Drupal - Part II)Ranel Padon
 
New Tools for Visualization in JavaScript - Sept. 2011
New Tools for Visualization in JavaScript - Sept. 2011New Tools for Visualization in JavaScript - Sept. 2011
New Tools for Visualization in JavaScript - Sept. 2011philogb
 
DevQuiz 2011 の模範解答 Android編
DevQuiz 2011 の模範解答 Android編DevQuiz 2011 の模範解答 Android編
DevQuiz 2011 の模範解答 Android編Makoto Yamazaki
 
Device系APIの全体図
Device系APIの全体図Device系APIの全体図
Device系APIの全体図Kensaku Komatsu
 
Play Framework on Google App Engine
Play Framework on Google App EnginePlay Framework on Google App Engine
Play Framework on Google App EngineFred Lin
 
Geo script opengeo spring 2013
Geo script opengeo spring 2013Geo script opengeo spring 2013
Geo script opengeo spring 2013Ilya Rosenfeld
 
NLUUG Spring 2012 - OpenShift Primer
NLUUG Spring 2012 - OpenShift PrimerNLUUG Spring 2012 - OpenShift Primer
NLUUG Spring 2012 - OpenShift PrimerEric D. Schabell
 
OpenShift State of the Union, brought to you by JBoss
OpenShift State of the Union, brought to you by JBossOpenShift State of the Union, brought to you by JBoss
OpenShift State of the Union, brought to you by JBossEric D. Schabell
 
PyWPS at COST WPS Workshop
PyWPS at COST WPS WorkshopPyWPS at COST WPS Workshop
PyWPS at COST WPS WorkshopJachym Cepicky
 

Ähnlich wie Using Geoscript Groovy (20)

Google App Engine Java, Groovy and Gaelyk
Google App Engine Java, Groovy and GaelykGoogle App Engine Java, Groovy and Gaelyk
Google App Engine Java, Groovy and Gaelyk
 
Saving Money with Open Source GIS
Saving Money with Open Source GISSaving Money with Open Source GIS
Saving Money with Open Source GIS
 
Building Android games using LibGDX
Building Android games using LibGDXBuilding Android games using LibGDX
Building Android games using LibGDX
 
Intro to Building Android Games using libGDX
Intro to Building Android Games using libGDXIntro to Building Android Games using libGDX
Intro to Building Android Games using libGDX
 
GIS User to Web-GIS Developer Journey
GIS User to Web-GIS Developer JourneyGIS User to Web-GIS Developer Journey
GIS User to Web-GIS Developer Journey
 
Mobile native-hacks
Mobile native-hacksMobile native-hacks
Mobile native-hacks
 
React nativebeginner1
React nativebeginner1React nativebeginner1
React nativebeginner1
 
Of Nodes and Maps (Web Mapping with Drupal - Part II)
Of Nodes and Maps (Web Mapping with Drupal - Part II)Of Nodes and Maps (Web Mapping with Drupal - Part II)
Of Nodes and Maps (Web Mapping with Drupal - Part II)
 
GIS_Day_2016
GIS_Day_2016GIS_Day_2016
GIS_Day_2016
 
New Tools for Visualization in JavaScript - Sept. 2011
New Tools for Visualization in JavaScript - Sept. 2011New Tools for Visualization in JavaScript - Sept. 2011
New Tools for Visualization in JavaScript - Sept. 2011
 
GAE_20100112
GAE_20100112GAE_20100112
GAE_20100112
 
DevQuiz 2011 の模範解答 Android編
DevQuiz 2011 の模範解答 Android編DevQuiz 2011 の模範解答 Android編
DevQuiz 2011 の模範解答 Android編
 
Device系APIの全体図
Device系APIの全体図Device系APIの全体図
Device系APIの全体図
 
Play Framework on Google App Engine
Play Framework on Google App EnginePlay Framework on Google App Engine
Play Framework on Google App Engine
 
Geo script opengeo spring 2013
Geo script opengeo spring 2013Geo script opengeo spring 2013
Geo script opengeo spring 2013
 
JavaScript on the Desktop
JavaScript on the DesktopJavaScript on the Desktop
JavaScript on the Desktop
 
NLUUG Spring 2012 - OpenShift Primer
NLUUG Spring 2012 - OpenShift PrimerNLUUG Spring 2012 - OpenShift Primer
NLUUG Spring 2012 - OpenShift Primer
 
Grooscript gr8conf 2015
Grooscript gr8conf 2015Grooscript gr8conf 2015
Grooscript gr8conf 2015
 
OpenShift State of the Union, brought to you by JBoss
OpenShift State of the Union, brought to you by JBossOpenShift State of the Union, brought to you by JBoss
OpenShift State of the Union, brought to you by JBoss
 
PyWPS at COST WPS Workshop
PyWPS at COST WPS WorkshopPyWPS at COST WPS Workshop
PyWPS at COST WPS Workshop
 

Kürzlich hochgeladen

Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesBoston Institute of Analytics
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdflior mazor
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 

Kürzlich hochgeladen (20)

Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 

Using Geoscript Groovy

  • 2. What is GeoScript? • Geospatial Swiss Army Knife • One scripting API Many Languages
  • 3. What is Groovy? • Yes, there is a language called Groovy • Dynamic JVM Language • Strong Java Integration • Closures, MetaProgramming, Scripting
  • 4. Uses • Scripts • Shell • Console • GeoServer • uDig • Apps (GeoScript as a Library)
  • 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. How do I learn it? http://geoscript.org http://geoscript.org/groovy/api/
  • 7. Command line tools geoscript-groovy = run scripts geoscript-groovysh = interactive shell geoscript-groovyConsole = mini ide !
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. Shell (geoscript-groovysh) • Good for trying things out • Interact and explore all things geospatial
  • 21. Console • Good for longer scripts (but not too long) • Excellent preview (View -> Visualize Script Results) • Use it when rendering images, maps, geometries
  • 22. uDig
  • 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. 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. 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)]! }!
  • 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. 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. 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. 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. Using GeoScript Groovy Functionality • Geometry • Projection • Layer • Raster • Style • Render Usages • Scripts • Shell • Console • GeoServer • uDig • Apps