sql >> データベース >  >> RDS >> Sqlserver

NHibernate Spatial を使用して半径内の空間ポイントを取得する

    これは、地理データ型とジオメトリ データ型の違いが原因で発生します。

    例を挙げて説明するのが一番です。

    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 パラメーターをメートル単位で指定するだけで問題ありません。




    1. PythonMySQLDBIN句で使用するためのリストの実装

    2. JDBC接続-Class.forNameとClass.forName()。newInstance?

    3. filesortを使用してMySQLの日時列で並べ替える

    4. 複数の内部結合消去属性