python实现定位附近的_c#教程之使用GPS经纬度定位附近地点(某一点范围

这篇博客介绍了如何使用Python进行地理位置的计算,包括将角度转换为弧度、计算两点间的距离以及确定一个中心点周围一定范围内的四个顶点坐标。这些方法对于实现基于经纬度的附近地点搜索非常有用。
摘要由CSDN通过智能技术生成

///

/// 经纬度坐标

///

public class Degree

{

public Degree(double x, double y)

{

X = x;

Y = y;

}

private double x;

public double X

{

get { return x; }

set { x = value; }

}

private double y;

public double Y

{

get { return y; }

set { y = value; }

}

}

public class CoordDispose

{

private const double EARTH_RADIUS = 6378137.0;//地球半径(米)

///

/// 角度数转换为弧度公式

///

///

///

private static double radians(double d)

{

return d * Math.PI / 180.0;

}

///

/// 弧度转换为角度数公式

///

///

///

private static double degrees(double d)

{

return d * (180 / Math.PI);

}

///

/// 计算两个经纬度之间的直接距离

///

public static double GetDistance(Degree Degree1, Degree Degree2)

{

double radLat1 = radians(Degree1.X);

double radLat2 = radians(Degree2.X);

double a = radLat1 - radLat2;

double b = radians(Degree1.Y) - radians(Degree2.Y);

double s = 2 * Math.Asin(Math.Sqrt(Math.Pow(Math.Sin(a / 2), 2) +

Math.Cos(radLat1) * Math.Cos(radLat2) * Math.Pow(Math.Sin(b / 2), 2)));

s = s * EARTH_RADIUS;

s = Math.Round(s * 10000) / 10000;

return s;

}

///

/// 计算两个经纬度之间的直接距离(google 算法)

///

public static double GetDistanceGoogle(Degree Degree1, Degree Degree2)

{

double radLat1 = radians(Degree1.X);

double radLng1 = radians(Degree1.Y);

double radLat2 = radians(Degree2.X);

double radLng2 = radians(Degree2.Y);

double s = Math.Acos(Math.Cos(radLat1) * Math.Cos(radLat2) * Math.Cos(radLng1 - radLng2) + Math.Sin(radLat1) * Math.Sin(radLat2));

s = s * EARTH_RADIUS;

s = Math.Round(s * 10000) / 10000;

return s;

}

///

/// 以一个经纬度为中心计算出四个顶点

///

/// 半径(米)

///

public static Degree[] GetDegreeCoordinates(Degree Degree1, double distance)

{

double dlng = 2 * Math.Asin(Math.Sin(distance / (2 * EARTH_RADIUS)) / Math.Cos(Degree1.X));

dlng = degrees(dlng);//一定转换成角度数  原PHP文章这个地方说的不清楚根本不正确 后来lz又查了很多资料终于搞定了

double dlat = distance / EARTH_RADIUS;

dlat = degrees(dlat);//一定转换成角度数

return new Degree[] { new Degree(Math.Round(Degree1.X + dlat,6), Math.Round(Degree1.Y - dlng,6)),//left-top

new Degree(Math.Round(Degree1.X - dlat,6), Math.Round(Degree1.Y - dlng,6)),//left-bottom

new Degree(Math.Round(Degree1.X + dlat,6), Math.Round(Degree1.Y + dlng,6)),//right-top

new Degree(Math.Round(Degree1.X - dlat,6), Math.Round(Degree1.Y + dlng,6)) //right-bottom

};

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值