raindropz Posted November 6, 2007 Share Posted November 6, 2007 Hello all. I'm stucked with something, maybe someone can help me. ??? -I've got a function that calculates the distance between two points of the world (given the latitude/longitude coordinates). -I have a mysql table with the latitudes/longitudes of different cities. -What I need to do is the invertion of the script. I mean: given an initial point (longitude/latitude) and a radius distance, then select each cities in this radious (Example: Select All cities inside a distance of 50 miles from CityX). -Could PLEASE somebody help me with the MySql Query that I need to perform? I'm truly lost about this. :'( Well, this is what I got: 1. This is the table structure: city varchar(90) latitude decimal(10,7) longitude decimal(10,7) 2. This is the function I have: [color=blue]<?php /*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/ /*:: :*/ /*:: this routine calculates the distance between two points (given the :*/ /*:: latitude/longitude of those points). it is being used to calculate :*/ /*:: the distance between two zip codes or postal codes using our :*/ /*:: zipcodeworld(tm) and postalcodeworld(tm) products. :*/ /*:: :*/ /*:: definitions: :*/ /*:: south latitudes are negative, east longitudes are positive :*/ /*:: :*/ /*:: passed to function: :*/ /*:: lat1, lon1 = latitude and longitude of point 1 (in decimal degrees) :*/ /*:: lat2, lon2 = latitude and longitude of point 2 (in decimal degrees) :*/ /*:: unit = the unit you desire for results :*/ /*:: where: 'm' is statute miles :*/ /*:: 'k' is kilometers (default) :*/ /*:: 'n' is nautical miles :*/ /*:: united states zip code/ canadian postal code databases with latitude & :*/ /*:: longitude are available at http://www.zipcodeworld.com :*/ /*:: :*/ /*:: For enquiries, please contact sales@zipcodeworld.com :*/ /*:: :*/ /*:: official web site: http://www.zipcodeworld.com :*/ /*:: :*/ /*:: hexa software development center © all rights reserved 2004 :*/ /*:: :*/ /*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/ function distance($lat1, $lon1, $lat2, $lon2, $unit) { $theta = $lon1 - $lon2; $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta)); $dist = acos($dist); $dist = rad2deg($dist); $miles = $dist * 60 * 1.1515; $unit = strtoupper($unit); if ($unit == "K") { return ($miles * 1.609344); } else if ($unit == "N") { return ($miles * 0.8684); } else { return $miles; } } echo distance(32.9697, -96.80322, 29.46786, -98.53506, "m") . " miles "; echo distance(32.9697, -96.80322, 29.46786, -98.53506, "k") . " kilometers "; echo distance(32.9697, -96.80322, 29.46786, -98.53506, "n") . " nautical miles ";[/color] Thanks for all! -Raindropz Quote Link to comment Share on other sites More sharing options...
toplay Posted November 6, 2007 Share Posted November 6, 2007 You didn't post it in the wrong forum. I moved it here. If you're asking for a MySQL query help, then it belongs here! Quote Link to comment Share on other sites More sharing options...
raindropz Posted November 6, 2007 Author Share Posted November 6, 2007 Oh... I see... Well it's good to know that!, I was just starting to think that I was crazy lol Quote Link to comment Share on other sites More sharing options...
Barand Posted November 6, 2007 Share Posted November 6, 2007 Something like SELECT * FROM cities WHERE 60 * 1.1515 * DEGREES(ACOS(SIN(RADIANS($cityXlat)) * SIN(RADIANS(latitude)) + COS(RADIANS($cityXlat)) * COS(RADIANS(latitude)) * COS(RADIANS($cityXlong-longitude)))) <= 50 Quote Link to comment Share on other sites More sharing options...
raindropz Posted November 6, 2007 Author Share Posted November 6, 2007 It works Thanks for the support!! -raindropz Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.