Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Obtenha pontos espaciais dentro do raio usando o NHibernate Spatial


isso acontece devido à diferença entre o tipo de dados de geografia e o tipo de dados de geometria.

Melhor explicado com um exemplo.
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)

Se você executar isso diretamente no SQL Server Management Studio, obterá 221151.479533501 no primeiro resultado e 2 no segundo.

Isso ocorre basicamente porque no tipo de dados de geografia a unidade é escolhida de acordo com o SRID fornecido. No seu caso, sendo 4326, está em metros. Então, você está pedindo a distância, em metros, entre as coordenadas (lon:7; lat:1) e (lon:7; lat:3). Volta cerca de 221 Km.

Ao usar o tipo de geometria (segundo exemplo), é uma projeção planar onde a distância funciona como seria de esperar, retornando assim 2.

Em relação ao seu código NH Spatial, parece ok. Basta fornecer o parâmetro maxDistance em metros e você deve ficar bem.