- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个集合,其属性为“place”,如下所示。
"place" : {
"name" : "Central Region",
"country" : "Country_A",
"coor_type" : "Polygon",
"coordinates" : [
[
[
103.749959507073,
1.2123138339349
],
[
103.918426999964,
1.2123138339349
],
[
103.918426999964,
1.36874499902569
],
[
103.749959507073,
1.36874499902569
]
]
]
}
我正在尝试使用 $geoInterset 运算符来获取文档列表,其中 place.coordinates 与由两点定义的矩形相交。
[ [103.591247, 1.222136], [104.040313, 1.477497] ]
第一个点是矩形的左下角,另一个点是矩形的右上角。
我写了一个查询:
db.Document.find(
{'place.coordinates':
{$geoIntersects:
{$geometry:
{type:'Polygon'
, coordinates:[[103.591247,1.222136],[104.040313,1.477497]]
}
}
}
}
);
然而,mongodb 一直报错
error: {
"$err" : "Malformed geo query: { $geoIntersects: { $geometry:
{ type:\"Polygon\",
coordinates:[[103.591247,1.222136],[104.040313,1.477497]]
}}}",
"code" : 16677}
我尝试过不同的类型,例如“Box”和“LineString”。 Box 会给出类似的错误。 LineString 不会提示,但也不会返回任何结果。
我在这里做错了什么?有什么建议吗?
最佳答案
主要问题是 place
文档和查询不是正确的 Polygon GeoJSON 文档。
这是修复它的方法。
LinearRing
的第一个和最后一个坐标必须相同。
Polygons consist of an array of GeoJSON LinearRing coordinate arrays. These LinearRings are closed LineStrings. Closed LineStrings have at least four coordinate pairs and specify the same position as the first and last coordinates. -- MongoDb doc - Polygon
将 coor_type
重命名为 type
以符合 GeoJSON 标准。
{ <location field>: { type: "<GeoJSON type>" , coordinates: <coordinates> } }
In order to index GeoJSON data, you must store the data in a location field that you name. The location field contains a subdocument with a type field specifying the GeoJSON object type and a coordinates field specifying the object’s coordinates. Always store coordinates in longitude, latitude order. Mongodb docs - geojson polygon
var obj = {
"place": {
"name": "Central Region",
"country": "Country_A",
"type": "Polygon",
"coordinates": [
[
[
103.749959507073,
1.2123138339349
],
[
103.918426999964,
1.2123138339349
],
[
103.918426999964,
1.36874499902569
],
[
103.749959507073,
1.36874499902569
],
[
103.749959507073,
1.2123138339349
]
]
]
}
};
db.geo.drop();
db.geo.insert( obj );
//Use the 2dsphere index to validate your GeoJSON format
// and speed up queries
db.geo.ensureIndex({ "place" : "2dsphere" })
确保您的查询具有正确的 Polygon 值,并且在包含 type
和 coordinates
字段的字段上进行搜索。您正在搜索字段 place.coordinates
,而它本应是 place
。
db.geo.find({
place: {
$geoIntersects: {
$geometry: {
type: "Polygon",
coordinates: [
[
[
103.749959507073,
1.2123138339349
],
[
103.918426999964,
1.2123138339349
],
[
103.918426999964,
1.36874499902569
],
[
103.749959507073,
1.36874499902569
],
[
103.749959507073,
1.2123138339349
]
]
]
}
}
}
})
关于Mongodb $geoIntersect 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28163987/
我有一个集合,其属性为“place”,如下所示。 "place" : { "name" : "Central Region", "country" : "Country_A",
我从金奈和类加罗尔城市的谷歌地图中手动获取坐标并插入到我的数据库中。对于类加罗尔市,$geoIntersect 工作得很好。然而,出于某种原因,对于钦奈市,它没有出现。我不确定我在哪里/错过了什么。在
我有一个名为 search2 的集合,其中包含大约 20000 个这样的文档: { "loc": { "type": "Polygon", "c
我有一个 Mongo 集合,我正在尝试对其执行 $geoIntersects 查询。 mongo中的数据格式为: { "_id" : ObjectId, "created_at" :
mongoDB 中的$geoWithin 和$geoIntersects 运算符有什么区别? 如果我正在寻找坐标(使用默认坐标引用系统),$geoWithin 和 $geoIntersects 将返回
我有一个 MongoDB 数据库,其中包含一个名为 fooCollection 的集合。该集合中包含以边界多边形方式包含地理空间数据的文档。我在我的应用程序中使用 C# MongoDB 驱动程序。我注
我有一个包含文档的集合,每个文档都有一个带有多边形的字段数组。 我想测试我的多边形是否与这些多边形中的任何一个相交。如果有帮助的话,它们都是盒子形状的。 如果您添加将我的多边形包含在我正在测试的数组中
我在一个集合中有事件,每个事件都包含一个所需的位置,设置一个 GeoJSON 多边形。 我在另一个集合中也有服务提供商,也有一个 GeoJSON 多边形,指示他们可以交付的区域。 对于给定的服务提供商
我在 2dsphere 索引集合中插入一个点,并试图在多边形中找到它: c = db.foo; c.ensureIndex({'value.geometry': '2dsphere'}); c.ins
我正在使用 Sinatra 和 mongoid 驱动程序,现在我正在尝试在 mongoid 中执行此查询,实际上我有一个名为 'geometry 的地理空间(多边形)字段': db.states.fi
我正在尝试查找符合我的条件的社区 - boundries 多边形与帖子的坐标相交,但我无法做到 - 无法使用 let in我的 管道 $match 帖子实体示例: { _id: ObjectId,
我想查询所有包含一个点的多边形的文档,然后针对该结果集,根据该点与文档位置的接近程度对其进行排序。 想象一下,我有一个 friend 数据库,因为我很酷,想看看哪些 friend 在我的范围内并且愿意
我有一个使用 MongoDb 的 Java 应用程序(客户端版本 3.12)。Filters.geoIntersects 从 Java 应用程序不返回任何内容从 Robo 3T 查询相同的数据时会返回
我是一名优秀的程序员,十分优秀!