1. Build Your Own Foursquare!
Develop GeoSpatial Apps with
Zend, MongoDB and
OpenShift
Steven Citron-Pousty
PaaS Dust Spreader, Red Hat
@TheSteve0
1
2. Agenda
• Learn a little spatial
• Load some spatial data into mongo
• Do a query or two
SIGN UP CODE:
zendcon
2
3. Git repo for the data and code
https://github.com/thesteve0/parks-php-zf2
Please remember the point here is not that this is great PHP or ZF2 code. This is
mostly to show you how to do spatial queries in mongo through PHP. The main file
with that code is:
https://github.com/thesteve0/parks-php-
zf2/blob/master/module/Application/src/Application/Controller/IndexController.php
The data file is in the root dir and is called parks.json
3
4. Assumptions
1) You can use the command line
2) You are comfortable with Mongo command line
3) Please ask questions – though since there are things I
really want to cover, they may have to wait until the
end or after the session
4
5. What is OpenShift?
Red Hat’s free platform as a service for applications in the cloud.
5
11. There’s more? What’s the catch?
• OpenShift is free-as-in-beer & free-as-in-freedom
• Three 512 MB RAM / 1 GB storage gears
• Need more resources, just ask!
• We are really in Developer Preview
11
13. Spatial is fun
The only spatial functionality Mongo currently has is:
1) Near
2) Containment
All of it is laid out on one page:
http://www.mongodb.org/display/DOCS/Geospatial+Inde
xing
First link on a google search for “mongodb spatial
indexing”
13
14. Caveats
1. Assumes coords. are between -180 and 180
2. Can handle any 2D coordinates
3. Has methods to handle curvature of the earth
(spherical)
14
15. How to make it work
1) Put your coordinates into an arrary
{ loc : [ 50 , 30 ] } //SUGGESTED OPTION
{ loc : { x : 50 , y : 30 } }
{ loc : { foo : 50 , y : 30 } }
{ loc : { lon : 40.739037, lat: 73.992964 } }
2) Make a 2d index
db.places.ensureIndex( { loc : "2d" } )
15
16. Demo
1. I have an app and a mongo instance running
2. Load some spatial data in JSON format
3. Make the 2d index
4. Do some fun spatial and mongoDB work
5. Show some PHP code that takes advantage of it
16
17. Conclusion
1. Spatial is easy and fun on Mongo with PHP
2. You can now build your own FourSquare or other
checkin application.
3. You can also build your own field data entry system.
4. You can build and deploy your application quickly
without having to think about infrastructure.
SIGN UP CODE:
zendcon
http://openshift.redhat.com
17