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

SQL Server 2008 の geography データ型を使用する理由

    空間計算を行う予定がある場合、EF 5.0 では次のような LINQ 式を使用できます。

    private Facility GetNearestFacilityToJobsite(DbGeography jobsite)
    {   
        var q1 = from f in context.Facilities            
                 let distance = f.Geocode.Distance(jobsite)
                 where distance < 500 * 1609.344     
                 orderby distance 
                 select f;   
        return q1.FirstOrDefault();
    }
      

    次に、地理を使用する十分な理由があります。

    Entity Framework 内の空間の説明 .

    高性能空間データベースの作成 で更新

    Noel Abrahams Answer で指摘したように :

    ストレージ タイプの比較:

    CREATE TABLE dbo.Geo
    (    
    geo geography
    )
    GO
    
    CREATE TABLE dbo.LatLng
    (    
        lat decimal(15, 12),   
        lng decimal(15, 12)
    )
    GO
    
    INSERT dbo.Geo
    SELECT geography::Point(12.3456789012345, 12.3456789012345, 4326) 
    UNION ALL
    SELECT geography::Point(87.6543210987654, 87.6543210987654, 4326) 
    
    GO 10000
    
    INSERT dbo.LatLng
    SELECT  12.3456789012345, 12.3456789012345 
    UNION
    SELECT 87.6543210987654, 87.6543210987654
    
    GO 10000
    
    EXEC sp_spaceused 'dbo.Geo'
    
    EXEC sp_spaceused 'dbo.LatLng'
      

    結果:

    name    rows    data     
    Geo     20000   728 KB   
    LatLon  20000   560 KB
      

    geography データ型は 30% 多くのスペースを占有します。

    さらに、geography データタイプはポイントの保存だけに限定されず、 も保存できます。 LineString、CircularString、CompoundCurve、Polygon、CurvePolygon、GeometryCollection、MultiPoint、MultiLineString、MultiPolygon など .最も単純な Geography タイプ (Lat/Long など) を Point を超えて格納しようとすると (LINESTRING(1 1, 2 2) インスタンスなど)、各ポイントに追加の行が発生し、各ポイントの順序を順序付けするための列が発生します。行をグループ化するための別の列。 SQL Server には、面積、境界、長さ、距離など .

    Sql Server で緯度と経度を 10 進数として格納するのは賢明ではないようです。

    アップデート 2

    距離や面積などの計算を計画している場合、地球の表面でこれらを適切に計算することは困難です。 SQL Server に保存されている各地理タイプは、空間参照 ID と共に保存されます .これらの ID は、さまざまな球体 (地球は 4326) のものにすることができます。これは、SQL Server での計算が実際に地球の表面上で正しく計算されることを意味します (代わりに as-カラスハエ 地球の表面を通過する可能性があります)。



    1. カーソルを使用してSQLServerデータをSalesforceに挿入する

    2. SQLServerでコンマを使用して数値をフォーマットする方法

    3. トリガーを使用して挿入後に別のテーブルを更新しますか?

    4. AccessまたはMySQLをバックエンドデータベースとして使用する