mirror of
https://github.com/php/presentations.git
synced 2026-03-23 23:22:22 +01:00
188 lines
5.3 KiB
XML
188 lines
5.3 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<presentation css="10gen-strict.css">
|
|
<topic>MongoDB</topic>
|
|
<title>Locate All The Things</title>
|
|
<event>PHP Benelux 2017</event>
|
|
<location>Edegem, Belgium</location>
|
|
<lat>51.15056</lat><lon>4.43284</lon>
|
|
<date>January 28th, 2017</date>
|
|
<speaker>Derick Rethans</speaker>
|
|
<email>derick@mongodb.com</email>
|
|
<twitter>derickr</twitter>
|
|
<joindin>https://joind.in/talk/a0119</joindin>
|
|
|
|
<slide>slides/mongodb/title.xml</slide>
|
|
<slide>slides/mongodb/me.xml</slide>
|
|
|
|
<slide>slides/mongodb/closed-pub.xml</slide>
|
|
<!-- A few words about our dataset -->
|
|
|
|
<slide>slides/mongodb/few-words-about-osm.xml</slide>
|
|
|
|
<slide>slides/map/osm-data.xml</slide>
|
|
|
|
<slide>slides/mongodb/osm-import-tags-section.xml</slide>
|
|
|
|
<slide>slides/map/osm-tags1.xml</slide>
|
|
<slide>slides/map/osm-tags2.xml</slide>
|
|
<slide>slides/map/osm-tags3.xml</slide>
|
|
|
|
|
|
<slide>slides/mongodb/osm-to-mongo-data.xml</slide>
|
|
<slide>slides/mongodb/osm-to-mongo-data2.xml</slide>
|
|
<slide>slides/mongodb/osm-to-mongo-data3.xml</slide>
|
|
<slide>slides/mongodb/osm-to-mongo-data4.xml</slide>
|
|
|
|
<slide>slides/mongodb/osm-import-4times-section.xml</slide>
|
|
<slide>slides/mongodb/osm-schema1.xml</slide>
|
|
<slide>slides/mongodb/osm-schema2.xml</slide>
|
|
<slide>slides/mongodb/osm-schema4.xml</slide>
|
|
<slide>slides/mongodb/osm-schema3.xml</slide>
|
|
<slide>slides/mongodb/osm-schema-summary.xml</slide>
|
|
|
|
<!-- DATA STORAGE -->
|
|
<!--
|
|
No more [ lon, lat ], but geojson instead
|
|
|
|
SAY WHERE ELSE GeoJson is used
|
|
-->
|
|
<slide>slides/mongodb/osm-import-location-section.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
|
|
-->
|
|
<slide>slides/mongodb/cells.xml</slide>
|
|
<!--
|
|
Show grid of (part of) London:
|
|
- Point, Westminster palace
|
|
- Line, Oxford Street
|
|
- Polygon, Hyde Park
|
|
-->
|
|
<slide>slides/mongodb/cells-level10-example-london-1.xml</slide>
|
|
<slide>slides/mongodb/cells-level10-example-london-2.xml</slide>
|
|
<slide>slides/mongodb/cells-level10-example-london-3.xml</slide>
|
|
|
|
<slide>slides/map/osm-xapi.xml</slide>
|
|
<slide>slides/map/osm-data.xml</slide>
|
|
<slide>slides/map/import-script-manchester.xml</slide>
|
|
|
|
|
|
<!-- 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>
|
|
|
|
<!--
|
|
NEAR
|
|
|
|
Starts from a point
|
|
Looks at concentric donuts from that point
|
|
Want to look at documents within the donut
|
|
If distance from query point to document is within the donut, output
|
|
Adapts size of the donut as needed
|
|
-->
|
|
<!--
|
|
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-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/osm-import-leaflet-section.xml</slide>
|
|
|
|
<slide>slides/map/leaflet.xml</slide>
|
|
<slide>slides/map/leaflet-ajax.xml</slide>
|
|
<slide>slides/map/leaflet-json-return.xml</slide>
|
|
|
|
<slide>slides/mongodb/resources.xml</slide>
|
|
|
|
</presentation>
|