Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Вземете пространствени точки в радиус с помощта на NHibernate Spatial

това се случва поради разликата между географския тип данни и геометричния тип данни.

Най-добре обяснено с пример.

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)

Ако стартирате това директно в SQL Server Management Studio, получавате 221151.479533501 в първия резултат и 2 във втория.

Това основно е така, защото в географския тип данни единицата се избира според предоставения SRID. Във вашия случай 4326 е в метри. И така, вие питате за разстоянието в метри между координатите (long:7; lat:1) и (lon:7; lat:3). Връща се на около 221 км.

Когато използвате типа геометрия (втори пример), това е равнинна проекция, където разстоянието работи както бихте очаквали, като по този начин връща 2.

Що се отнася до вашия NH пространствен код, изглежда добре. Просто въведете параметъра maxDistance в метри и трябва да сте добре.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. VB.NET - Неуспешно преобразуване на стойност на параметър от низ в проблем с Guid

  2. Инсталиране на екземпляр на клъстер за отказване на SQL Server – част 1

  3. Сборна функция - Замяна на NULL

  4. Изследване на онлайн индексни операции на ниво дял в SQL Server 2014 CTP1

  5. Разделяне на низ чрез sql оператор (ip адрес)