Printing 检查矢量对象在给定dpi和打印大小的打印时是否可见

Printing 检查矢量对象在给定dpi和打印大小的打印时是否可见,printing,vector,gis,dpi,raster-graphics,Printing,Vector,Gis,Dpi,Raster Graphics,我有一个文件(*.shp用于GIS),其中包含多边形的集合,可能还有其他矢量对象(但多边形对我来说最重要)。我需要删除不可打印的对象 我不知道选择什么标准。我认为删除边界长度较小的对象比删除面积较小的对象要好(这样长的对象将减少为直线)。但也许有专门的算法 换句话说,我只想找到在给定缩放级别可见的对象。这很简单。当你没有提到任何语言时,请考虑下面的伪代码 drawRect = myDevice.GetDrawRect(); for(oneShape in allShapes) { sha

我有一个文件(*.shp用于GIS),其中包含多边形的集合,可能还有其他矢量对象(但多边形对我来说最重要)。我需要删除不可打印的对象

我不知道选择什么标准。我认为删除边界长度较小的对象比删除面积较小的对象要好(这样长的对象将减少为直线)。但也许有专门的算法


换句话说,我只想找到在给定缩放级别可见的对象。

这很简单。当你没有提到任何语言时,请考虑下面的伪代码

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;
}
bool Rect::Contains(OtherRect)
{
if(left=OtherRect.left&&
top>=其他rect.bottom&&

底部要消除的多边形将取决于您希望创建的图像的dpi。如果一条直线只填充一个像素,则应消除该多边形或将其替换为点表示。当然,这将受到直线宽度的影响。许多此类问题将通过使用专用的贴图库(如正如

谢谢。但如果我理解正确,此代码只检查一个形状是否属于特定区域。我认为“换句话说”令人困惑。当然,您的代码对于实现bat很重要,我也希望删除到小对象。例如,在低缩放级别,我只想显示大陆,在更高级别,我想显示cites。但是,我不想任意决定在给定缩放级别将显示什么。因为如果有人将以高分辨率打印它他应该允许在低缩放级别的CITES上打印国家(也许使用放大镜)。这正是我需要的。但是我更喜欢使用GooToots(www. GooToSo.Org),因为我更喜欢java,C++。很不幸,我不知道如何在Geotools使用它。