我想使用$ geoIntersects来检查一个点是否在多边形中。
我已将here中的英国地区保存在我的mongo数据库中。 我用mongoose-geojson-schema模块保存了所有geoJSON实体。
这是mongoose中定义的模式
var geozoneSchema = mongoose.model('Geozone', {
geoFeature: GeoJSON.Feature,
average: {type: Number, default: null},
updated_at: {type: Date, default: Date.now}
});
我写了这个查询,但它没有用。
Geozone.findOne({
"geometry.coordinates": {
"$geoIntersects": {
"$geometry": {
"type": "Point",
"coordinates": fakeUser.loc
}
}
}
}, function(err, foundGeozone) {
if (err) throw err;
console.log('found geozone: ', foundGeozone);
if (foundGeozone) {
console.log('found geozone! Good! Save User.');
}
});
在fakeUser.loc中存储了这一点
user.loc = [-3.2, 54.5]; //real loc
所以我确信这一点确实存在于特定存储区域内,但变量foundGeozone为null。
也许,我的查询错了或其他。你能帮帮我吗?
答案 0 :(得分:0)
根据https://github.com/glynnbird/ukcountiesgeojson中的数据架构,您要搜索的位置字段应为" geometry
",而不是" geometry.coordinates
":
Geozone.findOne({
"geometry": {
"$geoIntersects": {
"$geometry": {
"type": "Point",
"coordinates": fakeUser.loc
}
}
}
}, function(err, foundGeozone) {
if (err) throw err;
console.log('found geozone: ', foundGeozone);
if (foundGeozone) {
console.log('found geozone! Good! Save User.');
}
});
答案 1 :(得分:0)
在Victor的案例中,位置字段应为'geoFeature.geometry'
Geozone.findOne({ 'geoFeature.geometry':
{$geoIntersects:
{$geometry:{ "type" : "Point",
"coordinates" : [longitude, latitude] } //fakeUser.loc
}
}
})