ポリゴン/マルチポリゴン機能を備えたきちんとした詳細なシェープファイルがあります(ファイルは約500MBです)。実際には、全世界のシェープファイルであり、フィーチャは海岸線を表します。グリッドを使用してこのデータを分割する必要があります。明確にするために、データを「ソート」したくはありませんが、実際にはポリゴンをタイルに分割します。この質問は以前に聞かれたことに気づきましたが、見つけた解決策はうまくいきませんでした。
私はもう試した:
QGISを使用し、シェイプファイルのコンテンツをベクターグリッドと交差させます-結果はひどいです。主要な陸地の大部分は魔法のように消えますが、土地の小さな塊が時々それを作るようです。この方法は、はるかに単純なデータ(つまりポイントが少ない)で非常にうまく機能することに注意してください。
OGRの交差ツールを使用します。私はogr2ogrを介して、さらには独自のC ++ツールを使用して試してみました。どちらもQGISと同じ問題を抱えています。また、単純なファイルではこの問題は発生しませんが、より複雑なファイルでは失敗します。参考までに、サイズが20 MB未満のオーストラリアとニュージーランドのシェープファイルを使用していますが、QGISとOGRの両方が「グリッド化」できません。
PostGISには交差機能があるため、ある時点でPostGISを使用することを提案しましたが、PostGISのST_IntersectはOGRと同じGEOSバックエンドを使用します。実際、私が知る限り、両方とも同じ関数を呼び出しているため、PostGISが異なる結果をもたらすとは思いません。
私は他に何ができるかについての提案を探していました。非常に詳細なシェープファイルをタイルに分割できる堅牢なアプリケーションまたはツールキットが必要です。
編集:いくつかの情報を追加する
シンバマングへの応答:
シェープファイルは、基本的にOpenStreetMapの海岸線データです。これは、「processed_p」ファイルのマージされたバージョンであるため(タイルに分割されません)、開発者リストをメールで送信しました。タイルの分割(重複した100 km x 100 kmチャンク)は必ずしも必要なものではないことに注意してください-重複したくないので、グリッドサイズを自由に選択したい、または単にデフォルトのprocessed_p。
デフォルトでは、海岸線データにはQGISによって報告されたジオメトリエラーがあります。これらのエラーは、この問題に特に対処するために設計されたいくつかのコード(海岸線データのジオメトリエラーの修復:https : //github.com/tudelft-gist/prepair)を使用して作成した小さなツールで修正します。このツールを使用してファイルを実行すると、QGISで検出されるほぼすべてのエラーが修正されます。ファイルをクリーニングした後にのみ、交差を試みます。
QGISを使用して行ったこととまったく同じ:データを開いて、QGISで正常に表示されることを確認します。指定した間隔でベクターグリッドを使用してタイルのレイヤーを作成し、2つのレイヤーを交差させてタイルに分割してみてください。より小さなデータセットを使用してみてください-オセアニア(オーストラリア、ニュージーランド)の機能を選択して、より小さなデータセットを試します-この形状ファイルのサイズは20 MB未満です。もう一度分割してみてください、動作しません。
OGRで行ったこと:ogr2ogrは、spat_extentで '-spat'および '-clipsrc'オプションを直接使用しました。また、WKTで動作する小さなC ++ツールを作成したため、ogr2ogrを使用してシェープファイルをWKTに変換し、テキストファイルをアプリケーションにフィードします。ファイル全体を実行し、http://www.gdal.org/ogr/classOGRGeometry.htmlに記載されているIntersection()メソッドを呼び出します。最終的にはogr2ogrを直接使用するのとまったく同じことを行うと思います。
ブレントへの応答:
- します。すべてがWGS84 Lat / Lonにあります
- グリッドタイルの特定のセットでは、各タイルにより空間的にローカライズされる可能性のある断片化されたフィーチャの束ではなく、1つの巨大なマルチポリゴンと交差するのに時間がかかると思いました興味深い提案-私はそれを試して報告します。
- プロセス中に属性フィールドは保持されません。ジオメトリにのみ興味があります。
- よくわかりませんが、特定のグリッドタイルと重なるポリゴンを選択してから交差を実行する必要があると言っていると思います。これはQGISでは手動で面倒です。私のツールは、バウンディングボックスチェックを使用して、すでにある程度これを行っています。少しスピードアップしますが、最終結果はまだ悪く、目立った違いはありません。
- これはオプションではありません。現在、データを1 deg lat x 1 deg lonに分割しようとしています。すべてのケースで機能する一般的で堅牢な方法論を探しています。グリッドサイズ(10x10など)を増やして、より良い結果が得られるかどうかを確認しましたが、グリッドサイズと出力の品質との間に相関関係は見られません。
編集#2:
私はこれをもっと試してみましたが、一般的には、GEOSとQGIS(fToolsを使用していますが、GEOSを再び使用するかどうかはわかりません)の両方で結果が信頼できないようです。グリッドのサイズが結果とは何の関係もないと述べるのは間違っていました-グリッドが大きいほど、結果は良くなります(それは知っておくのは良いことですが、解決策ではありません)。これは、ほとんど機能しているが、1つのタイルで部分的に失敗した、実際に間隔をあけたグリッドのスクリーンショットです。
ジオメトリはきれいです-QGISは「妥当性のチェック」ツールでエラーを表示しません。私はこの問題に一歩ずつ取り組むつもりはありません。特定のフィーチャが視覚的に明らかではない場合に、この大きなデータセットの交差に失敗したかどうかを確認することは(そして、小さなタイルでは不可能です)実用的ではありません。