El Arsenal de Android: Mapas

DrawRoute

===========

DrawRoute encapsula la API de Google Directions (https://developers.google.com/maps/documentation/directions/ ) usando RxJava para Android para que los desarrolladores puedan descargar, analizar y dibujar la ruta en el mapa de manera muy rápida y flexible (por ahora solo soporte JSON).

La biblioteca contiene dos partes principales.

  • RouteAPI es responsable de enviar la solicitud a La dirección API de Google y de manejar la respuesta
  • DrawerAPI es responsable de diseñar la ruta en el map

Si estás usando gradle: Paso 1: agrégalo en tu root build.gradle al final de los repositorios

  allprojects {
    repositorio {
        ...
        maven {url & # 39; https: //jitpack.io'}
    }
} 

Paso 2: agregue las dependencias

  dependencias {
      ...
   implementación "com.github.malikdawar: drawroute: 1.0"
} 

De lo contrario, debe usar la biblioteca directamente en su proyecto.

Primero necesitamos descargar la ruta. Para ello tenemos que proporcionar dos puntos (inicio y final) y el modo de viaje.

  interfaz    RouteApi  {
  divertido    getJsonDirections  (
   a partir de :    LatLng ,
   fin :    LatLng ,
   modo :    TravelMode ,
   apiKey :    Cadena 
 ) :    Observable  <  String? > ?
}

Donde el modo de viaje puede ser:

  enum    class    TravelMode  {
  CONDUCCIÓN   A PIE   BICICLETA   TRÁNSITO 
}

Como puede ver, el método anterior devuelve Observable y nuestra respuesta es una cadena. Hasta ahora todo bien, descargamos la ruta, pero qué demonios, responde como String, no quiero analizarlo yo mismo.

Con RxJava y algunas transformaciones, nada podría ser más simple.

Echa un vistazo: [19659013] val routeRest = RouteRest ()
routeRest.getJsonDirections (
origen, destino, // punto de salida y llegada
TravelMode . GUIDE // Modo de viaje
" Tu clave de API " // API de Google Maps de GCP, asegúrese de que las indicaciones para conducir de Google estén habilitadas
)
? .observeOn ( AndroidSchedulers .mainThread ())
? .map {s > RouteJsonParser < Routes > (). parse (s, Rutas :: clase .java)}
? .subscribe {r > routeDrawer.drawPath (r)}

La parte más importante aquí es

   .map {
 s  - >    RouteJsonParser  <  Routes >  (). parse (s,  Rutas  ::  clase . Giava)
 }
 

Para obtener más detalles sobre el operador & # 39; mapa & # 39; se puede encontrar aquí: https://github.com/ReactiveX/RxJava/wiki/Transforming-Observables#map En resumen, analicemos nuestra respuesta al objeto Routes, por lo que ahora podemos ir y dibujar la ruta en el mapa.

Aquí tenemos que usar DrawerApi que por ahora proporciona un método:

  fun    drawPath  ( Rutas  rutas); 

(por ahora obliga a utilizar el objeto Rutas).

Ya casi llegamos, pero antes de invocar el método de dibujo tenemos que construir nuestro cajón usando RouteDrawerBuilder. Nos permite personalizar un poco la ruta y los indicadores. Requiere obtener GoogleMap (!) Y si queremos podemos proporcionar

  - icono indicador
- ancho del camino
- color de ruta
- marcador alfa

Puede parecer

    val  routeDrawer  =    RouteDrawer.RouteDrawerBuilder  (googleMap)
            .withColor (context  !!  .getColorCompat ( R  .color.colorPrimary))
            .con ancho ( 13 )
            .con Alfa ( 0.6f )
            .withMarkerIcon ( BitmapDescriptorFactory  .defaultMarker ( BitmapDescriptorFactory .  HUE_ORANGE ))
            .build () 

Y tomándolos todos juntos:

  clase    YourFragment  :    Fragment  (),  OnMapReadyCallback  {

     privado    var  googleMap :    GoogleMap ?  =    nulo 

      sobrescribir    diversión    onCreateView  (
         inflador :    LayoutInflater ,
         contenedor :    ViewGroup  ?,
         SavedInstanceState :    Bundle ?
    ) :    Ver ? {
         return  inflater.inflate ( R  .layout.fragment_map_route, container,  false )
    }

     anular    diversión    onViewCreated  ( vista :    Ver   SavedInstanceState :    Paquete ?) {
         super  .onViewCreated (ver, SavedInstanceState)
          //  Google Maps inicializado 
          val  mapFragment  = 
            childFragmentManager.findFragmentById ( R  .id.mapView)  como    SupportMapFragment 
        mapFragment.getMapAsync ( este )
    }

     anular    diversión    enMapReady  ( p0 :    GoogleMap ?) {
         este  .googleMap  =  p0

         val  fuente  =    LatLng  ( 31.490127   74.316971 )   //  punto de partida (LatLng) [19659090] val  destino  =    LatLng  ( 31.474316   74.316112 )   //  punto de llegada (LatLng) 
 
    //  comprobar si el mapa se ha inicializado 
        mapa de Google ?.  ejecutar  {
              //  Se llamó al método drawRouteOnMap para dibujar la polilínea / ruta en Google Maps 
   
              //  creando polilínea con atributos 
          val  routeDrawer  =    RouteDrawer.RouteDrawerBuilder  ( este )
            .withColor (context  !!  .getColorCompat ( R  .color.colorPrimary))
            .con ancho ( 13 )
            .con Alfa ( 0.6f )
            .withMarkerIcon ( BitmapDescriptorFactory  .defaultMarker ( BitmapDescriptorFactory .  HUE_ORANGE ))
            .construir()

          //  Llamada a la API para obtener puntos de ruta de google 
          val  routeRest  =    RouteRest  ()
        routeRest.getJsonDirections (
            origen, destino,   //  punto de salida y llegada 
              TravelMode .  GUIDE    //  Modo de viaje 
            getString ( R  .string.google_map_api_key)   //  API de Google Maps de GCP, asegúrese de que las indicaciones de Google estén habilitadas 
        )
            ? .observeOn ( AndroidSchedulers  .mainThread ())
            ? .map {s  - >    RouteJsonParser  <  Routes >  (). parse (s,  Rutas  ::  clase  .java)}
            ? .subscribe {r  - >  routeDrawer.drawPath (r)}
        }
    }
} 

Captura de pantalla

Desarrollado por

Malik Dawar – malikdawar332@gmail.com

Licencia

Copyright 2020 Malik Dawar

Licencia Apache, Versión 2.0 (la "Licencia"); no puede utilizar este archivo excepto de acuerdo con la licencia. Se puede obtener una copia de la licencia en

  http://www.apache.org/licenses/LICENSE-2.0

A menos que lo exija la ley aplicable o se acuerde por escrito, el software distribuido bajo la Licencia se distribuye "TAL CUAL", SIN GARANTÍAS NI CONDICIONES DE NINGÚN TIPO, ni expresas ni implícitas. Consulte la Licencia para conocer el idioma específico que rige los permisos y restricciones de la Licencia.






 

.

Compruebe también

en vivo desde Droidcon, incluida la mayor actualización de Gemini en Android Studio y más lanzamientos del SDK de Android.

Acabamos de lanzar nuestro episodio de otoño de #TheAndroidShow en YouTube etcétera desarrollador.android.comy esta vez …

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *