Поиск радиуса по широте/долготе
Я нашел несколько ответов для этого вопроса, используя mysql, но мне не удалось преобразовать что-либо в запрос, который может использовать sql sqs 2008. У меня есть столбец долготы и широты для каждой строки в базе данных. Я собираюсь иметь широту и долготу, где пользователь. Я хочу, чтобы найти все строки, которые находятся в пределах x миль от пользователя широты/долготы. Также при попытке использовать другие запросы, которые я нашел на SO, я продолжаю получать ошибку - 'pow' is not a recognized built-in function name.
, что странно, потому что я уверен, что использовал pow
раньше в sql 2008. Любая помощь с этим была бы весьма признательна, Пока это самое близкое, что может придумать.
select * from tbl_MyTable
WHERE (
POW( ( 69.1 * ( Longitude - @longitude ) * cos( @latitude / 57.3 ) ) , 2 ) + POW( ( 69.1 * ( Latitude - @latitude ) ) , 2 )
) < ( 5 *5 );
Ответы
Ответ 1
Поскольку вы работаете с SQL 2008, рассмотрите возможность использования собственных геопространственных возможностей. Вы можете делать модные вещи, как:
- Создайте постоянный вычисляемый столбец географического типа, который представляет вашу точку зрения.
- Создайте пространственный индекс для вычисляемого столбца. Это сделает такие вещи, как
yourPoint.STDistance(@otherPoint) <= @distance
эффективными
Вот так:
alter table [yourTable] add [p] as geography::Point(Latitude, Longitude, 4326) persisted;
create spatial index [yourSpatialIndex] on [yourTable] ([p])
declare @Latitude float = <somevalue>, @Longitude float = <somevalue>;
declare @point geography = geography::Point(@Latitude, @Longitude, 4326);
declare @distance int = <distance in meters>;
select * from [yourTable] where @point.STDistance([p]) <= @distance;
Ответ 2
Я думаю, вы хотите POWER not POW
http://msdn.microsoft.com/en-us/library/ms174276.aspx
Ответ 3
DECLARE @CurrentLocation geography;
SET @CurrentLocation = geography::Point(12.822222, 80.222222, 4326)
SELECT * , Round (GeoLocation.STDistance(@CurrentLocation ),0) AS Distance FROM [Landmark]
WHERE GeoLocation.STDistance(@CurrentLocation )<= 2000 -- 2 Km
Замечательное учебное пособие
http://www.sql-server-helper.com/sql-server-2008/convert-latitude-longitude-to-geography-point.aspx