SQL Server Geography Query работает, но Geometry Query не работает - разные таблицы, похожие схемы

Я пытаюсь заставить запрос Geometry работать. Подобный запрос Geography работает нормально, но я должен работать с таблицей, которая использует тип Geometry. Хотя версия Geography возвращает много записей, как и ожидалось, я не могу получить версию Geometry для возврата каких-либо записей. Обе таблицы имеют одинаковые записи широты и долготы.

Этот запрос географии работает нормально:

DECLARE @home GEOGRAPHY
SET @home = GEOGRAPHY::STPointFromText('POINT(-0.7799193 51.3083162 )', 4326);

SELECT OutwardCode, InwardCode, Latitude, Longitude
FROM dbo.PostCodeData
WHERE GeoLocation.STDistance(@home) <= (5 * 1609) -- 1609 = approx metres in 1 mile

Схема таблицы:

+-------------+--------------+
|    Field    |     Type     |
+-------------+--------------+
| OutwardCode | Varchar(4)   |
| InwardCode  | Varchar(3)   |
| Latitude    | Decimal(9,6) |
| Longitude   | Decimal(9,6) |
| GeoLocation | Geography    |
+-------------+--------------+

Пример таблицы данных:

+-------------+------------+------------+----------+------------------------------------------------+
| OutwardCode | InwardCode | Longitude  | Latitude |                  GeoLocation                   |
+-------------+------------+------------+----------+------------------------------------------------+
| GU14        | 9HL        | -0.7803759 | 51.30818 | 0xE6100000010C01A4367172A7494027C522E1D6F8E8BF |
+-------------+------------+------------+----------+------------------------------------------------+

Этот запрос Geometry не возвращает записей (у меня есть точно такие же записи широты и долготы в базе данных, но в качестве центральной точки для улицы используется Geometry, а Postcode - это объединенная версия OutwardCode и InwardCode):

DECLARE @home GEOMETRY
SET @home = GEOMETRY::STPointFromText('POINT(51.3083162 -0.7799193)', 0);

SELECT Postcode, Latitude, Longitude
FROM dbo.OS_Locator
WHERE Centre.STDistance(@home) <= (5 * 1609) -- 1609 = approx metres in 1 mile

Схема таблицы:

+-----------+--------------+
|   Field   |     Type     |
+-----------+--------------+
| Postcode  | nvarchar(10) |
| Latitude  | Decimal(9,6) |
| Longitude | Decimal(9,6) |
| Centre    | Geometry     |
+-----------+--------------+

Пример таблицы данных:

+----------+-----------+-----------+------------------------------------------------+
| Postcode | Latitude  | Longitude |                     Centre                     |
+----------+-----------+-----------+------------------------------------------------+
| GU14 9HL | 51.308304 | -0.779928 | 0x346C0000010C00000000549C1D410000000018330341 |
+----------+-----------+-----------+------------------------------------------------+

Куда я иду не так?

1 ответ

Решение

Есть причина, по которой существует два разных геопространственных типа. География - это когда ваши координаты представляют градусы широты и долготы для точек на Земле (трехмерный объект с особенностями в его системе координат). Геометрия предназначена для случаев, когда ваши точки представляют произвольные положения X & Y на бесконечной плоскости. Вы не можете просто сказать: "Я возьму 51,3 градуса и сделаю его координатой X", и все получится. Как всегда говорил учитель физики в средней школе, "единицы важны".

Другие вопросы по тегам