我從窗體中抓取一個郵編。然後,我可以將此郵政編碼轉換爲lng,lat座標,因爲我已將這些郵政編碼存儲在表格中。Haversine公式使用SQL服務器找到最近的場地 - vb.net
SELECT lng, lat from postcodeLngLat WHERE postcode = 'CV1'
我有一個存儲LNG,LAT選擇場地的另一個表。
SELECT v.lat, v.lng, v.name, p.lat, p.lng, p.postcode, 'HAVERSINE' AS distance FROM venuepostcodes v, postcodeLngLat p WHERE p.outcode = 'CB6' ORDER BY distance
我所試圖做的就是創建一個DataGrid,顯示(在這種情況下,CV1)從郵政編碼每個場館的距離。我知道Haversine公式應該做我想要達到的目標,但我失去了應該從哪裏開始將它合併到我的查詢中。我認爲這個公式需要放在我在上面的查詢中放置'HAVERSINE'
的地方。
任何想法?
編輯
SELECT o.outcode AS lead_postcode, v.venue_name, 6371.0E * (2.0E *asin(case when 1.0E < (sqrt(square(sin(((RADIANS(CAST(o.lat AS FLOAT)))-(RADIANS(CAST(v.lat AS FLOAT))))/2.0E)) + (cos(RADIANS(CAST(v.lat AS FLOAT))) * cos(RADIANS(CAST(o.lat AS FLOAT))) * square(sin(((RADIANS(CAST(o.lng AS FLOAT)))-(RADIANS(CAST(v.lng AS FLOAT))))/2.0E))))) then 1.0E else (sqrt(square(sin(((RADIANS(CAST(o.lat AS FLOAT)))-(RADIANS(CAST(v.lat AS FLOAT))))/2.0E)) + (cos(RADIANS(CAST(v.lat AS FLOAT))) * cos(RADIANS(CAST(o.lat AS FLOAT))) * square(sin(((RADIANS(CAST(o.lng AS FLOAT)))-(RADIANS(CAST(v.lng AS FLOAT))))/2.0E))))) end)) AS distance FROM venuepostcodes v, outcodepostcodes o WHERE o.outcode = 'CB6' ORDER BY distance
是否可以將此插入到我的.net頁面上的.vb文件中,還是需要將該函數放在其他位置? - 加上什麼是「浮動」位? – Tom 2011-03-19 15:18:32
這裏寫的函數是一個SQL Server用戶定義的函數。您可以將其轉換爲vb,但您必須將所有數據帶回「客戶端」才能進行計算。使用SQL UDF,您可以執行諸如選擇最接近的前10位並只將這10個數據發送到「客戶端」的事情。 – BlackICE 2011-03-19 15:34:50
@Tom - 我認爲David會說在SQL Server中創建函數。 UDF - >用戶定義的功能。 (http://www.google.com/search?q=SQL+Server+UDF) – dana 2011-03-19 15:35:23