"Nearest Neighbor"問題は、空間データを扱うときに非常に一般的です。Sql Serverの複数のソースの「最近隣」を計算するには?
MS Sql Serverでドキュメントを作成する方法については、nice, simple documentationもあります。
私は通常、1xソースLat/Longを使用している例を見ていて、最近隣のLat/Longの 'x'個の数値を返します。ファイン...
私の場合は
USE AdventureWorks2012
GO
DECLARE @g geography = 'POINT(-121.626 47.8315)';
SELECT TOP(7) SpatialLocation.ToString(), City FROM Person.Address
WHERE SpatialLocation.STDistance(@g) IS NOT NULL
ORDER BY SpatialLocation.STDistance(@g);
、私は複数緯度/経度情報源を持っている...と各ソースのために、最近傍の「x」の数を返す必要があります。
だから誰か助けてもらえますか?
は、ここに私のスキーマ
Table: SomeGeogBoundaries
LocationId INTEGER PRIMARY KEY (it's not an identity, but a PK & FK)
CentrePoint GEOGRAPHY
Index:
Spatial Index on CentrePoint column. [Geography || MEDIUM, MEDIUM, HIGH, HIGH]
サンプルデータです。
LocationId | CP Lat/Long
1 | 10,10
2 | 11,11
3 | 20,20
..
この表のforeachの場所は、私が最も近い..たとえば5つの他の場所を見つける必要があります。
UPDATE:
は、これまでのところ...それはCURSOR
を使用してのように見えますが、唯一の方法です..しかし、私はがベースのソリューションを設定し、よりに開いている...あなたが見つける必要がある
Sweet!最初にカーソルを移動しました.1時間半かかりました。その後、あなたのコードでカーソルを置き換え、58分かかりました。だから基本的に同じ。あなたが示唆したように、おそらくそれは内部的にカーソルだったからでしょう。また、空間インデックスを使用していることを確認するために、where節を 't.CP.STDistance(b.CP)IS NOT NULL'に置き換えたので、空間インデックスを使用していたと仮定しています。 –