Hacker News new | ask | show | jobs
by stewsnooze 5822 days ago
Check out this code for searching locally with mongo. It doesn't get simpler. Straight from geosay.com

class GeosayController < ApplicationController

  def api

    expires_in 1.minutes, :public => true

    results = Tweet.near(params[:lat].to_f,params[:lon].to_f)

    render :json => results
  end
end

....

class Tweet

  include MongoMapper::Document

  def self.near(lat, lon)

    self.all( :latlong  => {'$near'  => [lat, lon]}, :limit => 30) 

  end
end
1 comments

We chose mongodb after reading this page http://www.mongodb.org/display/DOCS/Geospatial+Indexing

Before then we were looking at Postgres for its geo stuff and things like cassandra also.

as someone building a location based service, why not just store the lat/long in a table column and query for < >? Is it that much more efficient to use a specialized product?
Our understanding is mongodb should scale to tens of millions of rows better than a SQL database (which would be a nice problem to have)

Once we made the decision to use mongodb, it made sense to use the built in near functionality, rather than roll it ourselves.

Indeed. I am using Django to build my app and a mysql db with 2 float fields for lat/long. GeoDjango and GIS extensions for mysql seemed like over kill, plus I don't really know what I am doing but it seems to work. Django doesn't have very good support for mongo. Well, the django orm.
To be honest I can see absolutely no reason why you can't use floats as you describe and < , >. Depending on what you are doing it may be a little tricky due to lat/longs being angular values, but over small distances I think this can be largely ignored. (In geosay we have some front end code that sorts out the niceties of the angular stuff)