0

ポリゴンのコレクションとおそらく他のベクターオブジェクトを含むファイル(GISで使用される* .shp)があります(ただし、ポリゴンは私にとって最も重要です)。印刷できないオブジェクトを削除する必要があります。

どの基準が選ばれたのかわかりません。境界線の長さが小さいオブジェクトを削除する方が、面積が小さいオブジェクトを削除するよりも良いと思います(長いオブジェクトは線になります)。しかし、おそらくそのための特別なアルゴリズムがありますか?

つまり、特定のズームレベルで表示されるオブジェクトのみを検索したいのです。

4

2 に答える 2

1

それは非常に簡単です。どの言語にも言及していないので、次の擬似コードを検討してください

drawRect = myDevice.GetDrawRect();
for(oneShape in allShapes)
{
    shapeRect = oneShape.GetRect()
    if(! drawRect.Contains(shapeRect))
         oneShape.MarkAsInvisible(); 
    else
         oneShape.Draw();
}

Y値が下から上に増加すると仮定すると、Contains()関数は次のようになります。

bool Rect::Contains(OtherRect)

{
    if(left   <=  OtherRect.right  &&
       right  >=  OtherRect.left   &&
       top    >=  OtherRect.bottom &&
       bottom <=  OtherRect.top)
       return true

    return false;
}
于 2010-01-13T10:10:20.910 に答える
1

削除するポリゴンは、作成する画像のdpiによって異なります。線が1ピクセルのみを埋める場合は、線を削除するか、点表現に置き換える必要があります。もちろん、これは線の幅によって影響を受けます。この種の問題の多くは、mapnik.orgなどの専用のマッピングライブラリを使用することで解決できます。

于 2010-01-13T17:22:22.667 に答える