Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Obtenez des points spatiaux dans le rayon à l'aide de NHibernate Spatial

cela se produit en raison de la différence entre le type de données de géographie et le type de données de géométrie.

Mieux expliqué avec un exemple.

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 vous l'exécutez directement dans SQL Server Management Studio, vous obtenez 221151.479533501 dans le premier résultat et 2 dans le second.

Cela est essentiellement dû au fait que dans le type de données géographique, l'unité est choisie en fonction du SRID fourni. Dans votre cas, étant 4326, c'est en mètres. Donc, vous demandez la distance, en mètres, entre les coordonnées (lon:7; lat:1) et (lon:7; lat:3). Il revient environ 221 Km.

Lorsque vous utilisez le type de géométrie (deuxième exemple), il s'agit d'une projection plane où la distance fonctionne comme prévu, renvoyant ainsi 2.

En ce qui concerne votre code NH Spatial, cela semble correct. Indiquez simplement le paramètre maxDistance en mètres et tout devrait bien se passer.