sql >> Databáze >  >> RDS >> Sqlserver

Získejte prostorové body v okruhu pomocí NHibernate Spatial

k tomu dochází z důvodu rozdílu mezi geografickým datovým typem a geometrickým datovým typem.

Nejlépe vysvětleno na příkladu.

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)

Pokud to spustíte přímo v SQL Server Management Studio, dostanete 221151.479533501 v prvním výsledku a 2 ve druhém.

V zásadě je to proto, že v typu geografických dat je jednotka zvolena podle dodaného SRID. Ve vašem případě je 4326 v metrech. Ptáte se tedy na vzdálenost v metrech mezi souřadnicemi (délka:7; šířka:1) a (délka:7; šířka:3). Vrátí se asi 221 km.

Při použití typu geometrie (druhý příklad) se jedná o rovinnou projekci, kde vzdálenost funguje tak, jak byste očekávali, takže vrací 2.

Pokud jde o váš prostorový kód NH, zdá se být v pořádku. Stačí zadat parametr maxDistance v metrech a měli byste být v pořádku.




  1. Jak funguje funkce UPPER() v MySQL

  2. Jak ignorovat chyby pomocí psql \copy meta-command

  3. SQL - Levé spojení 2 cizích klíčů s 1 primárním klíčem

  4. Jak zabráním MySQL v aktualizaci sloupce prázdným řetězcem?