/////参考资料:高德官方:【http://lbs.amap.com/api/android-location-sdk/guide/android-location/getlocation】

主要三个文件,前提配置androidstudio的高德地图使用环境,

给几张图:

2.project展示栏里app目录下的build.grade文件,高德开发手册有提到配置

  1. apply plugin: 'com.android.application'
  2.  
  3. android {
  4. compileSdkVersion 26
  5. buildToolsVersion "26.0.1"
  6. // 添加map的so文件
  7. sourceSets{
  8. main{
  9. jniLibs.srcDirs=['libs']
  10. }
  11. }
  12. defaultConfig {
  13. applicationId "com.example.administrator.networkorder"
  14. minSdkVersion 21
  15. targetSdkVersion 26
  16. versionCode 1
  17. versionName "1.0"
  18. testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
  19. ndk {
  20. //设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so)设置地图
  21. abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86","arm64-v8a","x86_64"
  22. }
  23. }
  24. buildTypes {
  25. release {
  26. minifyEnabled false
  27. proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
  28. }
  29. }
  30. }
  31.  
  32. dependencies {
  33. compile fileTree(include: ['*.jar'], dir: 'libs')
  34. androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
  35. exclude group: 'com.android.support', module: 'support-annotations'
  36. })
  37. compile 'com.android.support:appcompat-v7:26.+'
  38. //3D地图so及jar
  39. compile 'com.amap.api:3dmap:latest.integration'
  40. //定位功能
  41. compile 'com.amap.api:location:latest.integration'
  42. //搜索功能
  43. compile 'com.amap.api:search:latest.integration'
  44. testCompile 'junit:junit:4.12'
  45. // compile files('libs/AMap3DMap_5.4.0_AMapNavi_5.4.0_AMapSearch_5.3.1_AMapLocation_3.6.0_20170929.jar')
  46. compile files('libs/AMap2DMap_5.2.0_AMapLocation_3.6.0_20170918.jar')
  47. }

3.AndroidManifest.xml文件,配置权限,开发key

  1. <!--创建调试版地图key【参照:http://blog.csdn.net/a873228446/article/details/51316979】-->
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. package="com.example.administrator.networkorder">
  4. <!--//地图SDK(包含其搜索功能)需要的基础权限,,,,,,高德地图-->
  5. <!--允许程序打开网络套接字-->
  6. <uses-permission android:name="android.permission.INTERNET" />
  7. <!--允许程序设置内置sd卡的写权限-->
  8. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  9. <!--允许程序获取网络状态-->
  10. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  11. <!--允许程序访问WiFi网络信息-->
  12. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  13. <!--允许程序读写手机状态和身份-->
  14. <uses-permission android:name="android.permission.READ_PHONE_STATE" />
  15. <!--允许程序访问CellID或WiFi热点来获取粗略的位置-->
  16. <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
  17. <!--用于申请调用A-GPS模块-->
  18. <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission>
  19. <!--用于申请获取蓝牙信息进行室内定位-->
  20. <uses-permission android:name="android.permission.BLUETOOTH"></uses-permission>
  21. <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"></uses-permission>
  22. <!--用于进行网络定位-->
  23. <!--<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>-->
  24. <!--用于访问GPS定位-->
  25. <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
  26. <application
  27. android:allowBackup="true"
  28. android:icon="@mipmap/ic_launcher"
  29. android:label="@string/app_name"
  30. android:roundIcon="@mipmap/ic_launcher_round"
  31. android:supportsRtl="true"
  32. android:theme="@style/AppTheme">
  33. <meta-data android:name="com.amap.api.v2.apikey" android:value="d4b100ad1856c9109720ea5f855b0638">
  34. <!-- //开发者申请的key-->
  35. </meta-data>
  36. <service android:name="com.amap.api.location.APSService"></service>
  37. <activity android:name=".MapTest1">
  38. <intent-filter>
  39. <!--设置启动项-->
  40. <action android:name="android.intent.action.MAIN"></action>
  41. <category android:name="android.intent.category.LAUNCHER"></category>
  42. </intent-filter>
  43. </activity>
  44. </application>
  45.  
  46. </manifest>

4.布局文件,,,就一个页面

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical" android:layout_width="match_parent"
  4. android:layout_height="match_parent">
  5. <com.amap.api.maps.MapView
  6. android:id="@+id/map1"
  7. android:layout_width="match_parent"
  8. android:layout_height="match_parent">
  9. </com.amap.api.maps.MapView>
  10. <Button
  11. android:id="@+id/btn_location"
  12. android:layout_width="match_parent"
  13. android:layout_height="wrap_content"
  14. android:text="获取当前位置"
  15. />
  16. <Button
  17. android:id="@+id/btn_dis"
  18. android:layout_width="match_parent"
  19. android:layout_height="wrap_content"
  20. android:text="计算当前位置距离上个位置距离"
  21. android:layout_marginTop="60sp"
  22. />
  23. </FrameLayout>

5.activity文件,,官网提到三种定位模式,高精度,低功耗,设备定位,本来用的高精度,总感觉就一两米,他就算出20,室内的,改用设备定位就好了,会不会是网络不好,设备定位用的GPS才准点,用的android5,

  1. package com.example.administrator.networkorder;
  2.  
  3. import android.os.Bundle;
  4. import android.support.annotation.Nullable;
  5. import android.support.v7.app.AppCompatActivity;
  6. import android.util.Log;
  7. import android.view.View;
  8. import android.widget.Button;
  9. import android.widget.Toast;
  10.  
  11. import com.amap.api.location.AMapLocation;
  12. import com.amap.api.location.AMapLocationClient;
  13. import com.amap.api.location.AMapLocationClientOption;
  14. import com.amap.api.location.AMapLocationListener;
  15. import com.amap.api.location.CoordinateConverter;
  16. import com.amap.api.location.DPoint;
  17. import com.amap.api.maps.AMap;
  18. import com.amap.api.maps.AMapUtils;
  19. import com.amap.api.maps.MapView;
  20. import com.amap.api.maps.model.LatLng;
  21. import com.amap.api.maps.model.MyLocationStyle;
  22.  
  23. import java.util.Map;
  24.  
  25. /**
  26. * Created by Administrator on 2017/10/9 0009.
  27. */
  28.  
  29. public class MapTest1 extends AppCompatActivity {
  30. MapView mMapView;
  31. AMap aMap;
  32. MyLocationStyle myLocationStyle;
  33. //----------------------------------------
  34. private Button buttonGetLocation;
  35. AMapLocationClient aMapLocationClient;
  36. AMapLocationListener aMapLocationListener;
  37. AMapLocationClientOption aMapLocationClientOption;
  38. Button buttonCal;
  39.  
  40. private LatLng latLng_first,latLng_second;
  41. private boolean changePosition = false;
  42. private int i1 = 1;
  43. @Override
  44. protected void onCreate(@Nullable Bundle savedInstanceState) {
  45. super.onCreate(savedInstanceState);
  46. setContentView(R.layout.map);
  47. mMapView = (MapView) findViewById(R.id.map1);
  48. mMapView.onCreate(savedInstanceState);
  49. buttonGetLocation = (Button) findViewById(R.id.btn_location);
  50. buttonCal = (Button) findViewById(R.id.btn_dis);
  51. if (aMap == null)
  52. aMap = mMapView.getMap();
  53. // testLocation();
  54. // showLocation();
  55. buttonGetLocation.setOnClickListener(new View.OnClickListener() {
  56. @Override
  57. public void onClick(View v) {
  58. showLocation();
  59. }
  60. });
  61. buttonCal.setOnClickListener(new View.OnClickListener() {
  62. @Override
  63. public void onClick(View v) {
  64. String a="定位次数不够";
  65. if (i1>2){
  66. a="位置1:"+latLng_first.latitude+","+latLng_first.longitude+"]位置2:["
  67. +latLng_second.latitude+","+latLng_second.longitude+"]距离:"+AMapUtils.calculateLineDistance(latLng_first,latLng_second);
  68. }
  69. Toast.makeText(MapTest1.this,"s::"+a,Toast.LENGTH_LONG).show();
  70. }
  71. });
  72. }
  73. public float getDistance(LatLng start, LatLng end) {//来自【http://blog.csdn.net/qq_34589749/article/details/53482567】的计算方法
  74.  
  75. double lon1 = (Math.PI / 180) * start.longitude;
  76. double lon2 = (Math.PI / 180) * end.longitude;
  77. double lat1 = (Math.PI / 180) * start.latitude;
  78. double lat2 = (Math.PI / 180) * end.latitude;
  79.  
  80. // 地球半径
  81. double R = 6371;
  82.  
  83. // 两点间距离 km,如果想要米的话,结果*1000就可以了
  84. double d = Math.acos(Math.sin(lat1) * Math.sin(lat2) + Math.cos(lat1) * Math.cos(lat2) * Math.cos(lon2 - lon1))
  85. * R;
  86. float d1 = (float) Math.abs(d*1000);
  87. d1 = Math.round(d1);
  88. // AMapUtils.g
  89. return d1 ;
  90. }
  91. private void showLocation(){
  92. aMapLocationClient = new AMapLocationClient(getApplicationContext());
  93. aMapLocationListener = new AMapLocationListener() {
  94. @Override
  95. public void onLocationChanged(AMapLocation aMapLocation) {
  96. if (aMapLocation != null) {
  97. if (aMapLocation.getErrorCode() == 0) {
  98. //可在其中解析amapLocation获取相应内容。
  99. LatLng latLng1 = new LatLng(38.008466,112.446289),latLng2=new LatLng(38.008353,112.446109);//参照:http://blog.csdn.net/u012527802/article/details/42271983
  100. float distance1=CoordinateConverter.calculateLineDistance(new DPoint(38.008466,112.446289),new DPoint(38.008353,112.446109));
  101. if (changePosition){
  102. latLng_first = new LatLng(aMapLocation.getLatitude(),aMapLocation.getLongitude());
  103. }else
  104. latLng_second = new LatLng(aMapLocation.getLatitude(),aMapLocation.getLongitude());
  105. changePosition = changePosition?false:true;
  106. i1++;
  107. Toast.makeText(MapTest1.this,"定位成功:"+aMapLocation.getAddress()+"经纬:["+aMapLocation.getLatitude()+","+aMapLocation.getLongitude()+
  108. "],精度:"+aMapLocation.getAccuracy()+"测试两点距离大概三米左右,计算值{不准啊}:"+
  109. AMapUtils.calculateLineDistance(latLng1,latLng2)+"官网给的方法结果:"+distance1
  110. +"博客主1:"+getDistance(latLng1,latLng2),Toast.LENGTH_LONG).show();
  111. }else {
  112. //定位失败时,可通过ErrCode(错误码)信息来确定失败的原因,errInfo是错误信息,详见错误码表。
  113. Log.e("AmapError","location Error, ErrCode:"
  114. + aMapLocation.getErrorCode() + ", errInfo:"
  115. + aMapLocation.getErrorInfo());
  116. }
  117. }
  118. }
  119. };
  120. aMapLocationClient.setLocationListener(aMapLocationListener);
  121. aMapLocationClientOption = new AMapLocationClientOption();
  122. //使用手机定位的话,
  123. aMapLocationClientOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Device_Sensors);
  124. aMapLocationClientOption.setOnceLocation(true);
  125. aMapLocationClientOption.setOnceLocationLatest(true);
  126. // aMapLocationClientOption.setInterval(2000);
  127. aMapLocationClientOption.setNeedAddress(true);
  128. aMapLocationClientOption.setLocationCacheEnable(false);
  129. aMapLocationClient.setLocationOption(aMapLocationClientOption);
  130. aMapLocationClient.startLocation();
  131. }
  132. private void testLocation(){
  133. myLocationStyle = new MyLocationStyle();
  134. myLocationStyle.interval(1000);
  135. myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);
  136. myLocationStyle.showMyLocation(true);
  137. aMap.setMyLocationStyle(myLocationStyle);
  138. aMap.setMyLocationEnabled(true);
  139. }
  140. @Override
  141. protected void onDestroy() {
  142. super.onDestroy();
  143. //在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图
  144. mMapView.onDestroy();
  145. }
  146. @Override
  147. protected void onResume() {
  148. super.onResume();
  149. //在activity执行onResume时执行mMapView.onResume (),重新绘制加载地图
  150. mMapView.onResume();
  151. }
  152. @Override
  153. protected void onPause() {
  154. super.onPause();
  155. //在activity执行onPause时执行mMapView.onPause (),暂停地图的绘制
  156. mMapView.onPause();
  157. }
  158. @Override
  159. protected void onSaveInstanceState(Bundle outState) {
  160. super.onSaveInstanceState(outState);
  161. //在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),保存地图当前的状态
  162. mMapView.onSaveInstanceState(outState);
  163. }
  164. }

6.试了下,又出问题了,定位慢,还不准了,2,3米测成31米,三个都不准确,可能没用用室内定位的方式》》???,,,

高德地图测两点距离android比较精确的的更多相关文章

  1. java 百度地图判断两点距离1

    package baiduApi; /** * 类名称:PointToDistance * 类描述:两个百度经纬度坐标点,计算两点距离 * 创建人:钟志铖 * 创建时间:2014-9-7 上午10:1 ...

  2. java 百度地图判断两点距离2

    package baiduApi; public class BaiDuMap { static double DEF_PI = 3.14159265359; // PI static double ...

  3. 个人永久性免费-Excel催化剂功能第93波-地图数据挖宝之两点距离的路径规划

    在日常手机端,网页端的向地图发出两点距离的行程规划,相信绝大多数人都有用到过,但毕竟是个体单一行为,若某些时候需要用到批量性的操作,就显得很不现实了,同时,数据只是在应用或网页内,非结构化的数据,也是 ...

  4. 高德地图车机版API演示程序

    高德地图车机版API演示程序 做车载的应该和这个程序打交道打的比较多吧,这里是我今天写的一个实现了他的API的一个演示程序 首先我们来看下他的官网. http://lbs.amap.com/api/a ...

  5. Android学习十一:高德地图使用

    写这篇文章主要有三个目的: 1.使用高德地图api定位 2.获取天气数据 3.编程练手 文件结构 清单文件信息说明: <?xml version="1.0" encoding ...

  6. Unity与Android交互-Unity接入高德地图实现定位以及搜索周边的功能(使用Android Studio)详细操作

    刚进公司给安排的任务就是Unity接入高德地图,算是踩了不少坑总算做出来了,抽点时间写个博客记录一下 废话不多说 先上效果图 获取定位并根据手机朝向显示周边信息            使用的Unity ...

  7. reactjs中使用高德地图计算两个经纬度之间的距离

    第一步下载依赖 npm install --save react-amap 第二步,在组件中使用 import React, { Component } from 'react' import { L ...

  8. 高德地图 API 计算两个城市之间的距离

    1. 目前在项目中,遇到一个需求不会做,就是要计算两个城市之间的距离,而这两个城市的输入是可变的,如果要使用数据库来先存储两地之间的距离,调用的时候再来调用,那么存数据的时候,要哭的,因为光是省级区域 ...

  9. ReactNative 调用手机地图(高德、百度)导航 Android

    由于项目需要,鉴于第三方sdk包的体积略大,经过评估论证后,决定采用调起APP以及网页地图的方式来进行导航. 思路: 在需要调用导航的界面通过原生获取当前手机内可用的导航app组装成列表返回到RN待选 ...

随机推荐

  1. 【DDD】领域驱动设计实践 —— 架构风格及架构实例

    概述 DDD为复杂软件的设计提供了指导思想,其将易发生变化的业务核心域放置在限定上下文中,在确保核心域一致性和内聚性的基础上,DDD可以被多种语言和多种技术框架实现,具体的框架实现需要根据实际的业务场 ...

  2. 实现一个简单的Laravel的dd库

    前几天写了一个简单的Laravel的dd库. 为什么自己要写一个这样的库? Laravel本身已经实现了自己的输出dd函数,但是我之所以要写这样一个库,一来是因为Laravel本身对这个库的封装没办法 ...

  3. Info模式下的隐形杀手(SpringMVC同时使用<mvc:resources.../>和FormattingConversionServiceFactoryBean时出现的问题)

    天气一天比一天变的凉快了,而我一天天踩的坑更加贱了,首先在北京向各位问好,也给身边献身教育事业的亲朋好友们补上一句节日快乐! 今天早上手贱把项目误删了,不得不去SVN上去乞求了.我个人习惯项目运行的时 ...

  4. 汇编指令-str存储指令(4)

    str -(Store Register)存储指令 格式:str{条件}  源寄存器,<存储器地址>将源寄存器中数据存到存储器地址中. 实例1: str   r1,[r2]        ...

  5. 【C++小白成长撸】--(续)单偶数N阶魔方矩阵

    1 /*程序的版权和版本声明部分: **Copyright(c) 2016,电子科技大学本科生 **All rights reserved. **文件名:单偶数N阶魔方矩阵 **程序作用:单偶数N阶魔 ...

  6. (2)ES6解构赋值-数组篇

    1.解构赋值-数组篇 //Destrcturing(解构) //ES5 /* var a = 1; var b = 2; var c = 3; */ //ES6 var [a,b,c] = [1,2, ...

  7. 简单的独享smb

    1.是这样的,因为办公区域有一个千兆的交换机,但是我的台式机硬盘有点小,500G的,就把一个旧的台式网卡换成了千兆的,装了个CentOS6.5,最小化的,装了个samba,就开始用了: 2.由于是自己 ...

  8. 201521123044 《Java程序设计》第7周学习总结

    1. 本章学习总结 2. 书面作业 1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 源代码: //contains public boolean contain ...

  9. 201521123023《Java程序设计》第6周学习总结

    1. 本周学习总结 2. 书面作业 1.clone方法 1.1 Object对象中的clone方法是被protected修饰,在自定义的类中覆盖clone方法时需要注意什么? 实现克隆必须实现Clon ...

  10. Python[小甲鱼008了不起的分支和循环2]

    案例:对所给的分数进行评级,以下有三种方案: score = int(input('请输入一份分数')) #第一种方案 if 100 >= score >= 90: print('A') ...