География 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
Другие вопросы по тегам