2014-08-29 4 views
1

Я новичок в mongoDB и использовании geoJSON в нем.Использование geoJSON в схеме mongoose и использование его в запросе

Я имею следующую схему я создал с помощью модуля мангуста:

var mongoose = require('mongoose'); 

var hikeSchema = mongoose.Schema({ 

    name: String, 
    area: String, 
    length: Number, 
    time: String, 
    Difficulty: { type : Number, min : 0 , max :5 }, 
    start_coord: { 
    lon: Number, 
    lat: Number 
    }, 
    rank_count: Number, 
    avg_overall_rating: { type : Number, min : 0 , max :5 }, 
    completed_count: Number, 
    description: String, 
    ranking_pages: [ 
    mongoose.Schema.Types.ObjectId 
    ] 

}); 

module.exports = mongoose.model('Hike', hikeSchema); 

я использовал простой Number типа для представления долготы и широты внутри к югу объекта в схеме.

Я не знаю, если это так. Я хочу, чтобы он был сохранен как объект geoJSON, а затем запускал запросы на этот объект.

ответ

3

Я Recommand увидеть часть MongoDB для геолокации DATAS: http://docs.mongodb.org/manual/core/2d/

Для сохранения долготы, широты, MongoDB займет у вас правильная структуру данных для сохранения объектов:

Чтобы сохранить данные о местоположении в наследстве координаты, используйте массив или встроенный документ. Когда это возможно, использовать формат массива:

LOC: [< долгота>, < широта>]

Рассмотрим встроенные формы документа:

LOC: {LNG:, lat:}

Массивы предпочтительны, поскольку определенные языки не гарантируют ассоциативное упорядочение карт.

Для всех точек, если вы используете долготу и широту, храните координаты по долготе, по широте.

На вашем Шма изменить

start_coord: { 
    lon: Number, 
    lat: Number 
}, 

By:

start_coord: { 
    lng: Number, 
    lat: Number 
}, 

Затем вы должны добавить 2dindex для поля start_coords использовать все MongoDB геопространственных запросы:

db.collection.ensureIndex({ start_coord : "2d" } , { min : <l ower bound > , max : < upper bound > }) 

EDIT Это важно установить минимальное и максимальное, если ваша широта и долгота не является реальным LNG/лат (например, если вы могли бы использовать 2dindexes в карте ортонормированному)

Теперь вы можете использовать все геопространственных операторы запросов: http://docs.mongodb.org/manual/reference/operator/query-geospatial/

+0

это хорошо для старых пар, но вы также можете использовать [GeoJSON] (http://docs.mongodb.org/ ручной/заявл ications/геопространственной-индексы/# GeoJSON-объекты).GeoJSON имеет лучшую поддержку для сферических вычислений. Если ваши походы достаточно короткие, это не имеет большого значения, если вы используете вычисления 2d или 2dsphere. – wdberkeley

1

вы также можете сделать это следующим образом:

start_coord: { 
    type: [Number], // [<longitude>, <latitude>] 
    index: '2d' // create the geospatial index 
} 

Проверить этот учебник: How to use geospatial indexing in mongoDb

Смежные вопросы