Получить значение из Entry [duplicate]

На самом деле немного более оптимальным, чем при первом написании. Теперь мы можем просто $redact , а не $project булевым и $match позже:

db.collection.aggregate([
    // Match documents "near" the queried point
    { "$geoNear": {
        "near": {
            "type": "Point",
            "coordinates": [ 23.027573, 72.50675800000001 ],
        },
        "distanceField": "distance"
    }},

    // Calculate if distance is within radius and remove if not
    { "$redact": {
        "$cond": {
            "if": { "$lte": [ "$distance", "$radius" ] },
            "then": "$$KEEP",
            "else": "$$PRUNE"
        }
    }}
])

Вы точно сохранили информацию, как вы должны, но есть другой подход к получению результатов, чем вы думаете.

То, что вы хотите использовать, - это $geoNear и, в частности, структуру агрегации этого оператора. Вот что вы делаете:

db.collection.aggregate([
    // Match documents "near" the queried point
    { "$geoNear": {
        "near": {
            "type": "Point",
            "coordinates": [ 23.027573, 72.50675800000001 ],
        },
        "distanceField": "distance"
    }},

    // Calculate if distance is within radius
    { "$project": {
        "location": 1,
        "radius": 1,
        "distance": 1,
        "within": { "$lte": [ "$distance", "$radius" ] }
    }},

    // Match only documents within the radius
    { "$match": { "within": true } }
])

Таким образом, эта форма позволяет «спроецировать» расстояние от запрошенной точки в результатах, в то время как запрос будет также возвращать только ближайшие документы.

Затем вы используете логическое сравнение, чтобы увидеть, меньше ли значение «расстояние», чем «радиус», поэтому в пределах круга.

Наконец, вы должны отфильтровывать только те результаты, в которых это «внутри» утверждение [true].

Вы можете добавить другие опции в $geoNear, как показано в документации. Я также настоятельно рекомендую, чтобы ваше хранилище также использовало формат GeoJSON, поскольку он, вероятно, будет более совместим с другими библиотеками, которые вы могли бы использовать для работы с полученными результатами.

-2
задан Murilo Silva 16 January 2019 в 11:47
поделиться

2 ответа

bf = Entry(Geom, width=5, justify= RIGHT, font="Arial 12")
bf.grid(column=1, row=0)

Причина NoneType произошла из-за типа сетки (столбец = 1, строка = 0) в вашем коде.

0
ответ дан Prince Sharzeel 16 January 2019 в 11:47
поделиться

Разделить следующую строку на 2:

bf = Entry(Geom, width=5, justify= RIGHT, font="Arial 12").grid(column=1, row=0)

вот так

bf = Entry(Geom, width=5, justify= RIGHT, font="Arial 12")
bf.grid(column=1, row=0)

На данный момент bf не является виджетом Entry, но None возвращено из grid() Также обратите внимание, что обычно вы используете переменную, например IntVar, то есть привязка к виджету входа

0
ответ дан buran 16 January 2019 в 11:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: