我正在使用Android Studio>>我有一个起点和命运点。我使用Google Services中的JSONData绘制路线,然后创建折线。现在,我需要从地图中的折线监视用户的当前位置,但我不能。
这是我的代码:
private void drawRoute(List<LatLng> list) {
if ((list != null) && (list.size() > 0)) {
polylineOptions = new PolylineOptions()
.addAll(list)
.width(8);
map.addPolyline(polylineOptions);
CircleOptions circleOptions;
for (int i = 0; i < polylineOptions.getPoints().size(); i++) {
LatLng point = polylineOptions.getPoints().get(i);
circleOptions = new CircleOptions()
.center(new LatLng(point.latitude, point.longitude))
.strokeColor(Color.TRANSPARENT)
.strokeWidth(1)
.fillColor(Color.argb(100, 164, 171, 167))
.radius(10);
map.addCircle(circleOptions);
}
} else {
Log.i("Msg", "No routes");
}
}
我与此相距甚远:
private double getDistance(LatLng originPoint, LatLng destinyPoint) {
try {
Location origin = new Location("Origin point");
origin.setLatitude(originPoint.latitude);
origin.setLongitude(originPoint.longitude);
Location destiny = new Location("Destiny point");
destiny.setLatitude(destinyPoint.latitude);
destiny.setLongitude(destinyPoint.longitude);
return origin.distanceTo(destiny);
} catch (Exception e) {
Log.e("Msg", e.getMessage());
return 0d;
}
}
我不知道是否有办法在用户当前位置周围的圆圈中找到折线的“片段”,并计算该“片段”与当前位置之间的距离。我一直在搜索,但我找到的代码是在V3,我正在启动Android应用程序。感谢您的帮助!
答案 0 :(得分:0)
好吧,如果你需要它,我用这段代码解决它:
@Override
protected Boolean doInBackground(List<LatLng>... params) {
publishProgress();
List<LatLng> list = params[0];
LatLng currentPosition = list.get(0);
for (int i = 1; i < list.size(); i++) {
if (obtenerDistancia(currentPosition, list.get(i)) <= 100) {
return false;
}
}
return true;
}
其中list =当前位置+ polyline.getPoints()
list [0] =当前位置;
list [1],list [2] ...,list [n] =折线点。
我计算当前位置(列表[0])与折线中的每个点之间的距离(列表[1],列表[2] ...,列表[n]]。如果我发现至少有一个点是&lt; =离我当前位置100米,这意味着用户接近绘制的路线。
答案 1 :(得分:0)
您无需在用户当前位置找到“片段”。 你只需要解码JSL文件中的点并将所有LatLng放到一个列表中,然后使用我创建的类来检查它。 以下是我对您所拥有的Class和方法的相关主题的回答:https://stackoverflow.com/a/49904276/7548514