计算两个坐标点之间的距离代码,C#版和mysql版
2015-11-5 11:23c#版
public class GisHelper { public const double PI = 3.141593; public static int CalculateDistance(double lon1, double lat1, double lon2, double lat2) { return (int)Math.Round( 6378.138 * 2 * Math.Asin( Math.Sqrt( Math.Pow( Math.Sin( (lat1 * PI / 180 - lat2 * PI / 180) / 2) , 2) + Math.Cos(lat1 * PI / 180) * Math.Cos(lat2 * PI / 180) * Math.Pow(Math.Sin((lon1 * PI / 180 - lon2 * PI / 180) / 2), 2) ) ) ); } }
这个是我改自于网上查到的mysql版,测试如下
[TestMethod] public void TestCalDist() { //北京西站到东站,14公里 var tt = GisHelper.CalculateDistance(116.327805, 39.901209, 116.490506, 39.909179); Console.Write(tt); }
运行结果14公里,用百度地图测量后也是14公里,说明代码正确。下面是mysql版
CREATE FUNCTION `CalDist`(lon1 int, lat1 int, lon2 int, lat2 int) RETURNS int(11) BEGIN RETURN round( 6378.138*2*asin( sqrt( pow( sin( (lat1*pi()/180-lat2*pi()/180)/2) ,2) + cos(lat1*pi()/180)*cos(lat2*pi()/180)* pow(sin((lon1*pi()/180-lon2*pi()/180)/2),2) ) ) ); END
我把它封装到了mysql函数中,记录下来说不定以后还要用到