Diario de ingeniería.
Ingeniería de Maplight: De coordenadas de fotos a cobertura terrestre.
Detrás del brillo hay una canalización determinista para cuantificar la evidencia, fusionar dispositivos fuera de línea, medir un área una sola vez y mantener el historial de origen privado fuera de un servidor.
La pregunta del producto detrás de Maplight
Un mapa de un país visitado responde a una pregunta binaria útil: ¿Es un lugar parte de tu historia? Maplight pregunta algo diferente. Dados años de fotos ubicadas y otras pruebas de viaje, ¿qué partes cercanas del territorio han alcanzado esos momentos?
Eso suena a dibujar círculos translúcidos alrededor de puntos. Una función de producción debe resolver problemas más difíciles: los puntos se superponen, los círculos cruzan costas y fronteras, la Tierra es curva, los datos de origen provienen de varios sistemas, los dispositivos antiguos pueden estar fuera de línea, y una biblioteca de por vida debe ser lo suficientemente rápida para explorar de forma interactiva.
La implementación de Maplight separa estas preocupaciones en un modelo de origen pequeño y portátil, un motor de cobertura determinista y una capa de renderizado. La misma entrada debe producir la misma cobertura, ya sea que el historial se haya creado en un dispositivo o se haya combinado a través de iCloud en varios dispositivos.
Generaliza la entrada antes de persistirla
La entrada inicial puede ser una coordenada de foto, un viaje importado, un sello de pasaporte o un lugar registrado manualmente. Antes de que se persista un origen de Maplight, Mapsake cuantifica su latitud y longitud en una celda de geohash de seis caracteres. El origen almacenado contiene esa geohash, una máscara de bits que describe los tipos de fuentes contribuyentes y el día conocido más temprano.
Esto proporciona tres propiedades útiles.
Primero, la evidencia repetida en la misma pequeña celda geográfica puede fusionarse en un origen. Segundo, el registro portátil es compacto y determinista. Tercero, el modelo Maplight no necesita preservar cada coordenada de foto original para reproducir la iluminación.
La fecha más temprana controla la vista "Historial". Las fuentes sin fechas aún cuentan para el resultado total, pero no pretenden pertenecer a un año que la aplicación no pueda establecer.

Permite la combinación aditiva.
La sincronización de iCloud no es un flujo de datos único y ordenado. Dos dispositivos pueden funcionar sin conexión, escribir registros relacionados y, posteriormente, recibir duplicados en diferentes órdenes. Un sistema de "último que escribe, gana" haría que los datos históricos legítimos desaparecieran.
En su lugar, los orígenes se combinan mediante geohash. Las marcas de origen se combinan y el día válido más temprano gana. Los orígenes se codifican en orden clasificado dentro de fragmentos compactos. Un fragmento lógico se identifica por perfil, generación y mosaico geográfico, mientras que las uniones de conciliación duplican el contenido del fragmento.
El identificador de generación es importante al reconstruir. Se puede preparar una nueva salida sin tratar los fragmentos obsoletos de la generación anterior como actuales. Esto evita que una sincronización parcial o un cálculo interrumpido produzcan una mezcla de cobertura antigua y nueva.
La regla de combinación es deliberadamente simple: combina la evidencia. Las reglas simples y deterministas son valiosas cuando la misma historia privada debe converger en un iPhone, un iPad y un Mac.
La cobertura se mide en una cuadrícula de área igual
Los grados de latitud y longitud no representan distancias iguales en todas partes. Un grado de longitud disminuye hacia los polos, por lo que contar píxeles de mapa ordinarios o celdas de tamaño de grado sesgaría el resultado según la ubicación.
Maplight evalúa la cobertura del terreno en una cuadrícula de área igual de aproximadamente dos kilómetros. Cada fila representa un área física comparable, y los tramos iluminados se almacenan como intervalos dentro de esa fila. Un radio de origen se convierte en un rango de celdas candidatas; luego se prueban y acumulan esas celdas.
Los intervalos hacen que la superposición sea económica. Si varias fotos cercanas iluminan la misma área, el motor combina las ejecuciones en lugar de contar el terreno repetidamente. El número final representa la unión del terreno iluminado, no la suma de cada círculo.
Esta es también la razón por la cual el número de cobertura puede no coincidir con el área de círculos matemáticos multiplicada por el número de fuentes. Las celdas oceánicas se eliminan, las superposiciones se combinan y la atribución de fronteras puede dividir el resultado entre países.
No incluyas el océano en el total.
Una foto tomada en vuelo o una visita a la costa puede colocar un radio sobre el agua. Maplight se describe como tierra iluminada, por lo que el agua no puede inflar silenciosamente el número.
El motor de cobertura utiliza geometría de límites agrupados para determinar si las celdas candidatas están en tierra y en qué país se encuentran. La misma familia básica de fuentes que admite el mapa y el gazetario sin conexión de Mapsake hace que este cálculo esté disponible sin enviar un conjunto de coordenadas de por vida a una API de mapeo web.
Las costas son naturalmente más complejas que los puntos interiores. Las islas, las estrechas penínsulas, los enclaves y las convenciones de fronteras disputadas crean casos especiales. Por lo tanto, el motor trata la cobertura como una estimación útil en su resolución de cuadrícula, no como un levantamiento catastral.
Cobertura de atributos sin doble conteo
Los totales de países se derivan de las mismas celdas cubiertas que el total global. Una celda se puede asignar utilizando el contención de límites mientras que la unión global continúa contándola una vez. Esto mantiene la división por países explicable y evita que una fuente adyacente a la frontera cree más tierra a nivel mundial de lo que realmente cubre el mapa.
Los detalles de origen son independientes de la atribución de área. Un origen de geohash puede recordar que tanto las fotos como un lugar manual contribuyeron, pero las celdas iluminadas alrededor de ese origen fusionado aún pertenecen a una unión. Esta distinción permite que la interfaz explique de dónde provienen las pruebas sin convertir las pruebas superpuestas en duplicados.
Crea la línea de tiempo a partir de instantáneas.
La historia debe responder la pregunta: "¿Cómo se veía Maplight en este año?" Recalcular cada año desde cero durante cada movimiento del control deslizante consumiría batería y haría que la animación se entrecortara.
El modelo registra instantáneas anuales asociadas con la generación y el radio actuales. Cada instantánea representa orígenes cuya fecha más temprana es anterior o igual a su fecha de corte. Los orígenes sin fecha permanecen disponibles para la vista de todos los tiempos sin insertarse en un año histórico ficticio.
La interfaz puede luego recorrer totales y geometría preparados mientras mantiene la respuesta del mapa inmediata. La reconstrucción aún ocurre cuando el conjunto de origen subyacente, el radio seleccionado o la generación cambian, pero la reproducción normal lee una secuencia estable.
Renderizado utilizando desenfoque en lugar de miles de círculos.
El usuario ve una superficie, no celdas de cuadrícula. La capa de renderizado traduce la cobertura calculada en una superposición que puede moverse y hacer zoom con el atlas. Tratar todo el mundo como una textura de alta resolución única consumiría demasiada memoria; representar cada origen como una forma dinámica independiente repetiría el trabajo de superposición en cada fotograma.
Por lo tanto, Maplight mantiene la costosa unión geográfica fuera del bucle de renderizado y renderiza la cobertura preparada en fragmentos manejables. La superposición puede centrarse en la presentación: color, opacidad, zoom y transiciones, mientras que el motor de cobertura se encarga de la respuesta geográfica.
Esta frontera también ayuda a las pruebas. Se puede verificar una instantánea de la cobertura sin una vista de SwiftUI, y el renderizado se puede ajustar sin cambiar la semántica de la combinación.
La privacidad influyó en la arquitectura.
Sería más sencillo cargar las coordenadas de las fotos en un servidor y calcular la cobertura allí. Mapsake no requiere intencionalmente esa arquitectura. La cuantificación ocurre antes de la persistencia de Maplight, la cobertura se puede construir en el dispositivo con geometría terrestre empaquetada, y el uso compartido público exporta un resultado generalizado en lugar de la colección de origen privada.
Esa elección traslada el trabajo al hardware del usuario y hace que el diseño de la sincronización sea más exigente. También significa que el sistema puede seguir siendo útil sin conexión, el sitio web no se convierte en un almacén de ubicaciones de fotos personales, y eliminar o exportar datos permanece conectado al registro de Mapsake del usuario.

¿Qué hemos aprendido?
La lección clave fue hacer que cada capa responda a una pregunta precisa:
- Los orígenes responden a qué evidencia generalizada existe y cuándo apareció por primera vez.
- Las reglas de combinación explican cómo varios dispositivos se combinan sin perder adiciones.
- La cobertura indica qué celdas de tierra de área igual están resaltadas.
- Las instantáneas muestran cómo cambia esa unión con el tiempo.
- El renderizado explica cómo hacer que el resultado parezca vivo.
Maplight parece juguetón porque la maquinaria subyacente está deliberadamente restringida. Las entradas compactas, la sincronización aditiva, la medición de área igual, las uniones de intervalos, los límites agrupados y las instantáneas preparadas dejan la interfaz libre para hacer la parte emocional: permitir que alguien vea cómo una vida en fotos ilumina el mapa.