android - sacar - Cómo detectar un clic en una polilínea
como sacar el area de un hatch en autocad (3)
Lamentablemente, no existe un oyente de clic de polilínea, por lo que deberá escuchar los clics en el mapa y comprobar si se registró un clic en cualquiera de sus polilíneas. También deberá guardar referencias a las polilíneas que agregó a su mapa.
Aquí hay un ejemplo que calcula si hay una polilínea a 100 metros del clic.
mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
@Override
public void onMapClick(LatLng clickCoords) {
for (PolylineOptions polyline : mPolylines) {
for (LatLng polyCoords : polyline.getPoints()) {
float[] results = new float[1];
Location.distanceBetween(clickCoords.latitude, clickCoords.longitude,
polyCoords.latitude, polyCoords.longitude, results);
if (results[0] < 100) {
// If distance is less than 100 meters, this is your polyline
Log.e(TAG, "Found @ "+clickCoords.latitude+" "+clickCoords.longitude);
}
}
}
}
});
Una vez que se encuentra una polilínea, puede guardar esa distancia como float minDistance;
y luego recorre otras polilíneas para verificar si hay una más cercana.
Para hacer esto más preciso , puedes obtener el nivel de zoom con cada toque y multiplicar la distancia requerida. Al igual que 100 * (22 - mMap.getCameraPosition().zoom)
(necesita utilizar una distancia mayor con niveles de zoom más bajos).
¡Buena suerte!
Si hay una polilínea en googlemap y se realiza un clic en el mapa, ¿cómo puedo verificar si ese clic estaba en la polilínea o en otro lugar?
Polyline line = googleMap.addPolyline(new PolylineOptions()
.add(new LatLng(51.2, 0.1), new LatLng(51.7, 0.3))
.width(5)
.color(Color.RED));
googleMap.setOnMapLongClickListener(new OnMapLongClickListener() {
}
});
La API de Google Maps más reciente ahora incluye oyentes de clic de polilíneas. Necesita usar 8.4+. En archivo gradle:
compile ''com.google.android.gms:play-services-maps:8.4.0
Setup map polyline listener:
googleMap.setOnPolylineClickListener(new GoogleMap.OnPolylineClickListener()
{
@Override
public void onPolylineClick(Polyline polyline)
{
//do something with polyline
}
});
Polyline debe poder hacer clic para que el oyente pueda funcionar.
PolylineOptions line = new PolylineOptions();
//add path points, set colour, etc. here
Polyline polyline = googleMap.addPolyline(line);
polyline.setClickable(true);
La solución anterior no funciona correctamente. Especialmente si tenemos una gran distancia entre dos puntos de polilínea.
Respondí esta pregunta: Polilíneas seleccionables Google Maps API Android
Podemos modificar el código anterior de esta manera:
mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
@Override
public void onMapClick(LatLng clickCoords) {
for (PolylineOptions polyline : mPolylines) {
if (PolyUtil.isLocationOnPath(clickCoords, polyline.getPoints(), true, 100)) {
// user clicked on polyline
}
}
}
});