sql >> Database >  >> RDS >> Sqlserver

Krijg ruimtelijke punten binnen een straal met NHibernate Spatial

dit gebeurt vanwege het verschil tussen het gegevenstype geografie en het gegevenstype geometrie.

Het beste uitgelegd met een voorbeeld.

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)

Als u dit rechtstreeks in SQL Server Management Studio uitvoert, krijgt u 221151.479533501 in het eerste resultaat en 2 in het tweede.

Dit komt in principe omdat in het geografische gegevenstype de eenheid wordt gekozen op basis van de meegeleverde SRID. In uw geval, zijnde 4326, is het in meters. Je vraagt ​​dus om de afstand, in meters, tussen de coördinaten (lon:7; lat:1) en (lon:7; lat:3). Het keert ongeveer 221 km terug.

Bij gebruik van het type geometrie (tweede voorbeeld), is het een vlakke projectie waarbij de afstand werkt zoals je zou verwachten, en dus 2 teruggeeft.

Wat betreft uw NH Spatial-code, lijkt ok. Geef gewoon de maxDistance-parameter in meters op en het zou goed moeten komen.




  1. Mysql - zoekvelden die eindigen als zoekterm

  2. Hoe Oracle SQL-instructies te splitsen voor ADO.NET

  3. SQLite waar

  4. MySQL installeren en laden database op Inno Setup-script