geolocation in mongodb

26
GEOLOCATION IN MONGODB { name: ‘Shashank Tiwari’, web: ‘shanky.org’} Wednesday, November 28, 12

Upload: mongodb

Post on 05-Dec-2014

9.128 views

Category:

Technology


0 download

DESCRIPTION

Shashank Tiwari goes through the basics of Geolocation queries and indexing in MongoDB.

TRANSCRIPT

Page 1: Geolocation in mongodb

GEOLOCATION IN MONGODB

{ name: ‘Shashank Tiwari’, web: ‘shanky.org’}

Wednesday, November 28, 12

Page 2: Geolocation in mongodb

WHO AM I?

Entrepreneur, developer, author

Most recent book: Professional NoSQL (Wiley, 2011)

Co-founder :

Wednesday, November 28, 12

Page 3: Geolocation in mongodb

DEGREES OF MEASURE

Latitude

Longitude

Wednesday, November 28, 12

Page 4: Geolocation in mongodb

DEGREE OF LONGITUDE

Wednesday, November 28, 12

Page 5: Geolocation in mongodb

GEO IN MONGO

Is a world in 2D

Wednesday, November 28, 12

Page 6: Geolocation in mongodb

MONGO DOC WITH LOC

{ loc : [37.407202, -122.10716] }

{ loc : { x: 37.407202, y: -122.10716} }

{ loc : { lat: 37.407202, lon: -122.10716} }

Wednesday, November 28, 12

Page 7: Geolocation in mongodb

INDEX

db.places.ensureIndex( { loc : "2d" } )

1 geospatial index per collection

Wednesday, November 28, 12

Page 8: Geolocation in mongodb

INDEX RANGE

db.places.ensureIndex( { loc : "2d" } , { min : -500 , max : 500 } )

Wednesday, November 28, 12

Page 9: Geolocation in mongodb

INDEX PRECISION

db.places.ensureIndex( { loc : "2d" } , { bits : 26 } )

Geo-hash precision of 26bits ~ 2 feet

Wednesday, November 28, 12

Page 10: Geolocation in mongodb

EXACT QUERIES

> db.places.find({ loc : [ 37.407202, -122.10716 ]});

{ "_id" : ObjectId("50b69e66e6945f62a019f3a4"), "name" : "San Antonio Caltrain", "loc" : [ 37.407202, -122.10716 ] }

Wednesday, November 28, 12

Page 11: Geolocation in mongodb

EXPLAIN QUERY PLAN

db.places.find({ loc : [ 37.407202, -122.10716 ]}).explain();

Wednesday, November 28, 12

Page 12: Geolocation in mongodb

COMPOUND INDEX

db.places.ensureIndex( { loc : "2d", name : 1 } )

Wednesday, November 28, 12

Page 13: Geolocation in mongodb

NEAR QUERY

db.places.find({ loc : { $near : [ 37.407202, -122.10716 ]}});

Returns points sorted by distance

Wednesday, November 28, 12

Page 14: Geolocation in mongodb

WITH MAXDISTANCE

db.places.find({ loc : { $near : [ 37.407202, -122.10716 ], $maxDistance : 0.05}});

What is the unit of maxDistance? -- for latitude & longitude 1 degree ~ 69 miles

Wednesday, November 28, 12

Page 15: Geolocation in mongodb

GEONEAR QUERY

db.runCommand({ geoNear : "places", near : [37.407202, -122.10716], num : 5 });

also gives the distance

Wednesday, November 28, 12

Page 16: Geolocation in mongodb

MORE WITH GEONEAR

db.runCommand({ geoNear : "places", near : [37.407202, -122.10716], num : 5, type : “DO” });

parameters: near, num, maxDistance, query

Wednesday, November 28, 12

Page 17: Geolocation in mongodb

WITHIN A BOX

db.places.find({ loc : { $within : { $box : [[39.589821, -122.438831], [37.485200, -122.228438]] }}});

Wednesday, November 28, 12

Page 18: Geolocation in mongodb

WITHIN A CIRCLE

db.places.find({ loc : { $within : { $center : [[39.589821, -122.438831], 10] }}});

Wednesday, November 28, 12

Page 19: Geolocation in mongodb

WITHIN A POLYGON

Polygon shapes currently cannot be indexed

Wednesday, November 28, 12

Page 20: Geolocation in mongodb

SPHERICAL SUPPORT

geoNear -- spherical : true

$nearSphere

$centerSphere

Order is important, very important -- longitude, latitude

Wednesday, November 28, 12

Page 21: Geolocation in mongodb

MULTI LOCATIONS

db.places.insert({ placesVisitedToday : [ { name : "San Antonio Caltrain", loc : [37.407202, -122.10716] }, { name : "Kixeye", loc : [37.7906672, -122.403256] } ] })

Wednesday, November 28, 12

Page 22: Geolocation in mongodb

QUERY MULTI LOC

db.places.ensureIndex( { " placesVisitedToday.loc " : "2d"} )

use uniqueDocs : true to get unique documents

Wednesday, November 28, 12

Page 23: Geolocation in mongodb

Wednesday, November 28, 12

Page 24: Geolocation in mongodb

Wednesday, November 28, 12

Page 25: Geolocation in mongodb

NEXT TALK

More details and some about GIS too!

SV MongoDB User Group @ Palo Alto -- January Meetup

Wednesday, November 28, 12

Page 26: Geolocation in mongodb

THANKS

More questions? web: shanky.org | twitter : @tshanky

Want to join the alpha program? doaround.com

Wednesday, November 28, 12