日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

安卓定位及坐标转换

發布時間:2023/12/14 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 安卓定位及坐标转换 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

需要添加位置權限,這里有兩個:

  • android.permission.ACCESS_COARSE_LOCATION – 允許 API 利用 WiFi 或移動蜂窩數據(或同時利用兩者)來確定設備位置。API 返回的位置精確度大約相當于城市街區。
  • android.permission.ACCESS_FINE_LOCATION – 允許 API 利用包括全球定位系統 (GPS) 在內的可用位置提供商以及 WiFi 和移動蜂窩數據盡可能精確地確定位置。

下面介紹幾種獲取的方法:

1 安卓 SDK android.location.LocationManager

單獨獲取位置信息還是很簡單的:

LocationManager mManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED&& ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)!= PackageManager.PERMISSION_GRANTED) {return;}Location mLocation = mManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);//需要權限檢測,上面添加double mLat = location.getLatitude();//獲取緯度double mLng = location.getLongitude();//獲取經度
  • 1

實際開發中,我們需要實時定位,就需要監聽位置變化來實現,

聲明 LocationListener,然后調用 requestLocationUpdates 方法即可:

/*** 獲取原生gps信息,代碼放 MainActivity 里就可以*/public void getGPSInfo() {LocationManager mManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED&& ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)!= PackageManager.PERMISSION_GRANTED) {return;}Location mLocation = mManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);updateGPSInfo(mLocation);mManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 8, new LocationListener() {@Overridepublic void onLocationChanged(Location location) {updateGPSInfo(mLocation);//位置變化時,更新位置信息}@Overridepublic void onStatusChanged(String provider, int status, Bundle extras) {}@Overridepublic void onProviderEnabled(String provider) {// 當GPS LocationProvider可用時,更新位置if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED&& ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)!= PackageManager.PERMISSION_GRANTED) {return;}updateGPSInfo(mManager.getLastKnownLocation(provider));}@Overridepublic void onProviderDisabled(String provider) {}});}/*** 更新經緯度信息* @param location*/public void updateGPSInfo(Location location) {if (location != null) {mLat = location.getLatitude();mLng = location.getLongitude();}}
  • 1

代碼放到了這個 Gist:?https://gist.github.com/jp1017/dc87d742ae5d1edf9fad0b43223f74bb

說明一點:requestLocationUpdates 方法有多個重載方法:

常用的是下面這個:

public void requestLocationUpdates (String provider, long minTime, float minDistance, LocationListener listener)
  • 1

當時間超過 minTime(單位:毫秒),或者位置移動超過 minDistance(單位:米),就會調用 listener 中的方法更新 GPS 信息。
如果要盡可能實時的更新 GPS 信息,請將 minTime 和 minDistance 都設置成0。

官方文檔:?https://developer.android.com/reference/android/location/LocationManager.html

2 google 地圖 api

參考這里,很詳細了:https://developers.google.com/maps/documentation/android-api/location?hl=zh-cn#_2

3 高德地圖 api

參考高德地圖 定位api :http://lbs.amap.com/api/android-location-sdk/locationsummary/

4 百度地圖 api

參考百度地圖api:http://lbsyun.baidu.com/index.php?title=android-locsdk/guide/getloc

坐標轉換


安卓系統常用的 GPS 坐標有下面幾種:

名稱別名標準獲取方式應用場合
wgs84地球坐標國際標準從 GPS 設備中獲取的坐標數據國際地圖提供商,谷歌國際地圖
gcj02火星坐標,國測局坐標中國標準從國行移動設備中定位獲取的坐標數據高德地圖,谷歌地圖,騰訊地圖,阿里云地圖
bd09百度坐標百度標準百度在火星坐標上二次加密后的坐標數據百度地圖

1 gcj02 轉成 bd09

可以使用百度地圖 SDK 里的工具類 CoordinateConverter

/*** gcj02 坐標轉換成百度坐標** @param srLatLng 要轉換的 gcj02 經緯度* @return 轉換后的百度經緯度*/public LatLng convertGPSToBaidu(LatLng srLatLng) {CoordinateConverter converter = new CoordinateConverter();converter.from(CoordinateConverter.CoordType.COMMON);converter.coord(srLatLng);return converter.convert();}
  • 1

另外一個是剛從 gayhub 上找到的:

/*** 火星坐標系(GCJ-02)轉百度坐標系(BD-09)* * 谷歌、高德——>百度* @param lng 火星坐標經度* @param lat 火星坐標緯度* @return 百度坐標數組*/public static double[] gcj02tobd09(double lng, double lat) {double z = Math.sqrt(lng * lng + lat * lat) + 0.00002 * Math.sin(lat * x_pi);double theta = Math.atan2(lat, lng) + 0.000003 * Math.cos(lng * x_pi);double bd_lng = z * Math.cos(theta) + 0.0065;double bd_lat = z * Math.sin(theta) + 0.006;return new double[] { bd_lng, bd_lat };}
  • 1

2 bd09 轉成 gcj02

萬能的 gayhub 拯救了我們:

/*** 百度坐標系(BD-09)轉火星坐標系(GCJ-02)* * 百度——>谷歌、高德* @param bd_lon 百度坐標緯度* @param bd_lat 百度坐標經度* @return 火星坐標數組*/public static double[] bd09togcj02(double bd_lon, double bd_lat) {double x = bd_lon - 0.0065;double y = bd_lat - 0.006;double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi);double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi);double gg_lng = z * Math.cos(theta);double gg_lat = z * Math.sin(theta);return new double[] { gg_lng, gg_lat };}
  • 1

另外,高德地圖也提供了 api :如何將非高德坐標轉換為高德坐標系

3 wgs84 轉成 gcj02

/*** WGS84轉GCJ02(火星坐標系)* * @param lng WGS84坐標系的經度* @param lat WGS84坐標系的緯度* @return 火星坐標數組*/public static double[] wgs84togcj02(double lng, double lat) {if (out_of_china(lng, lat)) {return new double[] { lng, lat };}double dlat = transformlat(lng - 105.0, lat - 35.0);double dlng = transformlng(lng - 105.0, lat - 35.0);double radlat = lat / 180.0 * pi;double magic = Math.sin(radlat);magic = 1 - ee * magic * magic;double sqrtmagic = Math.sqrt(magic);dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * pi);dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * pi);double mglat = lat + dlat;double mglng = lng + dlng;return new double[] { mglng, mglat };}
  • 1

當然,這個也可以利用上面的高德的 api

4 gcj02 轉成 wgs84

/*** GCJ02(火星坐標系)轉GPS84* * @param lng 火星坐標系的經度* @param lat 火星坐標系緯度* @return WGS84坐標數組*/public static double[] gcj02towgs84(double lng, double lat) {if (out_of_china(lng, lat)) {return new double[] { lng, lat };}double dlat = transformlat(lng - 105.0, lat - 35.0);double dlng = transformlng(lng - 105.0, lat - 35.0);double radlat = lat / 180.0 * pi;double magic = Math.sin(radlat);magic = 1 - ee * magic * magic;double sqrtmagic = Math.sqrt(magic);dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * pi);dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * pi);double mglat = lat + dlat;double mglng = lng + dlng;return new double[] { lng * 2 - mglng, lat * 2 - mglat };}
  • 1

5 wgs84 轉成 bd09

這個沒有直接轉的,需要 gcj02 做媒介

/*** WGS坐標轉百度坐標系(BD-09)* * @param lng WGS84坐標系的經度* @param lat WGS84坐標系的緯度* @return 百度坐標數組*/public static double[] wgs84tobd09(double lng, double lat) {double[] gcj = wgs84togcj02(lng, lat);double[] bd09 = gcj02tobd09(gcj[0], gcj[1]);return bd09;}
  • 1

6 bd09 轉成 wgs84

同上,需要媒介 gcj02

/*** 百度坐標系(BD-09)轉WGS坐標* * @param lng 百度坐標緯度* @param lat 百度坐標經度* @return WGS84坐標數組*/public static double[] bd09towgs84(double lng, double lat) {double[] gcj = bd09togcj02(lng, lat);double[] wgs84 = gcj02towgs84(gcj[0], gcj[1]);return wgs84;}

總結

以上是生活随笔為你收集整理的安卓定位及坐标转换的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 超碰国产91 | 在线视频 一区二区 | 日本一区二区在线视频 | 成都电影免费大全 | 欧美成人午夜影院 | 激情综合图区 | 欧美不卡二区 | 森泽佳奈中文字幕 | 天堂在线精品视频 | 新版红楼梦在线高清免费观看 | 欧美日韩国产一区 | 青娱乐精品视频 | 91视频在线免费 | 国产成人精品综合久久久久99 | 免费黄色链接 | 成人依依网 | 日韩黄片一区二区三区 | 操操操综合网 | 日本一区二区免费高清视频 | 欧美一区二区在线免费观看 | 久久噜噜色综合一区二区 | 国产绿帽刺激高潮对白 | 亚洲第一天堂影院 | 黄色视屏网站 | 超碰caopeng | 羞羞答答av| 久久久久久久久久久久久久 | 欧美一区二区三区免费 | 在线观看不卡的av | 日本免费网站在线观看 | 亚洲AV永久无码国产精品国产 | 国产精品久久久久久久久绿色 | 午夜影院免费 | 三年中文免费观看大全动漫 | 香蕉亚洲| 亚洲欧美激情在线 | 中文字幕天堂网 | www.色在线观看 | 在线看片一区二区 | 99小视频 | 海角国产乱辈乱精品视频 | 1024香蕉视频| 久久超碰在线 | 色偷偷噜噜噜亚洲男人的天堂 | 国产精品伦一区二区三级视频 | 玖玖精品| 国产aⅴ爽av久久久久成人 | 久久性生活片 | 日本四虎影院 | 私人影院毛片 | 日本一区不卡视频 | 亚洲最新在线观看 | 91在线观看成人 | 美女黄免费 | 鲁大师私人影院在线观看 | 亚洲品质自拍视频网站 | 欧美jjzz| 免费在线观看网址 | 无码一区二区三区在线观看 | 亚洲毛片儿 | 岛国大片在线观看 | 国产欧美一区二区三区白浆喷水 | 成人亚洲免费 | 一区二区三区在线观看免费视频 | 欧美黄色免费网站 | 欧美日韩免费做爰视频 | 婷婷午夜精品久久久久久性色av | 老司机午夜免费精品视频 | 爱豆国产剧免费观看大全剧集 | 午夜性福利 | 屁屁影院一区二区三区 | 国模一区二区 | 91视频导航 | 可以免费看的黄色网址 | 国产乱码一区二区三区 | 加勒比一区在线 | 韩毛片 | 可以直接看的无码av | 日韩一级免费毛片 | 一区二区三区视频播放 | 亚洲欧美小视频 | 欧美视频网站 | 免费黄网站在线看 | 欧美爱爱一区二区 | 佐佐木明希电影 | 国产人妻黑人一区二区三区 | 激情久久av一区av二区av三区 | 激情总合网 | 亚洲精品视 | 99热网| 天堂…中文在线最新版在线 | 毛片毛片毛片毛片毛片毛片毛片毛片 | 欧美精品电影一区二区 | 做爰无遮挡三级 | 精品国产乱码久久久久久牛牛 | 亚洲欧美综合久久 | 中文字幕欧美视频 | 日韩女优一区二区 | 久久精品视频无码 |