Neo4j Spatial - GIS for the rest of us.

11,794
-1

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
11,794
On Slideshare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
271
Comments
0
Likes
10
Embeds 0
No embeds

No notes for slide

Neo4j Spatial - GIS for the rest of us.

  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. We are hiring. Now. Contact me. #neo4j @peterneubauer peter@neotechnology.comSaturday, July 30, 2011
  3. Neo4j - ?Saturday, July 30, 2011
  4. The Neo4j model: Property GraphSaturday, July 30, 2011
  5. The Neo4j model: Property Graph 1 2 3Saturday, July 30, 2011
  6. The Neo4j model: Property Graph 1 2 3Saturday, July 30, 2011
  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. Saturday, July 30, 2011
  9. Impact Analytics, CMDB, Network Management, ProvisioningSaturday, July 30, 2011
  10. Show me!Saturday, July 30, 2011
  11. Neo4j SpatialSaturday, July 30, 2011
  12. Components 9Saturday, July 30, 2011
  13. Components Core 9Saturday, July 30, 2011
  14. Components Core Storage 9Saturday, July 30, 2011
  15. Components Core Storage Search 9Saturday, July 30, 2011
  16. Components Core Storage Search GeoProcessing 9Saturday, July 30, 2011
  17. Components Core Storage Search GeoProcessing Import/export 9Saturday, July 30, 2011
  18. Components Core Storage Search GeoProcessing Import/export Extensions 9Saturday, July 30, 2011
  19. Components Core Storage Search GeoProcessing Import/export Extensions Geotools & GeoServer 9Saturday, July 30, 2011
  20. Components Core Storage Search GeoProcessing Import/export Extensions Geotools & GeoServer uDig 9Saturday, July 30, 2011
  21. Components Core Storage Search GeoProcessing Import/export Extensions Geotools & GeoServer uDig OpenStreetMap 9Saturday, July 30, 2011
  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. Topics Open Street Map Layers Indexes Styling Geoprocessing Routing Examples 11Saturday, July 30, 2011
  24. Open StreetMapSaturday, July 30, 2011
  25. OpenStreetMap - Topology 13Saturday, July 30, 2011
  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. OpenStreetMapSaturday, July 30, 2011
  28. OpenStreetMapSaturday, July 30, 2011
  29. OpenStreetMapSaturday, July 30, 2011
  30. OpenStreetMap OSMSaturday, July 30, 2011
  31. OpenStreetMap Dynamic OSM LayersSaturday, July 30, 2011
  32. OpenStreetMap Dynamic OSM Layers Index (RTree)Saturday, July 30, 2011
  33. LayersSaturday, July 30, 2011
  34. From Graph to LayerSaturday, July 30, 2011
  35. From Graph to Layer GeometryEncoder - encode, decodeSaturday, July 30, 2011
  36. From Graph to Layer GeometryEncoder - encode, decode Property (wkt)Saturday, July 30, 2011
  37. From Graph to Layer GeometryEncoder - encode, decode Property (wkt) Properties (lon, lat)Saturday, July 30, 2011
  38. From Graph to Layer GeometryEncoder - encode, decode Property (wkt) Properties (lon, lat) Subgraph (ways, polygons)Saturday, July 30, 2011
  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. 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. 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. 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. 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. 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. Dynamic Layers, uDigSaturday, July 30, 2011
  46. Dynamic Layers, GeoServerSaturday, July 30, 2011
  47. IndexesSaturday, July 30, 2011
  48. Multiple indexes - GIS Illustrations: WikipediaSaturday, July 30, 2011
  49. OpenStreetMapSaturday, July 30, 2011
  50. OpenStreetMap Dynamic OSM Layers Index (RTree)Saturday, July 30, 2011
  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. StylingSaturday, July 30, 2011
  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. 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. 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. Dynamic Layers, stylingSaturday, July 30, 2011
  57. Dynamic Layers, stylingSaturday, July 30, 2011
  58. Dynamic Layers, stylingSaturday, July 30, 2011
  59. Dynamic Layers, stylingSaturday, July 30, 2011
  60. GeoprocessingSaturday, July 30, 2011
  61. GSoC: PostGIS -> OSM Graph 33Saturday, July 30, 2011
  62. GSoC: PostGIS -> OSM Graph Outputs: GeoJSON, KML 33Saturday, July 30, 2011
  63. GSoC: PostGIS -> OSM Graph Outputs: GeoJSON, KML 33Saturday, July 30, 2011
  64. GSoC: PostGIS -> OSM Graph Outputs: GeoJSON, KML Accessors: ST_EndPoint 33Saturday, July 30, 2011
  65. GSoC: PostGIS -> OSM Graph Outputs: GeoJSON, KML Accessors: ST_EndPoint 33Saturday, July 30, 2011
  66. GSoC: PostGIS -> OSM Graph Outputs: GeoJSON, KML Accessors: ST_EndPoint Processing: ST_CLosest, ST_Disjoint 33Saturday, July 30, 2011
  67. GSoC: PostGIS -> OSM Graph Outputs: GeoJSON, KML Accessors: ST_EndPoint Processing: ST_CLosest, ST_Disjoint 33Saturday, July 30, 2011
  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. 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. 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. RoutingSaturday, July 30, 2011
  72. RoutingSaturday, July 30, 2011
  73. Graph - Algos, A*Saturday, July 30, 2011
  74. h"p://www.transportdublin.ie/  -­‐  Patrick  Fitzgerald  on  Neo4jSaturday, July 30, 2011
  75. Neo4j Spatial examplesSaturday, July 30, 2011
  76. Polymap3Saturday, July 30, 2011
  77. AWESaturday, July 30, 2011
  78. Cell network analysisSaturday, July 30, 2011
  79. Next stepsSaturday, July 30, 2011
  80. Next steps Neo4j SpatialSaturday, July 30, 2011
  81. Next steps Neo4j Spatial Cypher, Gremlin, CQL dynamic queryingSaturday, July 30, 2011
  82. Next steps Neo4j Spatial Cypher, Gremlin, CQL dynamic querying Graph Geoprocessing domain level - GSoC 2011Saturday, July 30, 2011
  83. Next steps Neo4j Spatial Cypher, Gremlin, CQL dynamic querying Graph Geoprocessing domain level - GSoC 2011 Index Performance optimizationsSaturday, July 30, 2011
  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. 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. 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. 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. 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. 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. Get involved! http://github.com/neo4j/neo4j-spatial http://neo4j.orgSaturday, July 30, 2011
  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.

×