Круг SQL Server

Я пытаюсь создать круг в SQL Server на основе средней точки и радиуса.

Это кажется близким как решение, но оно создает овал или эллипс по кругу. Есть ли другой способ создать круг?

DECLARE @g geometry;
SET @g = geometry::STGeomFromText('POINT(-88.0 44.5)', 4326);
select @g.BufferWithTolerance(5, .01, 1)

В настоящее время я использую SQL Server 2008.

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

IF EXISTS (SELECT * FROM [tempdb].[sys].[objects] WHERE [name] = N'##circle')
    DROP TABLE ##circle;

CREATE TABLE ##circle
(
    [Polygon] [geometry] NOT NULL
)

DECLARE @g geometry;
SET @g = geometry::STGeomFromText('POINT(-88.0 44.5)', 4326);

insert into ##circle (Polygon) 
values (@g.BufferWithTolerance(.5,.01,1))

select Polygon from ##circle

Ответ 1

Ваша проблема в том, что вы рисуете круг в географических координатах. Google Maps использует прогноз веб-меркатора https://en.wikipedia.org/wiki/Web_Mercator, так что ваш круг будет овальным. Если вы хотите сделать что-то похожее на круг в Картах Google, вы должны сделать это в наборе данных с проекцией веб-меркатора. (Я намеренно говорю "выглядит как круг", так как если вы проецируете его в другую систему, например utm для крупномасштабной карты, это может снова стать овалом.)

код epsg для web_mercator равен 3857, поэтому, если вы проецируете координаты x и y в web_mercator

DECLARE @g geometry;
SET @g = geometry::STGeomFromText('POINT(-9796115.18981 5543147.20386)', 3857);
SELECT @g.BufferWithTolerance(5, .01, 1)

Должен работать (просто введите -9796... 5543... Являются ли web_mercator координатами для ваших географических X и Y)

Похоже, вам нужно использовать пространственные инструменты SQL Server (https://gis.stackexchange.com/info/2723/is-it-possible-to-reproject-spatial-data-using-sql-server) или внешний инструмент для выполнения перепрограммирования. Если у вас всего несколько точек, http://cs2cs.mygeodata.eu/ может быть полезно.