Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Erhalten Sie mit NHibernate Spatial räumliche Punkte innerhalb des Radius

Dies geschieht aufgrund des Unterschieds zwischen dem Datentyp "Geographie" und dem Datentyp "Geometrie".

Am besten an einem Beispiel erklärt.

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)

Wenn Sie dies direkt in SQL Server Management Studio ausführen, erhalten Sie 221151.479533501 im ersten Ergebnis und 2 im zweiten.

Dies liegt im Grunde daran, dass im Geographie-Datentyp die Einheit gemäß der gelieferten SRID gewählt wird. In Ihrem Fall ist es 4326 in Metern. Sie fragen also nach der Entfernung in Metern zwischen den Koordinaten (lon:7; lat:1) und (lon:7; lat:3). Es gibt etwa 221 km zurück.

Bei Verwendung des Geometrietyps (zweites Beispiel) handelt es sich um eine planare Projektion, bei der der Abstand wie erwartet funktioniert und daher 2 zurückgibt.

In Bezug auf Ihren NH Spatial-Code scheint es in Ordnung zu sein. Geben Sie einfach den maxDistance-Parameter in Metern an und Sie sollten in Ordnung sein.