Neo4j Spatial - GIS for the rest of us.
Upcoming SlideShare
Loading in...5
×
 

Neo4j Spatial - GIS for the rest of us.

on

  • 9,897 views

Compelling location-based services require more than simple “what’s near me?” operations. The Open Street Map dataset is a perfect example of a rich geographically-based wiki that can be used ...

Compelling location-based services require more than simple “what’s near me?” operations. The Open Street Map dataset is a perfect example of a rich geographically-based wiki that can be used for much more than map rendering.

With the newly released Neo4j Spatial, any data can be adapted to complex queries with geographic components like “Select all streets in the Municipality of NYC where at least 2 of my friends are walking right now”.

The talk will demonstrate the important benefits of modeling geodata in a graph, the main components needed to expose data to geo stacks like map servers, and explain how the Open Street Map dataset is modeled in Neo4j. I’ll show how using Neo4j unlocks the full potential of the OSM data far beyond just rendering maps.

There will also be some cool examples of Neo4j Spatial, from Telecomms network planning, Web-based AJAX GIS systems, topology editing and routing to REST and Web Feature Service endpoints, all in a single stack.

This is Location-based Services on steroids!

Statistics

Views

Total Views
9,897
Views on SlideShare
8,432
Embed Views
1,465

Actions

Likes
10
Downloads
209
Comments
0

15 Embeds 1,465

http://blog.nosqlfan.com 1086
http://www.oscon.com 155
http://lanyrd.com 83
http://nosql.io 64
http://feed.feedsky.com 36
http://xianguo.com 15
https://www.linkedin.com 5
https://twitter.com 5
http://zhuaxia.com 3
http://reader.youdao.com 3
http://www.linkedin.com 3
http://zootool.com 2
http://www.twylah.com 2
http://xue.uplook.cn 2
http://trunk.ly 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Neo4j Spatial - GIS for the rest of us. Neo4j Spatial - GIS for the rest of us. Presentation Transcript

  • Neo4j Spatial - GIS for the rest of us. OSCON Data 2011 #neo4j Peter Neubauer @peterneubauer Neo Technology peter@neotechnology.comSaturday, July 30, 2011
  • We are hiring. Now. Contact me. #neo4j @peterneubauer peter@neotechnology.comSaturday, July 30, 2011
  • Neo4j - ?Saturday, July 30, 2011
  • The Neo4j model: Property GraphSaturday, July 30, 2011
  • The Neo4j model: Property Graph 1 2 3Saturday, July 30, 2011
  • The Neo4j model: Property Graph 1 2 3Saturday, July 30, 2011
  • The Neo4j model: Property Graph name = “Emil” age = 29 sex = “yes” 1 2 type = KNOWS time = 4 years 3 type = car vendor = “SAAB” model = “95 Aero”Saturday, July 30, 2011
  • Saturday, July 30, 2011
  • Impact Analytics, CMDB, Network Management, ProvisioningSaturday, July 30, 2011
  • Show me!Saturday, July 30, 2011
  • Neo4j SpatialSaturday, July 30, 2011
  • Components 9Saturday, July 30, 2011
  • Components Core 9Saturday, July 30, 2011
  • Components Core Storage 9Saturday, July 30, 2011
  • Components Core Storage Search 9Saturday, July 30, 2011
  • Components Core Storage Search GeoProcessing 9Saturday, July 30, 2011
  • Components Core Storage Search GeoProcessing Import/export 9Saturday, July 30, 2011
  • Components Core Storage Search GeoProcessing Import/export Extensions 9Saturday, July 30, 2011
  • Components Core Storage Search GeoProcessing Import/export Extensions Geotools & GeoServer 9Saturday, July 30, 2011
  • Components Core Storage Search GeoProcessing Import/export Extensions Geotools & GeoServer uDig 9Saturday, July 30, 2011
  • Components Core Storage Search GeoProcessing Import/export Extensions Geotools & GeoServer uDig OpenStreetMap 9Saturday, July 30, 2011
  • Neo4j dynamic layers Geometry Layer1 Encoder Dynamic Query Layer2 Dynamic Styles Layer3 Multidim Dynamic Indexes Meta-Inf Connected domain data Neo4j Spatial GIS and Spatial stacksSaturday, July 30, 2011
  • Topics Open Street Map Layers Indexes Styling Geoprocessing Routing Examples 11Saturday, July 30, 2011
  • Open StreetMapSaturday, July 30, 2011
  • OpenStreetMap - Topology 13Saturday, July 30, 2011
  • OSM Files<?xml version="1.0" encoding="UTF-8"?><osm version="0.6" generator="CGImap 0.0.2"> <bounds minlat="56.0437000" minlon="12.9388000" maxlat="56.0761000"maxlon="13.0109000"/> <node id="371662020" lat="56.0709040" lon="12.9639158" user="Grillo"uid="13957" visible="true" version="2" changeset="5465617"timestamp="2010-08-11T19:50:23Z"/>.... <way id="72090582" user="Craig Taverner" uid="48197" visible="true"version="1" changeset="5474347" timestamp="2010-08-12T16:15:06Z"> <nd ref="371662020"/> <nd ref="857081476"/> <nd ref="857081950"/> <nd ref="857081819"/> <nd ref="857081796"/> <nd ref="857081692"/> <nd ref="857081617"/> <nd ref="857081523"/> <tag k="highway" v="residential"/> <tag k="name" v="Nybrodalsvägen"/> </way></osm>Saturday, July 30, 2011
  • OpenStreetMapSaturday, July 30, 2011
  • OpenStreetMapSaturday, July 30, 2011
  • OpenStreetMapSaturday, July 30, 2011
  • OpenStreetMap OSMSaturday, July 30, 2011
  • OpenStreetMap Dynamic OSM LayersSaturday, July 30, 2011
  • OpenStreetMap Dynamic OSM Layers Index (RTree)Saturday, July 30, 2011
  • LayersSaturday, July 30, 2011
  • From Graph to LayerSaturday, July 30, 2011
  • From Graph to Layer GeometryEncoder - encode, decodeSaturday, July 30, 2011
  • From Graph to Layer GeometryEncoder - encode, decode Property (wkt)Saturday, July 30, 2011
  • From Graph to Layer GeometryEncoder - encode, decode Property (wkt) Properties (lon, lat)Saturday, July 30, 2011
  • From Graph to Layer GeometryEncoder - encode, decode Property (wkt) Properties (lon, lat) Subgraph (ways, polygons)Saturday, July 30, 2011
  • From Graph to Layer GeometryEncoder - encode, decode Property (wkt) Properties (lon, lat) Subgraph (ways, polygons) Domain specific (e.g. OSM)Saturday, July 30, 2011
  • From Graph to Layer GeometryEncoder - encode, decode Property (wkt) Properties (lon, lat) Subgraph (ways, polygons) Domain specific (e.g. OSM) OSM Way encoding/decodingSaturday, July 30, 2011
  • From Graph to Layer GeometryEncoder - encode, decode Property (wkt) Properties (lon, lat) Subgraph (ways, polygons) Domain specific (e.g. OSM) OSM Way encoding/decoding CRS, Geometry typeSaturday, July 30, 2011
  • From Graph to Layer GeometryEncoder - encode, decode Property (wkt) Properties (lon, lat) Subgraph (ways, polygons) Domain specific (e.g. OSM) OSM Way encoding/decoding CRS, Geometry type StylingSaturday, July 30, 2011
  • From Graph to Layer GeometryEncoder - encode, decode Property (wkt) Properties (lon, lat) Subgraph (ways, polygons) Domain specific (e.g. OSM) OSM Way encoding/decoding CRS, Geometry type Styling Dynamic LayersSaturday, July 30, 2011
  • From Graph to Layer GeometryEncoder - encode, decode Property (wkt) Properties (lon, lat) Subgraph (ways, polygons) Domain specific (e.g. OSM) OSM Way encoding/decoding CRS, Geometry type Styling Dynamic Layers SearchSaturday, July 30, 2011
  • Dynamic Layers, uDigSaturday, July 30, 2011
  • Dynamic Layers, GeoServerSaturday, July 30, 2011
  • IndexesSaturday, July 30, 2011
  • Multiple indexes - GIS Illustrations: WikipediaSaturday, July 30, 2011
  • OpenStreetMapSaturday, July 30, 2011
  • OpenStreetMap Dynamic OSM Layers Index (RTree)Saturday, July 30, 2011
  • In - graph indexing Index<Node> index = db.index().forNodes( "layer1"); Node n1 = db.createNode(); n1.setProperty( "lat", (double)56.2 ); n1.setProperty( "lon", (double)15.3 ); index.add( n1 ); Java: index.query( LayerNodeIndex.BBOX_QUERY, "[15.0, 16.0, 56.0, 57.0]" ); Cypher: START poi=(layer1,bbox:[15.0, 16.0, 56.0, 57.0]) MATCH (poi) -[r] - (x) RETURN poi, r~TYPE, x.layer? Gremlin: g.idx(node)[[layer1: bbox:[15.0, 16.0, 56.0, 57.0]]]Saturday, July 30, 2011
  • StylingSaturday, July 30, 2011
  • Styling SLD <FeatureTypeStyle> <Rule> <ogc:Filter> <ogc:And> <ogc:PropertyIsEqualTo> <ogc:Function name="geometryType"> <ogc:PropertyName>the_geom</ogc:PropertyName> </ogc:Function> <ogc:Literal>LineString</ogc:Literal> </ogc:PropertyIsEqualTo> <ogc:Not> <ogc:PropertyIsNull> <ogc:PropertyName>highway</ogc:PropertyName> </ogc:PropertyIsNull> </ogc:Not> <ogc:PropertyIsEqualTo> <ogc:PropertyName>highway</ogc:PropertyName> <ogc:Literal>residential</ogc:Literal> </ogc:PropertyIsEqualTo> </ogc:And> </ogc:Filter> <Symbolizers>.......</> </Rule> </FeatureTypeStyle>Saturday, July 30, 2011
  • Styling SLD <FeatureTypeStyle> <Rule> <Filter>.....</Filter> <LineSymbolizer> <Stroke> <CssParameter name="stroke">#909090</CssParameter> <CssParameter name="stroke-width">3</CssParameter> </Stroke> </LineSymbolizer> <LineSymbolizer> <Stroke> <CssParameter name="stroke">#ffff80</CssParameter> <CssParameter name="stroke-width">1</CssParameter> </Stroke> </LineSymbolizer> </Rule> </FeatureTypeStyle>Saturday, July 30, 2011
  • Styling Ruby DSL require amanzi/sld Amanzi::SLD::Config.config[:geometry_property] = the_geom #Amanzi::SLD::Config.config[:verbose] = true sld = Amanzi::SLD::Document.new "Example Neo4j Spatial OSM Style" sld.comment "A style for residential streets" sld. add_line_symbolizer(:stroke => #909090, :stroke_width => 3). add_line_symbolizer(:stroke => #ffff80, :stroke_width => 1) do |f| f.op(:and) do |f| f.geometry = LineString f.property.exists? highway f.property[highway] = residential end end sldSaturday, July 30, 2011
  • Dynamic Layers, stylingSaturday, July 30, 2011
  • Dynamic Layers, stylingSaturday, July 30, 2011
  • Dynamic Layers, stylingSaturday, July 30, 2011
  • Dynamic Layers, stylingSaturday, July 30, 2011
  • GeoprocessingSaturday, July 30, 2011
  • GSoC: PostGIS -> OSM Graph 33Saturday, July 30, 2011
  • GSoC: PostGIS -> OSM Graph Outputs: GeoJSON, KML 33Saturday, July 30, 2011
  • GSoC: PostGIS -> OSM Graph Outputs: GeoJSON, KML 33Saturday, July 30, 2011
  • GSoC: PostGIS -> OSM Graph Outputs: GeoJSON, KML Accessors: ST_EndPoint 33Saturday, July 30, 2011
  • GSoC: PostGIS -> OSM Graph Outputs: GeoJSON, KML Accessors: ST_EndPoint 33Saturday, July 30, 2011
  • GSoC: PostGIS -> OSM Graph Outputs: GeoJSON, KML Accessors: ST_EndPoint Processing: ST_CLosest, ST_Disjoint 33Saturday, July 30, 2011
  • GSoC: PostGIS -> OSM Graph Outputs: GeoJSON, KML Accessors: ST_EndPoint Processing: ST_CLosest, ST_Disjoint 33Saturday, July 30, 2011
  • GSoC: PostGIS -> OSM Graph Outputs: GeoJSON, KML Accessors: ST_EndPoint Processing: ST_CLosest, ST_Disjoint Search: SearchWithin, SearchClosest, Route, etc 33Saturday, July 30, 2011
  • GSoC: PostGIS -> OSM Graph Outputs: GeoJSON, KML Accessors: ST_EndPoint Processing: ST_CLosest, ST_Disjoint Search: SearchWithin, SearchClosest, Route, etc 33Saturday, July 30, 2011
  • GSoC: PostGIS -> OSM Graph Outputs: GeoJSON, KML Accessors: ST_EndPoint Processing: ST_CLosest, ST_Disjoint Search: SearchWithin, SearchClosest, Route, etc Thanks Andreas Wilhelm! 33Saturday, July 30, 2011
  • RoutingSaturday, July 30, 2011
  • RoutingSaturday, July 30, 2011
  • Graph - Algos, A*Saturday, July 30, 2011
  • h"p://www.transportdublin.ie/  -­‐  Patrick  Fitzgerald  on  Neo4jSaturday, July 30, 2011
  • Neo4j Spatial examplesSaturday, July 30, 2011
  • Polymap3Saturday, July 30, 2011
  • AWESaturday, July 30, 2011
  • Cell network analysisSaturday, July 30, 2011
  • Next stepsSaturday, July 30, 2011
  • Next steps Neo4j SpatialSaturday, July 30, 2011
  • Next steps Neo4j Spatial Cypher, Gremlin, CQL dynamic queryingSaturday, July 30, 2011
  • Next steps Neo4j Spatial Cypher, Gremlin, CQL dynamic querying Graph Geoprocessing domain level - GSoC 2011Saturday, July 30, 2011
  • Next steps Neo4j Spatial Cypher, Gremlin, CQL dynamic querying Graph Geoprocessing domain level - GSoC 2011 Index Performance optimizationsSaturday, July 30, 2011
  • Next steps Neo4j Spatial Cypher, Gremlin, CQL dynamic querying Graph Geoprocessing domain level - GSoC 2011 Index Performance optimizations Pluggable indexing, Composite IndexSaturday, July 30, 2011
  • Next steps Neo4j Spatial Cypher, Gremlin, CQL dynamic querying Graph Geoprocessing domain level - GSoC 2011 Index Performance optimizations Pluggable indexing, Composite Index Routing API supportSaturday, July 30, 2011
  • Next steps Neo4j Spatial Cypher, Gremlin, CQL dynamic querying Graph Geoprocessing domain level - GSoC 2011 Index Performance optimizations Pluggable indexing, Composite Index Routing API support OSMSaturday, July 30, 2011
  • Next steps Neo4j Spatial Cypher, Gremlin, CQL dynamic querying Graph Geoprocessing domain level - GSoC 2011 Index Performance optimizations Pluggable indexing, Composite Index Routing API support OSM uDig OSM Topology editor - GSoC 2011Saturday, July 30, 2011
  • Next steps Neo4j Spatial Cypher, Gremlin, CQL dynamic querying Graph Geoprocessing domain level - GSoC 2011 Index Performance optimizations Pluggable indexing, Composite Index Routing API support OSM uDig OSM Topology editor - GSoC 2011 OSM tests Germany, USSaturday, July 30, 2011
  • Next steps Neo4j Spatial Cypher, Gremlin, CQL dynamic querying Graph Geoprocessing domain level - GSoC 2011 Index Performance optimizations Pluggable indexing, Composite Index Routing API support OSM uDig OSM Topology editor - GSoC 2011 OSM tests Germany, US Stitching for OSM datasetsSaturday, July 30, 2011
  • Get involved! http://github.com/neo4j/neo4j-spatial http://neo4j.orgSaturday, July 30, 2011
  • And - we are hiring! http://neotechnology.com 44Saturday, July 30, 2011