0
A
回答
2
SELECT *
FROM YourTable
INNER JOIN
(SELECT (sqrt((xDestination - xOrigin)^2 + (yDestination - yOrigin)^2)) AS Distance
FROM YourTable) AS computed ON YourTable.id = computed.id
WHERE computed.Distance = SpecifiedDistance
我不知道你的確切定義,你會希望如何處理座標的輸入,因爲我不知道你是否正在使用服務器端語言輸入數據,因此這只是一個普通的例子
+0
真棒,這正是我需要的!非常感謝你的幫助! – 2011-06-08 16:34:54
1
這比一看起來更有趣,因爲你說'在指定的距離'。
第一刀簡單的解決方案是畢達哥拉斯的距離計算,即
SELECT * FROM myTable
WHERE SQRT((myPositionX - @pointX)^2 + (myPositionY - @pointY)^2) = @myDistance
但是這樣做對變量浮點比較是從來沒有因爲不準確的一個好主意,這是在這種情況下加劇,因爲平方根 - 你實際上並不需要。很顯然,如果從A到B的距離是X,那麼從A到B的距離的平方也是X平方。因此,下切是
SET @mySqrDistance = @myDistance^2
SELECT * FROM myTable
WHERE ((myPositionX - @pointX)^2 + (myPositionY - @pointY)^2) = @mySqrDistance
不僅是這更多的是因爲去除SQRT的準確,這也是出於同樣的原因很多更快(平方根函數,雖然進行了優化,速度很慢)。但是你仍然有花車比較在一定程度上的問題(當然這取決於SQL和列類型使用的味道,但在一般情況),因此更好的辦法可能是
SET @mySqrDistanceMin = (@[email protected])^2
SET @mySqrDistanceMax = (@[email protected])^2
SELECT * FROM myTable
WHERE ((myPositionX - @pointX)^2 + (myPositionY - @pointY)^2)
BETWEEN @mySqrDistanceMin AND mySqrDistanceMax
首先什麼樣的座標線性或3d,因爲在這兩種情況下距離的計算都是不同的。還有一些代碼和數據庫信息會非常有幫助。 – 2011-06-08 15:17:51
如果您的座標使用地理數據類型進行存儲,則可以使用STDistance方法獲得距離您的距離 - 請參閱http://msdn.microsoft.com/zh-cn/library/bb933952.aspx。 – 2011-06-08 15:28:44
coords是線性的 – 2011-06-08 15:33:24