рассчитать все широты и долготы в метрической области

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

Вторая (основная) моя проблема такова:

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

Почему?

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

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

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

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

С Уважением!


person eav    schedule 03.05.2012    source источник


Ответы (2)


Взгляните на статью: Выбор точек внутри ограничивающего круга

и вопрос SO: SQL-запрос для выполнения поиска по радиусу на основе широты и долготы

Это должно помочь вам начать.

person Sean Mickey    schedule 03.05.2012
comment
Хорошо, это очень похоже на мою проблему. (Но решение не так уж и красиво .. :-D) в любом случае. Благодарность! +1 - person eav; 04.05.2012

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

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(Lng-@Longitude)))*6371  
FROM 
    @SampleData
person ScottE    schedule 04.05.2012