5

geometry にインデックスを作成しようとするdb.polygons.createIndex({"geometry":"2dsphere"})と、エラー コード 16755 で特定のポリゴンで停止しCan't extract geo keysますDuplicate vertices: 18 and 20

そのため、さらに調査すると、ポリゴン内の 2 つのノードが近接している場合、または重複している場合に発生するようです。

次に、QGISでこのノードを手動で削除し、プロセスを再試行しましたが、同じ問題を持つ別のポリゴンがあることがわかりました。

ポリゴンの修正 > MongoDB へのアップロード > インデックスの作成のプロセス全体を繰り返さなくても、この問題を修正するにはどうすればよいですか? この問題が発生しているポリゴンの数を確認する方法はありますか?

4

2 に答える 2

6

同様の問題に遭遇しました。データセット内の有効なレコードを見つける必要がありました (Duplicate Vertices でレコードを破棄しました)。

コレクションの名前を変更しました -

db.myCollection.renameCollection('myCollectionBk')

次に、元のコレクションの 1 つのレコードを新しいコレクションに追加し、コレクションに地理空間インデックスを追加しました。

db.myCollection.insert(db.myCollectionBk.findOne()) // recreate the collection
db.myCollection.createIndex({geometry:"2dsphere"}) // create the index (assumes the geometry on the record is valid)
db.myCollection.remove({}) // remove the record

次に、有効なレコードを新しいコレクションに追加しました。

db.myCollectionBk.find().forEach(function(x){
    db.myCollection.insert(x);
})

無効なレコードは単純に無視されます。

あなたの場合、おそらくinsertからWriteResultを取得し、それが成功したかどうかを確認したいと思うでしょう。何かのようなもの

var errors = []
db.myCollectionBk.find().forEach(function(x){
    var result = db.myCollection.insert(x);
    if (result.writeError) {
        errors.push({x._id:result.writeError.errmsg});
    }
})

別の方法として、この質問をチェックしてください(これを機能させることができませんでした)

于 2016-06-07T18:18:55.210 に答える