Neo4j Spatial -
                          GIS for the rest
                               of us.
                            OSCON Data 2011


                                              #neo4j
       Peter Neubauer                         @peterneubauer
       Neo Technology                         peter@neotechnology.com

Saturday, July 30, 2011
We are hiring.
                              Now.
                          Contact me.

                                      #neo4j
                                      @peterneubauer
                                      peter@neotechnology.com

Saturday, July 30, 2011
Neo4j - ?




Saturday, July 30, 2011
The Neo4j model: Property Graph




Saturday, July 30, 2011
The Neo4j model: Property Graph



                          1       2




                              3




Saturday, July 30, 2011
The Neo4j model: Property Graph



                          1       2




                              3




Saturday, 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, Provisioning




Saturday, July 30, 2011
Show me!




Saturday, July 30, 2011
Neo4j Spatial




Saturday, July 30, 2011
Components




                          9
Saturday, July 30, 2011
Components
     Core




                          9
Saturday, July 30, 2011
Components
     Core
            Storage




                          9
Saturday, July 30, 2011
Components
     Core
            Storage
            Search




                          9
Saturday, July 30, 2011
Components
     Core
            Storage
            Search
            GeoProcessing




                            9
Saturday, July 30, 2011
Components
     Core
            Storage
            Search
            GeoProcessing
            Import/export




                            9
Saturday, July 30, 2011
Components
     Core
            Storage
            Search
            GeoProcessing
            Import/export
     Extensions




                            9
Saturday, July 30, 2011
Components
     Core
            Storage
            Search
            GeoProcessing
            Import/export
     Extensions
            Geotools & GeoServer



                                   9
Saturday, July 30, 2011
Components
     Core
            Storage
            Search
            GeoProcessing
            Import/export
     Extensions
            Geotools & GeoServer
            uDig


                                   9
Saturday, July 30, 2011
Components
     Core
            Storage
            Search
            GeoProcessing
            Import/export
     Extensions
            Geotools & GeoServer
            uDig
            OpenStreetMap
                                   9
Saturday, 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 stacks




Saturday, July 30, 2011
Topics
     Open Street Map
     Layers
     Indexes
     Styling
     Geoprocessing
     Routing
     Examples



                          11
Saturday, July 30, 2011
Open StreetMap




Saturday, July 30, 2011
OpenStreetMap - Topology




                                13
Saturday, 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
OpenStreetMap




Saturday, July 30, 2011
OpenStreetMap




Saturday, July 30, 2011
OpenStreetMap




Saturday, July 30, 2011
OpenStreetMap




                          OSM




Saturday, July 30, 2011
OpenStreetMap




     Dynamic              OSM
      Layers




Saturday, July 30, 2011
OpenStreetMap




     Dynamic                              OSM
      Layers




                          Index (RTree)




Saturday, July 30, 2011
Layers




Saturday, July 30, 2011
From Graph to Layer




Saturday, July 30, 2011
From Graph to Layer
              GeometryEncoder - encode, decode




Saturday, 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/decoding




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/decoding
              CRS, Geometry type




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/decoding
              CRS, Geometry type
              Styling




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/decoding
              CRS, Geometry type
              Styling
              Dynamic Layers


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/decoding
              CRS, Geometry type
              Styling
              Dynamic Layers
              Search
Saturday, July 30, 2011
Dynamic Layers, uDig




Saturday, July 30, 2011
Dynamic Layers, GeoServer




Saturday, July 30, 2011
Indexes




Saturday, July 30, 2011
Multiple indexes - GIS




           Illustrations: Wikipedia
Saturday, July 30, 2011
OpenStreetMap




Saturday, 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
Styling




Saturday, 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
       sld




Saturday, July 30, 2011
Dynamic Layers, styling




Saturday, July 30, 2011
Dynamic Layers, styling




Saturday, July 30, 2011
Dynamic Layers, styling




Saturday, July 30, 2011
Dynamic Layers, styling




Saturday, July 30, 2011
Geoprocessing




Saturday, July 30, 2011
GSoC: PostGIS -> OSM Graph




                                  33
Saturday, July 30, 2011
GSoC: PostGIS -> OSM Graph
     Outputs: GeoJSON, KML




                                  33
Saturday, July 30, 2011
GSoC: PostGIS -> OSM Graph
     Outputs: GeoJSON, KML




                                  33
Saturday, July 30, 2011
GSoC: PostGIS -> OSM Graph
     Outputs: GeoJSON, KML


     Accessors: ST_EndPoint




                                  33
Saturday, July 30, 2011
GSoC: PostGIS -> OSM Graph
     Outputs: GeoJSON, KML


     Accessors: ST_EndPoint




                                  33
Saturday, July 30, 2011
GSoC: PostGIS -> OSM Graph
     Outputs: GeoJSON, KML


     Accessors: ST_EndPoint


     Processing: ST_CLosest, ST_Disjoint




                                           33
Saturday, July 30, 2011
GSoC: PostGIS -> OSM Graph
     Outputs: GeoJSON, KML


     Accessors: ST_EndPoint


     Processing: ST_CLosest, ST_Disjoint




                                           33
Saturday, July 30, 2011
GSoC: PostGIS -> OSM Graph
     Outputs: GeoJSON, KML


     Accessors: ST_EndPoint


     Processing: ST_CLosest, ST_Disjoint


     Search: SearchWithin, SearchClosest, Route, etc



                                                       33
Saturday, July 30, 2011
GSoC: PostGIS -> OSM Graph
     Outputs: GeoJSON, KML


     Accessors: ST_EndPoint


     Processing: ST_CLosest, ST_Disjoint


     Search: SearchWithin, SearchClosest, Route, etc



                                                       33
Saturday, 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!
                                                       33
Saturday, July 30, 2011
Routing




Saturday, July 30, 2011
Routing




Saturday, July 30, 2011
Graph - Algos, A*




Saturday, July 30, 2011
h"p://www.transportdublin.ie/	
  -­‐	
  Patrick	
  Fitzgerald	
  on	
  Neo4j
Saturday, July 30, 2011
Neo4j Spatial examples




Saturday, July 30, 2011
Polymap3




Saturday, July 30, 2011
AWE




Saturday, July 30, 2011
Cell network analysis




Saturday, July 30, 2011
Next steps




Saturday, July 30, 2011
Next steps
            Neo4j Spatial




Saturday, July 30, 2011
Next steps
            Neo4j Spatial
                      Cypher, Gremlin, CQL dynamic querying




Saturday, July 30, 2011
Next steps
            Neo4j Spatial
                      Cypher, Gremlin, CQL dynamic querying
                      Graph Geoprocessing domain level - GSoC 2011




Saturday, July 30, 2011
Next steps
            Neo4j Spatial
                      Cypher, Gremlin, CQL dynamic querying
                      Graph Geoprocessing domain level - GSoC 2011
                      Index Performance optimizations




Saturday, 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




Saturday, 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




Saturday, 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




Saturday, 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




Saturday, 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



Saturday, 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 datasets

Saturday, July 30, 2011
Get involved!

         http://github.com/neo4j/neo4j-spatial
         http://neo4j.org




Saturday, July 30, 2011
And - we are hiring!




                              http://neotechnology.com
                                                         44
Saturday, July 30, 2011

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.com Saturday, July 30, 2011
  • 2.
    We are hiring. Now. Contact me. #neo4j @peterneubauer peter@neotechnology.com Saturday, July 30, 2011
  • 3.
    Neo4j - ? Saturday,July 30, 2011
  • 4.
    The Neo4j model:Property Graph Saturday, July 30, 2011
  • 5.
    The Neo4j model:Property Graph 1 2 3 Saturday, July 30, 2011
  • 6.
    The Neo4j model:Property Graph 1 2 3 Saturday, 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.
  • 9.
    Impact Analytics, CMDB,Network Management, Provisioning Saturday, July 30, 2011
  • 10.
  • 11.
  • 12.
    Components 9 Saturday, July 30, 2011
  • 13.
    Components Core 9 Saturday, July 30, 2011
  • 14.
    Components Core Storage 9 Saturday, July 30, 2011
  • 15.
    Components Core Storage Search 9 Saturday, July 30, 2011
  • 16.
    Components Core Storage Search GeoProcessing 9 Saturday, July 30, 2011
  • 17.
    Components Core Storage Search GeoProcessing Import/export 9 Saturday, July 30, 2011
  • 18.
    Components Core Storage Search GeoProcessing Import/export Extensions 9 Saturday, July 30, 2011
  • 19.
    Components Core Storage Search GeoProcessing Import/export Extensions Geotools & GeoServer 9 Saturday, July 30, 2011
  • 20.
    Components Core Storage Search GeoProcessing Import/export Extensions Geotools & GeoServer uDig 9 Saturday, July 30, 2011
  • 21.
    Components Core Storage Search GeoProcessing Import/export Extensions Geotools & GeoServer uDig OpenStreetMap 9 Saturday, 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 stacks Saturday, July 30, 2011
  • 23.
    Topics Open Street Map Layers Indexes Styling Geoprocessing Routing Examples 11 Saturday, July 30, 2011
  • 24.
  • 25.
    OpenStreetMap - Topology 13 Saturday, 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.
  • 28.
  • 29.
  • 30.
    OpenStreetMap OSM Saturday, July 30, 2011
  • 31.
    OpenStreetMap Dynamic OSM Layers Saturday, July 30, 2011
  • 32.
    OpenStreetMap Dynamic OSM Layers Index (RTree) Saturday, July 30, 2011
  • 33.
  • 34.
    From Graph toLayer Saturday, July 30, 2011
  • 35.
    From Graph toLayer GeometryEncoder - encode, decode Saturday, July 30, 2011
  • 36.
    From Graph toLayer GeometryEncoder - encode, decode Property (wkt) Saturday, July 30, 2011
  • 37.
    From Graph toLayer GeometryEncoder - encode, decode Property (wkt) Properties (lon, lat) Saturday, July 30, 2011
  • 38.
    From Graph toLayer GeometryEncoder - encode, decode Property (wkt) Properties (lon, lat) Subgraph (ways, polygons) Saturday, July 30, 2011
  • 39.
    From Graph toLayer GeometryEncoder - encode, decode Property (wkt) Properties (lon, lat) Subgraph (ways, polygons) Domain specific (e.g. OSM) Saturday, July 30, 2011
  • 40.
    From Graph toLayer GeometryEncoder - encode, decode Property (wkt) Properties (lon, lat) Subgraph (ways, polygons) Domain specific (e.g. OSM) OSM Way encoding/decoding Saturday, July 30, 2011
  • 41.
    From Graph toLayer GeometryEncoder - encode, decode Property (wkt) Properties (lon, lat) Subgraph (ways, polygons) Domain specific (e.g. OSM) OSM Way encoding/decoding CRS, Geometry type Saturday, July 30, 2011
  • 42.
    From Graph toLayer GeometryEncoder - encode, decode Property (wkt) Properties (lon, lat) Subgraph (ways, polygons) Domain specific (e.g. OSM) OSM Way encoding/decoding CRS, Geometry type Styling Saturday, July 30, 2011
  • 43.
    From Graph toLayer 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 Saturday, July 30, 2011
  • 44.
    From Graph toLayer 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 Search Saturday, July 30, 2011
  • 45.
  • 46.
  • 47.
  • 48.
    Multiple indexes -GIS Illustrations: Wikipedia Saturday, July 30, 2011
  • 49.
  • 50.
    OpenStreetMap Dynamic OSM Layers Index (RTree) Saturday, July 30, 2011
  • 51.
    In - graphindexing 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.
  • 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 sld Saturday, July 30, 2011
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
    GSoC: PostGIS ->OSM Graph 33 Saturday, July 30, 2011
  • 62.
    GSoC: PostGIS ->OSM Graph Outputs: GeoJSON, KML 33 Saturday, July 30, 2011
  • 63.
    GSoC: PostGIS ->OSM Graph Outputs: GeoJSON, KML 33 Saturday, July 30, 2011
  • 64.
    GSoC: PostGIS ->OSM Graph Outputs: GeoJSON, KML Accessors: ST_EndPoint 33 Saturday, July 30, 2011
  • 65.
    GSoC: PostGIS ->OSM Graph Outputs: GeoJSON, KML Accessors: ST_EndPoint 33 Saturday, July 30, 2011
  • 66.
    GSoC: PostGIS ->OSM Graph Outputs: GeoJSON, KML Accessors: ST_EndPoint Processing: ST_CLosest, ST_Disjoint 33 Saturday, July 30, 2011
  • 67.
    GSoC: PostGIS ->OSM Graph Outputs: GeoJSON, KML Accessors: ST_EndPoint Processing: ST_CLosest, ST_Disjoint 33 Saturday, July 30, 2011
  • 68.
    GSoC: PostGIS ->OSM Graph Outputs: GeoJSON, KML Accessors: ST_EndPoint Processing: ST_CLosest, ST_Disjoint Search: SearchWithin, SearchClosest, Route, etc 33 Saturday, July 30, 2011
  • 69.
    GSoC: PostGIS ->OSM Graph Outputs: GeoJSON, KML Accessors: ST_EndPoint Processing: ST_CLosest, ST_Disjoint Search: SearchWithin, SearchClosest, Route, etc 33 Saturday, 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! 33 Saturday, July 30, 2011
  • 71.
  • 72.
  • 73.
    Graph - Algos,A* Saturday, July 30, 2011
  • 74.
    h"p://www.transportdublin.ie/  -­‐  Patrick  Fitzgerald  on  Neo4j Saturday, July 30, 2011
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
    Next steps Neo4j Spatial Saturday, July 30, 2011
  • 81.
    Next steps Neo4j Spatial Cypher, Gremlin, CQL dynamic querying Saturday, July 30, 2011
  • 82.
    Next steps Neo4j Spatial Cypher, Gremlin, CQL dynamic querying Graph Geoprocessing domain level - GSoC 2011 Saturday, July 30, 2011
  • 83.
    Next steps Neo4j Spatial Cypher, Gremlin, CQL dynamic querying Graph Geoprocessing domain level - GSoC 2011 Index Performance optimizations Saturday, 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 Index Saturday, 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 support Saturday, 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 OSM Saturday, 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 2011 Saturday, 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, US Saturday, 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 datasets Saturday, July 30, 2011
  • 90.
    Get involved! http://github.com/neo4j/neo4j-spatial http://neo4j.org Saturday, July 30, 2011
  • 91.
    And - weare hiring! http://neotechnology.com 44 Saturday, July 30, 2011