haven't followed the complete thread so i don't know what you're
after, but maybe this helps?

SELECT latitude, longitude, SQRT( POW( 69.1 * ( latitude - [startlat]
) , 2 ) + POW( 69.1 * ( [startlng] - longitude ) * COS( latitude /
57.3 ) , 2 ) ) AS distance FROM foobar ORDER BY distance ASC

where [starlat] and [startlng] is the position where to start
messuring the distance.

On 2/3/07, M5 <[EMAIL PROTECTED]> wrote:
Thanks for the reply... It returns results, but not exactly what I am
hoping for--basically, I get the nearest latitudes (but not near
longitude), and nearest longitude (but not near latitudes). In other
words, it doesn't return the closest lat/lng pair... Also, the query
takes about 8 seconds to run, so maybe there's a better way?

I've been looking at the spatial extensions, and made some progress.
I created a new column of type POINT. Here's the table definition:

CREATE TABLE `map_data` (
   `id` int(10) unsigned NOT NULL auto_increment,
   `meridian` tinyint(3) unsigned NOT NULL,
   `range` tinyint(3) unsigned NOT NULL,
   `township` tinyint(3) unsigned NOT NULL,
   `section` tinyint(3) unsigned NOT NULL,
   `quartersection` varchar(2) collate latin1_general_ci NOT NULL,
   `latitude` decimal(10,8) NOT NULL,
   `longitude` decimal(12,8) NOT NULL,
   `coordinates` point default NULL,
   PRIMARY KEY  (`id`),
   KEY `latlng` (`latitude`,`longitude`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci
AUTO_INCREMENT=0 ;

...And then reloaded the ~800,000 records into the table (and adding
the latitude and longitude to the POINT column)...

  INSERT INTO map_data (meridian, range, township, section,
quartersection, latitude, longitude, coordinates)
VALUES('4','01','001','01','E4','49.00701238','-110.00507933',
GeomFromText('POINT(49.00701238 -110.00507933)')  ),
('4','01','001','01','N4','49.01415809','-110.01615511', GeomFromText
('POINT(49.01415809 -110.01615511)')  )
,('4','01','001','01','NE','49.01424023','-110.00508075', GeomFromText
('POINT(49.01424023 -110.00508075)')  );

So now that the table has a column that is spatially savvy, how would
I write a SELECT that fetches the one record with coordinates closest
(in terms of distance) to a given latitude/longitude? I don't mean to
be lazy, but there's very little documentation on this. Any help is
much appreciated. Thanks!

...Rene

On 2-Feb-07, at 8:50 PM, ViSolve DB Team wrote:

> Hi,
>
> Try like this....
>
> (SELECT * FROM (SELECT * FROM tab_name ORDER BY latitute ASC,
> longitude ASC) a
> WHERE a.latitude<=givenvalue AND a.longitude<=givenvalue
> LIMIT 0,5)
> UNION
> (SELECT * FROM (SELECT * FROM tab_name ORDER BY latitute ASC,
> longitude ASC) b
> WHERE b.latitude>givenvalue AND b.longitude>givenvalue
> LIMIT 0,5)
> ;
>
> Thanks,
> ViSolveDB Team
>
> ----- Original Message ----- From: "M5" <[EMAIL PROTECTED]>
> To: <mysql@lists.mysql.com>
> Sent: Saturday, February 03, 2007 7:30 AM
> Subject: How to SELECT rows closest to value
>
>
>> Simply put, I have a table of ~800,000 records containing, among
>> other things, latitude and longitude values. Given a lat/lng pair,
>> I  would like to SELECT from this table the 10 rows containing
>> latitude/ longitude values closest to the given lat/lng pair.
>> Possible?
>>
>> ...Rene
>>
>>
>> --
>> MySQL General Mailing List
>> For list archives: http://lists.mysql.com/mysql
>> To unsubscribe: http://lists.mysql.com/mysql?
>> [EMAIL PROTECTED]
>>
>>
>>
>> --
>> No virus found in this incoming message.
>> Checked by AVG Free Edition.
>> Version: 7.1.411 / Virus Database: 268.17.19/663 - Release Date:
>> 2/1/2007
>>
>
>
> --
> MySQL General Mailing List
> For list archives: http://lists.mysql.com/mysql
> To unsubscribe:    http://lists.mysql.com/mysql?
> [EMAIL PROTECTED]
>
>
>


--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]




--
Lars Schwarz
Gottorpstrasse 20
26122 Oldenburg
T 0441 2171 354 0
F 0441 2171 354 0
M 0179 512 4628

--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to