質問

iには次の2つのテーブルがあります。-

ジオシェイプ

  • GeoShapeId INT IDENTITY
  • 名前VARCHAR(100)
  • ShapeFile GEOGRAPHY [これは緯度/経度の閉じた多角形です]

犯罪ロケーション

  • CrimeLocationId INT IDENTITY
  • LatLong GEOGRAPHY [これは緯度/経度ポイントです]

現在、約10KのGeoShape結果と約500CrimeLocationsがあります。

500のすべての犯罪緯度/経度ポイントが内部に存在するGeoShapesを特定しようとしています。

:(わかりません!サブクエリで STIntersects を実行しようとしましたが、機能しませんでした。提案はありますか?

乾杯!

編集1: GEOMETRY 関数を使用することはできません。(上記のように)これらはすべて地理タイプです。

編集2: STContains および STIntersects の使用方法を知っています。その基本的な例を提供しないでください。上記のテーブル構造を使用して複雑なクエリを実行することに興味があります。

役に立ちましたか?

解決

「編集」に関しては、「提供しないでください...」を含む質問が表示されることはほとんどありません。確かに少しでも役に立ちますか?特に、 STContains または STIntersects (または Filter()について do が知っていることを実際に示していないためです。それについて)...

とにかく、郵便番号と保管場所のデータベースが手元にあったので、テーブル/列の名前をあなたのものに合わせて変更しました(6,535個のCrimeLocatoinsと3,285個のGeoShapesがあります)。あなたは今までにそれを理解していると思います-しかし、他の誰かがこれを役に立つと思うかもしれません...

次のクエリは、各 GeoShapes.ShapeFile

CrimeLocations の数を返します
SELECT G.Name, COUNT(CL.Id)
FROM   GeoShapes G
INNER JOIN CrimeLocations CL ON G.ShapeFile.STIntersects(CL.LatLong) = 1
GROUP BY G.Name
ORDER BY 2 DESC

地理空間インデックスを設定しておらず、ShapeFilesのポイント数が多いため、年齢(20分など)がかかりますが、正常に実行されます。あなたが提案するように結果を制限したい場合:

SELECT G.Name, COUNT(CL.Id)
FROM   GeoShapes G
INNER JOIN CrimeLocations CL ON G.ShapeFile.STIntersects(CL.LatLong) = 1
GROUP BY G.Name
HAVING COUNT(CL.Id) = 500

もちろん、数値500をハードコードしたくないので、そこに COUNT(*)FROM CrimeLocations サブクエリ、または別のクエリからの合計を含む変数を追加できます。

これで十分ですか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top