110,538
社区成员
发帖
与我相关
我的任务
分享
protected string destPoint(double lat, double lon, double brng, double d)
{
Int16 R = 6371; // earth's mean radius in km
double lat1 = toRad(lat);
double lon1 = toRad(lon);
brng = toRad(brng);
double lat2 = Math.Asin(Math.Sin(lat1) * Math.Cos(d / R) +
Math.Cos(lat1) * Math.Sin(d / R) * Math.Cos(brng));
double lon2 = lon1 + Math.Atan2(Math.Sin(brng) * Math.Sin(d / R) * Math.Cos(lat1),
Math.Cos(d / R) - Math.Sin(lat1) * Math.Sin(lat2));
lon2 = (lon2 + Math.PI) % (2 * Math.PI) - Math.PI; // normalise to -180...+180
//if (isNaN(lat2) || isNaN(lon2)) return null;
return "<lat>" + toDeg(lat2) + "</lat><lon>" + toDeg(lon2) + "</lon>";
}
protected double toRad(double Rad)
{
return Rad * Math.PI / 180;
}
protected double toDeg(double Deg)
{ // convert radians to degrees (signed)
return Deg * 180 / Math.PI;
}
protected double distHaversine(double lat1, double lon1, double lat2, double lon2)
{
Int16 R = 6371;
double dLat = toRad(lat2 - lat1) ;
double dLon = toRad(lon2 - lon1) ;
lat1 = toRad(lat1);
lat2 = toRad(lat2);
double a = Math.Sin(dLat / 2) * Math.Sin(dLat / 2) +
Math.Cos(lat1) * Math.Cos(lat2) *
Math.Sin(dLon / 2) * Math.Sin(dLon / 2);
double c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1 - a));
double d = R * c;
return d;
}
一个点一个点去比较吧
Response.Write("<br>" +distHaversine(24.316029, 109.366053, 40.7118740691058, -74.0005159378052));