나는이 우편 번호의 위도와 경도와 함께 미국 우편 번호가 포함 된 테이블을 만들었습니다. 위도와 경도에서 지형 열을 만들었습니다. 그 지형 열에 공간 인덱스를 만들었습니다. 난 내가 반환 된 다음 얻을이 저장 프로 시저에 위도 = 35.48330와 경도를 = -97.17340 통과 할 때 내가 그러나 다음과 같은 저장 프로 시저SQL Server 2012 공간 인덱스 가장 가까운 이웃 쿼리
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
을 만든 위도와 경도에 가까운 100 개 우편 번호를 반환하려면
869,531 항목 55 US 73,045하라 오클라호마 OK 35.48330 -97.17340 0xE6100000010C12143FC6DCBD4140174850FC184B58C0 55894.2236191955
마지막 열은 거리이다. 기본적으로 쿼리는이 레코드가 입력 된 지점에서 거의 56KM이지만 위도와 경도는 동일하다고 말합니다.
MSDN을 읽었으며 쿼리가 올바른 것처럼 보입니다. 누구든지 제발 도와 주실 래요?
[GeographyCol] 또는 다른 객체입니까? 그것이 다각형이라면 그것에 대한 위도/경도는 .EnvelopeCenter()입니다. 아마도 56km가 아니더라도 거리를 상상할 수 있습니다. – fortboise