Я хочу найти точки внутри пересечения (Рисунок 1) полигонов в MongoDB.
Рисунок 1
Я использую pymongo и код, который я использовал:
intersect = db.samplecol.aggregate([
{"$match": {
"geometry": {
"$geoWithin":
{'$geometry':
{'type': 'Polygon',
'coordinates': [
[
[
-118.125,
50.2893393
],
[
-118.125,
49.3823728
],
[
-84.375,
-27.0591258
],
[
92.8125,
-23.8858377
],
[
93.515625,
52.4827802
],
[
-118.125,
50.2893393
]
]
]
}
}
}
}},
{"$match": {
"geometry": {
"$geoWithin":
{'$geometry':
{'type': 'Polygon',
'coordinates': [
[
[
-118.125,
50.2893393
],
[
-118.125,
49.3823728
],
[
-84.375,
-27.0591258
],
[
92.8125,
-23.8858377
],
[
93.515625,
52.4827802
],
[
-118.125,
50.2893393
]
]
]
}
}
}
}},
{"$group": {"_id": "$properties.vessel_hash",
"total": {"$sum": 1}, "COORDINATES": {
"$push": "$geometry.coordinates"}}},
{"$sort": {"total": 1}}
])
print "object", list(intersect)
for point in intersect:
print "Point", point
Внутри запроса у меня есть два $match
, чтобы нарисовать два многоугольника и «поймать» точки внутри.
У меня есть несколько документов в формате GeoJSON в следующей форме:
{ "_id" : ObjectId("5b06c250f211924446d4f199"), "geometry" : { "type" : "Point", "coordinates" : [ -5.383678, 36.17477 ] }, "type" : "Feature", "properties" : {"timestamp" : "20101-05-23T11:11:56.000Z", "vessel_hash" : "xxxx} }
Выше код ничего не возвращает, в то время как он возвращает все точки, так как многоугольники покрывают весь мир.
Кто-то знает, что я делаю не так?Может быть, то, как я пытаюсь добиться этого, неверно.