điều này xảy ra do sự khác biệt giữa kiểu dữ liệu địa lý và kiểu dữ liệu hình học.
Giải thích tốt nhất bằng một ví dụ.
declare @point1 as geography
declare @point2 as geography
set @point1 = geography::STGeomFromText('POINT (7 1)', 4326)
set @point2 = geography::STGeomFromText('POINT (7 3)', 4326)
select @point1.STDistance(@point2)
declare @point3 as geometry
declare @point4 as geometry
set @point3 = geometry::STGeomFromText('POINT (7 1)', 4326)
set @point4 = geometry::STGeomFromText('POINT (7 3)', 4326)
select @point3.STDistance(@point4)
Nếu bạn chạy điều này trực tiếp trong SQL Server Management Studio, bạn nhận được 221151.479533501 trong kết quả đầu tiên và 2 trong kết quả thứ hai.
Điều này về cơ bản là do trong kiểu dữ liệu địa lý, đơn vị được chọn theo SRID được cung cấp. Trong trường hợp của bạn, là 4326, tính bằng mét. Vì vậy, bạn đang hỏi khoảng cách, tính bằng mét, giữa các tọa độ (lon:7; lat:1) và (lon:7; lat:3). Nó quay trở lại khoảng 221 km.
Khi sử dụng kiểu hình học (ví dụ thứ hai), đó là một phép chiếu phẳng trong đó khoảng cách hoạt động như bạn mong đợi, do đó trả về 2.
Về mã không gian NH của bạn, có vẻ ổn. Chỉ cần cung cấp thông số maxDistance tính bằng mét và bạn sẽ ổn.