1 已知经纬度,计算两点距离
#include <math.h>
#define PI 3.1415926535898
#define EARTH_RADIUS_KM 6378.137
static double rad(double d)
{
//d*PI/180.0;
return d * 0.017453292519943;
}
double get_distance_metre(double lat1, double lng1, double lat2, double lng2)
{
double rad_lat1 = rad(lat1);
double rad_lat2 = rad(lat2);
double a = rad_lat1 - rad_lat2;
double b = rad(lng1) - rad(lng2);
double s = 2 * asin(sqrt(pow(sin(a/2),2) +
cos(rad_lat1)*cos(rad_lat2)*pow(sin(b/2),2)))* EARTH_RADIUS_KM;
return s*1000;
}
2 已知经纬度和半径,计算最大经纬度范围
void get_max_range(double *max_lat, double *min_lat, double *max_lng, double *min_lng, double lat, double lng, double r_metre)
{
double radius = r_metre / 1000;
double range = 180 / PI * radius / EARTH_RADIUS_KM;
double lng_r = range / cos(lat * PI / 180);
*max_lat = lat + range;
*min_lat = lat - range;
*max_lng = lng + lng_r;
*min_lng = lng - lng_r;
}