2

インデックスを追加しようとし2dsphereましたが、不正な形状のジオメトリの問題が発生しました (MongoDB 2.6 と 2dsphere インデックス バージョン 2 を使用)。

コレクションには、ジオメトリを含むドキュメントとPolygonジオメトリを含むドキュメントの両方が含まれますMultiPolygon。Mongo は、ジオメトリを持つドキュメントに到達するとすぐに #16755 エラー (不正なジオメトリ) をスローしますMultiPolygonGeoJSONlint.comによると、GeoJSONは正しいです

インデックスを設定するときにジオメトリ タイプを混在させることはできますか?

この問題に対処するにはどうすればよいですか?

失敗したドキュメントは次のようになります: (読みやすくするためにいくつかのポイントを省略しました。両方のポリゴンはまだ閉じています...)

{
    「タイプ」:「マルチポリゴン」、
    「座標」:[
        [
            [
                [
                    4.8730935147694279、
                    51.4125385138567450
                ]、
                [
                    4.8731073690744831、
                    51.4124188435040280
                ]、
                [
                    4.8719363156445858、
                    51.4121631573312000
                ]、
                [
                    4.8720931816264326、
                    51.4120192196300750
                ]、
                [
                    4.8730935147694279、
                    51.4125385138567450
                ]
            ]
        ]、
        [
            [
                [
                    4.9354151466562142、
                    51.4320525317730240
                ]、
                [
                    4.9341804433318899、
                    51.4319519241268350
                ]、
                [
                    4.9341480860178217、
                    51.4323138673607550
                ]、
                [
                    4.9341289343773811、
                    51.4329459213489240
                ]、
                [
                    4.9341142802746933、
                    51.4334292461250870
                ]、
                [
                    4.9354151466562142、
                    51.4320525317730240
                ]
            ]
        ]
    ]
}
4

1 に答える 1

4

利用可能な「授業料」を見つけるのにしばらく時間がかかりましたが、ここでの答えは非常に簡単です。ここでの問題は、「MultiPolygon」定義の最初の「Polygon」オブジェクトにあるようです。

抽出するだけです:

{
    "type": "Polygon",
    "coordinates": [[
        [ 
            4.9354151466562142, 
            51.4320525317730240
        ], 
        [ 
            4.9341804433318899, 
            51.4319519241268350
        ], 
        [ 
            4.9341480860178217, 
            51.4323138673607550
        ], 
        [ 
            4.9341289343773811, 
            51.4329459213489240
        ], 
        [ 
            4.9341142802746933, 
            51.4334292461250870
        ], 
        [ 
            4.9354151466562142, 
            51.4320525317730240
        ]
    ]]
}

それがその部分ですが、もちろん、それがどのように見えるかを見るのに役立ちます:

ポリゴン1

とても大きな「おっと!」ここでは、「ポリゴン」自体が交差して「2 つの」異なる領域を形成しています。現在、MongoDB およびその他の GIS 対応エンジンは「それを好まず」、少なくとも一貫した外部境界を持つ「ポリゴン」を期待しています。「内輪」があっても問題ありませんが、これにより 2 つの領域が分離されるため、形状は保存には無効と見なされます。

これに対する明確な修正は、データを調べて、そのような「交差する」境界を見つけることです。次に、それらを保存するときに、それらを個々の「Polygon」オブジェクト定義に分割します(「MultiPolygon」の配列内でも問題ありません)。

したがって、現在の「MultiPolygon」定義は「2」の「Polygon」オブジェクトを定義していますが、ここで期待されるのは「3」で、交差するオブジェクトは交点で「2」のオブジェクトに分割されます。これらの制約内に収まる限り、「インデックス作成」は機能し、通常のすべての地理空間操作でそれらのオブジェクトをクエリできます。

于 2015-07-10T11:06:16.207 に答える