0
respostas

Entrada de dados incorreta para GeoJSON

A ordem dos dados de latitude e longitude utilizada no curso, para o item "coordinates" está incorreta.

Como indicado na documentação (https://docs.mongodb.com/manual/reference/geojson/), o formato correto é:

{
    coordinates: [ long, lat]
    type: "Point"
}

Em todo o material do curso foi inserido de forma invertida, sem comentar sobre este ponto.

Isto é confirmado ao analisar o schema da coleção no MongoDB Compass. Na imagem a seguir, pode-se ver diversos pontos perdidos no Oceano Atlântico. O único que aparece em São Paulo foi o que eu corrigi manualmente.

Localizacao dos alunos

Alunos navegando no oceano

O comando a seguir corrige estes valores para todas entradas. Atenção para executar somente uma vez, pois a cada execução os valores de lat/long serão invertidos de posição no array localizacao.coordinates:

db.alunos.find({"localizacao.coordinates" : {$exists : true}}).forEach(function (doc) {
    var loc = [ doc.localizacao.coordinates[1], doc.localizacao.coordinates[0] ]; 
    db.alunos.update(doc, { $set: { "localizacao.coordinates": loc } });
})