География SQL Server 2008.STBuffer() единицы измерения расстояния
Я работаю с географической точкой, используя широту / долготу, и мне нужно найти другие точки в нашей базе данных в радиусе 5 миль от этой точки. Тем не менее, я не могу выяснить, что такое "единицы измерения" для STBuffer, похоже, он не соответствует футам, милям, метрам, километрам и т. Д. В документации они упоминаются только как "единицы измерения", любые предложения? Спасибо
[...] из географии::STGeomFromText('POINT(x y)', 4326).STBuffer(z).STIntersects(география::STGeomFromText('POINT(' + CAST(v.Longitude as varchar(max)) + ' ' + CAST(v.Latitude as varchar(max)) + ')', 4326)) = 1
2 ответа
STBuffer находится в метрах. Больше информации здесь.
Чтобы преобразовать мили в метры, разделите количество миль на 0,0006213712.
(т. е. 5 миль / 0,0006213712 = 8,046,72 метра)
Единица измерения зависит от используемой системы пространственной привязки. Смотрите этот системный вид для деталей:
SELECT * FROM sys.spatial_reference_systems;
Для тех, кто посещает эту страницу, кого смущает, почему их буферные расстояния могут не отображаться в метрах, это может быть связано с тем, что вы используете тип данных геометрии, а не тип данных географии. В моем случае было ясно, что география работает с метрами, а геометрия - нет (кажется, в градусах?), Даже если система пространственной привязки настроена правильно для геометрии.
Чтобы преобразовать широту и долготу в географическую точку:
geography::Point(latitude, longitude, 4326) -- 4326 is WGS-84 EPSG Projection