SQL 服务器地理查询有效,但几何查询无效 - 不同的表,相似的模式
SQL Server Geography Query works but Geometry Query Does Not - Different Tables, Similar Schemas
我正在尝试使用几何查询。类似的地理查询工作正常,但我必须使用使用几何类型的 table。尽管地理版本 return 有很多记录,但我无法获得几何版本 return 的任何记录。两个 table 的纬度和经度记录完全相同。
这个地理查询工作正常:
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
table 架构是:
+-------------+--------------+
| Field | Type |
+-------------+--------------+
| OutwardCode | Varchar(4) |
| InwardCode | Varchar(3) |
| Latitude | Decimal(9,6) |
| Longitude | Decimal(9,6) |
| GeoLocation | Geography |
+-------------+--------------+
示例Table数据:
+-------------+------------+------------+----------+------------------------------------------------+
| OutwardCode | InwardCode | Longitude | Latitude | GeoLocation |
+-------------+------------+------------+----------+------------------------------------------------+
| GU14 | 9HL | -0.7803759 | 51.30818 | 0xE6100000010C01A4367172A7494027C522E1D6F8E8BF |
+-------------+------------+------------+----------+------------------------------------------------+
这个 Geometry 查询 returns 没有记录(我在数据库中有完全相同的纬度和经度记录,但以 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
table 架构是:
+-----------+--------------+
| Field | Type |
+-----------+--------------+
| Postcode | nvarchar(10) |
| Latitude | Decimal(9,6) |
| Longitude | Decimal(9,6) |
| Centre | Geometry |
+-----------+--------------+
示例Table数据:
+----------+-----------+-----------+------------------------------------------------+
| Postcode | Latitude | Longitude | Centre |
+----------+-----------+-----------+------------------------------------------------+
| GU14 9HL | 51.308304 | -0.779928 | 0x346C0000010C00000000549C1D410000000018330341 |
+----------+-----------+-----------+------------------------------------------------+
我哪里错了?
存在两种不同的地理空间类型是有原因的。地理适用于当您的坐标表示地球上各点的纬度和经度(坐标系中具有奇点的三维物体)时。几何适用于当您的点代表无限平面上的任意 X 和 Y 位置时。你不能只说 "I'll take 51.3 degrees and make it the X coordinate" 然后一切都解决了。正如我的高中物理老师常说的 "units are important".
我正在尝试使用几何查询。类似的地理查询工作正常,但我必须使用使用几何类型的 table。尽管地理版本 return 有很多记录,但我无法获得几何版本 return 的任何记录。两个 table 的纬度和经度记录完全相同。
这个地理查询工作正常:
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
table 架构是:
+-------------+--------------+
| Field | Type |
+-------------+--------------+
| OutwardCode | Varchar(4) |
| InwardCode | Varchar(3) |
| Latitude | Decimal(9,6) |
| Longitude | Decimal(9,6) |
| GeoLocation | Geography |
+-------------+--------------+
示例Table数据:
+-------------+------------+------------+----------+------------------------------------------------+
| OutwardCode | InwardCode | Longitude | Latitude | GeoLocation |
+-------------+------------+------------+----------+------------------------------------------------+
| GU14 | 9HL | -0.7803759 | 51.30818 | 0xE6100000010C01A4367172A7494027C522E1D6F8E8BF |
+-------------+------------+------------+----------+------------------------------------------------+
这个 Geometry 查询 returns 没有记录(我在数据库中有完全相同的纬度和经度记录,但以 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
table 架构是:
+-----------+--------------+
| Field | Type |
+-----------+--------------+
| Postcode | nvarchar(10) |
| Latitude | Decimal(9,6) |
| Longitude | Decimal(9,6) |
| Centre | Geometry |
+-----------+--------------+
示例Table数据:
+----------+-----------+-----------+------------------------------------------------+
| Postcode | Latitude | Longitude | Centre |
+----------+-----------+-----------+------------------------------------------------+
| GU14 9HL | 51.308304 | -0.779928 | 0x346C0000010C00000000549C1D410000000018330341 |
+----------+-----------+-----------+------------------------------------------------+
我哪里错了?
存在两种不同的地理空间类型是有原因的。地理适用于当您的坐标表示地球上各点的纬度和经度(坐标系中具有奇点的三维物体)时。几何适用于当您的点代表无限平面上的任意 X 和 Y 位置时。你不能只说 "I'll take 51.3 degrees and make it the X coordinate" 然后一切都解决了。正如我的高中物理老师常说的 "units are important".