我建議(如果可能)獲取郵編的中心點,然後應用Haversine公式來查找某個半徑內的所有商店。
這裏的公式是以公里爲單位。
你將不得不改變相關的數字,它將工作數英里。
例如:將6371.392896轉換爲英里。
DECLARE @radiusInKm AS FLOAT
DECLARE @ lat2Compare AS FLOAT
DECLARE @ long2Compare AS FLOAT
SET @radiusInKm = 5.000
SET @ lat2Compare = insert_your_lat_to_compare_here
SET @ long2Compare = insert_you_long_to_compare_here
SELECT * FROM insert_your_table_here WITH(NOLOCK) WHERE(6371.392896 * 2 * ATN2(SQRT((sin((radians(GeoLatitude - @ lat2Compare))/ 2)* sin ((弧度(GeoLitudeitude - @ lat2Compare))/ 2))+(cos(弧度(GeoLatitude))* cos(弧度(@ lat2Compare))* sin(弧度(GeoLongitude - @ long2Compare)/ 2)* sin(弧度((radians(GeoLatitude - @ lat2Compare))/ 2)* sin((radians(GeoLitudeitude - @ lat2Compare))/ 2))+((GeoLongitude - @ long2Compare)/ 2))) ,SQRT cos(弧度(GeoLatitude))* cos(弧度(@ lat2Compare))* sin(弧度(GeoLongitude - @ long2Compare)/ 2)* sin(弧度(GeoLongitude - @ long2Compare)/ 2)))< = @radiusInKm
如果你想執行在C#haversine公式,
雙resultDistance = 0.0;
double avgRadiusOfEarth = 6371.392896; //地球的半徑不同,我正在取平均值。
//半正矢式
//距離= R * 2 * ATAN2(A的平方根,平方根的1 - A)
//其中A =竇的平方(在緯度/ 2的差)+ (緯度1的餘弦*緯度2的餘弦*竇的平方(在經度差/ 2))
//和R =地球的圓周
雙differenceInLat = DegreeToRadian(currentLatitude - latitudeToCompare);
double differenceInLong = DegreeToRadian(currentLongitude --longtitudeToCompare);數學公式(DegreeToRadian(currentLatitude))* Math.Cos(DegreeToRadian(latitudeToCompare))* Math.Sin(differenceInLong/2)* Math.Sin(differenceInLong/2);數學公式(公式2)
double aFormula =(Math.Sin((differenceInLat)/ 2)* Math.Sin((differenceInLat)/ 2))+(aInnerFormula);
resultDistance = avgRadiusOfEarth * 2 * Math.Atan2(Math.Sqrt(aFormula),Math.Sqrt(1-aFormula));
DegreesToRadian是我自定義創建的函數。
它是一個簡單的1個襯墊的 「Math.PI *角度/ 180.0」
對於LINQ,可以使用C#的數學函數,以及所有C#檢查。例如:!=等於不等於等。
請參閱以下內容作爲示例。
它不完整,所以請按照您的喜好調整它。
VAR linqQuery =從linqCollection在 insert_your_collection_here
其中S-LAT!=什麼
選擇Math.ACos(Math.Sin(DegreesToRadian(sentlng) * Math.Pi/180))
查看下面的MSDN鏈接,瞭解所有簡單的LINQ示例。有玩它,希望這有助於
My blog entry - SQL Haversine
MSDN - 101 LINQ Samples
來源
2010-06-10 00:57:17
Zac
嗯有效點羞恥亞音速仍然沒有實際創建代碼爲mysql存儲過程從來沒有真的但那是defo一個選項,並將使我能夠傳遞lng和lat的值....好吧,謝謝我認爲我會將此標記爲答案。 – davethecoder 2010-03-05 14:07:39