Json MongoDB中的Interspot a FeatureCollection
我有一个GeoJson,里面填充了来自奥地利的州,我想做一个查询,将某些州截取我的多边形作为输出 这是我的疑问:Json MongoDB中的Interspot a FeatureCollection,json,mongodb,geojson,Json,Mongodb,Geojson,我有一个GeoJson,里面填充了来自奥地利的州,我想做一个查询,将某些州截取我的多边形作为输出 这是我的疑问: db.GeoAustria.find( { 'features.geometry':{ $geoIntersects:{ $geometry:{ type: "Polygon", coordinates: [ [ [ 16.2168
db.GeoAustria.find(
{
'features.geometry':{
$geoIntersects:{
$geometry:{
type: "Polygon",
coordinates: [
[
[
16.21685028076172,
48.007381433478855
],
[
16.24225616455078,
47.98716432210271
],
[
16.256675720214844,
48.00669234420252
],
[
16.21685028076172,
48.007381433478855
]
]
]
}
}
}
}
)
但它给了我所有的特征,包括那些不重叠多边形的特征。。。
我在这个查询中的错误在哪里?这里是基本数组匹配错误。输入集是单个文档,在单个
FeatureCollection
对象的数组中有95个多边形。当您对这些内容执行find()时,任何作为交集的单独地理位置都将导致整个文档作为匹配项返回。这与:
> db.foo.insert({x:["A","B","C"]})
WriteResult({ "nInserted" : 1 })
> db.foo.find({x:"A"});
{ "_id" : ObjectId("5fb1845b08c09fb8dfe8d1c1"), "x" : [ "A", "B", "C" ] }
返回整个文档,而不仅仅是元素“A”
假设您的集合中可能有多个大文档。此管道生成巴登的单一目标几何体(我在您的输入集上对其进行了测试):
除此之外,我可能建议将FeatureCollection
分解为可索引(FeatureCollection
在MongoDB中不可索引)和更易于处理的内容。例如,针对单个文档/多个多边形设计运行的这个小脚本将在95个文档中使用额外信息进行转换:
db.geo2.drop();
mainDoc = db.geo1.findOne(); // the one Austria doc
mainDoc['features'].forEach(function(oneFeature) {
var qq = {
country: "Austria",
crs: mainDoc['crs'],
properties: oneFeature['properties'],
geometry: oneFeature['geometry']
};
db.geo2.insert(qq);
});
db.geo2.aggregate([
{$match: {"geometry": {$geoIntersects: {$geometry: targ}} }}
]);
// yields same single doc output (Baden)
这使得匹配和过滤变得容易。有关
FeatureCollection
与GeometryCollection
的更多信息,请参见此处的基本数组匹配。输入集是单个文档,在单个FeatureCollection
对象的数组中有95个多边形。当您对这些内容执行find()时,任何作为交集的单独地理位置都将导致整个文档作为匹配项返回。这与:
> db.foo.insert({x:["A","B","C"]})
WriteResult({ "nInserted" : 1 })
> db.foo.find({x:"A"});
{ "_id" : ObjectId("5fb1845b08c09fb8dfe8d1c1"), "x" : [ "A", "B", "C" ] }
返回整个文档,而不仅仅是元素“A”
假设您的集合中可能有多个大文档。此管道生成巴登的单一目标几何体(我在您的输入集上对其进行了测试):
除此之外,我可能建议将FeatureCollection
分解为可索引(FeatureCollection
在MongoDB中不可索引)和更易于处理的内容。例如,针对单个文档/多个多边形设计运行的这个小脚本将在95个文档中使用额外信息进行转换:
db.geo2.drop();
mainDoc = db.geo1.findOne(); // the one Austria doc
mainDoc['features'].forEach(function(oneFeature) {
var qq = {
country: "Austria",
crs: mainDoc['crs'],
properties: oneFeature['properties'],
geometry: oneFeature['geometry']
};
db.geo2.insert(qq);
});
db.geo2.aggregate([
{$match: {"geometry": {$geoIntersects: {$geometry: targ}} }}
]);
// yields same single doc output (Baden)
这使得匹配和过滤变得容易。有关
FeatureCollection
与GeometryCollection
的更多信息,请参见。GeoAustria集合中是否有多个文档,每个文档都有一个多边形,或者其中是否也有多个多边形?你能提供一个你认为不应该与你的查询多边形相交的文档的例子吗?你说它“给我所有的特征…”你是在一个文档中使用多个几何多边形的FeatureCollection
?是的,有多个多边形。这就是集合:在本例中,它应该只与“Baden”相交OK——MongoDB中匹配语义的标准错误解释`功能是GeoAustria
集合之一,其中有多个文档,每个文档都有一个多边形,还是也有多个多边形?你能提供一个你认为不应该与你的查询多边形相交的文档的例子吗?你说它“给我所有的特征…”你是在一个文档中使用多个几何多边形的FeatureCollection
?是的,有多个多边形。这就是集合:在本例中,它应该只与“Baden”相交OK——MongoDB中匹配语义的标准错误解释`功能我也尝试过放松,但显然使用不当。我使用了您的脚本,现在我的查询完全按照我的要求工作。谢谢你的努力和帮助@P01NT1非常好。不要羞于向上箭头投票。我会的,但我是一个新用户,我的声誉还不够高,现在无法投票!我也试过放松,但显然用错了。我使用了您的脚本,现在我的查询完全按照我的要求工作。谢谢你的努力和帮助@P01NT1非常好。不要羞于向上箭头投票。我会的,但我是一个新用户,我的声誉还不够高,现在无法投票!