在MongoDB中截取FeatureCollection

P01NT1

我有一个充满来自奥地利的州的GeoJson,我想做一个查询,将某些州拦截我的多边形作为输出。

这是我的查询:

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”。

假设您的集合中可能有多个大型文档。该管道产生Baden的单个目标几何体(我在您的输入集上对其进行了测试):

var Xcoords = [
          [
            [
             16.21685028076172,
              48.007381433478855
             ],
            [
             16.24225616455078,
              47.98716432210271
             ],
            [
             16.256675720214844,
              48.00669234420252
             ],
            [
             16.21685028076172,
              48.007381433478855
            ]
          ]
              ];
var targ = {type: "Polygon", coordinates: Xcoords};

db.geo1.aggregate([
// First, eliminate any docs where the geometry array has zero intersects. In this
// context, features.geometry means "for each element of array features get the
// geometry field from the object there", almost like saying "features.?.geometry"
{$match: {"features.geometry": {$geoIntersects: {$geometry: targ}} }}

// Next, break up any passing docs of 95 geoms into 95 docs of 1 geom...
,{$unwind: "$features"}

// .. and run THE SAME $match as before to match just the one we are looking for.
// In this context, the array is gone and "features.geometry" means get JUST the
// object named geometry:
,{$match: {"features.geometry": {$geoIntersects: {$geometry: targ}} }}
  ]);

除此之外,我可能建议将其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与vs的更多信息,GeometryCollection请参见https://www.moschetti.org/rants/hurricane.html

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

是否可以从LiveCode中截取屏幕截图?

来自分类Dev

如何在python中截取屏幕截图?

来自分类Dev

PHP从查询结果中截取文本

来自分类Dev

如何在传单中设置 geoJSON FeatureCollection 的样式?

来自分类Dev

在WebRTC会话中截取视频帧以进行效果处理?

来自分类Dev

glmer VS JAGS:仅截取的分层模型中的结果不同

来自分类Dev

在Ubuntu安装过程中截取屏幕截图

来自分类Dev

从全屏Qt快速应用程序中截取屏幕截图

来自分类Dev

Spring Integration中的例外:如何记录但不截取

来自分类Dev

无法在Android上运行的Kivy应用中截取屏幕截图

来自分类Dev

在TextField小部件中从下面截取文本:Flutter

来自分类Dev

在Bootstrap 4中以平板电脑大小截取文本的列

来自分类Dev

通过选择区域从pyqt脚本中截取屏幕截图

来自分类Dev

从全屏Qt快速应用程序中截取屏幕截图

来自分类Dev

如何截取Java或Android中对库类的方法调用?

来自分类Dev

我可以截取粘贴到DataGrid单元中吗?

来自分类Dev

Spring Integration中的例外:如何记录但不截取

来自分类Dev

无法在Android上运行的Kivy应用中截取屏幕截图

来自分类Dev

FFmpeg从时长可变的视频中截取屏幕截图

来自分类Dev

在Ubuntu安装过程中截取屏幕截图

来自分类Dev

截取图像后,如何在NodeJS中返回图像?

来自分类Dev

从场景中截取非常大的屏幕截图

来自分类Dev

glmer VS JAGS:仅截取的分层模型中的结果不同

来自分类Dev

从.264或.m2ts文件中截取屏幕截图

来自分类Dev

截取屏幕截图并存储在 SQL VB.NET 中

来自分类Dev

在 xfce 中截取一个区域的屏幕截图?

来自分类Dev

如何在移相器中截取游戏div的屏幕截图

来自分类Dev

Bytebuddy:截取固定值中的get方法

来自分类Dev

如何使用 React Native 中的按钮截取屏幕截图?

Related 相关文章

  1. 1

    是否可以从LiveCode中截取屏幕截图?

  2. 2

    如何在python中截取屏幕截图?

  3. 3

    PHP从查询结果中截取文本

  4. 4

    如何在传单中设置 geoJSON FeatureCollection 的样式?

  5. 5

    在WebRTC会话中截取视频帧以进行效果处理?

  6. 6

    glmer VS JAGS:仅截取的分层模型中的结果不同

  7. 7

    在Ubuntu安装过程中截取屏幕截图

  8. 8

    从全屏Qt快速应用程序中截取屏幕截图

  9. 9

    Spring Integration中的例外:如何记录但不截取

  10. 10

    无法在Android上运行的Kivy应用中截取屏幕截图

  11. 11

    在TextField小部件中从下面截取文本:Flutter

  12. 12

    在Bootstrap 4中以平板电脑大小截取文本的列

  13. 13

    通过选择区域从pyqt脚本中截取屏幕截图

  14. 14

    从全屏Qt快速应用程序中截取屏幕截图

  15. 15

    如何截取Java或Android中对库类的方法调用?

  16. 16

    我可以截取粘贴到DataGrid单元中吗?

  17. 17

    Spring Integration中的例外:如何记录但不截取

  18. 18

    无法在Android上运行的Kivy应用中截取屏幕截图

  19. 19

    FFmpeg从时长可变的视频中截取屏幕截图

  20. 20

    在Ubuntu安装过程中截取屏幕截图

  21. 21

    截取图像后,如何在NodeJS中返回图像?

  22. 22

    从场景中截取非常大的屏幕截图

  23. 23

    glmer VS JAGS:仅截取的分层模型中的结果不同

  24. 24

    从.264或.m2ts文件中截取屏幕截图

  25. 25

    截取屏幕截图并存储在 SQL VB.NET 中

  26. 26

    在 xfce 中截取一个区域的屏幕截图?

  27. 27

    如何在移相器中截取游戏div的屏幕截图

  28. 28

    Bytebuddy:截取固定值中的get方法

  29. 29

    如何使用 React Native 中的按钮截取屏幕截图?

热门标签

归档