高德地图测两点距离android比较精确的
/////参考资料:高德官方:【http://lbs.amap.com/api/android-location-sdk/guide/android-location/getlocation】
主要三个文件,前提配置androidstudio的高德地图使用环境,
给几张图:
2.project展示栏里app目录下的build.grade文件,高德开发手册有提到配置
apply plugin: 'com.android.application' android { compileSdkVersion 26 buildToolsVersion "26.0.1" // 添加map的so文件 sourceSets{ main{ jniLibs.srcDirs=['libs'] } } defaultConfig { applicationId "com.example.administrator.networkorder" minSdkVersion 21 targetSdkVersion 26 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" ndk { //设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so)设置地图 abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86","arm64-v8a","x86_64" } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:26.+' //3D地图so及jar compile 'com.amap.api:3dmap:latest.integration' //定位功能 compile 'com.amap.api:location:latest.integration' //搜索功能 compile 'com.amap.api:search:latest.integration' testCompile 'junit:junit:4.12' // compile files('libs/AMap3DMap_5.4.0_AMapNavi_5.4.0_AMapSearch_5.3.1_AMapLocation_3.6.0_20170929.jar') compile files('libs/AMap2DMap_5.2.0_AMapLocation_3.6.0_20170918.jar') }
3.AndroidManifest.xml文件,配置权限,开发key
<!--创建调试版地图key【参照:http://blog.csdn.net/a873228446/article/details/51316979】--> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.administrator.networkorder"> <!--//地图SDK(包含其搜索功能)需要的基础权限,,,,,,高德地图--> <!--允许程序打开网络套接字--> <uses-permission android:name="android.permission.INTERNET" /> <!--允许程序设置内置sd卡的写权限--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!--允许程序获取网络状态--> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!--允许程序访问WiFi网络信息--> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!--允许程序读写手机状态和身份--> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!--允许程序访问CellID或WiFi热点来获取粗略的位置--> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!--用于申请调用A-GPS模块--> <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission> <!--用于申请获取蓝牙信息进行室内定位--> <uses-permission android:name="android.permission.BLUETOOTH"></uses-permission> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"></uses-permission> <!--用于进行网络定位--> <!--<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>--> <!--用于访问GPS定位--> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <meta-data android:name="com.amap.api.v2.apikey" android:value="d4b100ad1856c9109720ea5f855b0638"> <!-- //开发者申请的key--> </meta-data> <service android:name="com.amap.api.location.APSService"></service> <activity android:name=".MapTest1"> <intent-filter> <!--设置启动项--> <action android:name="android.intent.action.MAIN"></action> <category android:name="android.intent.category.LAUNCHER"></category> </intent-filter> </activity> </application> </manifest>
4.布局文件,,,就一个页面
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <com.amap.api.maps.MapView android:id="@+id/map1" android:layout_width="match_parent" android:layout_height="match_parent"> </com.amap.api.maps.MapView> <Button android:id="@+id/btn_location" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="获取当前位置" /> <Button android:id="@+id/btn_dis" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="计算当前位置距离上个位置距离" android:layout_marginTop="60sp" /> </FrameLayout>
5.activity文件,,官网提到三种定位模式,高精度,低功耗,设备定位,本来用的高精度,总感觉就一两米,他就算出20,室内的,改用设备定位就好了,会不会是网络不好,设备定位用的GPS才准点,用的android5,
package com.example.administrator.networkorder; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.Toast; import com.amap.api.location.AMapLocation; import com.amap.api.location.AMapLocationClient; import com.amap.api.location.AMapLocationClientOption; import com.amap.api.location.AMapLocationListener; import com.amap.api.location.CoordinateConverter; import com.amap.api.location.DPoint; import com.amap.api.maps.AMap; import com.amap.api.maps.AMapUtils; import com.amap.api.maps.MapView; import com.amap.api.maps.model.LatLng; import com.amap.api.maps.model.MyLocationStyle; import java.util.Map; /** * Created by Administrator on 2017/10/9 0009. */ public class MapTest1 extends AppCompatActivity { MapView mMapView; AMap aMap; MyLocationStyle myLocationStyle; //---------------------------------------- private Button buttonGetLocation; AMapLocationClient aMapLocationClient; AMapLocationListener aMapLocationListener; AMapLocationClientOption aMapLocationClientOption; Button buttonCal; private LatLng latLng_first,latLng_second; private boolean changePosition = false; private int i1 = 1; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.map); mMapView = (MapView) findViewById(R.id.map1); mMapView.onCreate(savedInstanceState); buttonGetLocation = (Button) findViewById(R.id.btn_location); buttonCal = (Button) findViewById(R.id.btn_dis); if (aMap == null) aMap = mMapView.getMap(); // testLocation(); // showLocation(); buttonGetLocation.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showLocation(); } }); buttonCal.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String a="定位次数不够"; if (i1>2){ a="位置1:"+latLng_first.latitude+","+latLng_first.longitude+"]位置2:[" +latLng_second.latitude+","+latLng_second.longitude+"]距离:"+AMapUtils.calculateLineDistance(latLng_first,latLng_second); } Toast.makeText(MapTest1.this,"s::"+a,Toast.LENGTH_LONG).show(); } }); } public float getDistance(LatLng start, LatLng end) {//来自【http://blog.csdn.net/qq_34589749/article/details/53482567】的计算方法 double lon1 = (Math.PI / 180) * start.longitude; double lon2 = (Math.PI / 180) * end.longitude; double lat1 = (Math.PI / 180) * start.latitude; double lat2 = (Math.PI / 180) * end.latitude; // 地球半径 double R = 6371; // 两点间距离 km,如果想要米的话,结果*1000就可以了 double d = Math.acos(Math.sin(lat1) * Math.sin(lat2) + Math.cos(lat1) * Math.cos(lat2) * Math.cos(lon2 - lon1)) * R; float d1 = (float) Math.abs(d*1000); d1 = Math.round(d1); // AMapUtils.g return d1 ; } private void showLocation(){ aMapLocationClient = new AMapLocationClient(getApplicationContext()); aMapLocationListener = new AMapLocationListener() { @Override public void onLocationChanged(AMapLocation aMapLocation) { if (aMapLocation != null) { if (aMapLocation.getErrorCode() == 0) { //可在其中解析amapLocation获取相应内容。 LatLng latLng1 = new LatLng(38.008466,112.446289),latLng2=new LatLng(38.008353,112.446109);//参照:http://blog.csdn.net/u012527802/article/details/42271983 float distance1=CoordinateConverter.calculateLineDistance(new DPoint(38.008466,112.446289),new DPoint(38.008353,112.446109)); if (changePosition){ latLng_first = new LatLng(aMapLocation.getLatitude(),aMapLocation.getLongitude()); }else latLng_second = new LatLng(aMapLocation.getLatitude(),aMapLocation.getLongitude()); changePosition = changePosition?false:true; i1++; Toast.makeText(MapTest1.this,"定位成功:"+aMapLocation.getAddress()+"经纬:["+aMapLocation.getLatitude()+","+aMapLocation.getLongitude()+ "],精度:"+aMapLocation.getAccuracy()+"测试两点距离大概三米左右,计算值{不准啊}:"+ AMapUtils.calculateLineDistance(latLng1,latLng2)+"官网给的方法结果:"+distance1 +"博客主1:"+getDistance(latLng1,latLng2),Toast.LENGTH_LONG).show(); }else { //定位失败时,可通过ErrCode(错误码)信息来确定失败的原因,errInfo是错误信息,详见错误码表。 Log.e("AmapError","location Error, ErrCode:" + aMapLocation.getErrorCode() + ", errInfo:" + aMapLocation.getErrorInfo()); } } } }; aMapLocationClient.setLocationListener(aMapLocationListener); aMapLocationClientOption = new AMapLocationClientOption(); //使用手机定位的话, aMapLocationClientOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Device_Sensors); aMapLocationClientOption.setOnceLocation(true); aMapLocationClientOption.setOnceLocationLatest(true); // aMapLocationClientOption.setInterval(2000); aMapLocationClientOption.setNeedAddress(true); aMapLocationClientOption.setLocationCacheEnable(false); aMapLocationClient.setLocationOption(aMapLocationClientOption); aMapLocationClient.startLocation(); } private void testLocation(){ myLocationStyle = new MyLocationStyle(); myLocationStyle.interval(1000); myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE); myLocationStyle.showMyLocation(true); aMap.setMyLocationStyle(myLocationStyle); aMap.setMyLocationEnabled(true); } @Override protected void onDestroy() { super.onDestroy(); //在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图 mMapView.onDestroy(); } @Override protected void onResume() { super.onResume(); //在activity执行onResume时执行mMapView.onResume (),重新绘制加载地图 mMapView.onResume(); } @Override protected void onPause() { super.onPause(); //在activity执行onPause时执行mMapView.onPause (),暂停地图的绘制 mMapView.onPause(); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); //在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),保存地图当前的状态 mMapView.onSaveInstanceState(outState); } }
6.试了下,又出问题了,定位慢,还不准了,2,3米测成31米,三个都不准确,可能没用用室内定位的方式》》???,,,
高德地图测两点距离android比较精确的的更多相关文章
- java 百度地图判断两点距离1
package baiduApi; /** * 类名称:PointToDistance * 类描述:两个百度经纬度坐标点,计算两点距离 * 创建人:钟志铖 * 创建时间:2014-9-7 上午10:1 ...
- java 百度地图判断两点距离2
package baiduApi; public class BaiDuMap { static double DEF_PI = 3.14159265359; // PI static double ...
- 个人永久性免费-Excel催化剂功能第93波-地图数据挖宝之两点距离的路径规划
在日常手机端,网页端的向地图发出两点距离的行程规划,相信绝大多数人都有用到过,但毕竟是个体单一行为,若某些时候需要用到批量性的操作,就显得很不现实了,同时,数据只是在应用或网页内,非结构化的数据,也是 ...
- 高德地图车机版API演示程序
高德地图车机版API演示程序 做车载的应该和这个程序打交道打的比较多吧,这里是我今天写的一个实现了他的API的一个演示程序 首先我们来看下他的官网. http://lbs.amap.com/api/a ...
- Android学习十一:高德地图使用
写这篇文章主要有三个目的: 1.使用高德地图api定位 2.获取天气数据 3.编程练手 文件结构 清单文件信息说明: <?xml version="1.0" encoding ...
- Unity与Android交互-Unity接入高德地图实现定位以及搜索周边的功能(使用Android Studio)详细操作
刚进公司给安排的任务就是Unity接入高德地图,算是踩了不少坑总算做出来了,抽点时间写个博客记录一下 废话不多说 先上效果图 获取定位并根据手机朝向显示周边信息 使用的Unity ...
- reactjs中使用高德地图计算两个经纬度之间的距离
第一步下载依赖 npm install --save react-amap 第二步,在组件中使用 import React, { Component } from 'react' import { L ...
- 高德地图 API 计算两个城市之间的距离
1. 目前在项目中,遇到一个需求不会做,就是要计算两个城市之间的距离,而这两个城市的输入是可变的,如果要使用数据库来先存储两地之间的距离,调用的时候再来调用,那么存数据的时候,要哭的,因为光是省级区域 ...
- ReactNative 调用手机地图(高德、百度)导航 Android
由于项目需要,鉴于第三方sdk包的体积略大,经过评估论证后,决定采用调起APP以及网页地图的方式来进行导航. 思路: 在需要调用导航的界面通过原生获取当前手机内可用的导航app组装成列表返回到RN待选 ...
随机推荐
- [js高手之路]深入浅出webpack系列2-配置文件webpack.config.js详解
接着上文,重新在webpack文件夹下面新建一个项目文件夹demo2,然后用npm init --yes初始化项目的package.json配置文件,然后安装webpack( npm install ...
- java_eclipse添加DID实现自动提示
便捷无错开发 对于xml 配置没有自动提示是多么恼火就不用说了,eclipse本身很多都是默认关闭了的,如果开发者不知道的话,就不知道怎么去设置,下面介绍几种自动提示设置的方法: XML:获得提示更好 ...
- poj3723 MST好题 kruskal
#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> us ...
- SUSE Linux Enterprise 11 离线安装 DLIB python机器学习模块
python机器学习模块安装 环境:SUSE Linux Enterprise 11 sp4 离线安装 说明:在安装dlib时依赖的基础 环境较多,先升级gcc,以适应c++ 11的使用:需要用到c ...
- 201521123003《Java程序设计》第8周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 2. 书面作业 本次作业题集集合 1.List中指定元素的删除(题目4-1) 1.1 实验总结 我们利用Sca ...
- 201521123110 《Java程序设计》第6周学习总结
1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 2. 书面作业 1.clone方法 1.1 Object对 ...
- 201521123017 《Java程序设计》第4周学习总结
1. 本周学习总结 2. 书面作业 Q1.注释的应用 使用类的注释与方法的注释为前面编写的类与方法进行注释,并在Eclipse中查看.(截图) Q2.面向对象设计(大作业1,非常重要) 2.1 将 ...
- 201521123042 Java第一周学习总结
1. 201521123042 <Java程序设计>第一周学习总结 a.用notepad++和eclipse编写Java程序 b.安装Java Q1.为什么java程序可以跨平台运行?执行 ...
- 201521123077 《Java程序设计》第11周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 线程的同步(加锁防止多个线程同时访问) synchronized关键字修饰 可以使用于方法前或者方法内做同步 ...
- 201521123011《Java程序设计》第14周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. MySql数据库简单操作 1.启动与退出(quit或exit ) 操作 显示所有数据库: show databa ...