sql >> Databasteknik >  >> RDS >> Sqlserver

Få rumsliga punkter inom radie med NHibernate Spatial

detta händer på grund av skillnaden mellan geografidatatypen och geometridatatypen.

Bäst att förklara med ett exempel.

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)

Om du kör detta direkt i SQL Server Management Studio får du 221151.479533501 i det första resultatet och 2 i det andra.

Detta beror i grunden på att enheten i geografidatatypen väljs enligt det medföljande SRID. I ditt fall är det 4326 i meter. Så du frågar efter avståndet, i meter, mellan koordinaterna (lon:7; lat:1) och (lon:7; lat:3). Den återvänder cirka 221 km.

När du använder geometritypen (andra exemplet) är det en plan projektion där avståndet fungerar som du kan förvänta dig, vilket ger 2.

När det gäller din NH Spatial-kod verkar det ok. Ange bara parametern maxDistance i meter så borde det gå bra.




  1. PostgreSQL:hur ställer jag in sökvägen inifrån en funktion?

  2. Gör en kopplingsförfrågan i loopback.io

  3. ROW_NUMBER fråga

  4. Är det möjligt att fråga en databas med ett värde som skickas i en URL, och skriva resultatet av frågan till URL:en med mod_rewrite?