gpt4 book ai didi

c# - Mongodb:如何检查一个点是否包含在多边形中?

转载 作者:可可西里 更新时间:2023-11-01 09:46:12 25 4
gpt4 key购买 nike

我在点数组(纬度、经度)中得到了一个区域的点列表。我已经在这些数组上建立了索引,现在我想知道一个点是否在该多边形内。

MongoDB 有可能吗?我已经尝试过这些命令,但没有成功:

 > polygonA = [ [ 48.780809,2.307129],[ 48.781809,2.300129],[ 48.770809,2.317129]]
> db.contours.find({ "rings.ring" : { "$within" : { "$polygon" : polygonA } } })

 > db.runCommand( { geoNear : "contours" , within : [2.307129,48.780809,], num : 10 } );

我的数据结构是:

 > db.contours.findOne({},{'rings':0})
{
"_id" : ObjectId("50364617d591ac166000c196"),
"foundfieldname" : "Name",
"geometrytype" : "geometryPolygon",
"attributes" : {
"Shape" : "Polygon",
"Name" : "France",
"Type" : "Country",
"Country" : "France",
"Area" : "1162358716567.45"
},
"country" : "France",
"rings":{
"ring":[[12.32,43.54],...],
...
}

谢谢

最佳答案

这要求 rings.ring 是一个点,并且它上面定义了一个地理索引,是这样吗?

你的问题暗示这实际上是一个包含多个点的列表,上面有一个标准索引(多键索引),这是行不通的。

http://www.mongodb.org/display/DOCS/Geospatial+Indexing/#GeospatialIndexing-BoundsQueries

如您所见,当您搜索“loc”作为多边形内的一个点时,“loc”字段是这样的(其他有效示例请参见上面的链接):

{ loc : [ 50 , 30 ] }

索引是这样的:

db.places.ensureIndex( { loc : "2d"}

即表示一个点并在其上定义地理索引的字段。如果您使用这样的字段 - 那么您的测试是否有效?

关于c# - Mongodb:如何检查一个点是否包含在多边形中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12095965/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com