高德地图测两点距离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待选 ...
随机推荐
- Django1-10-5管理界面中文设置
先确定一下版本是否更高,低版本设置(settings.py文件): LANGUAGE_CODE = 'zh-CN'TIME_ZONE = 'Asia/Shanghai' 但是新版本就会提示不识别zh- ...
- ADO.NET的学习
ADO.NET的几个对象 Connection:管理数据库的连接 Command:对数据库执行命令 DataReader:数据流读取器,返回的数据都是快速的且只是"向前"的数据流. ...
- Linux-insmod/rmmod/lsmod驱动模块相关命令(10)
insmod:加载模块 参数: -f 不检查目前kernel版本与模块编译时的kernel版本是否一致,强制将模块载入.-k 将模块设置为自动卸除.-m 输出模块的载入信息.-o <模块名称 ...
- 想做iPhoneX抢购活动?压测大师先教你优化网站后台
北京时间9月13日凌晨1点,iPhone 10周年,在Apple Park乔布斯剧院,苹果发布了三款新iPhone.全面屏iPhone X来袭,这款被定义为未来的智能手机黑科技满满:全面屏,无线充电. ...
- [转载]Linux shell中的竖线(|)——管道符号
原文地址:Linux shell中的竖线(|)--管道符号作者:潇潇 管道符号,是unix一个很强大的功能,符号为一条竖线:"|". 用法: command 1 | command ...
- 安装Window下Jenkins
之前没接触过持续集成工具,之前只是了解了下自动化部署,最近一直在看自动化集成这块,发现要学的东西好多好多,可能在小公司用的不多,但如果在大公司,如果每个项目都要手动build.deploy的话那也太耗 ...
- php的mysql语句里变量加不加单引号问题
第一种[{$_GET['id']}加不加单引号都能正常执行没问题] $sql = "select * from `news` where `id` = {$_GET['id']}" ...
- 201521123029《Java程序设计》第四周学习总结
1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. 答:1. 多态性,多态性是相同的形态,不同的行为(定义),其中父类类型变量可以引用子类对象. ...
- 201521123060《Java程序设计》第1周学习总结
1. 本章学习总结 认识和了解了Java的发展进程: 了解了相关开发工具: 认识了JVM,JRE,JDK: 2. 书面作业 Q1.为什么java程序可以跨平台运行?执行java程序的步骤是什么?(请用 ...
- Eclipse rap 富客户端开发总结(2):rap项目目前的进度和存在的问题
1. Eclipse rap项目目前的进度 目前rap 的最新版本是 rap 1.5M4,最稳定版本是 rap 1.4.1,我们项目目前使用的版本是rap 1.4.1,Rap目前已经支持的部分是 sw ...