Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Uzyskaj punkty przestrzenne w promieniu za pomocą NHibernate Spatial

dzieje się tak z powodu różnicy między typem danych geography a typem danych geometry.

Najlepiej wyjaśnić na przykładzie.

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)

Jeśli uruchomisz to bezpośrednio w SQL Server Management Studio, otrzymasz 221151.479533501 w pierwszym wyniku i 2 w drugim.

Dzieje się tak, ponieważ w typie danych geograficznych jednostka jest wybierana zgodnie z dostarczonym SRID. W twoim przypadku 4326 jest w metrach. Więc pytasz o odległość w metrach między współrzędnymi (lon:7; lat:1) i (lon:7; lat:3). Wraca około 221 km.

Podczas korzystania z typu geometrii (drugi przykład) jest to rzut płaski, w którym odległość działa zgodnie z oczekiwaniami, zwracając w ten sposób 2.

Jeśli chodzi o kod przestrzenny NH, wydaje się, że jest w porządku. Wystarczy podać parametr maxDistance w metrach i wszystko powinno być w porządku.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak przekonwertować ciąg daty i godziny bez ograniczników w programie SQL Server jako datetime?

  2. Używanie kursora w dbMail na serwerze sql 2008

  3. Jak wybrać pojedynczy rekord w lewym sprzężeniu?

  4. Przykłady SQRT() w SQL Server

  5. Varchar nieprawidłowy dla operatora Sum