He mirado a través de la documentación de polilínea y no hay ninguna opción para hacerlo discontinua.

¿ Alguien sabe cómo dibujar guiones polilínea con mapa de google de android sdk v2?

OriginalEl autor Alexey Zakharov | 2012-12-05

4 Comentarios

  1. 15

    Ahora en Polilínea puede establecer el modelo a Dash, de Punto o de la Brecha de
    basta con aplicar la siguiente

    public static final int PATTERN_DASH_LENGTH_PX = 20;
    public static final int PATTERN_GAP_LENGTH_PX = 20;
    public static final PatternItem DOT = new Dot();
    public static final PatternItem DASH = new Dash(PATTERN_DASH_LENGTH_PX);
    public static final PatternItem GAP = new Gap(PATTERN_GAP_LENGTH_PX);
    public static final List<PatternItem> PATTERN_POLYGON_ALPHA = Arrays.asList(GAP, DASH);
    
     private void drawDashedLeg(GoogleMap googleMap, Route route) {
        PolylineOptions polyOptions = new PolylineOptions();
        polyOptions.color(ContextCompat.getColor(getContext(), R.color.coolgrey));
        polyOptions.addAll(route.getPoints());
        polyOptions.pattern(PATTERN_POLYGON_ALPHA);
        Polyline polyline = googleMap.addPolyline(polyOptions);
        polylines.add(polyline);
    }
    a mí me funciona gracias
    Gracias broi
    gracias man @atabouraya

    OriginalEl autor atabouraya

  2. 13

    Alexey, acabo de crear una función que trabajó para mí y creo que va a ayudar a usted:

    public static void createDashedLine(GoogleMap map, LatLng latLngOrig, LatLng latLngDest, int color){
        double difLat = latLngDest.latitude - latLngOrig.latitude;
        double difLng = latLngDest.longitude - latLngOrig.longitude;
    
        double zoom = map.getCameraPosition().zoom;
    
        double divLat = difLat / (zoom * 2);
        double divLng = difLng / (zoom * 2);
    
        LatLng tmpLatOri = latLngOrig;
    
        for(int i = 0; i < (zoom * 2); i++){
            LatLng loopLatLng = tmpLatOri;
    
            if(i > 0){
                loopLatLng = new LatLng(tmpLatOri.latitude + (divLat * 0.25f), tmpLatOri.longitude + (divLng * 0.25f));
            }
    
            Polyline polyline = map.addPolyline(new PolylineOptions()
                .add(loopLatLng)
                .add(new LatLng(tmpLatOri.latitude + divLat, tmpLatOri.longitude + divLng))
                .color(color)
                .width(5f));
    
            tmpLatOri = new LatLng(tmpLatOri.latitude + divLat, tmpLatOri.longitude + divLng);
        }
    }
    Cómo hacer de puntos?
    hola estoy usando este mismo método de trabajo muy bien.. pero el zoom de que la línea discontinua también obtener grandes.. ¿conoces mientras que el zoom también se mostrará la misma línea discontinua tamaño?..
    una solución podría ser la creación de una Lista para almacenar todas las Polilíneas (Lista de<Polilínea>) que componen nuestra «Línea Discontinua» y crear un método para establecer el ancho de todas las Polilíneas en esa Lista para cada zoom in/out.
    se puede dar el código de ejemplo para este escenario?…
    cuando usted tiene un montón de línea(1k) este método desaceleración de la aplicación?

    OriginalEl autor Edgar

  3. 11

    No es posible en la versión actual. Siga este problema actualizaciones: https://code.google.com/p/gmaps-api-issues/issues/detail?id=4633

    ACTUALIZACIÓN

    Recientemente, Google implementado esta función para polilíneas en Google Maps Android API v2 y marcada problema 4633 como Fijo.

    Ver información sobre el trazo de patrones en la Las Formas De La Guía De. Ver un ejemplo en el Polilíneas y Polígonos tutorial.

    También puede leer el correspondiente post en el blog aquí:

    https://maps-apis.googleblog.com/2017/02/styling-and-custom-data-for-polylines.html

    Casi 4 años de emisión. Nada aún …
    Esto fue marcado como el de «aceptado la respuesta» con su «actualización de la nota» citado diciendo: «Google implementado esta función para polilíneas en Google Maps Android API v2 …» . Eso NO es CIERTO. No es extra/apoyo ni de la extensión para la v2. Lo cierto es que lanzado un nuevo Mapa de la API V. 10.2.1 (02/2017) que abordó la cuestión 4633 proporcionando patrones (guión/dot/etc.) a Polilíneas. En ningún camino que seguiría el apoyo v2. Para utilizarla, usted debe reemplazar toda la v2 con la nueva versión, y posiblemente recode su mapa de clases de implementaciones.
    gracias de publicar la url maps-apis.googleblog.com/2017/02/… es ayudar a mí y a trabajar para mí.

    OriginalEl autor Alexey Zakharov

  4. 9

    He creado la siguiente función para dibujar de puntos de la polilínea con una lista de LatLng puntos.
    Este algoritmo crea líneas de 0.002 kms (seguido por 0.002 kms medidor de brechas), con independencia de zoom. Esto es útil cuando no se desea volver a la trama polilíneas cuando el zoom cambios.

    private void drawDashedPolyLine(GoogleMap mMap, ArrayList<LatLng> listOfPoints, int color) {
    /* Boolean to control drawing alternate lines */
    boolean added = false;
    for (int i = 0; i < listOfPoints.size() - 1 ; i++) {
    /* Get distance between current and next point */
    double distance = getConvertedDistance(listOfPoints.get(i),listOfPoints.get(i + 1));
    /* If distance is less than 0.002 kms */
    if (distance < 0.002) {
    if (!added) {
    mMap.addPolyline(new PolylineOptions()
    .add(listOfPoints.get(i))
    .add(listOfPoints.get(i + 1))
    .color(color));
    added = true;
    } else {/* Skip this piece */
    added = false;
    }
    } else {
    /* Get how many divisions to make of this line */
    int countOfDivisions = (int) ((distance/0.002));
    /* Get difference to add per lat/lng */
    double latdiff = (listOfPoints.get(i+1).latitude - listOfPoints
    .get(i).latitude) / countOfDivisions;
    double lngdiff = (listOfPoints.get(i + 1).longitude - listOfPoints
    .get(i).longitude) / countOfDivisions;
    /* Last known indicates start point of polyline. Initialized to ith point */
    LatLng lastKnowLatLng = new LatLng(listOfPoints.get(i).latitude, listOfPoints.get(i).longitude);
    for (int j = 0; j < countOfDivisions; j++) {
    /* Next point is point + diff */
    LatLng nextLatLng = new LatLng(lastKnowLatLng.latitude + latdiff, lastKnowLatLng.longitude + lngdiff);
    if (!added) {
    mMap.addPolyline(new PolylineOptions()
    .add(lastKnowLatLng)
    .add(nextLatLng)
    .color(color));
    added = true;
    } else {
    added = false;
    }
    lastKnowLatLng = nextLatLng;
    }
    }
    }
    }
    private double getConvertedDistance(LatLng latlng1, LatLng latlng2) {
    double distance = DistanceUtil.distance(latlng1.latitude,
    latlng1.longitude,
    latlng2.latitude,
    latlng2.longitude);
    BigDecimal bd = new BigDecimal(distance);
    BigDecimal res = bd.setScale(3, RoundingMode.DOWN);
    return res.doubleValue();
    }

    Util clase para calcular la distancia entre dos LatLng:

    public class DistanceUtil {
    public static double distance(double lat1, double lon1, double lat2,
    double lon2) {
    if ((lat1 == lat2) && (lon1 == lon2)) {
    return 0;
    } else
    return distance(lat1, lon1, lat2, lon2, 'K');
    }
    public static double distance(double lat1, double lon1, double lat2,
    double lon2, char unit) {
    double theta = lon1 - lon2;
    double dist = Math.sin(deg2rad(lat1)) * Math.sin(deg2rad(lat2))
    + Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2))
    * Math.cos(deg2rad(theta));
    dist = Math.acos(dist);
    dist = rad2deg(dist);
    dist = dist * 60 * 1.1515;
    if (unit == 'K') {
    dist = dist * 1.609344;
    } else if (unit == 'N') {
    dist = dist * 0.8684;
    }
    return (dist);
    }
    private static double deg2rad(double deg) {
    return (deg * Math.PI / 180.0);
    }
    private static double rad2deg(double rad) {
    return (rad * 180.0 / Math.PI);
    }
    }

    Nota: El algoritmo anterior genera gran número de polilíneas que puede tomar tiempo para procesar. Es útil sólo cuando la lista de puntos es pequeño.

    Yo uso usted algo con 0,02 km y se incrementa int k en el bucle: si (k%2==0) {addPopyline..} para obtener b/w de la línea de puntos

    OriginalEl autor Swati Pardeshi

Dejar respuesta

Please enter your comment!
Please enter your name here