Android获取经纬度计算距离介绍

经度指示南北方向,纵向
纬度指示东西方向,横向

获取经纬度

使用GPS权限:


代码如下:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>

Android提供LocationManager和Location,可以方便的获得经纬度、海拔等位置。使用LocationManager来获得位置管理类,从而可以获得历史GPS信息以及位置变化的监听注册;使用Location来获得具体的位置信息。代码如下:

代码如下:

locationm = (LocationManager) getSystemService(LOCATION_SERVICE);
   Criteria criteria = new Criteria();
   criteria.setAccuracy(Criteria.ACCURACY_FINE);
   criteria.setAltitudeRequired(false);
   criteria.setBearingRequired(false);
   criteria.setCostAllowed(true);
   criteria.setPowerRequirement(Criteria.POWER_LOW);
   String provider = locationm.getBestProvider(criteria, true);

Location location = locationm.getLastKnownLocation(provider);
       //获得上次的记录
   gps_loc(location);

LocationListener GPS_listener = new LocationListener() {
   //监听位置变化,实时获取位置信息
       @Override
       public void onStatusChanged(String provider, int status,
              Bundle extras) {
          // TODO Auto-generated method stub

}

@Override
       public void onProviderEnabled(String provider) {
          // TODO Auto-generated method stub

}

@Override
       public void onProviderDisabled(String provider) {
          // TODO Auto-generated method stub

}

@Override
       public void onLocationChanged(Location location) {
          // TODO Auto-generated method stub
   //位置发生改变时
gps_loc(location);
}
};
locationm.requestLocationUpdates(provider, 1000, 0, GPS_listener);
}

// 获得自己位置
private void gps_loc(Location location) {
   if (location != null) {
       self_weidu = location.getLatitude();
       self_jindu = location.getLongitude();
   } else {
       self_weidu = 0;
       self_jindu = 0;
   }
}

两点经纬度,计算距离

1.Lat1 Lung1 表示A点经纬度,Lat2 Lung2 表示B点经纬度;

2.a=Lat1 – Lat2 为两点纬度之差 b=Lung1 -Lung2 为两点经度之差;

3.6378.137为地球半径,单位为千米;

计算出来的结果单位为千米。

直接从google maps的脚本里扒了段代码。
maps的代码:计算的结果是米为单位。


代码如下:

// 计算两点距离
private final double EARTH_RADIUS = 6378137.0;
private double gps2m(double lat_a, double lng_a, double lat_b, double lng_b) {
double radLat1 = (lat_a * Math.PI / 180.0);
double radLat2 = (lat_b * Math.PI / 180.0);
double a = radLat1 - radLat2;
double b = (lng_a - lng_b) * Math.PI / 180.0;
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;
}

两点经纬度,计算方位角

计算方位角pab

其中lat_a, lng_a是A的纬度和经度; lat_b, lng_b是B的纬度和经度。代码如下:


代码如下:

// 计算方位角pab。
private double gps2d(double lat_a, double lng_a, double lat_b, double lng_b) {
double d = 0;
lat_a=lat_a*Math.PI/180;
lng_a=lng_a*Math.PI/180;
lat_b=lat_b*Math.PI/180;
lng_b=lng_b*Math.PI/180;

d=Math.sin(lat_a)*Math.sin(lat_b)+Math.cos(lat_a)*Math.cos(lat_b)*Math.cos(lng_b-lng_a);
   d=Math.sqrt(1-d*d);
   d=Math.cos(lat_b)*Math.sin(lng_b-lng_a)/d;
   d=Math.asin(d)*180/Math.PI;
   // d = Math.round(d*10000);
return d;
}

(0)

相关推荐

  • android通过gps获取定位的位置数据和gps经纬度

    复制代码 代码如下: package com.action.android_test;import android.location.Location;import android.location.LocationListener;import android.location.LocationManager;import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.

  • android如何获取经纬度

    android 定位的两种方式:GPS_PROVIDER and NETWORK_PROVIDER 定位的可以借助LocationManager来实现 MainActivity代码 static final String TAG = "MainActivity"; private TextView locationTV; private LocationManager locationManager; private String provider; ArrayList<Cont

  • Android简单获取经纬度的方法

    本文实例讲述了Android简单获取经纬度的方法.分享给大家供大家参考,具体如下: public void getLoc() { // 位置 LocationManager locationManager; LocationListener locationListener; Location location; String contextService = Context.LOCATION_SERVICE; String provider; double lat; double lon; l

  • android手机获取gps和基站的经纬度地址实现代码

    复制代码 代码如下: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" an

  • Android获取当前位置的经纬度数据

    现在有这么一个需求:开启一个Service服务,获取当前位置的经纬度数据,将获取的数据以广播的方式发送出去,注册广播的Activity接收广播信息,并将接收到的数据在当前Activity显示,如果当前位置发生变化,经纬度数据改变,获取改变后的经纬度数据,通过Handler发送消息,更新UI界面,显示更新后的内容,请问这样子的Demo该如何实现? LocationTool获取当前位置信息 Android手机获取当前位置的方式:GPS定位,WIFI定位,基站定位,当前Demo使用GPS卫星定位,在L

  • Android 通过当前经纬度获得城市的实例代码

    复制代码 代码如下: package com.yy; import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL; import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes;import org.xml.sax.InputSou

  • Android编程实现根据经纬度查询地址并对获取的json数据进行解析的方法

    本文实例讲述了Android编程实现根据经纬度查询地址并对获取的json数据进行解析的方法.分享给大家供大家参考,具体如下: 第一步:根据指定的URL从google 服务器上获得包含地址的json格式的数据(其还提供xml格式的,但json解析效率比xml高) private static StringBuffer getJSONData(String urlPath){ try { URL url = new URL(urlPath); HttpURLConnection httpURLCon

  • Android获取经纬度计算距离介绍

    经度指示南北方向,纵向纬度指示东西方向,横向 获取经纬度 使用GPS权限: 复制代码 代码如下: <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission> Android提供LocationManager和Location,可以方便的获得经纬度.海拔等位置.使用LocationManager来获得位置管理类,从而可以获得历史GPS信息以及位

  • Android获取RecyclerView滑动距离方法详细讲解

    先说能用的究极解决方案,大家着急的直接复制走,以后想了解再过来看 没有header,且所有Item的高度一致 private fun getScrollYDistance(recyclerView: RecyclerView): Int? { kotlin.runCatching { val layoutManager = recyclerView.layoutManager as LinearLayoutManager val position = layoutManager.findFirs

  • PHP根据两点间的经纬度计算距离

    这是一个不错的示例,直接贴代码,首先要知道纬度值.经度值 /** * @desc 根据两点间的经纬度计算距离 * @param float $lat 纬度值 * @param float $lng 经度值 */ function getDistance($lat1, $lng1, $lat2, $lng2) { $earthRadius = 6367000; //approximate radius of earth in meters /* Convert these degrees to r

  • Java编程获取经纬度之间距离的方法

    本文实例讲述了Java编程获取经纬度之间距离的方法.分享给大家供大家参考,具体如下: public class GeoUtil { /** * 根据经纬度和距离返回一个矩形范围 * * @param lng * 经度 * @param lat * 纬度 * @param distance * 距离(单位为米) * @return [lng1,lat1, lng2,lat2] 矩形的左下角(lng1,lat1)和右上角(lng2,lat2) */ public static double[] ge

  • SQLSERVER 根据地图经纬度计算距离差示例

    SQL SERVER 根据地图经纬度计算距离的公式 复制代码 代码如下: go --创建经纬度距离计算函数 CREATEFUNCTION [dbo].[fnGetDistance] --LatBegin 开始经度 --LngBegin 开始维度 (@LatBegin REAL, @LngBegin REAL, @LatEnd REAL, @LngEnd REAL) RETURNSFLOAT AS BEGIN --距离(千米) DECLARE @Distance REAL DECLARE @EAR

  • python根据经纬度计算距离示例

    复制代码 代码如下: /** * 计算两点之间距离 * @param _lat1 - start纬度 * @param _lon1 - start经度 * @param _lat2 - end纬度 * @param _lon2 - end经度 * @return km(四舍五入) */public static double getDistance(double _lat1,double _lon1, double _lat2,double _lon2){ double lat1 = (Math

  • C#通过经纬度计算2个点之间距离的实现代码

    根据两点经纬度计算距离 这些经纬线是怎样定出来的呢?地球是在不停地绕地轴旋转(地轴是一根通过地球南北两极和地球中心的假想线),在地球中腰画一个与地轴垂直的大圆圈,使圈上的每一点都和南北两极的距离相等,这个圆圈就叫作"赤道".在赤道的南北两边,画出许多和赤道平行的圆圈,就是"纬圈":构成这些圆圈的线段,叫做纬线.我们把赤道定为纬度零度,向南向北各为90度,在赤道以南的叫南纬,在赤道以北的叫北纬. 北极就是北纬90度,南极就是南纬90度.纬度的高低也标志着气候的冷热,如

  • android获取附近蓝牙设备并计算距离的实例代码

    需要用到本地蓝牙适配器 // 获取本地蓝牙适配器 mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 判断是否支持蓝牙,并确认打开该功能. // 判断手机是否支持蓝牙 if (mBluetoothAdapter == null) { Toast.makeText(this, "设备不支持蓝牙", Toast.LENGTH_SHORT).show(); finish(); } // 判断是否打开蓝牙 if (!mBlueto

  • PHP安装GeoIP扩展根据IP获取地理位置及计算距离的方法

    根据IP获取访客所在国家/城市/经纬度 安装GeoIP扩展: sudo apt-get install libgeoip-dev pecl install geoip-1.1.0 注意:Beta版要指定版本号.如果是apt安装的PHP,直接安装php5-geoip这个包即可. php.ini中加入: extension=geoip.so geoip.custom_directory="/usr/share/GeoIP" 免费下载GeoLiteCity数据库(解压后18MB): http

随机推荐