Novo: Explorador de fotos · Encontre qualquer foto de viagem mapeada.

Diário de engenharia.

Engenharia do Maplight: De coordenadas de fotos à cobertura do solo.

Por trás da interface, há um pipeline determinístico para quantificar dados, fundir dispositivos offline, medir uma área uma única vez e manter o histórico da fonte privada fora de um servidor.

Por. 6 minuto de leitura
Maplight ilumina as partes do mundo representadas por um histórico de viagens privado do Mapsake.

A pergunta do produto por trás do Maplight

Um mapa de um país visitado responde a uma pergunta binária útil: um lugar faz parte da sua história? O Maplight faz uma pergunta diferente. Com base em anos de fotos geolocalizadas e outras evidências de viagem, quais partes do território foram alcançadas por esses momentos?

Isso se parece com desenhar círculos transparentes ao redor de pontos. Uma funcionalidade de produção deve resolver problemas mais difíceis: os pontos se sobrepõem, os círculos cruzam costas e fronteiras, a Terra é curva, os dados de origem vêm de vários sistemas, dispositivos mais antigos podem estar offline e uma biblioteca de vida inteira deve ser rápida o suficiente para ser explorada de forma interativa.

A implementação do Maplight separa essas preocupações em um modelo de origem pequeno e portátil, um mecanismo de cobertura determinístico e uma camada de renderização. A mesma entrada deve produzir a mesma cobertura, seja o histórico criado em um dispositivo ou combinado por meio do iCloud em vários dispositivos.

Generalize a entrada antes de salvá-la

A entrada pode começar como uma coordenada de foto, uma viagem importada, um carimbo de passaporte ou um lugar registrado manualmente. Antes de salvar uma origem do Maplight, o Mapsake quantiza latitude e longitude em uma célula geohash de seis caracteres. A origem armazenada contém esse geohash, uma máscara de bits que descreve os tipos de fontes contribuintes e o primeiro dia conhecido.

Isso fornece três propriedades úteis.

Primeiro, evidências repetidas na mesma pequena célula geográfica podem ser mescladas em uma única origem. Segundo, o registro portátil é compacto e determinístico. Terceiro, o modelo Maplight não precisa preservar cada coordenada de foto original para reproduzir a iluminação.

A data mais antiga controla a visualização "Histórico". As fontes sem data ainda contam para o resultado total, mas não pretendem pertencer a um ano que o aplicativo não pode determinar.

Maplight History mostrando a evolução do ano 2021 com terras, países e origens iluminadas

Permita a adição cumulativa.

A sincronização do iCloud não é um fluxo de dados único e ordenado. Dois dispositivos podem funcionar offline, gravar registros relacionados e, posteriormente, receber duplicatas em ordens diferentes. Um sistema do tipo "último a gravar, primeiro a ser exibido" faria com que dados históricos legítimos desaparecessem.

Em vez disso, as origens são combinadas por geohash. As marcas de origem são combinadas e o dia válido mais antigo vence. As origens são codificadas em ordem classificada dentro de blocos compactos. Um bloco lógico é identificado por perfil, geração e tile geográfico, enquanto as uniões de reconciliação duplicam o conteúdo do bloco.

O identificador de geração é importante ao reconstruir. Uma nova saída pode ser preparada sem tratar os fragmentos obsoletos da geração anterior como atuais. Isso impede que uma sincronização parcial ou um cálculo interrompido produzam uma mistura de cobertura antiga e nova.

A regra de mesclagem é deliberadamente simples: combine as evidências. Regras simples e determinísticas são valiosas quando o mesmo histórico privado deve convergir em um iPhone, um iPad e um Mac.

A cobertura é medida em uma grade de área igual

Os graus de latitude e longitude não representam distâncias iguais em todos os lugares. Um grau de longitude diminui em direção aos polos, portanto, contar pixels de mapa comuns ou células de tamanho de grau distorceria o resultado, dependendo da localização.

Maplight avalia a cobertura da terra em uma grade de área igual de aproximadamente dois quilômetros. Cada linha representa uma área física comparável e as áreas iluminadas são armazenadas como intervalos dentro dessa linha. Um raio de origem se torna uma faixa de células candidatas; essas células são então testadas e acumuladas.

Os intervalos tornam a sobreposição barata. Se várias fotos próximas iluminam a mesma área, o mecanismo combina as execuções em vez de contar o terreno repetidamente. O número final representa a união do terreno iluminado, e não a soma de cada círculo.

Isso também é o motivo pelo qual o número de cobertura pode não corresponder à área de círculos matemáticos multiplicada pelo número de fontes. As células oceânicas são removidas, as sobreposições são combinadas e a atribuição de fronteiras pode dividir o resultado entre os países.

Não inclua o oceano no total.

Uma foto tirada em voo ou uma visita à costa pode posicionar um raio sobre a água. O Maplight é descrito como terra iluminada, portanto, a água não pode silenciosamente inflar o número.

O motor de cobertura usa a geometria de limites agrupada para determinar se as células candidatas estão em terra e em qual país estão. A mesma família básica de fontes que suporta o mapa e o guia offline do Mapsake torna esse cálculo possível sem enviar um conjunto de coordenadas para uma API de mapeamento web.

As costas são naturalmente mais complexas do que os pontos internos. Ilhas, penínsulas estreitas, enclaves e convenções de fronteira contestadas criam casos especiais. Portanto, o mecanismo trata a cobertura como uma estimativa útil em sua resolução de grade, e não como um levantamento cadastral.

Cobertura de atributos sem dupla contagem

Os totais dos países são derivados das mesmas células cobertas do total global. Uma célula pode ser atribuída usando o confinamento de limites, enquanto a união global continua a contá-la uma vez. Isso mantém a divisão por país explicável e impede que uma fonte adjacente à fronteira crie mais terra em todo o mundo do que o mapa realmente cobre.

Os detalhes da origem são distintos da atribuição da área. Uma origem de geohash pode lembrar que as fotos e um local manual contribuíram, mas as células iluminadas ao redor dessa origem unida ainda pertencem a uma única entidade. Essa distinção permite que a interface explique de onde vieram as evidências sem transformar as evidências sobrepostas em duplicatas.

Crie a linha do tempo a partir das capturas de tela.

A história precisa responder à pergunta: "Como era o Maplight naquele ano?" Recalcular cada ano do zero a cada movimento do controle deslizante consumiria a bateria e faria com que a animação tremesse.

O modelo registra instantâneos anuais associados à geração e ao raio atuais. Cada instantâneo representa origens cuja data mais antiga é anterior ou igual à sua data de corte. As origens sem data permanecem disponíveis para a visualização de todas as épocas sem serem inseridas em um ano histórico fictício.

A interface pode então percorrer totais e geometria preparados, mantendo a resposta do mapa imediata. A reconstrução ainda ocorre quando o conjunto de origem subjacente, o raio selecionado ou a geração mudam, mas a reprodução normal lê uma sequência estável.

O renderizado usa desfoque em vez de milhares de círculos.

O usuário vê uma superfície, não células de grade. A camada de renderização traduz a cobertura calculada em uma sobreposição que pode se mover e fazer zoom com o atlas. Tratar todo o mundo como uma textura de alta resolução única usaria muita memória; representar cada origem como uma forma dinâmica independente repetiria o trabalho de sobreposição em cada quadro.

Portanto, o Maplight mantém a união geográfica cara fora do loop de renderização e exibe a cobertura preparada em pedaços gerenciáveis. A sobreposição pode se concentrar na apresentação: cor, opacidade, zoom e transições, enquanto o mecanismo de cobertura é responsável pela resposta geográfica.

Esta fronteira também ajuda nos testes. Uma captura instantânea da cobertura pode ser verificada sem uma visualização SwiftUI, e o renderização pode ser ajustada sem alterar a semântica da mesclagem.

A privacidade influenciou a arquitetura.

Seria mais simples carregar as coordenadas das fotos em um servidor e calcular a cobertura lá. O Mapsake não requer intencionalmente essa arquitetura. A quantização ocorre antes da persistência do Maplight, a cobertura pode ser construída no dispositivo com geometria terrestre embutida e o compartilhamento público exporta um resultado generalizado em vez da coleção de origem privada.

Essa escolha transfere o trabalho para o hardware do usuário e torna o design da sincronização mais exigente. Isso também significa que o sistema pode permanecer útil offline, o site não se torna um depósito de locais de fotos pessoais e a remoção ou exportação de dados permanece conectada ao registro Mapsake do usuário.

Configurações do Maplight mostrando o raio de visualização, o número de amigos privados, a opção de restaurar e excluir dados.

O que aprendemos.

A lição principal foi fazer com que cada camada respondesse a uma pergunta precisa:

  • As origens respondem a quais evidências generalizadas existem e quando apareceram pela primeira vez.
  • As regras de mesclagem explicam como vários dispositivos podem ser combinados sem perder adições.
  • A cobertura indica quais células terrestres de área igual estão iluminadas.
  • As capturas de tela mostram como essa união muda com o tempo.
  • O renderizado explica como fazer com que o resultado pareça real.

Maplight parece divertido porque a mecânica subjacente é deliberadamente contida. As entradas compactas, a sincronização aditiva, a medição de área igual, as uniões de intervalos, os limites agrupados e os instantâneos preparados permitem que a interface faça sua parte emocional: permitir que alguém veja uma vida em fotos iluminar o mapa.

Ícone do aplicativo Mapsake

Desenvolvedor independente do Mapsake, que explica o funcionamento do produto, do mapeamento, da privacidade e da plataforma Apple por trás do aplicativo.

Crie seu próprio atlas.

Comece com o histórico de viagens que você já tem.

Mapsake é gratuito, não requer uma conta Mapsake para uso básico e mantém o reconhecimento de fotos suportado no seu dispositivo.

Obtenha Mapsake grátis