Найти точки внутри пересечения многоугольников в MongoDB - PullRequest
0 голосов
/ 25 июня 2019

Я хочу найти точки внутри пересечения (Рисунок 1) полигонов в MongoDB.

Рисунок 1

enter image description here

Я использую 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} }

Выше код ничего не возвращает, в то время как он возвращает все точки, так как многоугольники покрывают весь мир.

Кто-то знает, что я делаю не так?Может быть, то, как я пытаюсь добиться этого, неверно.

...