2016-11-29 138 views
0

我應該如何爲此編寫查詢? 考慮P1(a,b)和P2(c,d)是2D平面上的兩個點。兩個經度和緯度之間的距離

  • 恰好等於北緯度的最小值(LAT_N在 電臺)。
  • b恰好等於在北緯 最大值(LAT_N在STATION)
  • Ç恰好等於在西方 經度(LONG_W在STATION)
  • d恰好等於最大值 在最小值西經度(LATION_W in STATION)

查詢曼哈頓點P1和P2之間的距離並將其四捨五入到小數點後4位。

表STATION(ID號,CITY VARCHAR2(21),STATE VARCHAR2(2),LAT_N號,LONG_W號)

這是我的嘗試,但返回NULL

select 
    2 * 3961 * asin(power(sqrt((sin(radians(MAX(LAT_N) - MIN(LAT_N))/2))) , 2) + cos(radians(MAX(LAT_N))) * cos(radians(MIN(LAT_N))) * power(sqrt((sin(radians(MAX(LONG_W) - MIN(LONG_W))/2))) , 2)) as distance from station where city like 'manhattan'; 

任何想法可以理解

回答

0

可以按照這個數學式得到兩分 距離= squarerootof之間的直線距離((X2-X1)^ 2 +(Y2-Y1)^ 2)

0

您可以使用SQL Server地理數據類型,而不是重新發明輪子。這些數據類型出現在2008版本中,並且有些功能可以完成您正在嘗試執行的任何操作,而不涉及所涉及的所有數學。

看看這個example(有太多,包括在這裏)或查找MSDN上的更多信息。

0

曼哈頓距離(Taxicab Geometry

點P1之間曼哈頓距離(A,B)和P2(C,d)= | A-C | + | B-D |

--a= min(LAT_N) 
--b= max(LAT_N) 
--c= min(LONG_W) 
--d= max(LONG_w) 
SELECT ROUND(ABS(MIN(LAT_N) - MIN(LONG_W)),4) + ROUND(ABS(MAX(LAT_N) - MAX(LONG_W)),4) FROM STATION; 
相關問題