query near indexstats index example mongodb gps distance geospatial geojson

mongodb - indexstats - mongoose $near



Distancia del resultado del comando MongoDB geoNear en kilómetro (3)

Las distancias se devuelven en metros. Para convertir a kilómetros, divida por 1000. Puede hacer que MongoDB lo haga usando la opción distanceMultiplier :

db.runCommand({ "geoNear" : "test", "spherical" : true, "distanceMultiplier" : 0.001, "near" : { "type" : "Point" , "coordinates" : [33.2926487, 44.4159651] } })

Estoy usando mongoDB para almacenar datos de ubicaciones GPS como este documento GeoJSON

{"tipo": "Punto", "coordenadas": [33.313183, 44.465632]}

{"tipo": "Punto", "coordenadas": [33.2926487, 44.4159651]}

Actualización: también aseguré el índice 2dspher como seguir

db.test.ensureIndex( { loc : "2dsphere" } )

Obtuve las coordenadas de los mapas de Google. Si busco usando este comando, no puedo convertir las distancias en resultados a kilómetros.

db.runCommand({geoNear: ''test'', spherical: true, near: {type: "Point" , coordinates: [33.2926487, 44.4159651]}})

el resultado es como sigue

"results" : [ { "dis" : 0.0033427770982422957, "obj" : { "_id" : ObjectId("54a96f348fa05fcaed637a22"), "loc" : { "type" : "Point", "coordinates" : [ 33.2926487, 44.4159651 ] } } }, { "dis" : 5764.7060911604085, "obj" : { "_id" : ObjectId("54a96f4c8fa05fcaed637a23"), "loc" : { "type" : "Point", "coordinates" : [ 33.313183, 44.465632 ] } } } ]

se espera que el primer resultado sea Cero, ya que es el mismo punto en el que quiero obtener la distancia de las coordenadas fuente = destino, pero todavía tiene valor.

el segundo valor que no puedo convertir a Kilómetros, en la calculadora de distancia de Google es de aproximadamente 5.26KM.


¿ 2dsphere el campo como una 2dsphere ? Eso podría explicar la discrepancia ya que estás consultando como sphere: true


Mientras continuaba mi investigación sobre este tema, encontré que hay dos tipos de tipos de almacenamiento para los puntos

punto heredado como este formato

db.test2.insert({location: [33.313183, 44.465632]})

y punto GeoJSON como este formato

db.test.insert({location: {"type" : "Point", "coordinates" : [33.313183, 44.465632]}})

si estamos usando el punto heredado, el resultado sería en radianes, por lo que lo convertiríamos a kilómetros utilizando esta afirmación

db.runCommand({geoNear: ''test2'', spherical: true, near: [33.2926487, 44.4159651], distanceMultiplier: 6371})

si estamos usando el punto GeoJSON, el resultado estaría en metros, así que lo convertiríamos a kilómetros usando esta declaración como respuesta a esta pregunta

db.runCommand({geoNear: ''test'', spherical: true, near: {type: "Point" , coordinates: [33.2926487, 44.4159651]}, distanceMultiplier: 0.001})

solución en caso de formato de punto GeoJSON

para obtener más detalles, consulte este enlace, un informe de error para MongoDB que lo explica todo.