10

我对 MongoDB 有以下问题。我从我的祖国获得了一些地理数据,我必须将它们存储到 mongodb 以建立一个简单的 Web 功能服务。该服务将主要使用运算符进行边界框查询$within。数据采用 GeoJSON 格式。[1,2]因此,我首先导入了以这种格式表示为点 ( ) 的村庄和城市。没问题。下一步河流和街道是 LineStrings 并根据 GeoJSON 以这种方式表示[[1,2],[3,4]]。但是在导入区域(实际上是多边形并且根据 GeoJSON 规范 3 dim 数组)时,我 geo values have to be numbers在创建索引时遇到了错误。

db.collection.ensureIndex({"geometry.coordinates" : "2d"});

所有数据都是有效的 GeoJSON,并且在 EPSG:4326 投影中是纯二维坐标。

有人有想法吗?

4

6 回答 6

13

在 MongoDB 2.4 中,对 GeoJSON 点、线串和多边形使用“2dsphere”索引。

例如,您可以创建此索引:

db.mycoll.ensureIndex( { loc : "2dsphere" } )

并存储这个 LineString:

{ loc : { type : "LineString" , coordinates : [ [ 1 , 2 ] , [ 3 , 4 ] ] } }

请参阅http://docs.mongodb.org/manual/applications/2dsphere/

于 2013-03-20T17:34:18.693 回答
3

看来 mongo 2.3.2 开发版本现在支持 GeoJSON: MongoDB 2.4 发行说明

于 2013-02-10T21:48:14.270 回答
2

我必须自己做同样的事情来设置 GeoFence 功能。我所做的是将“多边形”数据存储为一系列坐标和一个中心。例如:

{ 
    "_id" : ObjectId( "4f189d132ae5e92272000000" ),
    "name" : "Alaska",
    "points" : [ 
        { "coords" : [ 
            -141.0205, 
            70.0187 ] 
        }, 

        ...

        { "coords" : [ 
            -141.0205, 
            70.0187 ] 
        } 
    ],
    "center" : { 
        "coords" : [ 
          -153.6370465116279, 
          61.42329302325581 ] 
    } 
}

在我的应用程序(在 python 中)中,我使用shapely library。我首先要做的是找到一个中心最接近我的点的对象列表。然后在客户端(python)我使用将每个大坐标数组转换为多边形,然后测试这些区域以找出哪些区域包含我的观点。

因此,您可以将多边形数据作为数据存储在 MongoDB 中,并使用其他一些预先计算的 2d 索引,如中心。

于 2012-06-28T16:42:43.083 回答
2

从 mongo shell 中尝试一下:

// Polygon in GeoJson format
var poly = {};
poly.name = 'GeoJson polygon';
poly.geo = {};
poly.geo.type = 'Polygon';
poly.geo.coordinates = [
    [ [ -80.0, 30.0 ], [ -40.0, 30.0 ], [ -40.0, 60.0 ], [-80.0, 60.0 ], [ -80.0, 30.0 ] ]
];
db.foo.insert(poly);
db.foo.ensureIndex({geo: "2dsphere" });
于 2014-09-23T16:18:36.300 回答
1

MongoDB 的地理空间功能目前仅支持存储点,不支持存储形状或线条。但是,您可以使用圆形、矩形或多边形来查询点。

于 2012-06-28T16:27:12.220 回答
0

根据此处的 MongoDB 文档,可以将多边形存储为 GeoJSON 多边形,例如:

{
  type: "Polygon",
  coordinates: [ [ [ 0 , 0 ] , [ 3 , 6 ] , [ 6 , 1 ] , [ 0 , 0  ] ] ]
}

这是一个简单的环,但也可以存储具有多个环的多边形。

于 2018-10-25T12:26:04.613 回答