Nosso projeto Android atualmente declara ArcGIS Maps SDK para Kotlin 300.0.0. Usamos CustomLocationDataSource para exibir correções de receptores GNSS externos, incluindo receptores que fornecem dados de localização decodificados em vez de sentenças NMEA.
Estamos investigando relatos de atrasos nas atualizações da posição no mapa e inconsistências na posição ou precisão ao usar GPS externo. Gostaríamos de validar nosso provedor personalizado em relação ao contrato pretendido do SDK; ainda não estabelecemos que o SDK causa esses sintomas.
Nosso CustomLocationDataSource.LocationProvider fornece fluxos separados Flow<Location> e Flow<Double>. Convertamos cada localização externa do Android para uma Location do ArcGIS usando coordenadas WGS84, precisão horizontal e vertical, velocidade e curso. Para receptores externos, o fluxo de heading deriva o heading a partir do bearing da correção. Nossa chamada Location.create não passa explicitamente o timestamp original da correção do receptor. Alguns valores de precisão e movimento indisponíveis ou inválidos são atualmente convertidos para 0.
Você poderia nos aconselhar sobre o seguinte?
- Como uma fonte personalizada deve representar precisão, velocidade, curso ou heading indisponíveis? Usar 0 para uma medição ausente pode afetar como LocationDisplay trata uma correção?
- Como devemos preservar ou validar o tempo original da correção do receptor? O provedor deve descartar correções obsoletas ou fora de ordem antes da emissão, especialmente após uma reconexão ou mudança de fonte?
- É apropriado derivar o fluxo separado de heading a partir do bearing da correção? Existem requisitos de ordenação ou sincronização entre os fluxos de localização e heading?
- Que orientações sobre buffer, taxa de atualização ou instrumentação nos ajudariam a distinguir atrasos antes do nosso provedor emitir uma correção dos atrasos no CustomLocationDataSource ou em sua exibição na tela? O LocationDisplay anima ou interpola posições recebidas?
Para receptores externos que não fornecem NMEA, CustomLocationDataSource é a abordagem recomendada? Além do exemplo básico, que orientações você pode nos dar para uma implementação em produção que lide com frescor da correção, medições ausentes, reconexões e taxas de atualização variáveis?