Как сохранить longitute & latitude в качестве географии в sql server 2014?
Я начинающий sql, который знает, как получить местоположение моих пользователей в долготе и координатах latitute. Моя цель-в конечном итоге выбрать все строки из myTable, где расстояние меньше 2 км. Однако на моем пути к этой цели есть некоторые вещи, которые смущают меня, поэтому я попытаюсь перечислить то, что я не понимаю.
Как я могу использовать longitute и latitute для хранения местоположения в столбце географии?(потому что это должен быть только один географический пункт не два, верно? не longitute и один для latitute?)
теперь, когда у меня есть географические точки, как я могу выбрать все строки на определенном расстоянии (в моем случае 2 км)?
Я уже видел некоторые подобные вопросы, однако количество предварительного понимания для их решения выходит за рамки моих знаний sql, так как я абсолютный новичок, можно ли это сделать легко, кто-нибудь знает, как? Любая помощь или ввод высоко ценится, спасибо!
2 ответов
как я могу использовать longitute и latitute для хранения местоположения в столбце географии?(потому что это должна быть только одна географическая точка, а не две, верно? не longitute и один для latitute?)
можно использовать geography::STPointFromText
/ geography::Point
для хранения долготы и широты в типе данных географии.
SELECT geography::STPointFromText('POINT(' + CAST([Longitude] AS VARCHAR(20)) + ' ' + CAST([Latitude] AS VARCHAR(20)) + ')', 4326)
или
SELECT geography::Point(Latitude, Longitude , 4326)
Ссылки:
География Обновление столбец в таблице
теперь, когда у меня есть географические точки, как я могу выбрать все строки на определенном расстоянии (в моем случае 2 км)?
можно использовать STDistance
такой.
DECLARE @g geography;
DECLARE @h geography;
SET @g = geography::STGeomFromText('POINT(-122.35900 47.65129)', 4326);
SET @h = geography::STGeomFromText('POINT(-122.34720 47.65100)', 4326);
SELECT @g.STDistance(@h);
Ссылки:
расстояние между двумя точками с использованием типа данных Geography в sqlserver 2008?
Вставить Запрос
DECLARE @GeoTable TABLE
(
id int identity(1,1),
location geography
)
--Using geography::STGeomFromText
INSERT INTO @GeoTable
SELECT geography::STGeomFromText('POINT(-122.35900 47.65129)', 4326)
--Using geography::Point
INSERT INTO @GeoTable
SELECT geography::Point(47.65100,-122.34720, 4326);
Получить Расстояние Запрос
DECLARE @DistanceFromPoint geography
SET @DistanceFromPoint = geography::STGeomFromText('POINT(-122.34150 47.65234)', 4326);
SELECT id,location.Lat Lat,location.Long Long,location.STDistance(@DistanceFromPoint) Distance
FROM @GeoTable;
дополнение к вышеуказанному ответу @ughai
добавление столбца
ALTER TABLE [dbo].[Landmark]
ADD [GeoLocation] GEOGRAPHY
GO
преобразование долготы и широт в географию
UPDATE [dbo].[Landmark]
SET [GeoLocation] = geography::STPointFromText('POINT(' + CAST([Longitude]
AS VARCHAR(20)) + ' ' +
CAST([Latitude] AS VARCHAR(20)) + ')', 4326)
GO
поиск мест в радиусе 2kms
DECLARE @Origin GEOGRAPHY,
-- distance defined in meters
@Distance INTEGER = 2000;
SET @Origin = GEOGRAPHY::STGeomFromText('POINT(17.482477 78.546871)', 4326);
-- return all rows from events in 2km radius
SELECT *,GeoLocation.STDistance(@Origin) Distance FROM dbo.Locations WHERE @Origin.STDistance(GeoLocation) <= @Distance;
он работал для меня, чтобы получить места в пределах