Planificación de rutas con 지도 세트.

7684 단어
투비모스 라포르투 다드 라포르투 다드 라포르투 다드 라포르투.Pero,más alláde simplemente crear el mapa y agregar un par de marcadores,queríamos explorar un poco más con la planificación de rutas.La intención con este artículo es llevarlos a La inicialización y construcción de un proyecto que haga un uso adecuado de esta función.
Antes de comenzar,se recomienda que hayas tenido un primer acercamiento con el kit de mapas(Usando SupportMapFragment),te sugiero que tengas en cuenta el proceso de desarrollo o al menos el codelab.
El proyecto que les presentamos como referenceia ha implementado una solución con flavors,es decir,tenemos la posibilidad de selecciona una version para dispositivos HMS o GMS.구글 지도에 있는 전화번호는 얼마입니까?es el objetivo 교장 델라 트리클로, pero podemos incluirlo solo como EXCENTE가 없습니다.
En primer lugar,te Recommendamos consultar la documentación del API de planificación de rutas.
•API de indicataciones:planificación de rutas para caminar,andar en bicileta y conducir.
• API 행렬: Planificiación de m últiples rutas calculando distanceas y tiempos entre m últiples puntos de inicio y finalización Del mismo do, se aplica caminar,andar en bicileta y conducir.
특히, usaremos la API de Directions y consumiremos este servicio usando reformation(personalmente es la biblioteca que más uso en mis proyectos) junto con Moshi.Puedes verificar las dependencias del proyecto para asegurarse de cómo incluirlas.
//Retrofit
implementation "com.squareup.retrofit2:retrofit: $version_retrofit"
implementation "com.squareup.retrofit2:converter-scalars:$version_retrofit"
implementation "com.squareup.moshi:moshi:$version_moshi"
implementation "com.squareup.moshi:moshi-kotlin:$version_moshi"
implementation "com.squareup.retrofit2:retrofit:$version_retrofit"
implementation "com.squareup.retrofit2:converter-moshi:$version_retrofit"
implementation "com.squareup.okhttp3:logging-interceptor:$okhttpLoggingInterceptorVersion"
Comenzaremos analizando las URL para ver cómo podemos hacer uso de un servicio para múltiples propósitos.



Lo que podemos exter como nuestra URL principal para reformation se puede ver en el archivo Networ.kt:“https://mapapi.cloud.huawei.com/mapApi/v1/
retrofit = Retrofit.Builder()
    .baseUrl("https://mapapi.cloud.huawei.com/mapApi/v1/")
    .client(client)
    .addConverterFactory(MoshiConverterFactory.create(moshi))
    .build()
Conceuencia, podemos Organizator nuestro servicio seg ún lo Specificiado por la interfaz En el archivo Map Service.킬로그램
interface MapsService {
@POST("routeService/{type}")
    suspend fun getRoute(
        @Path("type") path:String,
        @Query ("key")key:String,
        @Body route: RouteQuery
    ): RouteResponse
}
En el que usaremos los siguientes parámetros:
La etiqueta permite Specificiar La URL del API que queremos consumir como POST.
La etiqueta@Path nos permitiráenvier La variable de ruta y ser reemplazada en La url descripta por La etiqueta front como“tipo”.
Además,enviaremos la clave API como Consulta de la URL.Puedes compobar de dónde se extre en el siguiente enlace.
El modelo de clustud para las API,llamado RouteQuery,consta de coordenadas de origen y destino(se pueden agregar más parámetros de acuerdo con la documentación).특히, decidimos separar las clases de Origen y Destino Para una explicación,pero ambas podrían ser la misma clase.
data class Origin(
    @Json(name = "lat") val lat: Double,
    @Json(name = "lng") val lng: Double
)
data class Destination(
    @Json(name = "lat") val lat: Double,
    @Json(name = "lng") val lng: Double
)
data class RouteQuery(
    @Json(name = "origin") val origin: Origin,
    @Json(name = "destination") val destination: Destination
)
El modelo de respuesta del servicio se puede consultar en cada API.Por ahora,te recomendamos que는 la clase Router Response ya que tiene varias 하위 클래스인 dentro de la carpeta del modelo del proyecto를 수정했습니다.
Con esto en mente,podemos crear nuestra instancia de implementización para hacer uso del servicio MapService Con su método getRoute.
private val _mapService = retrofit.create(MapsService::class.java)
El siguiente paso en la agenda es hacer uso del servicio dentro de la clase Network.kt.Para las clustudes el proyecto utiliza corrutinas,si no estás familizado conél,te aconsejo que investigues un poco más porque esa es la razón por la que usamos suspender en el método getRoute que presento a continuación.
suspend fun getRoute(
    route: RouteQuery,
    type:String,
    onSuccess: (RouteResponse) -> Unit = {},
    onError: (String) -> Unit = {}
) {
    _networkCurrentState.postValue(NetworkState.LOADING)
    var routeResponse: RouteResponse?
    try {
        routeResponse = _mapService.getRoute(type, BuildConfig.API_KEY,route)
        onSuccess(routeResponse)
        _networkCurrentState.postValue(NetworkState.SUCCESS)
} catch (e: Throwable) {
        onError(e.message.toString())
        _networkCurrentState.postValue(NetworkState.ERROR)
    }
}
En el Ejempro,después de Selecciator dos marcadores,te pediráque seleccione el cálculo de la ruta.Una vez seleccionado,podráver la planificación que devuelve la API de mapas.

Cuando se recibe la respuesta del servicio en el archivo MapsActivity.kt a través de una suscripción con la clase LiveData.Si la respuesta de la planificación de la ruta es exitosa,continúa dibujando las polilíneas que están en los pasos de la ruta.
viewModel.responseRoute.observe(this, Observer {result->
when(result){
        is Result.Success->{
            val route=result.data!!.routes[0].paths[0].steps.forEach {step->
                mMap.addPolyline(step.polyline,color?:Color.BLUE)
            }
        }
        is Result.Error->{
            Toast.makeText(this, result.exception, Toast.LENGTH_SHORT).show()
        }
    }
})
Si queremos probar el mismo efecto dentro de los mapas de Google,también se puede visualizar.Dentro del proyecto,simplemente Selecciana la version de googleDebug para cargar un dispositivo con GMS y veráun resultado simplemente.

Github:https://github.com/juangaines/FlavoredGmsHmsMaps

좋은 웹페이지 즐겨찾기