これは、地理データ型とジオメトリ データ型の違いが原因で発生します。
例を挙げて説明するのが一番です。
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)
プレ>これを SQL Server Management Studio で直接実行すると、最初の結果で 221151.479533501 が得られ、2 番目の結果で 2 が得られます。
これは基本的に、地理データ型では、提供された SRID に従って単位が選択されるためです。あなたの場合、4326 で、メートル単位です。したがって、座標 (lon:7; lat:1) と (lon:7; lat:3) の間の距離をメートル単位で求めています。約 221 Km 戻ります。
ジオメトリ タイプ (2 番目の例) を使用する場合、距離が期待どおりに機能する平面投影であるため、2 が返されます。
NH Spatial コードに関しては、問題ないようです。 maxDistance パラメーターをメートル単位で指定するだけで問題ありません。