sql >> Database teknologi >  >> RDS >> Sqlserver

Få rumlige punkter inden for radius ved hjælp af NHibernate Spatial

dette sker på grund af forskellen mellem geografidatatypen og geometridatatypen.

Bedst forklaret med et eksempel.

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)

Hvis du kører dette direkte i SQL Server Management Studio, får du 221151.479533501 i det første resultat og 2 i det andet.

Dette skyldes grundlæggende, at enheden i geografidatatypen er valgt i henhold til det medfølgende SRID. I dit tilfælde er det 4326 i meter. Så du beder om afstanden, i meter, mellem koordinaterne (længde:7; bredde:1) og (længde:7; bredde:3). Den vender tilbage omkring 221 km.

Når du bruger geometritypen (andet eksempel), er det en plan projektion, hvor afstanden fungerer, som du ville forvente, og dermed returnerer 2.

Med hensyn til din NH Spatial-kode virker det ok. Angiv blot maxDistance-parameteren i meter, og du burde være i orden.




  1. Sådan droppes en kolonne med en begrænsning i SQL Server

  2. Hvordan man formulerer en forespørgsel for at vise alle kurser taget af en person

  3. Fejlfind en fejl, når du forsøger at oprette en stor IMDB-model

  4. Hvad er den mest passende datatype til lagring af en IP-adresse i SQL server?