sql >> Base de Datos >  >> RDS >> Sqlserver

Obtenga puntos espaciales dentro del radio usando NHibernate Spatial

esto sucede debido a la diferencia entre el tipo de datos de geografía y el tipo de datos de geometría.

Se explica mejor con un ejemplo.

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)

Si ejecuta esto directamente en SQL Server Management Studio, obtiene 221151.479533501 en el primer resultado y 2 en el segundo.

Esto se debe básicamente a que en el tipo de datos de geografía, la unidad se elige de acuerdo con el SRID proporcionado. En tu caso, siendo 4326, está en metros. Entonces, estás preguntando por la distancia, en metros, entre las coordenadas (lon:7; lat:1) y (lon:7; lat:3). Regresa unos 221 Km.

Cuando se usa el tipo de geometría (segundo ejemplo), se trata de una proyección plana en la que la distancia funciona como cabría esperar, por lo que devuelve 2.

En cuanto a su código NH Spatial, parece estar bien. Simplemente proporcione el parámetro maxDistance en metros y debería estar bien.