计算经纬度间的距离公里数

Google的Geocoding服务功能:
    1. 查询某地址的经纬度
    2. 查询某经纬度的具体地址

    Android的Geocoding替代品
    //根据地址查询经纬度的网址及其解释
    http://maps.googleapis.com/maps/api/geocode/json?address=SFO&sensor=false   ---json是表示返回的数据类型,可以改为xml。address是输入的位置。sensor标识请求是否来源于一个设备的传感器。language指定查询结果的语言
     //根据地址查询经纬度的网址及其解释,与上面不同的是这里有一个区域间范围
    http://maps.googleapis.com/maps/api/geocode/json?address=SFO&bounds=34.17,-188.6045|34.236,-118.500996&sensor=false  ---bounds是区间。sensor标识请求是否来源于一个设备的传感器。language指定查询结果的语言
     //根据地址查询经纬度的网址及其解释,如与上面不同的是这里有国家代码
    http://maps.googleapis.com/maps/api/geocode/json?address=SFO&sensor=false&region=es  ---region是国家代码。sensor标识请求是否来源于一个设备的传感器。language指定查询结果的语言
    //根据经纬度查询地址的网址及其解释
    http://maps.googleapis.com/maps/api/geocode/json?latlng=40.714224,-73.961452&sensor=false  ---latlng=40.714224,-73.961452经纬度数据。sensor标识请求是否来源于一个设备的传感器。language指定查询结果的语言



计算两点经纬度间的举例
public double getDistance(double lat1, double lon1, double lat2, double lon2) {

  float[] results=new float[1];

  Location.distanceBetween(lat1, lon1, lat2, lon2, results);

  return results[0];

  }

在其他设备若没有类似android的Location的distanceBetween方法开采用如下代码获取:

double distance(double lat1, double lon1, double lat2, double lon2) {

  double theta = lon1 - lon2;

  double dist = Math.sin(deg2rad(lat1)) * Math.sin(deg2rad(lat2))

  + Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2))

  * Math.cos(deg2rad(theta));

  dist = Math.acos(dist);

  dist = rad2deg(dist);

  double miles = dist * 60 * 1.1515;

  return miles;

  }

  //将角度转换为弧度

  static double deg2rad(double degree) {

  return degree / 180 * Math.PI;

  }

  //将弧度转换为角度

  static double rad2deg(double radian) {

  return radian * 180 / Math.PI;

  }

猜你喜欢

转载自gegaosong.iteye.com/blog/1779308
今日推荐