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.
.