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 3 time = 4 years 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 Layer2 Query 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
Recommend
More recommend