我创建了一个表格,其中包含美国邮政编码以及这些邮政编码的纬度和经度。从经纬度我创建了一个地理专栏。我在那个地理列上创建了一个空间索引。我想将最近的 100 个邮政编码返回到纬度和经度,所以我创建了以下存储过程
CREATE PROCEDURE [dbo].[Geo_Locate]
@Latitude DECIMAL,
@Longitude DECIMAL
AS
BEGIN
SET NOCOUNT ON;
DECLARE @GeogTemp NVARCHAR(200)
DECLARE @Geog GEOGRAPHY
-- Create a geography type variable from the passed in latitude and longitude. This will be used to find the closest point in the database
SET @GeogTemp = 'POINT(' + convert(NVARCHAR(100), @Longitude) + ' ' + convert(NVARCHAR(100), @Latitude) + ')'
SET @Geog = geography::STGeomFromText(@GeogTemp, 4326)
-- Run the main query
SELECT TOP 100
[Id],
[Country],
[ZipPostalCode],
[City],
[County],
[Latitude],
[Longitude],
[GeographyCol],
GeographyCol.STDistance(@Geog) AS Distance
FROM
[dbo].[ZipCode] WITH(INDEX(ZipCode_SpatialIndex))
WHERE
GeographyCol.STDistance(@Geog) < 100000 -- 100 KM
ORDER BY
GeographyCol.STDistance(@Geog) ASC
END
但是,当我将纬度 = 35.48330 和经度 = -97.17340 传递给此存储过程时,我会在第 55 项返回以下内容
869531 美国 73045 哈拉俄克拉荷马 OK 35.48330 -97.17340 0xE6100000010C12143FC6DCBD4140174850FC184B58C0 55894.2236191955
最后一列是距离。基本上查询是说这个记录距离输入点近56KM,但纬度和经度是相同的。
我读过 MSDN,我的查询看起来是正确的。任何人都可以帮助我吗?