我知道我可以与google api保持距离,而且非常好
但有时候它很慢而且我的应用程序无法实现
有没有办法在两个地点之间找到距离?
答案 0 :(得分:1)
答案 1 :(得分:1)
您可以轻松获取lastKnownLocation
,将坐标添加到ArrayList
,然后测量该列表中各点之间的距离,如下所示:
<强>先决条件强>:
向清单添加权限:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
导入Gradle依赖项:
compile 'com.google.android.gms:play-services-location:10.2.1'
将此课程添加到您的项目中:
Github: android-maps-utils : SphericalUtil.java
在LocationListener
:
Activity
public class myClass extends Activity implements LocationListener {
定义全局变量:
private LocationManager locationManager;
private String provider;
private ArrayList<LatLng> coordList = new ArrayList<String>();
获取初始位置(位于onCreate()
或onClick()
):
locationManager = (LocationManager) getActivity().getApplicationContext().getSystemService(Context.LOCATION_SERVICE);
// Define the criteria how to select the locatioin provider -> use
// default
Criteria criteria = new Criteria();
provider = locationManager.getBestProvider(criteria, false);
Location location = locationManager.getLastKnownLocation(provider);
if (coordList != null && !coordList.isEmpty()) {
coordList.get(0);
} else {
coordList.add(0, new LatLng(location.getLatitude(), location.getLongitude()));
}
if (location != null) {
onLocationChanged(location);
}
getLocationUpdates();
创建getLocationUpdates()
方法:
private void getLocationUpdates() {
if (locationManager != null) {
checkPermission();
locationManager.requestLocationUpdates(provider, ONE_SECOND, ONE_METER, this);
}
}
从locationManager
请求位置更新(确保您{6}适用于Android 6.0及更高版本)
@Override
public void onResume() {
super.onResume();
getLocationUpdates();
}
使用SphericalUtil
类计算ArrayList
函数内onLocationChange
内的距离。
@Override
public void onLocationChanged(Location location) {
double distance = SphericalUtil.computeLength(coordList);
distance = round(distance, 2) / 1000;
distanceOutput.setText(distance + "km");
}
添加回合功能:
public static double round(double value, int places) {
if (places < 0) throw new IllegalArgumentException();
BigDecimal bd = new BigDecimal(value);
bd = bd.setScale(places, RoundingMode.FLOOR);
return bd.doubleValue();
}
这将获得起点和终点之间的距离(以km为单位)并将其向下舍入到两位小数,可以根据您的使用情况将它们转换为任何其他距离单位。
答案 2 :(得分:0)
Google距离矩阵API需要用于确定地点之间的正确距离。
答案 3 :(得分:0)
经过多次搜索和常见问题解答,最后我明白google的api是最好的第一种方式来获得距离两个位置