Первое: поскольку Земля не плоская, вместо нее используйте geography
типы:
--Closest point from polygon
DECLARE @g geography = geography::Point(60.32819571126778, 5.1752474, 4326)
--Reference point
DECLARE @h geography = geography::Point(60.3290297, 5.1752474, 4326)
SELECT @g.STDistance(@h)
Возвращает 92,9212347595042
[метров], что кажется правильным.
Второе: чтобы использовать полигон, необходимо позаботиться о ориентации . Существует различие между «внутренним многоугольником» и «внешним многоугольником» в типе географии. Если полигон покрывает половину Земли - какую половину следует выбрать? Это определяется ориентацией. Я переключил точки № 2 и № 4. Смотрите следующий пример:
DECLARE @g geography = geography::STPolyFromText('POLYGON ((
5.177074447274207 60.32819571126778,
5.172660537064075 60.32819571126778,
5.172660537064075 60.32533671620816,
5.177074447274207 60.32533671620816,
5.177074447274207 60.32819571126778))', 4326);
DECLARE @h geography = geography::Point(60.3290297, 5.1752474, 4326)
SELECT @g.STDistance(@h)
Возвращает 92,9192581745513
[метры], что кажется правильным.
В-третьих: убедитесь, что ваши координаты широты и долготы не переключены: см. Point
против STPolyFromText
.