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

Geography 列の STContains

    私があなたのために書いたコードを使用しました (ShapeFile からの「ポイント」列の保存 ) ポイントのテーブルを取得するための開始点として。そこから:

    select geography::STPolyFromText(
    'POLYGON((' + 
        stuff((
            select ',' + cast(g.STPointN(t.i).Long as varchar(10)) + ' ' + cast(g.STPointN(t.i).Lat as varchar(10))
            from [a]
            cross join tally as [t]
            where t.i <= g.STNumPoints()
            order by i
            for xml path('')
    
        ), 1, 1, '') + '))'
        , 4326)
    

    このコードは、いくつかのことを前提としています。まず、リージョンの境界を一周するようにポイントが並べられていること。これは重要です。点をつなぐパズルを考えてみてください。適切な画像を得るには、正しい順序で行う必要があります。第 2 に、第 1 に関連して、それらは正しい方向にある必要があります。多角形は左手の法則に従います。つまり、ポイントを順番に歩いていた場合、左側にある領域を定義しています。したがって、ポイントを逆の順序で指定すると、地域以外のすべてが取得されます! SQL 2012 より前では、半球に完全に含まれる領域に制限されていたため、これはすぐにわかります。

    しかし、今私は尋ねなければなりません:あなたが以前に尋ねた質問(私が上にリンクしたもの)を考えると、ポリゴンを含むシェープファイルを受け取っていますか?もしそうなら、それを保存して再構築の頭痛の種から解放してください。




    1. Sequel Proを使用してインポート中に文字列を日付に変更するにはどうすればよいですか?

    2. MySQLサブクエリは複数の行を返します

    3. サブクエリからの複数の行を単一の区切りフィールドに結合するSQLServer関数を作成するにはどうすればよいですか?

    4. DateTimeからINTに変換する