Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Nhận các điểm không gian trong bán kính bằng cách sử dụng NHibernate Spatial

đ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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để có được Chèn id trong MSSQL trong PHP?

  2. Linq to SQL ForeignKeyReferenceAlreadyHasValueException

  3. Sử dụng Web.Config để thiết lập chuỗi kết nối cơ sở dữ liệu SQL của tôi?

  4. Cách sử dụng IF ... THEN Logic trong SQL Server

  5. Tách các giá trị thành nhiều hàng