【发布时间】:2010-01-12 22:50:18
【问题描述】:
我有一个文件(GIS 中使用的 *.shp),其中包含多边形的集合,也许还有其他矢量对象(但多边形对我来说最重要)。我需要删除不可打印的对象吧。
我不知道选择了什么标准。我认为删除边界长度小的对象会比删除面积小的对象更好(所以长的对象会减少到线)。但也许有专门的算法呢?
换句话说,我只想找到在给定缩放级别可见的对象。
【问题讨论】:
标签: printing vector gis dpi raster-graphics
我有一个文件(GIS 中使用的 *.shp),其中包含多边形的集合,也许还有其他矢量对象(但多边形对我来说最重要)。我需要删除不可打印的对象吧。
我不知道选择了什么标准。我认为删除边界长度小的对象会比删除面积小的对象更好(所以长的对象会减少到线)。但也许有专门的算法呢?
换句话说,我只想找到在给定缩放级别可见的对象。
【问题讨论】:
标签: printing vector gis dpi raster-graphics
这很简单。由于您没有提及任何语言,请考虑以下伪代码
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;
}
【讨论】:
要消除的多边形取决于您要创建的图像的 dpi。如果一条线仅填充一个像素,则应将其消除或替换为点表示。当然,这将受到线宽的影响。使用mapnik.org等专用映射库可以解决很多此类问题
【讨论】: