我有文件(GIS 中使用的 *.shp),其中包含多边形的集合,也许还有其他矢量对象(但多边形对我来说最重要)。我需要删除不可打印的对象。
我不知道选择了什么标准。我认为删除边界长度小的对象会比删除面积小的对象更好(所以长的对象会减少到线)。但也许有特殊的算法呢?
换句话说,我只想找到在给定缩放级别可见的对象。
我有文件(GIS 中使用的 *.shp),其中包含多边形的集合,也许还有其他矢量对象(但多边形对我来说最重要)。我需要删除不可打印的对象。
我不知道选择了什么标准。我认为删除边界长度小的对象会比删除面积小的对象更好(所以长的对象会减少到线)。但也许有特殊的算法呢?
换句话说,我只想找到在给定缩放级别可见的对象。
那很简单。由于您没有提及任何语言,请考虑以下伪代码
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 之类的专用地图库来解决