0

緯度/経度 (地理) のバスポイントがあります。バス ポイント (緯度/経度) が地域のどこにあるかを確認したい。私の地域は緯度/経度のポイントのセットです。地域の緯度/経度 (地域を構成する緯度/経度の概要) を地理形式で持っています。これで、緯度/経度の 1 つのポイントがあり、そのポイントが自分の地域内にあるかどうかを特定したいと考えています。どうやってやるの?4000 点で領域の輪郭を作り、1 点でその領域に存在するかどうかを確認します。どうやってそれを確認しますか?

STContainsorを使用できると思いますSTintersectが、正確な構文はわかりません。

SELECT
    Region.BlockID, Bus_Route.geography
FROM
    Bus_Route, Region
WHERE
    Region.points.STContains(Bus_Route.geography) = 1
4

1 に答える 1

1

ポイントのテーブルを取得するための出発点として、私が書いたコード ( 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 より前では、半球に完全に含まれる領域に制限されていたので、これはすぐにわかります。

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

于 2012-11-21T14:08:21.463 に答える