Frage

Ich finde ein Problem bei der Definition des Geo Spatial Index '2D', wie unten gezeigt. Irgendwelche Hinweise darauf, was schief geht?

var Address = new Schema({
      loc           : {lat: Number,  lng: Number },
      Address       : String,
      create_date       : {type: Date, default: Date.now}
});
Address.index ({
       loc : "2d"
});

Es wirft Fehler wie,

Ereignisse.js: 45 Argumente werfen [1]; // ungehandeltes 'Fehler' Ereignis ^ Fehler: Punkt nicht in Reichweite bei [Objektobjekt]. (/cygDrive/c/Personal/Software/NodeJS/Node/no de_modules/mongoose/node_modules/mongoDB/lib/mongoDB/db.js: 503: 20)

Bearbeiten: Fügte den Code hinzu

var Address = new Schema({
      type              : {type: String, enum: ['Apartment', 'House', 'Serviced Apartment'], default: 'Apartment'}, 
      loc               : {lat: Number,  lng: Number },
      Address           : String,
      create_date       : {type: Date, default: Date.now}
});

/*
Address.index ({
    loc : "2d"
});
*/

mongoose.connect('mongodb://127.0.0.1:27017/test123', function(err) {
    if (err) {
        console.log("error in mongo connection");
        throw err;
    }
    console.log("connected to mongo");
});

var RentModel = mongoose.model('Rent', Address);



socket = io.listen(app);

socket.sockets.on('connection', function(client){ 

        console.log('inside on connection');

        client.on('register', function(msg){ 
                console.log("msg.geometry.type", msg.geometry.type);

                var rent = new RentModel();
                rent.type = 'Apartment';
                rent.loc.lat = 23;
                rent.loc.lng = 56;
                rent.Address = "LLLLLLLLIIIIIIIOOOOOOONNNNNNNN"

                console.log("before save");
                rent.save(function(err){
                    console.log("rent.save start");
                    if(err) { 
                        throw err; 
                        console.log("error in save");
                    }
                    console.log("saved");

                });

            }); 


            RentModel.find({loc : { $near : [20, 50], $maxDistance: 30 }} , function(err, docs){
                if (err) {
                    console.log("error in finding near", err);
                    throw err;
                }
                console.log('docs.length : ' , docs.length);
                console.log('docs : ',docs)
            })
War es hilfreich?

Lösung

Es ist auch erwähnenswert, dass Sie möchten, dass die Länge vor dem Breitengrad in Ihrem Array kommt. Dies wirkt sich nicht auf Sie aus, wenn Sie 2D verwenden, aber wenn Sie 3D verwenden. Mathematisch ist dies sinnvoll, da Längengrad die X -Koordinate ist und Breitengrad die Y -Koordinate (x, y) ist, aber die meisten von uns sind mit Lat vertraut , aber es bedeckt nicht 2D).

Letztendlich möchten Sie wahrscheinlich 3D verwenden, da 2D -Berechnungen nicht genau sind, wenn Sie sich vom Äquator entfernen.


UPDATE: 2015-12-08 Die oben genannte ist nicht mehr relevant-Siehe aktualisierte Antworten/API-Dokumente

Andere Tipps

Möglicherweise möchten Sie hier eine Referenz darüber, wie es geht :) und für jemanden, der danach kommt. Nur für den Fall ist jemand interessiert

http://www.janzano.es/blog/?p=592

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top