2012-05-03 1 views
1

Я знаю, что существует множество тем, посвященных вычислению от лат/длинной до метрической системы. Это решает первую часть моей проблемы.вычислить всю широту и долготу в метрической области

Второй (основная часть) моя проблема заключается в следующем:

  • У меня есть карты Google как карты приложение.
  • У меня есть лат & длинная пара точки
  • У меня есть метрическое расстояние, скажем, 30 метров.
  • Мне нужно указать пункт sql query.

Почему?

У меня есть много записей POI, которые могут быть расположены с этой длинной парой lat &. Я не хочу получать все результаты (причина: лучшая производительность).

Есть ли способ сделать что-то вроде:

select * from myTable where lat> .... and lat < ... and long > ... and long < ...? 

ли это возможно? И если это, как мне получить эти значения в ...?

С уважением!

ответ

1

вот пример запроса, который возвращает расстояние между поставщиком LAT/LNG и базы данных лат пар/LNG:

DECLARE 
@Latitude float, 
@Longitude float 

SET @Latitude = 46.51257000000000 
SET @Longitude = -84.33660900000000 

DECLARE @SampleData TABLE 
(
Name varchar(100), 
Lat float, 
Lng float 
) 

INSERT INTO @SampleData 
(Name, Lat, Lng) 
SELECT 'Point1', 46.52450048415351,-84.35223018530274 
UNION 
SELECT 'Point2', 46.51835838382206,-84.30279170874024 
UNION 
SELECT 'Point3', 46.522138220045285,-84.2622796237793 
UNION 
SELECT 'Point4', 46.54056115608927,-84.223140829834 

SELECT 
    Name, 
    Lat, 
    Lng, 
    -- using spherical law of cosines, where 6371 is the earth's radius in km. Returns km. 
    Distance = ACOS(SIN(RADIANS(@Latitude))*SIN(RADIANS(Lat))+COS(RADIANS(@Latitude))*COS(RADIANS(Lat))*COS(RADIANS([email protected])))*6371 
FROM 
    @SampleData 
Смежные вопросы