How can I check if my lat/long is in the city limits or example, Greater London is enclosed by:
[bbox=-0.489,51.28,0.236,51.686]
Source :
http://wiki.openstreetmap.org/wiki/Bounding_Box
How can I check if a location (lat/lon):
51.55238,0.047032
Is there a gem already for this? Or what would be the best way to do this?
Bounty update:
I have a working solution but I feel its not the right one, I'm using geocoder gem, and my user has geocoded_by, and lat/long attributes. So here is how I do it :
def self.user_from_dublin(user_id)
near([53.349937,-6.261917], 15).pluck(:id).include?(user_id)
end
So this loads all users from Dublin and compares the id of the user to those users in Dublin. If the id is found the user is considered to be from Dublin.
I don't think this will work well when there is more users.
Update
I'm using postgres database
If its a boolean why not use
where
to limit the results to only your user. This way it will just involve one SQL query that will either be empty or have a size of 1 (your user being the only record)empty?
will be true when your user is not within your boundary, so the!
at the beginning will negate this and your function will returnfalse
when the user is not within the boundary.You don't need anything special for this.
Bounding Box is a rectangle:
The weird (left-bottom) to (top-right) numbering is because, Longitude is measured left-to-right (to simplify, -180° is left of the globe, +180° is right of the globe), whereas Latitude is measured bottom-to-top (to simplify, -90° is bottom of the globe, +90° is top of the globe).
So as per the example,
Now you want to know whether a point (5,5) falls inside it.
So all you have to do is just create a table for cities in Postgres (or any database for that matter):
Now suppose you want to find out which city falls under a position
latitude=5, longitude=6
, then just use the following query:Substitute 5 and 6 with the user's latitude/longitude, and you will get the city where the user falls under.
EDIT: Small mix-up, minor formatting
You don't exactly say... but if what you want is the name of the nearest city to a Lat/Lon coordinate anywhere, then you could use google maps Geocoder services - set up a GeocoderRequest with a LatLng to search and issue a request.