Red de conocimiento informático - Aprendizaje de programación - Análisis del código fuente de Mapbox (2) análisis de URL

Análisis del código fuente de Mapbox (2) análisis de URL

A través del código fuente, analicemos paso a paso cómo el motor de mapas Mapbox analiza la variable de cadena especificada en una dirección URL para cargar. Esto se basa en la versión 5.3.0.

En la demostración oficial, no solo podemos cargar archivos de estilo locales, sino también cargar archivos de estilo definidos y archivos en línea de red. Su formato es el siguiente

1. "asset:/. /test.json"

2."/android-docs/files/mapbox-raster-v8.json"

3."mapbox://styles/mapbox/streets- v10"

Estos son los formatos, entonces, ¿qué pasa si Mapbox analiza estas cadenas para obtener los datos de estilo requeridos? Comencemos con el análisis del código fuente de Mapbox (1) Carga de estilo en el método loadURL () de este artículo

Vemos aquí que los datos de estilo se cargan a través de fileSource.request. solicitud, a través de la depuración encontramos que fileSource es una subclase de FileSource DefaultFileSource, así que echemos un vistazo a cuándo se pasó DefaultFileSource

Vemos aquí que la variable fileSource se inicializa en el constructor, por lo que Solo necesitamos ver cuándo se construye el objeto Style::Impl, y luego conocemos la fuente de fileSource.

Aquí vemos que el fileSource del objeto Impl se pasa al construir el objeto Style, por lo que continuamos mirando hacia atrás

Aquí vemos que el objeto Style se pasa a través del mapa Recuperado por el objeto getStyle en cpp. cpp, y el objeto de estilo se inicializa en el constructor Map::Impl::Impl, continúe mirando hacia atrás

Aquí probablemente podamos adivinar que el objeto Map::Impl se inicializa en el constructor Map, luego Al inicializar el objeto de mapa, ¿es muy complicado? Pronto será rápido. Encontramos el archivo nativo_map_view.cpp y descubrimos que el objeto de mapa se construyó en el constructor de NativeMapView.

Aquí ya lo tenemos. Básicamente, está claro que la fuente de fileSource se transmite cuando se inicializa el objeto NativeMapView de la capa JAVA. Sigamos mirando desde el principio. Como ya sabemos que el objeto fileSource es DefaultFileSource, el método de solicitud que llama es el método de solicitud. llama a DefaultFileSource Aquí vemos el archivo default_file_source.cpp

. archivo cpp

Aquí vemos que va a la implementación del método de solicitud de clase

Aquí podemos ver que la solicitud se reenvía a activeFileSource, localFileSource dependiendo de la url y el método de carga , onlineFileSource, etc. métodos de solicitud. Aquí vemos el método de solicitud de onlineFileSource

Aquí vemos que dependiendo del tipo de solicitud, las URL a procesar también son diferentes. En estos parámetros miramos la variable apiBaseURL, que es una URL base. especifica la dirección del servidor, que podemos encontrar en la constante.

archivo hpp

constexpr const char* API_BASE_URL = "";

Continuando, elegimos el método normalizeStyleURL()

Aquí lo vemos Primero verifica el url, luego encapsule la cadena de URL en un objeto URL, luego realice el empalme, empalme en una variable tpl y luego conviértala en una función transformURL mediante la función transformURL para realizar la transformación. Aquí, primero vemos cómo funciona Encapsulando el. Objeto URL

Aquí vemos que se descompondrá en cuatro variables: consulta, esquema, dominio y ruta de almacenamiento. Veamos la función transformURL().

Aquí tenemos. Vea que la URL se empalma nuevamente de acuerdo con diferentes valores de variables, e incluso continúa dividiéndose en objetos de ruta de acuerdo con diferentes rutas. Finalmente, el resultado de la unión se devuelve al final del proceso de análisis y unión de URL.