locationtech projects
DESCRIPTION
LocationTech is an Eclipse Foundation industry working group for location aware technologies. This presentation introduces LocationTech, looks at what it means for our industry and the participating projects. Libraries: JTS Topology Suite is the rocket science of GIS providing an implementation of Geometry. Mobile Map Tools provides a C++ foundation that is translated into Java and Javascript for maps on iOS, Andriod and WebGL. GeoMesa is a distributed key/value store based on Accumulo. Spatial4j integrates with JTS to provide Geometry on curved surface. Process: GeoTrellis real-time distributed processing used scala, akka and spark. GeoJinni mixes spatial data/indexing with Hadoop. Applications: GEOFF offers OpenLayers 3 as a SWT component. GeoGit distributed revision control for feature data. GeoScipt brings spatial data to Groovy, JavaScript, Python and Scala. uDig offers an eclipse based desktop GIS solution. Attend this presentation if want to know what LocationTech is about, are interested in these projects or curious about what projects will be next.TRANSCRIPT
LocationTechProjects
IntroductionGetting the party started
Jody GarnettSenior Software Engineer
BoundlessProjects:GeoTools, GeoServer,uDigEclipse FoundationLocationTech PSC, Technology ProjectOSGeoIncubation Chair, GeoTools Officer
Welcome
Andrew RossDirector, Ecosystem Dev.
Eclipse FoundationGroupsLocationTech working groupScience working groupLong Term Support (LTS) programCommon Build Infrastructure programBusiness DevelopmentMembership Services
LocationTech
“LocationTech is a working group developing advanced location aware technologies.”
Members
Strategic
Participating
Guest
Libraries
Martin DavisSenior Technical Architect
Vivid Solutions Inc.Projects:JTS, JEQL, JCS, Proj4J, OpenJUMP GISOSGeoCharter Member
JTS Topology Suite
Vivid Solutions
JTS Topology Suite● Java API for Geometry
● OGC Standard: Simple Features for SQL● One of the “Hard Parts” of Geospatial
● License● Eclipse Distribution License (== BSD !)● Eclipse Public License
● History● Version 1.0 - 2001● Version 1.13 - 2012● Version 1.14 - 2014 Q4
Key to Open Source SpatialProject Language
JTS Topology Suite Java all JVM
LanguagesJSTS JavaScript (Partial Port)Net Topology Suite C#
GEOS C/C++Shapely Python (via GEOS)
RGeo Ruby (via GEOS)
r-GEOS R (via GEOS)
JTS Geometry Model (OGC 99-049)
● Spatial Predicates● Intersects, Contains, Within, Covers, etc
● Geometry Validation● Overlay Boolean operations
● Intersection, Union, Difference, SymDifference● Metrics
● Length, Area, Distance, Hausdorff Distance● Buffer
● Pos/Neg, Cap/Join styles● Polygonization● Delaunay Triangulation● Voronoi Diagram
JTS Functions
Geometry Example
GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
Coordinate coord = new Coordinate(1, 1);Point point = geometryFactory.createPoint(coord);
WKT Example
GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();WKTReader reader = new WKTReader(geometryFactory);
Point point = (Point) reader.read("POINT (1 1)");
Buffer Example
GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();WKTReader reader = new WKTReader( geometryFactory );
LineString line = (LineString) reader.read("LINESTRING(0 2, 2 0, 8 6)");Geometry buffer = line.buffer( 0.75 );
JTS Test Builder
Mobile Map Tools
Manuel de laCalle Alonso
ProjectsMobile Map ToolsEclipse FoundationLocationTech
Mobile Map Tools• SDK For native mobile applications.• Supports:
• Mobile maps in 2D, 2.5D and 3D• Works on iOS, Android, webGL
• Built using C++ and translated to Java and JavaScript• License:
• Eclipse Distribution License 1.0 (BSD)
Capabilities
Vector tiles:● Raster● Vectorial● 3D models● offline maps● complex symbology● native
New: Vector Tiles● Postgis● GeoJSON pyramid● Native support on MMT
● Berkeley DB● Import and orderedpoint process● Point cloud streaming● Native support on MMT● The cloud save the shape(we are always sending meaningful points, that saves the shape of the point cloud)
New: Point Cloud Streaming
Anthony FoxDirector, Data Science
Commonwealth Computer ResearchProjects:GeoMesaEclipse FoundationLocationTechLinkedInhttps://www.linkedin.com/pub/anthony-fox/5/467/574
• Distributed Spatio-temporal Database• Built on Hadoop and Accumulo• Scales to billions of features
• Written in Scala• Apache License, v2.0
How GeoMesa Fits in Cloud Stack
Cloud Stack and Distributed Resources
KAFKA
HDFSAccumulo
Jumping Into “Big Data”Hop on over from PostGIS….
to GeoMesa
picturespk.com
Query Planning
Connecting to Spark
Spark RDD
Aggregating by Day
Plotting in R14/08/18 01:05:57 INFO SparkContext: Job finished: collect at Runner.scala:61, took 44.154914093 s(20140801,398)(20140802,409)(20140803,328)(20140804,374)(20140805,354)(20140806,377)(20140807,328)(20140808,326)(20140809,365)(20140810,542)(20140811,1081)(20140812,721)(20140813,666)(20140814,1184)(20140815,964)
Predictive Threat Surface
Roadmap and Contact Info• Road Map
• Release Imminent (IP Review)• Analytics
• Contact & TutorialsAnthony Fox & Andrew Hulbert (booth)
http://[email protected]@locationtech.org
Spatial4j
David Smiley Apache Software Foundation Committer & PMC of Lucene/SolrEclipse FoundationLocationTech PMC
Freelance Lucene/Solr developer/consultant
Spatial4j
Shapes!• Point, Rect, Circle, Line, BufferedLine, Polygon,
and collections of these• Cartesian, Cartesian with world-wrap
(cylindrical), and Spherical/Geodesic• Computes intersection relationship & bbox
Also• Computes point distance & shape area• Extensible WKT parsing and
serialization/deserialization utilitiesLicense: ASLv2
The Shape interface• interface Shape {
• Point getCenter();• Rectangle getBoundingBox();• boolean hasArea();• double getArea();• SpatialRelation relate(Shape other);
• Must support Point & Rectangle
• enum SpatialRelation• DISJOINT, INTERSECTS, WITHIN, CONTAINS• Note: simpler set than the “DE-9IM” spatial standard
• no “equals” or “touches”
A romance in many dimensions
Shape Euclidean Cylindrical Spherical
Point Y Y Y
Rectangle Y Y Y
Circle Y Y
LineString Y
Buffered L/S Y
Polygon Y Y
Shape Collection Y Y Y
Distance example
SpatialContext ctx = SpatialContext.GEO;
Circle sydney=ctx.makeCircle(151.3,33.9, 0.3);Point perth=ctx.makePoint(115.8,32.9);double distance=ctx.calcDistance(sydney.getCenter(), perth);
double km=DistanceUtils.degrees2Dist( distance, DistanceUtils.EARTH_MEAN_RADIUS_KM)
More code samplesSpatialContext ctx = SpatialContext.GEO;Rectangle r = ctx.makeRectangle(-71, -70, 42, 43);Circle c = ctx.makeCircle(-72, 42, 1);SpatialRelation rel = r.relate(c);System.out.println(rel);rel.intersects();//boolean
ctx = JtsSpatialContext.GEO;Shape s = ctx.readShape(“POLYGON ((30 10, 10 20, 20 40, 40 40, 30 10))”);
double distanceDegrees = ctx.getDistCalc().distance( ctx.makePoint(2, 2), ctx.makePoint(3, 3) );
Distances (including circle radius) are in “Degrees”, not
radians or KM
Thanks to the interns!:● Rebecca Alford via Open-Academy:
○ geodesic polygons● Chris Pavlicek via Open-Academy:
○ geodesic buffered lines● Evana Gizzi, MITRE intern:
○ geodesic circle polygonizer
Recent Activity
Processing
RobertCheethamFounder and CEO
AzaveaProjectsGeoTrellisEclipse FoundationLocationTech
GeoTrellis
GeoTrellis• Scala geospatial library and platform for
distributed real-time and batch processing• Supports:
• Low latency & Distributed processing of raster data• Highly scalable• Based on Scala, Akka, & Spark
• License:• Apache License, Version 2.0
GeoTrellis subprojects● proj4
● Port\Wrapper of Proj4j● vector
● Scala wrapper for JTS● Reprojection support● GeoJSON read\write
● slick● Vector data to/from PostGIS
● raster● Raster IO, map algebra● Vector <-> Raster
operations● engine
● Distributed Akka execution engine for raster processing
GeoTrellis subprojects (cont.)● gdal
● Read over 130 raster file formats using GDAL● Wrapper around GDAL java bindings
● spark● Aims to add comprehensive geospatial support to Apache
Spark● Reproject, mosaic, tile and pyramid geotiff raster data
stored in HDFS into Accumulo or HDFS.● RasterRDD with tile-based distributed operations● Fast tile selection out of Accumulo.
Zonal Summary Example
Weighted Overlay Example
GeoTrellis Spark
geospatial @ scale
GeoTrellis Spark
GeoTrellis● Functional programming with Scala
● To quote Anthony Fox of GeoMesa, “There’s a confluence of geo and spark happening at LocationTech”
● Big data, cluster computing with Apache Spark & Accumulo● Both GeoMesa and GeoTrellis use Accumulo. Spark is
becoming a very popular alternative to Hadoop.
Ahmed EldawyUniversity of Minnesota
ProjectsGeoJini (SpatialHadoop)Eclipse FoundationLocationTech
GeoJini
GeoJini• Batch processing
• MapReduce framework for efficient processing of spatial operations
• Supports: • Spatial data types & indexing• Based on Hadoop• Highly scalable
• License:• Apache License, Version 2.0
Applications
Geo Fast Forward (GeoFF)
Erdal Karaca
ProjectsGeoFFEclipse FoundationLocationTech
Geo Fast Forward (GeoFF)● Embed Simple Maps in Eclipse RCP
● Querying a geocoding service● Use OpenLayers 3.0 as a resource bundle● SWT Component wrapping embedded browser● Fluent API so you do not have to know EMF
● License:● Eclipse Public License 1.0
Define GeoMap for RCP Developers
New: GeoFF in Eclipse 4
GeoGig
GabrielRoldán
Software DeveloperBoundless
ProjectsGeoGig(GeoGit), GeoTools, GeoServerEclipse FoundationLocationTechOSGeoCharter Member
GeoGig• Distributed data storage and collaboration
• “geogig isn’t git”• Supports:
• Distributed, off-line operation• Versioning, compare & merge• Push/pull data
• License:• Eclipse Distribution License (BSD)
~$ geogig helpList geogig commands
~/new-folder $ geogig initInitialise a geogig repository in new-folder
~/new-folder $ geogig shp import your_shapefileImport a .shp file (or OSM, SpatialLite or PostGIS)
~/new-folder $ geogig lsWhat's in your geogig repository
~/new-folder $ geogig statusWhat you can commit to a snapshot
Quickstart
GeoGig branching
QGIS plugin
GeoGig spatial diffs
News:● Download: 1.0-beta1 today● Thanks Ben for a great FOSS4G workshopIncubation:● LGPL → BSD● packages → org.locationtech.geogig● “initial code contribution” submitted
(Thanks to Sharon for patient Q&A)
GeoGig Update
GeoScript
JustinDeoliveira
VP EngineeringBoundless
ProjectsGeoScript, GeoTools,GeoServer,OpenGeo SuiteEclipse FoundationLocationTechOSGeoCharter Member
GeoScript● Adds spatial capabilities
to dynamic scripting languages.● Supports:
● Groovy, JavaScript, Python, and Scala● Backed by the GeoTools library
● geometry, data access and rendering● Use stand-alone or embedded
● License: MIT License● http://geoscript.github.io/foss4g2014-talk/#/
JavaScript
>> var geom = require("geoscript/geom");>> var p = new geom.Point([-111.0, 45.7]);>> p<Point [-111, 45.7]>>> var proj = require("geoscript/proj");>> var p2 = proj.transform(p, "epsg:4326", "epsg:26912");>> p2<Point [500000, 5060716.31816507]>>> var poly = p2.buffer(100);>> poly.area31214.451522458345
Python
>>> from geoscript import geom>>> p = geom.Point(-111.0, 45.7)>>> pPOINT(-111 45.7)>>> from geoscript import proj>>> p2 = proj.transform(p, 'epsg:4326', 'epsg:26912')>>> p2POINT (499999.42501775385 5060716.092032814)>>> poly = p2.buffer(100)>>> poly.getArea()31214.45152247697
Scala
scala> import org.geoscript.geometry._scala> import org.geoscript.projection._scala> val p = Point(-110, 45.7) in Projection("EPSG:4326")p: org.geoscript.geometry.Point = POINT (-110 45.7)
scala> val p2 = p in Projection("EPSG:26912")p2: org.geoscript.geometry.Point = POINT (-370416.94184711506 -7935053.5498699695)
scala> p2.buffer(100).areares0: Double = 31214.451522477902
Groovy
groovy:000> import geoscript.geom.*groovy:000> import geoscript.proj.Projectiongroovy:000> p = new Point(-111, 45.7)===> POINT (-111 45.7)groovy:000> p2 = Projection.transform(p, 'epsg:4326', 'epsg:26912')===> POINT (499999.42501775385, 5060716.092032814)groovy:000> poly = p2.buffer(100)groovy:000> poly.area===> 31214.451522477902
● Jared working hard● Curved geometries, GeoPackage, MBTiles
● Working on a common versioning scheme● Standardizing on GeoTools version● Early stages of incubation● TODO: Logo :)
GeoScript Update
Jody GarnettSenior Software Engineer
Boundless
Projects:GeoTools, GeoServer,uDig
Frank GasdorfSoftware Developer
& GIS ProfessionalPlath GmbH
ProjectsuDigEclipse FoundationLocationTech
uDig
● User-friendly Desktop Internet GIS● Based on Eclipse Framework● Reusable RCP components● Java core libraries
(JTS, GeoTools, jgrasstools,imageio-ext)● Supports:
● Industry standards formats and services formats(WMS, WFS, KML, GeoTiff, etc)
● License: Eclipse Public License EPL and BSD
uDig
Provides the best of Open Source Mapping for the Eclipse RCP Developer
uDig SDK
User-friendly Desktop Internet GIS
JGrass - Hydrological Modeling
DEWS Distance Early Warning System
https://www.youtube.com/watch?v=-lGgkOd-Tl4
Globema - ELGrid
LocationTech
Full Service Foundation
IPmgmt
Dev Process
LicenseModel
Forge&
Build
CommunityMemberNetwork
Governance
Infrastructure
Events: Tour 2014
18 Cities around the world.Speaking & sponsorship opportunities.Great spirit of camraderie & learning
Events: FOSS4G-NA
Questions?(Hand up for a microphone, project leads to the front)
● Q: Do I have to use Eclipse infrastructure?A: See https://github.com/locationtech(Thanks to the Verte.x for sorting out how)
Q&A