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();
}

Contains() 函数看起来像这样,假设 y 值从底部到顶部增加:

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。如果一条线仅填充一个像素,则应将其消除或替换为点表示。当然,这将受到线宽的影响。很多这类问题都可以通过使用诸如mapnik.org 之类的专用地图库来解决

于 2010-01-13T17:22:22.667 回答