<?xml version="1.0" encoding="utf-8"?>
<presentation css="10gen-strict.css">
<topic>MongoDB</topic>
<title>Geospatial MongoDB</title>
<event>ConFoo</event>
<location>London, UK</location>
<lat>51.51065</lat><lon>-0.12160</lon>
<date>September 16th, 2014</date>
<speaker>Derick Rethans</speaker>
<email>derick@mongodb.com</email>
<twitter>derickr</twitter>
<joindin></joindin>

<slide>slides/mongodb/title.xml</slide>

<slide>slides/mongodb/what-is-mongodb.xml</slide>
<slide>slides/mongodb/collections-documents.xml</slide>
<slide>slides/mongodb/document.xml</slide>

<!-- DATA STORAGE -->
<!--
	No more [ lon, lat ], but geojson instead

SAY WHERE ELSE GeoJson is used
-->
<slide>slides/mongodb/idx-geo.xml</slide>
<slide>slides/mongodb/flat-vs-sphere.xml</slide>
<slide>slides/mongodb/geojson.xml</slide>

<!--
	POINT:
    show an image, and the GeoJson under 
-->
<slide>slides/mongodb/geojson-point.xml</slide>
<!--
	LINESTRING:
    show an image, and the GeoJson under 
-->
<slide>slides/mongodb/geojson-linestring.xml</slide>
<!--
	POLYGON:
    show an image, and the GeoJson under 
-->
<slide>slides/mongodb/geojson-polygon.xml</slide>

<!--
	CELLS,
    We divide the surface of the earth into cells
        A library called S2 from Google does the hard work
    Cells have a level which define the size of the cell.
    S2 provides 31 levels
    The higher the level, the smaller the cell, and therefore the more needed to cover the earth
    By default, we use all levels between 500m on a side and 100km on a side
-->


<!-- operators
    $near
        find stuff near a point
        index required
    $geoWithin
        find stuff within a polygon/circle
        index NOT required
    $geoIntersects
        find stuff that intersects with other stuff
        index NOT required

-->
<slide>slides/mongodb/geo-in-2.4.xml</slide>

<!-- near
	- Example with road and park
	- slide with index/no index, and comparsion with 2.2?
-->
<!-- geoWithin
	- Example with road and park
	- slide with index/no index, and comparsion with 2.2?
-->
<!-- geoIntersects
	- Example with road and park
	- slide with index/no index, and comparsion with 2.2?
-->
<slide>slides/mongodb/geo-near.xml</slide>


<!--
	GeoWithin/GeoIntersecs

    Generate a covering for geometry in query
    Look at all points in all overlapping cells
        Cells may be larger or smaller than our covering
        Must look at cells that contain our covering
        Must look at cells that we contain
    See if documents are within or intersect our query geometry

	Show examples of:
	- within: The Palace of Westminster (point) in "City of Westminster" (polygon)
	- intersect: thames (line) crossing London (polygon)
-->
<slide>slides/mongodb/geo-within.xml</slide>
<slide>slides/mongodb/geo-within-1.xml</slide>
<slide>slides/mongodb/geo-within-2.xml</slide>

<slide>slides/mongodb/geo-intersects.xml</slide>


<!--
Without index:
    $near
        Look at every point
        Sort by distance
        Very slow, so requires an index.
    $geoWithin
        Look at every document
        Is it within the query polygon?
        Order is arbitrary
    $geoIntersects
        Look at every document
        Does it intersect with the query geometry?
        Order is arbitrary
-->
<!-- AGGREGATION:

	- show tube stations per borough
	- show pubs by borough

http://docs.mongodb.org/manual/reference/aggregation/#stage._S_geoNear

- distance is important
- $geoNear in aggregation can't deal with more than one 2dsphere index
- spherical option is *required* when using a 2dsphere index
-->
<slide>slides/mongodb/geo-aggregation.xml</slide>
<slide>slides/mongodb/geo-aggregation2.xml</slide>

<slide>slides/mongodb/geo-conclusion.xml</slide>
<slide>slides/mongodb/resources.xml</slide>

</presentation>
