微信開發:lbs附近的商家,在數據庫里記錄商家的坐標,lbs設置里管理搜索半徑,查詢的時候,查詢 客戶當前坐標的半徑內的所有商家列表。
個人喜歡不一樣,我選擇了執行sql ,畢竟效果高點。微信開發必須得將就效率問題。不然等半天出不來,急死人,半天出不來結果,客戶直接走人。
不多說,直接上代碼
\\返回兩個經緯度坐標點的距離(單位:米)
\\C# 方法
///<summary>返回兩個經緯度坐標點的距離(單位:米) by Alex.Y</summary>
///<param name="Longtiude">來源坐標經度Y</param>
///<param name="Latitude">來源坐標經度X</param>
///<param name="Longtiude2">目標坐標經度Y</param>
///<param name="Latitude2">目標坐標經度X</param>
///<returns>返回距離(米)</returns>
public double getMapDistance(double Longtiude, double Latitude, double Longtiude2, double Latitude2)
{
var lat1 = Latitude;
var lon1 = Longtiude;
var lat2 = Latitude2;
var lon2 = Longtiude2;
var earthRadius = 6371; //appxoximate radius in miles 6378.137
var factor = Math.PI / 180.0;
var dLat = (lat2 - lat1) * factor;
var dLon = (lon2 - lon1) * factor;
var a = Math.Sin(dLat / 2) * Math.Sin(dLat / 2) + Math.Cos(lat1 * factor)
* Math.Cos(lat2 * factor) * Math.Sin(dLon / 2) * Math.Sin(dLon / 2);
var c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1 - a));
double d = earthRadius * c * 1000;
return d;
}
--返回兩個經緯度坐標點的距離(單位:千米)
-- =============================================
-- Author: alex.Y
-- Create date: getdate()
-- Description: 返回兩個經緯度坐標點的距離(單位:千米)
-- ///<param name="@LngBegin">來源坐標經度Y</param>
-- ///<param name="@LatBegin">來源坐標經度X</param>
-- ///<param name="@LngEnd">目標坐標經度Y</param>
-- ///<param name="@LatEnd">目標坐標經度X</param>
-- =============================================
CREATE FUNCTION [dbo].[ufn_GetMapDistance]
(@LngBegin REAL, @LatBegin REAL, @LngEnd REAL, @LatEnd REAL)
RETURNS FLOAT
AS
BEGIN
--距離(千米)
DECLARE @Distance REAL
DECLARE @EARTH_RADIUS REAL
--SET @EARTH_RADIUS =6378.137
SET @EARTH_RADIUS =6371
DECLARE @RadLatBegin REAL,
@RadLatEnd REAL,
@RadLatDiff REAL,
@RadLngDiff REAL
SET @RadLatBegin = @LatBegin *PI()/ 180.0
SET @RadLatEnd = @LatEnd *PI()/ 180.0
SET @RadLatDiff = @RadLatBegin - @RadLatEnd
SET @RadLngDiff = @LngBegin *PI()/ 180.0 - @LngEnd *PI()/ 180.0
SET @Distance = 2 *ASIN(
SQRT(
POWER(SIN(@RadLatDiff / 2), 2)+COS(@RadLatBegin)*COS(@RadLatEnd)
*POWER(SIN(@RadLngDiff / 2), 2)
)
)
SET @Distance = @Distance * @EARTH_RADIUS
--SET @Distance = Round(@Distance * 10000) / 10000
RETURN @Distance
-- SELECT [dbo].[ufn_GetMapDistance](116.3130497932434100,39.9804086267150800,116.3731849193573000,39.9110159284269700)
END
