如何获得位置的经纬度点击折线?
how to get lat lng of position click on polyline?
I am getting setOnPolylineClickListener
by following method.
mMap.setOnPolylineClickListener(new GoogleMap.OnPolylineClickListener() {
@Override
public void onPolylineClick(Polyline polyline) {
}
But this returns whole Polyline
I want Latitude
and Longitude
of click position like
we get by MapClickListener
how to achieve this ?
mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
@Override
public void onMapClick(final LatLng point) {
});
I have tried using PolyUtil
with following code it also doesn't work.
mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
@Override
public void onMapClick(final LatLng point) {
if (PolyUtil.isLocationOnPath(point, finalPolylines.getPoints(), true)) {
// user clicked on polyline
Toast.makeText(getContext(), "found", Toast.LENGTH_SHORT).show();
Log.d("found", "onMapClick: found");
}
}
});
你做的一切都很好:
mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
@Override
public void onMapClick(final LatLng point) {
if (PolyUtil.isLocationOnPath(point, finalPolylines.getPoints(), true)) {
// user clicked on polyline
Toast.makeText(getContext(), "found", Toast.LENGTH_SHORT).show();
Log.d("found", "onMapClick: found");
}
}
});
是解决方案,但 PolyUtil.isLocationOnPath(LatLng point, java.util.List<LatLng> polyline, boolean geodesic)
has 0.1 meter tolerance by default, and touch just didn't on path with this precise. Use PolyUtil.isLocationOnPath(LatLng point, java.util.List<LatLng> polyline, boolean geodesic, double tolerance)
相反,设置适当的 tolerance
(10 米或 20 米 - 甚至更多,这取决于缩放级别)
mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
@Override
public void onMapClick(final LatLng point) {
if (PolyUtil.isLocationOnPath(point, finalPolylines.getPoints(), true, 20)) {
// user clicked on polyline
Toast.makeText(getContext(), "found", Toast.LENGTH_SHORT).show();
Log.d("found", "onMapClick: found");
}
}
});
一切正常!
更新:
您还可以根据缩放级别修改 tolerance
,例如:
...
switch (mMap.getCameraPosition().zoom) {
...
case 16:
tolerance = 30;
break;
case 15:
tolerance = 45;
break;
...
}
...
或使用公式:tolerance = f(zoom level)
like tolerance = 1000 / mMap.getCameraPosition().zoom;
.
I am getting
setOnPolylineClickListener
by following method.
mMap.setOnPolylineClickListener(new GoogleMap.OnPolylineClickListener() {
@Override
public void onPolylineClick(Polyline polyline) {
}
But this returns whole
Polyline
I wantLatitude
andLongitude
of click position like we get byMapClickListener
how to achieve this ?
mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
@Override
public void onMapClick(final LatLng point) {
});
I have tried using
PolyUtil
with following code it also doesn't work.
mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
@Override
public void onMapClick(final LatLng point) {
if (PolyUtil.isLocationOnPath(point, finalPolylines.getPoints(), true)) {
// user clicked on polyline
Toast.makeText(getContext(), "found", Toast.LENGTH_SHORT).show();
Log.d("found", "onMapClick: found");
}
}
});
你做的一切都很好:
mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
@Override
public void onMapClick(final LatLng point) {
if (PolyUtil.isLocationOnPath(point, finalPolylines.getPoints(), true)) {
// user clicked on polyline
Toast.makeText(getContext(), "found", Toast.LENGTH_SHORT).show();
Log.d("found", "onMapClick: found");
}
}
});
是解决方案,但 PolyUtil.isLocationOnPath(LatLng point, java.util.List<LatLng> polyline, boolean geodesic)
has 0.1 meter tolerance by default, and touch just didn't on path with this precise. Use PolyUtil.isLocationOnPath(LatLng point, java.util.List<LatLng> polyline, boolean geodesic, double tolerance)
相反,设置适当的 tolerance
(10 米或 20 米 - 甚至更多,这取决于缩放级别)
mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
@Override
public void onMapClick(final LatLng point) {
if (PolyUtil.isLocationOnPath(point, finalPolylines.getPoints(), true, 20)) {
// user clicked on polyline
Toast.makeText(getContext(), "found", Toast.LENGTH_SHORT).show();
Log.d("found", "onMapClick: found");
}
}
});
一切正常!
更新:
您还可以根据缩放级别修改 tolerance
,例如:
...
switch (mMap.getCameraPosition().zoom) {
...
case 16:
tolerance = 30;
break;
case 15:
tolerance = 45;
break;
...
}
...
或使用公式:tolerance = f(zoom level)
like tolerance = 1000 / mMap.getCameraPosition().zoom;
.