Neo4j Spatial -                          GIS for the rest                               of us.                            ...
We are hiring.                              Now.                          Contact me.                                     ...
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”                               ...
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, Ju...
Components     Core            Storage            Search            GeoProcessing            Import/export                ...
Components     Core            Storage            Search            GeoProcessing            Import/export     Extensions ...
Components     Core            Storage            Search            GeoProcessing            Import/export     Extensions ...
Components     Core            Storage            Search            GeoProcessing            Import/export     Extensions ...
Components     Core            Storage            Search            GeoProcessing            Import/export     Extensions ...
Neo4j dynamic layers                                       Geometry                    Layer1                             ...
Topics     Open Street Map     Layers     Indexes     Styling     Geoprocessing     Routing     Examples                  ...
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" mi...
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, Jul...
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...
From Graph to Layer              GeometryEncoder - encode, decode                          Property (wkt)                 ...
From Graph to Layer              GeometryEncoder - encode, decode                          Property (wkt)                 ...
From Graph to Layer              GeometryEncoder - encode, decode                          Property (wkt)                 ...
From Graph to Layer              GeometryEncoder - encode, decode                          Property (wkt)                 ...
From Graph to Layer              GeometryEncoder - encode, decode                          Property (wkt)                 ...
From Graph to Layer              GeometryEncoder - encode, decode                          Property (wkt)                 ...
From Graph to Layer              GeometryEncoder - encode, decode                          Property (wkt)                 ...
From Graph to Layer              GeometryEncoder - encode, decode                          Property (wkt)                 ...
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, Jul...
In - graph indexing      Index<Node> index = db.index().forNodes( "layer1");      Node n1 = db.createNode();      n1.setPr...
StylingSaturday, July 30, 2011
Styling SLD       <FeatureTypeStyle>               <Rule>                 <ogc:Filter>                   <ogc:And>        ...
Styling SLD       <FeatureTypeStyle>               <Rule>                 <Filter>.....</Filter>                 <LineSymb...
Styling Ruby DSL       require amanzi/sld       Amanzi::SLD::Config.config[:geometry_property] = the_geom       #Amanzi::S...
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                                  33Saturda...
GSoC: PostGIS -> OSM Graph     Outputs: GeoJSON, KML     Accessors: ST_EndPoint                                  33Saturda...
GSoC: PostGIS -> OSM Graph     Outputs: GeoJSON, KML     Accessors: ST_EndPoint     Processing: ST_CLosest, ST_Disjoint   ...
GSoC: PostGIS -> OSM Graph     Outputs: GeoJSON, KML     Accessors: ST_EndPoint     Processing: ST_CLosest, ST_Disjoint   ...
GSoC: PostGIS -> OSM Graph     Outputs: GeoJSON, KML     Accessors: ST_EndPoint     Processing: ST_CLosest, ST_Disjoint   ...
GSoC: PostGIS -> OSM Graph     Outputs: GeoJSON, KML     Accessors: ST_EndPoint     Processing: ST_CLosest, ST_Disjoint   ...
GSoC: PostGIS -> OSM Graph     Outputs: GeoJSON, KML     Accessors: ST_EndPoint     Processing: ST_CLosest, ST_Disjoint   ...
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 ...
Next steps            Neo4j Spatial                      Cypher, Gremlin, CQL dynamic querying                      Graph ...
Next steps            Neo4j Spatial                      Cypher, Gremlin, CQL dynamic querying                      Graph ...
Next steps            Neo4j Spatial                      Cypher, Gremlin, CQL dynamic querying                      Graph ...
Next steps            Neo4j Spatial                      Cypher, Gremlin, CQL dynamic querying                      Graph ...
Next steps            Neo4j Spatial                      Cypher, Gremlin, CQL dynamic querying                      Graph ...
Next steps            Neo4j Spatial                      Cypher, Gremlin, CQL dynamic querying                      Graph ...
Next steps            Neo4j Spatial                      Cypher, Gremlin, CQL dynamic querying                      Graph ...
Get involved!         http://github.com/neo4j/neo4j-spatial         http://neo4j.orgSaturday, July 30, 2011
And - we are hiring!                              http://neotechnology.com                                                ...
Upcoming SlideShare
Loading in...5
×

Neo4j Spatial - GIS for the rest of us.

10,498

Published on

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!

Published in: Technology
0 Comments
10 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
10,498
On Slideshare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
258
Comments
0
Likes
10
Embeds 0
No embeds

No notes for slide

Neo4j Spatial - GIS for the rest of us.

  1. 1. Neo4j Spatial - GIS for the rest of us. OSCON Data 2011 #neo4j Peter Neubauer @peterneubauer Neo Technology peter@neotechnology.comSaturday, July 30, 2011
  2. 2. We are hiring. Now. Contact me. #neo4j @peterneubauer peter@neotechnology.comSaturday, July 30, 2011
  3. 3. Neo4j - ?Saturday, July 30, 2011
  4. 4. The Neo4j model: Property GraphSaturday, July 30, 2011
  5. 5. The Neo4j model: Property Graph 1 2 3Saturday, July 30, 2011
  6. 6. The Neo4j model: Property Graph 1 2 3Saturday, July 30, 2011
  7. 7. 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
  8. 8. Saturday, July 30, 2011
  9. 9. Impact Analytics, CMDB, Network Management, ProvisioningSaturday, July 30, 2011
  10. 10. Show me!Saturday, July 30, 2011
  11. 11. Neo4j SpatialSaturday, July 30, 2011
  12. 12. Components 9Saturday, July 30, 2011
  13. 13. Components Core 9Saturday, July 30, 2011
  14. 14. Components Core Storage 9Saturday, July 30, 2011
  15. 15. Components Core Storage Search 9Saturday, July 30, 2011
  16. 16. Components Core Storage Search GeoProcessing 9Saturday, July 30, 2011
  17. 17. Components Core Storage Search GeoProcessing Import/export 9Saturday, July 30, 2011
  18. 18. Components Core Storage Search GeoProcessing Import/export Extensions 9Saturday, July 30, 2011
  19. 19. Components Core Storage Search GeoProcessing Import/export Extensions Geotools & GeoServer 9Saturday, July 30, 2011
  20. 20. Components Core Storage Search GeoProcessing Import/export Extensions Geotools & GeoServer uDig 9Saturday, July 30, 2011
  21. 21. Components Core Storage Search GeoProcessing Import/export Extensions Geotools & GeoServer uDig OpenStreetMap 9Saturday, July 30, 2011
  22. 22. 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
  23. 23. Topics Open Street Map Layers Indexes Styling Geoprocessing Routing Examples 11Saturday, July 30, 2011
  24. 24. Open StreetMapSaturday, July 30, 2011
  25. 25. OpenStreetMap - Topology 13Saturday, July 30, 2011
  26. 26. 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
  27. 27. OpenStreetMapSaturday, July 30, 2011
  28. 28. OpenStreetMapSaturday, July 30, 2011
  29. 29. OpenStreetMapSaturday, July 30, 2011
  30. 30. OpenStreetMap OSMSaturday, July 30, 2011
  31. 31. OpenStreetMap Dynamic OSM LayersSaturday, July 30, 2011
  32. 32. OpenStreetMap Dynamic OSM Layers Index (RTree)Saturday, July 30, 2011
  33. 33. LayersSaturday, July 30, 2011
  34. 34. From Graph to LayerSaturday, July 30, 2011
  35. 35. From Graph to Layer GeometryEncoder - encode, decodeSaturday, July 30, 2011
  36. 36. From Graph to Layer GeometryEncoder - encode, decode Property (wkt)Saturday, July 30, 2011
  37. 37. From Graph to Layer GeometryEncoder - encode, decode Property (wkt) Properties (lon, lat)Saturday, July 30, 2011
  38. 38. From Graph to Layer GeometryEncoder - encode, decode Property (wkt) Properties (lon, lat) Subgraph (ways, polygons)Saturday, July 30, 2011
  39. 39. From Graph to Layer GeometryEncoder - encode, decode Property (wkt) Properties (lon, lat) Subgraph (ways, polygons) Domain specific (e.g. OSM)Saturday, July 30, 2011
  40. 40. 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
  41. 41. 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
  42. 42. 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
  43. 43. 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
  44. 44. 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
  45. 45. Dynamic Layers, uDigSaturday, July 30, 2011
  46. 46. Dynamic Layers, GeoServerSaturday, July 30, 2011
  47. 47. IndexesSaturday, July 30, 2011
  48. 48. Multiple indexes - GIS Illustrations: WikipediaSaturday, July 30, 2011
  49. 49. OpenStreetMapSaturday, July 30, 2011
  50. 50. OpenStreetMap Dynamic OSM Layers Index (RTree)Saturday, July 30, 2011
  51. 51. 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
  52. 52. StylingSaturday, July 30, 2011
  53. 53. 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
  54. 54. 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
  55. 55. 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
  56. 56. Dynamic Layers, stylingSaturday, July 30, 2011
  57. 57. Dynamic Layers, stylingSaturday, July 30, 2011
  58. 58. Dynamic Layers, stylingSaturday, July 30, 2011
  59. 59. Dynamic Layers, stylingSaturday, July 30, 2011
  60. 60. GeoprocessingSaturday, July 30, 2011
  61. 61. GSoC: PostGIS -> OSM Graph 33Saturday, July 30, 2011
  62. 62. GSoC: PostGIS -> OSM Graph Outputs: GeoJSON, KML 33Saturday, July 30, 2011
  63. 63. GSoC: PostGIS -> OSM Graph Outputs: GeoJSON, KML 33Saturday, July 30, 2011
  64. 64. GSoC: PostGIS -> OSM Graph Outputs: GeoJSON, KML Accessors: ST_EndPoint 33Saturday, July 30, 2011
  65. 65. GSoC: PostGIS -> OSM Graph Outputs: GeoJSON, KML Accessors: ST_EndPoint 33Saturday, July 30, 2011
  66. 66. GSoC: PostGIS -> OSM Graph Outputs: GeoJSON, KML Accessors: ST_EndPoint Processing: ST_CLosest, ST_Disjoint 33Saturday, July 30, 2011
  67. 67. GSoC: PostGIS -> OSM Graph Outputs: GeoJSON, KML Accessors: ST_EndPoint Processing: ST_CLosest, ST_Disjoint 33Saturday, July 30, 2011
  68. 68. GSoC: PostGIS -> OSM Graph Outputs: GeoJSON, KML Accessors: ST_EndPoint Processing: ST_CLosest, ST_Disjoint Search: SearchWithin, SearchClosest, Route, etc 33Saturday, July 30, 2011
  69. 69. GSoC: PostGIS -> OSM Graph Outputs: GeoJSON, KML Accessors: ST_EndPoint Processing: ST_CLosest, ST_Disjoint Search: SearchWithin, SearchClosest, Route, etc 33Saturday, July 30, 2011
  70. 70. 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
  71. 71. RoutingSaturday, July 30, 2011
  72. 72. RoutingSaturday, July 30, 2011
  73. 73. Graph - Algos, A*Saturday, July 30, 2011
  74. 74. h"p://www.transportdublin.ie/  -­‐  Patrick  Fitzgerald  on  Neo4jSaturday, July 30, 2011
  75. 75. Neo4j Spatial examplesSaturday, July 30, 2011
  76. 76. Polymap3Saturday, July 30, 2011
  77. 77. AWESaturday, July 30, 2011
  78. 78. Cell network analysisSaturday, July 30, 2011
  79. 79. Next stepsSaturday, July 30, 2011
  80. 80. Next steps Neo4j SpatialSaturday, July 30, 2011
  81. 81. Next steps Neo4j Spatial Cypher, Gremlin, CQL dynamic queryingSaturday, July 30, 2011
  82. 82. Next steps Neo4j Spatial Cypher, Gremlin, CQL dynamic querying Graph Geoprocessing domain level - GSoC 2011Saturday, July 30, 2011
  83. 83. Next steps Neo4j Spatial Cypher, Gremlin, CQL dynamic querying Graph Geoprocessing domain level - GSoC 2011 Index Performance optimizationsSaturday, July 30, 2011
  84. 84. 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
  85. 85. 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
  86. 86. 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
  87. 87. 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
  88. 88. 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
  89. 89. 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
  90. 90. Get involved! http://github.com/neo4j/neo4j-spatial http://neo4j.orgSaturday, July 30, 2011
  91. 91. And - we are hiring! http://neotechnology.com 44Saturday, July 30, 2011
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×