Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Dapatkan poin spasial dalam radius menggunakan NHibernate Spatial

hal ini terjadi karena adanya perbedaan antara tipe data geografi dan tipe data geometri.

Lebih baik dijelaskan dengan sebuah contoh.

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)

Jika Anda menjalankan ini secara langsung di SQL Server Management Studio, Anda mendapatkan 221151.479533501 pada hasil pertama dan 2 pada hasil kedua.

Ini pada dasarnya karena dalam tipe data geografi unit dipilih sesuai dengan SRID yang disediakan. Dalam kasus Anda, menjadi 4326, itu dalam meter. Jadi, Anda menanyakan jarak, dalam meter, antara koordinat (lon:7; lat:1) dan (lon:7; lat:3). Ia kembali sekitar 221 Km.

Saat menggunakan tipe geometri (contoh kedua), ini adalah proyeksi planar di mana jarak bekerja seperti yang Anda harapkan, sehingga mengembalikan 2.

Mengenai kode Spasial NH Anda, sepertinya ok. Cukup berikan parameter maxDistance dalam meter dan Anda akan baik-baik saja.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mencatat SEMUA Pertanyaan di Database SQL Server 2008 Express?

  2. Klausa SQL OVER() - kapan dan mengapa ini berguna?

  3. Tingkatkan penyetelan kinerja SQL Server dengan 3 tips ini

  4. Pivot dengan kolom dinamis di SQL Server

  5. Tugas SSIS untuk impor jumlah kolom yang tidak konsisten?